Quantum Audit Logo

Is Curve.Fi USD Stablecoin Safe?

On-chain security analysis — is it a scam or legit?

Is this your token? Publish your own audit on this page →

Curve.Fi USD Stablecoin CRVUSD
0xf939…1b4e
Ethereum Not verifiedLast checked 3d ago 1 audit on record
How is this score calculated? → Medium Risk
Executive SummaryAI Copilot

The crvUSD Stablecoin contract is a Vyper-based ERC-20 token implementation, including EIP-2612 permit functionality and a centralized minter role. The code demonstrates high quality, robust handling of integer arithmetic, and adherence to ERC standards. Key security features like replay protection for EIP-2612 and explicit overflow/underflow checks are correctly implemented. The primary risk identified is the centralized control over token minting, which is a design decision inherent to many stablecoins but represents a single point of failure.

1 Medium2 Informational
Volume 24h
$2.09M
Liquidity
$53.04M
Price
$1.0005
Token Age
3y
Top 10 Holders
76.5%

Security Findings

Medium

Centralized Minter Role

M-01The `minter` address holds exclusive control over the `mint` function, allowing it to create an arbitrary amount of new tokens. Additionally, the `minter` can transfer this privilege to any other address via `set_minter`. While this is a common design for centralized stablecoins, it introduces a significant single point of failure. A compromise of the `minter`'s private key would allow an attacker to inflate the token supply, leading to a loss of peg and severe economic consequences for the protocol and its users.
IssueThe `minter` address holds exclusive control over the `mint` function, allowing it to create an arbitrary amount of new tokens. Additionally, the `minter` can transfer this privilege to any other address via `set_minter`. While this is a common design for centralized stablecoins, it introduces a significant single point of failure. A compromise of the `minter`'s private key would allow an attacker to inflate the token supply, leading to a loss of peg and severe economic consequences for the protocol and its users.
FixImplement robust security measures for the `minter` address, such as a multi-signature wallet with a high threshold for transactions, or a time-locked governance mechanism. Establish clear operational procedures for managing the `minter` key and any changes to the `minter` address. Consider a mechanism for emergency pausing or rate-limiting minting if feasible within the protocol's design.
StatusUnresolved
Info

Standard ERC-20 `approve` Race Condition

I-01The `approve` function, as per the ERC-20 standard, is susceptible to a known front-running or race condition attack. If a user increases an allowance from `X` to `Y` and a malicious spender observes this transaction, they can front-run it by spending the original `X` allowance, then allowing the user's `approve(Y)` transaction to confirm, and finally spending `Y` tokens. This results in the spender taking `X + Y` tokens instead of just `Y` (or `X` if the user intended to decrease). The contract's docstring for `approve` acknowledges this and recommends `increaseAllowance` and `decreaseAllowance` as safer alternatives.
IssueThe `approve` function, as per the ERC-20 standard, is susceptible to a known front-running or race condition attack. If a user increases an allowance from `X` to `Y` and a malicious spender observes this transaction, they can front-run it by spending the original `X` allowance, then allowing the user's `approve(Y)` transaction to confirm, and finally spending `Y` tokens. This results in the spender taking `X + Y` tokens instead of just `Y` (or `X` if the user intended to decrease). The contract's docstring for `approve` acknowledges this and recommends `increaseAllowance` and `decreaseAllowance` as safer alternatives.
FixEducate users to primarily use `increaseAllowance` and `decreaseAllowance` instead of directly calling `approve` when changing an existing allowance. If `approve` must be used to change an allowance, it is best practice to first set the allowance to zero before setting it to a new non-zero value.
StatusUnresolved
Info

Immutability of EIP-712 `salt` from `block.prevhash`

I-02The EIP-712 domain separator `salt` is initialized in the constructor using `block.prevhash` and then made `immutable`. While `block.prevhash` provides a unique value for the deployment, ensuring domain separation, it is not a cryptographically strong source of randomness. For the specific purpose of an EIP-712 `salt`, which primarily needs to be unique per deployment and consistent, this approach is generally acceptable and does not pose a direct security vulnerability. The contract also correctly recalculates the domain separator if `chain.id` changes, enhancing fork safety.
IssueThe EIP-712 domain separator `salt` is initialized in the constructor using `block.prevhash` and then made `immutable`. While `block.prevhash` provides a unique value for the deployment, ensuring domain separation, it is not a cryptographically strong source of randomness. For the specific purpose of an EIP-712 `salt`, which primarily needs to be unique per deployment and consistent, this approach is generally acceptable and does not pose a direct security vulnerability. The contract also correctly recalculates the domain separator if `chain.id` changes, enhancing fork safety.
FixNo direct action is required as the current implementation is acceptable for its intended purpose. For future contracts requiring stronger randomness or unpredictability for initialization parameters, consider using a Verifiable Random Function (VRF) or a more robust source of entropy if available and appropriate for the use case.
StatusUnresolved

Category Ratings

TechnicalLow8/10

The contract exhibits strong technical security (7.2 Code Security). It correctly implements ERC-20 and EIP-2612 standards, including robust replay protection for permits and ERC-1271 support for contract accounts. All arithmetic operations are safeguarded against overflow and underflow, either by Vyper's default checks or explicit bounds checking in `increaseAllowance` and `decreaseAllowance`. The architecture (7.1 Architecture) is straightforward for a token contract, with internal functions for core logic and external wrappers. No reentrancy or other common EVM vulnerabilities were identified.

GovernanceHigh2/10

The economic model (7.4 Economic) centers around a stablecoin with a centralized `minter` role. This `minter` has the sole authority to mint new tokens and transfer the minter privilege (7.5 Governance). While this is a common design for certain stablecoins, it introduces a significant centralization risk. A compromise of the `minter` address would allow an attacker to mint an unlimited supply of tokens, severely impacting the stablecoin's peg and the protocol's integrity. There are no external dependencies (7.6 External) that introduce governance or economic risk.

UpgradesHigh3/10

This contract is not designed with an upgrade mechanism (7.7 Upgrades). It is deployed as a standalone, immutable contract. Therefore, there are no upgrade-related risks to assess. Any future changes would require a new deployment and migration.

Security Checklist

Contract VerifiedPass
Ownership Renounced?
No Mint FunctionFail
Liquidity LockedFail
Not a ProxyPass

Holder Composition

0.0% in wallets76.5% in contracts
Effective Concentration30.6%

Share held by contracts — treasury, vesting, bridge or staking — is discounted against share held by wallets when the score is computed: a contract cannot decide to sell the way an anonymous holder can, though it can still be drained or voted to sell. Effective concentration is the figure the risk score is actually calculated from.

Liquidity Depth

Show 4 more pairsShow less

The 3 remaining pairs hold $193 between them and are not listed.

The risk score reads depth across every pair. The volume figure and the volume-to-liquidity ratio elsewhere on this page describe only the pair this audit analysed, so the two are not directly comparable.

LP Distribution

Top-1 Unlocked Holder96.6%
Top-3 Unlocked100.0%

Key Addresses

Deployer
0xbabe…9f67
Unlocked LP Held By
0x5c0e…cf9a0x7009…5c02

No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.

What Raised This Score

  • Ownership status UNKNOWN (owner could not be resolved)
  • Mintable supply — no cap found, dilution unbounded
  • Top-10 concentration > 30% (76.5% total → 30.6% effective; 0.0% in EOAs, 76.5% in contracts — moderate)
  • Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
  • LP top1 unlocked holder = 96.6% (independent LP — depth risk, pool = 42% of DEX liquidity)
  • LP top3 unlocked holders = 100.0% (independent LP — depth risk, pool = 42% of DEX liquidity)
  • 1 Medium finding(s) from audit

Each factor is an on-chain fact recorded at the time of this analysis. The score is computed from them by a deterministic function, so the same contract returns the same score for anyone who runs the audit. How scores are computed

Related Audits

NeiroMedium RiskWorldcoin (WLD)Medium RiskVANRYMedium RiskConvex Token (CVX)Medium RiskDUALMedium RiskArtificial Superintelligence Alliance (FET)Medium Risk

Would You Like a More Detailed Audit of Curve.Fi USD Stablecoin?

Our AI-powered scanner gives you a deeper, real-time smart contract analysis — free, with every scoring factor shown.

Get Detailed Audit