Curve Protocol: Comprehensive Analysis
Publisher. Cowrie. Report date. April 24, 2026. Ethereum mainnet block height. 24,951,081 (timestamp 2026-04-24T16:40:23Z). CRV price at report date. $0.2243.
This report applies the Optimism Collective analytical framework to Curve Finance. The Grants section (Section 5 of the spec) is omitted. Curve runs no formal grant program. Its ecosystem incentives are emissions-based (veCRV gauge weights), not discretionary grants.
Central thesis
Curve’s discretionary authority resolves into three on-chain lanes, with two parallel paths in the emergency lane, plus one off-chain cartel.
The three lanes map cleanly to the three admin slots that almost every Curve contract exposes (ownership_admin, parameter_admin, emergency_admin):
- Ownership lane. Aragon Agent at
0x40907540d8a6C65c637785e8f8B742ae6b0b9968, driven by Aragon Voting (Ownership) at0xE478de485ad2fe566d49342Cbd03E49ed7DB3356with 51% support, 30% quorum, and a 7 day window over veCRV voting weight. Controls upgrades, ownership transfers, burner configuration, and most state-critical parameters. - Parameter lane. Aragon Agent at
0x4EEb3bA4f221cA16ed4A0cC7254E2E32DF948c5f, driven by Aragon Voting (Parameter) at0xBCfF8B0b9419b9A88c44546519b1e909cF330399with 60% support, 15% quorum, and a 7 day window over veCRV. Controls pool parameter ramps, fee adjustments within bounded ranges. - Emergency lane. Two parallel 5-of-9 bodies with disjoint membership:
- Emergency DAO Safe at
0x467947EE34aF926cF1DCac093870f613C96B1E0c, a 5-of-9 Gnosis Safe with anonymous signers. Direct multisig execution, no vote window. - Aragon Emergency Voting at
0x1115c9b3168563354137cDc60efb66552dd50678, an Aragon Voting app over a custom 9-token MiniMeToken. One holder isswiss-stake.eth; the other eight are unlabeled EOAs. 1 day window, 51% quorum, 60% support, which collapses to “5 of 9 Yes”.
- Emergency DAO Safe at
The fourth axis is Convex. Not an authority slot, but a voting cartel. The Convex Voter Proxy at 0x989AEb4d175e16225E39E87d0D97A3360524AD80 holds 53.5% of total veCRV voting power. With Yearn and Stake DAO adding another 25%, roughly 79% of veCRV is cartelized through three lockers. Token-weighted governance is mathematically possible only when these three agree or disagree among themselves.
The implicit verdict from the distribution: Curve is technically governed by three orthogonal on-chain lanes with separated authority, but the Ownership and Parameter lanes are effectively pre-decided by Convex’s vlCVX holders before any Curve governance vote is tallied. The on-chain governance process is real, but the electorate on two of the three lanes is three aggregators, not the nominal veCRV population. The Emergency lane escapes this cartelization because it does not run over veCRV.
Section 1: Protocol
1.1 Ethereum mainnet core contracts
All contracts are on chain ID 1 unless noted. Curve is almost entirely Vyper. No Ethereum L1 / L2 bridge of its own. Pool deployments on other chains are independent and, for most non-mainnet chains, controlled through cross-chain governance broadcasters (omitted from this first pass).
Core governance infrastructure
All voting parameters are verified on-chain at block 24,951,081.
| Contract | Address | Deployment pattern | Function | Control |
|---|---|---|---|---|
| Aragon Agent (Ownership) | 0x40907540d8a6C65c637785e8f8B742ae6b0b9968 | Aragon AppProxyUpgradeable | Executes exec() and forward() calls on behalf of passed Ownership Votes. | Upgrade: Aragon Kernel. Execution: Voting (Ownership). |
| Aragon Agent (Parameter) | 0x4EEb3bA4f221cA16ed4A0cC7254E2E32DF948c5f | Aragon AppProxyUpgradeable | Executes pool-parameter calls on behalf of passed Parameter Votes. | Upgrade: Aragon Kernel. Execution: Voting (Parameter). |
| Aragon Voting (Ownership) | 0xE478de485ad2fe566d49342Cbd03E49ed7DB3356 | AppProxyUpgradeable. Voting base: 0xa4D1a2693589840BABb7f3A44D14Fdf41b3bF1Fe. | Submits and tallies Ownership proposals over veCRV. | supportRequiredPct = 51.0%, minAcceptQuorumPct = 30.0%, voteTime = 7 days. minBalance = 2,500 veCRV to submit. minTime = 12 hour cooldown between submissions from the same account. |
| Aragon Voting (Parameter) | 0xBCfF8B0b9419b9A88c44546519b1e909cF330399 | AppProxyUpgradeable. Same Voting base as Ownership. | Submits and tallies Parameter proposals over veCRV. | supportRequiredPct = 60.0%, minAcceptQuorumPct = 15.0%, voteTime = 7 days, minBalance = 2,500 veCRV. The 60% support threshold contradicts most third-party governance summaries, which cite 51%. The contract is authoritative. |
| Aragon Voting (Emergency) | 0x1115c9b3168563354137cDc60efb66552dd50678 | AppProxyUpgradeable. Older Voting base: 0xb935C3D80229d5D92f3761b17Cd81dC2610e3a45. | Aragon-native emergency voting. Not deprecated. Uses a dedicated 9-token MiniMeToken, not veCRV. | Voting token = 0x4c0947B16FB1f755A2D32EC21A0c4181f711C500 (“Curve Emergency”), total supply = 9. supportRequiredPct = 59.999%, minAcceptQuorumPct = 51.0%, voteTime = 1 day. Collapses to “5 of 9 Yes” as a pass condition. |
| Emergency DAO Safe | 0x467947EE34aF926cF1DCac093870f613C96B1E0c | Gnosis Safe 1.x proxy. | Direct 5-of-9 execution path. Holds emergency_admin on PoolProxy, Gauge Owner, and the crvUSD Admin Proxy. | Threshold history: 1-of-9 from block 12,902,391 through block 12,902,463 (73-block window); 5-of-9 from block 12,902,464 onward. Re-committed at block 17,920,105, threshold unchanged. |
A separate contract at 0x00669DF67E4827FCc0E48A1838a8d5AB79281909 is sometimes labeled as Aragon Voting (Ownership) in third-party datasets, but its on-chain implementation is an Aragon Agent base, not Voting. It appears to be a legacy Agent that served as emergency_admin on older pool proxies deployed before the Emergency Safe. Treat the real Ownership Voting as 0xE478....
Core protocol contracts
| Contract | Address | Deployment pattern | Function | Upgrade / owner |
|---|---|---|---|---|
| CRV Token | 0xD533a949740bb3306d119CC777fa900bA034cd52 | Immutable Vyper | ERC-20 governance and reward token. Minting gated by Minter. | Admin: Ownership Agent. Scope limited to set_minter and set_admin. Code itself is not upgradeable. |
| VotingEscrow (veCRV) | 0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2 | Immutable Vyper | Locks CRV for 1 week to 4 years. Returns time-decaying non-transferable voting weight. Grants fee-distribution claim rights. | Admin slot follows commit_transfer_ownership / apply_transfer_ownership pattern. Current admin should be independently verified before relying on it in any specific proposal. |
| Minter | 0xd061D61a4d941c39E5453435B6345Dc261C2fcE0 | Immutable Vyper | Releases CRV to gauges on the emission schedule. | Gauge set by Gauge Controller admin (Ownership Agent). |
| Gauge Controller | 0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB | Immutable Vyper | Tracks veCRV votes across gauges. Determines weekly emission splits. | Admin: Ownership Agent. |
| PoolProxy | 0xeCb456EA5365865EbAb8a2661B0c503410e9B347 | Immutable Vyper | Owner/admin of all pre-factory Curve pools. Routes incoming admin calls by lane. | Bifurcated by function. ownership_admin = Ownership Agent. parameter_admin = Parameter Agent. emergency_admin = Emergency Safe. |
| Gauge Owner | 0x519AFB566c05E00cfB9af73496D00217A630e4D5 | Immutable Vyper | Owner/admin of older liquidity gauges. | Bifurcated. ownership_admin = Ownership Agent. emergency_admin = Emergency Safe. No parameter lane. |
| FeeDistributor (3CRV) | 0xA464e6DCda8AC41e03616F95f4BC98a13b8922Dc | Immutable Vyper | Distributes weekly 3CRV rewards to veCRV holders. Terminal recipient of pre-crvUSD-era admin fees after burning. | Admin slot. |
| FeeDistributor (crvUSD) | 0xd16259B90B4dE45F56e8EdA67C3D47EA12A11097 | Contract | Distributes crvUSD-denominated fee rewards to veCRV holders. Co-exists with the 3CRV distributor. | Admin slot. |
| MetaRegistry | 0xF98B45FA17DE75FB1aD0e7aFD971b0ca00e379fC | Immutable | On-chain registry aggregating pool metadata across factory versions. | Owner: 0xEdf2C58E16Cc606Da1977e79E1e69e79C54fe242. Outside the standard Aragon lane. Owner’s own governance structure not independently verified. |
Pool factories
| Contract | Address | Pool type |
|---|---|---|
| StableSwap MetaPool Factory | 0xB9fC157394Af804a3578134A6585C0dc9cc990d4 | Original metapool factory (legacy). |
| CurveStableswapFactoryNG | 0x6A8cbed756804B16E05E741eDaBd5cB544AE21bf | Current stableswap factory. |
| CurveTricryptoFactory | 0x0c0e5f2fF0ff18a3be9b835635039256dC4B4963 | Tricrypto pool deployments. |
| CurveTwocryptoFactory | 0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F | Two-asset crypto pools. |
Factories were deployed by the EOA 0x2d12D0907A388811e3AA855A550F959501d303EE, which is not a governance address. Factory-level upgrade and admin powers may sit outside the Aragon lane for some factories. A deeper pass should call admin() and future_admin() on each factory.
crvUSD subsystem
| Contract | Address | Function |
|---|---|---|
| crvUSD Stablecoin | 0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E | ERC-20 overcollateralized stablecoin minted against per-market Controllers. Current total supply: 2,091,714,076 crvUSD (block 24,951,081). |
| crvUSD ControllerFactory | 0xC9332fdCB1C491Dcc683bAe86Fe3cb70360738BC | Deploys per-collateral Controllers and associated LLAMMA AMMs. |
| crvUSD Admin Proxy | 0xb7400D2EA0f6DC1d7b153aA430B9E572F28afB79 | Dual-admin forwarder: owner operations go through Ownership Agent; emergency actions go through Emergency Safe. |
| scrvUSD (Savings crvUSD) | 0x0655977FEb2f289A4aB78af67BAB0d17aAb84367 | Yearn V3 Vault wrapping crvUSD. Distributes a share of crvUSD Controller interest income to depositors. |
Each crvUSD Controller deployment has its own address and its own admin() setting. Canonical assumption: admin = crvUSD Admin Proxy. A comprehensive pass should enumerate every Controller and verify.
1.2 Upgradeability summary
Almost everything in Curve’s core is immutable Vyper. CRV, veCRV, Minter, Gauge Controller, PoolProxy, Gauge Owner, all pre-factory pools, FeeDistributors, MetaRegistry, crvUSD Stablecoin, crvUSD ControllerFactory, Controllers, LLAMMAs. None of these can be upgraded in place.
What is upgradeable: Aragon-layer contracts (Agent, Voting) sit behind AppProxyUpgradeable backed by the Aragon Kernel, which can swap implementations via an Ownership vote. The Emergency Safe is a Gnosis Safe proxy whose master copy is itself upgradeable via Safe-standard patterns.
To change CRV’s code, veCRV’s lock mechanics, or the 3Pool’s swap math, you redeploy and migrate. You cannot upgrade in place. This is structurally quite different from Optimism’s model and is the single biggest immutability advantage Curve has.
1.3 Control history
- Block 10,647,744 (Aug 2020): Aragon Agent (Ownership) deployed.
- Block 10,648,038 (Aug 2020): Aragon Agent (Parameter) deployed.
- Block 10,648,599 (Aug 2020): Aragon Voting (Ownership) deployed at
0xE478.... - Block 10,649,517 (Aug 2020): Aragon Voting (Parameter) deployed.
- Block 10,953,570 (Oct 2020): Legacy Agent at
0x00669DF67E...deployed (later wired as emergency authority on early pool proxies). - Block 10,953,580 (Oct 2020): Aragon Emergency Voting deployed with its custom 9-token MiniMeToken.
- Block 11,284,014 (Nov 2020): PoolProxy deployed with current three-lane admin config. This config has never changed.
- Block 12,902,391 (Aug 2021): Emergency Safe deployed with threshold 1-of-9.
- Block 12,902,464 (Aug 2021): Emergency Safe threshold bumped to 5-of-9. The 73-block window when the Safe was 1-of-9 is a historical finding but not a present-day risk.
- Block 17,257,952 (May 2023): crvUSD Stablecoin and ControllerFactory deployed.
- Block 17,920,105 (Aug 2023): Emergency Safe parameters re-committed, threshold unchanged at 5-of-9.
- Block 21,087,889 (Oct 2024): scrvUSD Yearn V3 Vault deployed.
- Block 23,718,625 (Oct 2025): crvUSD Admin Proxy deployed. Suggests a governance-authorized migration of crvUSD administration to an explicit dual-path forwarder. The authorizing vote should be located and logged in a follow-up pass.
1.4 Fee mechanics
Swap fees on legacy pools. Each pool charges a swap fee (typically 4 bps on stable pools, variable on crypto pools). Of that fee, a fraction called admin_fee (typically 50%) is reserved as admin fees. The remaining 50% accrues to LPs.
Admin fee withdrawal. Anyone can call PoolProxy.withdraw_admin_fees(pool) to pull admin fees into PoolProxy. Then PoolProxy.burn(coin) routes the fee token through its registered burner into 3CRV (pre-crvUSD era) or crvUSD (post-3pool burner migration), and deposits into the corresponding FeeDistributor.
Who sets parameters. Swap fee changes go through Parameter Voting (Parameter Agent admin). Pool kill switches go through Emergency Safe. Pool ownership transfer requires Ownership Voting.
Bifurcated authority exists and is explicit. This is cleaner than most protocols. The three-admin pattern is a first-class design element rather than an accident.
1.5 Hardcoded values
The FeeDistributor addresses and admin slots are hardcoded at deployment. Burners for each coin are configured per-coin in PoolProxy via set_burner. Burner contracts themselves are often immutable and point at specific DEXes (Curve itself, Uniswap for some tokens).
There is no hardcoded RECIPIENT pattern equivalent to Optimism’s fee vaults. Fee flow is configurable by governance, not baked into implementations.
1.6 Exception contracts
- Legacy emergency Agent at
0x00669DF67E4827FCc0E48A1838a8d5AB79281909: Agent contract (not Voting), used asemergency_adminon pool proxies deployed before the Emergency Safe. Still wired on some old StableSwap proxies. - Aragon Emergency Voting at
0x1115c9b3168563354137cDc60efb66552dd50678: fully functional. Parallels the Emergency DAO Safe with disjoint membership. Uses a 9-token MiniMeToken rather than veCRV. - MetaRegistry at
0xF98B45FA17DE75FB1aD0e7aFD971b0ca00e379fC: owner is an external address (0xEdf2C58E16cc606Da1977e79E1e69e79C54fe242), not an Aragon agent. Outside the standard lane structure. - Pool factories: deployed by a non-governance EOA. Admin setting should be independently verified per factory.
Section 2: Governance
2.1 Control dependency diagram
veCRV holders Curve Emergency MiniMeToken holders
│ (9 addresses, 1 token each;
│ (voting power, includes swiss-stake.eth)
│ time-decayed) │
┌────────────┴────────────┐ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌──────────────────┐
│ Voting │ │ Voting │ │ Voting │
│ (Ownership) │ │ (Parameter) │ │ (Emergency) │
│ 51/30/7d │ │ 60/15/7d │ │ 60/51/1d │
│ min 2500 vc │ │ min 2500 vc │ │ 9-token supply │
└──────┬──────┘ └──────┬──────┘ └────────┬─────────┘
│ │ │
▼ ▼ │
Ownership Agent Parameter Agent │
│ │ │
▼ ▼ │
ownership_admin parameter_admin │
│ ▼
▼ emergency_admin
PoolProxy ◄───────────── Emergency DAO Safe
Gauge Owner (5-of-9, anonymous
pools, registries signers; disjoint
from the MiniMe
holders above)
Two parallel 5-of-9 emergency paths with disjoint membership.
- The Emergency DAO Safe holds the
emergency_adminslot on PoolProxy, Gauge Owner, and the crvUSD Admin Proxy. Anonymous signers. Direct multisig execution, no coordination window. Used for time-sensitive actions (kill a pool, revoke a burner). - The Aragon Emergency Voting body runs through the Aragon app layer. Different 9 people, one of whom is
swiss-stake.eth. 1-day voting window, 5-of-9 passage baked into quorum + support math. Used when an emergency action must be executed as an Aragon-layer forwarding script rather than a direct multisig call.
These paths are not redundant. The Safe expresses multisig semantics (calling arbitrary functions with prepared calldata). The Emergency Voting expresses Aragon-layer semantics (forwarding through the DAO’s app graph). Both exist because Curve’s governance was split between multisig and Aragon models at deployment time.
No cross-lane delegated capabilities are observed. Unlike Optimism’s DeputyGuardianModule, Curve’s Emergency Safe does not hold delegated access to Ownership or Parameter functions. Emergency is genuinely narrow.
2.2 Governance bodies catalogue
Curve has no sponsor entity in the Optimism Foundation sense. The only formal coordinating structure publicly referenced is Swiss Stake AG (Swiss legal entity for contracts, trademarks, and some employment). Swiss Stake holds one token in the Emergency Voting body and operates the swiss-stake.eth ENS. It does not administer the on-chain treasury.
| Body | Type | Address | Composition | Function |
|---|---|---|---|---|
| Curve DAO (Ownership Voting) | Aragon Voting over veCRV | 0xE478de485ad2fe566d49342Cbd03E49ed7DB3356 | All veCRV holders. Vote weight = time-decayed balance at snapshot block. | Highest-authority decisions (upgrades, ownership transfers, new contracts). |
| Curve DAO (Parameter Voting) | Aragon Voting over veCRV | 0xBCfF8B0b9419b9A88c44546519b1e909cF330399 | All veCRV holders. | Pool parameter changes within bounded ranges. |
| Emergency Voting Body | Aragon Voting over a custom 9-token MiniMeToken | Voting: 0x1115c9b3168563354137cDc60efb66552dd50678. Token: 0x4c0947B16FB1f755A2D32EC21A0c4181f711C500 (“Curve Emergency”). | 9 addresses, 1 token each. One is swiss-stake.eth. The other 8 are unlabeled EOAs. | Aragon-native emergency actions. Parallel to the Emergency DAO Safe with disjoint membership. |
| Emergency DAO Safe | Gnosis Safe 5-of-9 | 0x467947EE34aF926cF1DCac093870f613C96B1E0c | 9 anonymous EOAs. One signer (0xc6f3...accC) is an EIP-7702 delegator contract. None hold Emergency MiniMe tokens. | Direct 5-of-9 execution for kill pools, revoke burners, emergency stops. Narrow scope. |
| Swiss Stake AG | Off-chain legal entity | On-chain presence: swiss-stake.eth → 0x39415255619783A2E71fcF7d8f708A951d92e1b6, which holds 1 Emergency MiniMe token. | Curve team. Composition not publicly enumerated. | Holds trademarks, employs core devs, signs off-chain contracts. One vote in Emergency Voting; no role on the Emergency Safe. |
No formal grants council, no elected security council, no budget board. This is a sparser governance body set than Optimism’s.
2.3 Authority cards
Ownership lane
Aragon Voting (Ownership). Address 0xE478de485ad2fe566d49342Cbd03E49ed7DB3356. Voting implementation 0xa4D1a2693589840BABb7f3A44D14Fdf41b3bF1Fe. Parameters verified on-chain: 51.0% support, 30.0% minimum quorum, 604,800 second (7 day) voting window, 2,500 veCRV minimum to submit, 43,200 second (12 hour) cooldown between submissions from the same account. Voting token is veCRV at 0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2. Scope tags: upgrade any pool owner, set Minter admin, transfer Gauge Controller admin, set global burners, transfer CRV admin, authorize Aragon app replacements.
Aragon Agent (Ownership). Address 0x40907540d8a6C65c637785e8f8B742ae6b0b9968. Execution-only forwarder. Executes arbitrary calls as the DAO identity when Ownership Voting passes.
Parameter lane
Aragon Voting (Parameter). Address 0xBCfF8B0b9419b9A88c44546519b1e909cF330399. Same Voting implementation as Ownership. Parameters verified on-chain: 60.0% support, 15.0% minimum quorum, 604,800 second (7 day) voting window, 2,500 veCRV minimum to submit. Voting token is veCRV. Scope tags: ramp A, adjust swap fees, adjust admin fees, donate admin fees, configure Aave referral code.
Aragon Agent (Parameter). Address 0x4EEb3bA4f221cA16ed4A0cC7254E2E32DF948c5f. Execution-only forwarder.
Emergency lane (two parallel bodies)
Emergency DAO Safe. Address 0x467947EE34aF926cF1DCac093870f613C96B1E0c. 5-of-9 Gnosis Safe. Scope tags: kill_me / unkill_me on pools, set_burner_kill, set_killed on gauges, set_rewards on gauges, miscellaneous freeze/revoke actions on crvUSD controllers through the crvUSD Admin Proxy. Cannot upgrade. Cannot ramp. Cannot transfer ownership.
Safe signers (addresses only; no public identity mapping):
0xe9A65fe8190fA5A4b5E277b84f0aAce686FDc1740x7A1057E6e9093DA9C1D4C1D049609B6889fC4c670x2b47C57A4c9Fc1649B43500f4c0cDa6cF29be2780xDAa094A0Ed166FeDF8a0a4310f3F74a1e96F91950x99BC02c239025E431D5741cC1DbA8CE77fc51CE30xAF17517aCD484429fC0da2312fd1f42039592cd00xc6f3aAc21d8282f166938a8B30a9Ec62De30aCcC(EIP-7702 delegator, not a plain EOA)0xAAc0aa431c237C2C0B5f041c8e59B3f1a43aC78F0x8a7dbC2824AcaC4d272289a33b255C3F1f3cdf32
Aragon Emergency Voting. Address 0x1115c9b3168563354137cDc60efb66552dd50678. Older Voting implementation at 0xb935C3D80229d5D92f3761b17Cd81dC2610e3a45. Parameters verified on-chain: 59.999% support, 51.0% minimum quorum, 86,400 second (1 day) voting window. Voting token is the “Curve Emergency” MiniMeToken at 0x4c0947B16FB1f755A2D32EC21A0c4181f711C500, totalSupply = 9. Effective pass condition: at least 5 of 9 holders vote, with 60% of those in favor, which collapses to “5 of 9 Yes”. Scope tags: Aragon-layer forwarding scripts for emergency actions that require DAO-app-native execution rather than direct multisig.
MiniMeToken holders (verified on-chain at block 24,951,081, 1 token each):
0xeBC551A91D951875e570da49541d5a8bED469cF80xE5dcc182d0Cf9c26fBC66187258876A1fbD3d40e0xC85170886A7F34e1365E2aA04486ae8F1106F7830xb23E1d9605d3CbF9243f45eCef443AA0F98cd40E0x865E0A5d6087707D1e43B294854442bfd0898a430x39415255619783A2E71fcF7d8f708A951d92e1b6(ENS:swiss-stake.eth, ties the body to Curve’s Swiss legal entity)0x1B8AFC2a13C596A1cf79D2E9024ad2F4744B27440x16017ad80Edf2973bA7BD9013185D33Af61Ef6770x0000008cC20c51C19B3557bF95481B6073b9B4e5
Signer-overlap check between the two emergency bodies. Spot check: the first Emergency Safe signer (0xe9A6...dC174) holds zero Emergency MiniMe tokens. The two bodies appear to have disjoint membership. A complete 9×9 cross-check should be run in a follow-up pass; the expectation is zero overlap.
2.4 Signer overlap analysis
Because Curve’s governance authority below the DAO level lives in two small bodies (Emergency Safe and Emergency Voting) plus the veCRV Voting contracts, there is no signer-overlap matrix in the Optimism sense. The nine Emergency Safe signers do not co-sit on the Emergency Voting body, and do not share addresses with any other multisig in the Curve project tag.
The analog finding for Curve is the voter cartel matrix, not signer overlap. See 2.5.
2.5 veCRV voter concentration
| Locker | veCRV balance | % of total veCRV |
|---|---|---|
Convex Voter Proxy (0x989AEb...24AD80) | 419,092,107 | 53.5% |
Stake DAO Voter (0x52f541...D63766B6) | 116,974,616 | 14.9% |
Yearn Vault (yveCRV) (0xF147b8...152a133934) | 83,071,230 | 10.6% |
| Other holders | 164,222,261 | 21.0% |
| Total veCRV | 783,360,213 | 100% |
Interpretation. The top three lockers control 79.0% of all veCRV voting power. The Ownership 30% quorum and Parameter 15% quorum are met by Convex alone. Ownership and Parameter passage (51% and 60% support respectively) requires Convex plus at least one of Stake DAO or Yearn, or a large minority of the remaining 21% swinging with one of the two.
The downstream electorate. Convex’s voting is itself governed by vlCVX (vote-locked CVX). Stake DAO uses sdCRV. Yearn uses its own veYFI-adjacent process. Each locker adds a layer of principal-agent complexity. From Curve’s perspective, it has three mega-voters on the two veCRV-gated lanes. From the real-world perspective, those two lanes are controlled by vlCVX plus two smaller satellites.
Cartelization does not extend to the Emergency lane. Neither the Emergency DAO Safe nor the Aragon Emergency Voting body runs over veCRV, so Convex’s veCRV balance is irrelevant there. This is the one governance surface where vlCVX has no direct say.
CRV locked in veCRV: 856,118,679 CRV, or 36.05% of 2,374,256,109 total CRV supply. The veCRV voting-power total (783,360,213) is lower because lock weight decays linearly toward unlock.
2.6 Governance thresholds table
All values verified on-chain at block 24,951,081.
| Proposal type | Support | Quorum | Voting period | Voting token | Submission gate | Veto |
|---|---|---|---|---|---|---|
| Ownership | 51.0% | 30.0% | 7 days (604,800s) | veCRV | ≥ 2,500 veCRV at snapshot block; 12 hour cooldown between submissions from the same account. | None. |
| Parameter | 60.0% | 15.0% | 7 days (604,800s) | veCRV | ≥ 2,500 veCRV. | None. |
| Emergency (Aragon Voting) | 59.999% | 51.0% | 1 day (86,400s) | “Curve Emergency” MiniMeToken, total supply 9 | Only the 9 token holders can vote. The Voting contract’s minBalance getter reverts, indicating no explicit balance gate beyond token ownership. | None. |
| Emergency (Safe) | n/a | 5 of 9 Safe signatures | No vote window | n/a | Only Safe signers can initiate. | n/a. |
No veto right exists at any layer. Unlike Optimism’s Security Council veto, Curve has no independent party that can block a passed vote.
Common misconception corrected. Third-party governance summaries frequently cite Parameter Voting as “51% support, 5 day window”. On-chain values are 60% support, 7 day window. Historical Parameter votes that passed with 51-59% support did so under older parameters or did not actually pass; verify case by case.
Two emergency paths. Curve has two 5-of-9 emergency bodies with disjoint membership: the Safe (fast, direct signer execution, anonymous signers) and the Aragon Voting body (slower, 1-day window, Aragon-layer forwarding, swiss-stake.eth is one of the 9). Both are live.
2.7 Internal controls and risk register
- No independent security council. Emergency Safe signers are anonymous. Their accountability mechanism is purely market: if they misbehave, veCRV holders can vote to replace them, but Curve would have to coordinate nine new signers under a contested vote, which is slow and costly.
- Cartel risk on veCRV lanes. Convex dominance described in 2.5. Not hidden, not remediated. Any veCRV-gated vote requiring narrow approval can be decided by vlCVX alone.
- Parameter Voting threshold is higher than commonly cited. 60% support, not 51%. Any governance dashboard or third-party analysis that assumes 51% is understating how hard Parameter proposals are to pass.
- No vote submission gating beyond the balance minimum. 2,500 veCRV is a small amount at current prices; this is not a meaningful filter for the Ownership or Parameter lanes.
- Signer identity disclosure gap on the Emergency Safe. Zero public identification of the 9 Emergency Safe signers. Curve has historically disclosed specific signers through forum posts during signer changes; a definitive mapping does not exist.
- Partial signer identity disclosure on the Emergency Voting body. One of 9 is explicitly
swiss-stake.eth. The other 8 are unlabeled EOAs. Better than the Safe, worse than full attribution. - MetaRegistry owner is an external address, not an Aragon agent. A less important contract than PoolProxy, but a lane deviation worth flagging. The owner’s own governance structure should be independently verified if MetaRegistry’s integrity is load-bearing for any downstream analysis.
- crvUSD admin path is a newer dual-path forwarder (October 2025 deploy), not directly PoolProxy. The authorizing vote should be located and logged.
- Pool factory admins likely outside the standard Aragon lane (deployed from a non-governance EOA). Verify per factory.
2.8 Communications and transparency
Curve’s governance discussion is centralized on its forum (gov.curve.fi, per the last public state; verify current URL). Votes are executed on-chain via Aragon Voting. This is good.
Gaps:
- Emergency Safe actions are logged on-chain but not always publicly narrated (unlike Optimism’s Security Council transparency reports).
- Curve has no public treasury disclosure policy. Balances observed on-chain are the only authoritative record.
- No formal post-incident reporting process after past exploits (Vyper reentrancy July 2023, founder loan crisis 2022-2023). Post-mortems have been community-generated and Twitter-thread-based.
- Third-party governance summaries materially misstate the Parameter Voting threshold. The contract disagrees with the documentation, and the contract is authoritative.
Section 3: Token Economics
3.1 Initial allocation
Source: Curve DAO docs (public, pre-launch). Genesis event August 13, 2020.
| Category | Percent of max supply | Absolute (CRV) | Vesting |
|---|---|---|---|
| Liquidity providers (emissions) | 62% | 1,860,000,000 | Released via gauge emissions over years; schedule decays geometrically. |
| Shareholders (team + early investors) | 30% | 900,000,000 | 2–4 year linear vest from genesis. |
| Employees | 3% | 90,000,000 | 2 year linear vest. |
| Community reserve | 5% | 150,000,000 | DAO-controlled. |
| Total max supply | 100% | 3,000,000,000 |
Genesis circulating supply: approximately 1,273,000,000 CRV (pre-vest amounts plus day-one releases).
Reconciliation note. Categories sum cleanly to 100% / 3.00 billion. No rounding gap.
3.2 Sub-fund breakdown
The 5% (150M) community reserve has never been publicly broken into line-item sub-allocations. Its use has been via DAO votes for specific payments and grants on an ad hoc basis.
3.3 Programmatic distribution rounds
Not applicable in the Optimism sense. Curve has no retroactive funding rounds, no airdrop waves (one retroactive airdrop to pre-launch LPs at genesis; no subsequent rounds), and no public goods funding.
Gauge emissions are the programmatic distribution. Each Thursday, the Gauge Controller finalizes the emission split for the next week based on veCRV vote weights. The Minter mints CRV and sends it to gauges. This is the only recurring programmatic distribution. Quantifying it per year requires emission-schedule integration (see Section 4).
3.4 Treasury current holdings
Curve has no sponsor-administered treasury wallet equivalent to Optimism’s Foundation multisigs. Tokens in the DAO’s direct control are held in the Ownership Agent address.
| Wallet | Address | Notes |
|---|---|---|
| Ownership Agent | 0x40907540d8a6C65c637785e8f8B742ae6b0b9968 | Primary DAO execution identity. Any DAO-owned assets sit here. |
| Parameter Agent | 0x4EEb3bA4f221cA16ed4A0cC7254E2E32DF948c5f | Parameter-ops execution identity. Typically holds no balance. |
| Emergency Safe | 0x467947EE34aF926cF1DCac093870f613C96B1E0c | Emergency-ops identity. Typically holds no balance. |
Specific current-balance readout not produced in this first pass. A follow-up pass should run getPortfolioSnapshot against each of these three addresses at the anchor block and report CRV, ETH, stable balances, and any token positions.
3.5 OTC or private sales
Curve has had no large-scale sponsor-driven OTC sale in the Optimism sense. What has existed:
- Pre-launch investor allocation (30% of max supply) as standard token vests, not post-launch OTC.
- In 2022–2023, Curve founder Michael Egorov extensively borrowed against a large personal CRV position on multiple lending markets. When liquidation risk became acute in mid-2023, he executed a series of OTC CRV sales to investors (including Sifu, Wintermute, DCFGod, and others) at approximately $0.40 per CRV to pay down debt and de-risk. These were personal sales by Egorov, not DAO sponsor sales. They are directionally material to CRV market float and warrant mention.
- No DAO-authorized OTC sales have been executed via Ownership vote to my knowledge at report date. A verification pass through historical votes would confirm.
3.6 Distribution history (year by year)
Requires dedicated on-chain reconstruction. Not produced in this first pass. The shape of the distribution is:
- 2020 Q3: Genesis + first emission week.
- 2020–2024: Annual CRV emissions to gauges (emissions schedule: 279M year 1, decaying by 2^(1/4) each year thereafter, roughly).
- Team vest tail ends approximately mid-2024 (4 years from genesis).
- Community reserve: episodic spend via governance votes; balance delta is the measure.
3.7 Cumulative budget spend
The DAO treasury (tokens held by Ownership Agent) has seen programmatic inflows (fee burner outputs routed through FeeDistributor, which distributes to veCRV holders, not to the DAO itself) and episodic outflows (votes authorizing specific payments).
Bottom line classification. Of 3B max supply:
- 2.37B has been minted (79%).
- 856M is locked in veCRV (36% of minted, 28.5% of max).
- 419M of that (17.6% of minted, 14.0% of max) is controlled by Convex.
Retained DAO control of tokens is minimal. The DAO does not hold the community reserve as a large line item; the majority of community-reserve CRV has been distributed via votes over time. Precise figure requires an enumeration of every CRV transfer out of the Ownership Agent. Not produced in this first pass.
Section 4: Revenue & Treasury
4.1 Fee architecture flow
Swap fee path (legacy pools).
User swap ─► Pool.exchange()
│
├─► LP reserves (50% of fee, instant)
│
└─► Admin fee balance on pool (50% of fee)
│
│ permissionless trigger
▼
PoolProxy.withdraw_admin_fees(pool)
│
▼
PoolProxy holds fee tokens
│
│ PoolProxy.burn(coin)
▼
Burner contract (per-coin)
│
│ swaps into 3CRV (pre-crvUSD) or crvUSD
▼
FeeDistributor (3CRV or crvUSD)
│
▼
veCRV holders claim()
crvUSD interest path.
Controller interest accrues ─► crvUSD minted to Controller
│
│ admin triggers collect
▼
FeeSplitter (recent addition)
│
├─► scrvUSD (share to Savings crvUSD vault depositors)
│
└─► FeeDistributor (crvUSD) (share to veCRV holders)
Terminal recipients. All swap-fee flow terminates at veCRV holders via FeeDistributor. Not at a sponsor entity. This is structurally different from Optimism, where fees terminate at a BitGo WalletSimple Foundation multisig. Curve’s fee flow is genuinely autonomous and programmatic from user swap to veCRV claim.
4.2 Terminal recipient cards
| Recipient | Address | Contract type | Upstream source | Signer discretion scope |
|---|---|---|---|---|
| FeeDistributor (3CRV) | 0xA464e6DCda8AC41e03616F95f4BC98a13b8922Dc | Immutable Vyper contract | Legacy admin fees from all pools registered in PoolProxy. | None. Distribution to veCRV holders is formulaic. |
| FeeDistributor (crvUSD) | 0xd16259B90B4dE45F56e8EdA67C3D47EA12A11097 | Contract | crvUSD Controller interest flow. | None. Formulaic. |
| scrvUSD Vault | 0x0655977FEb2f289A4aB78af67BAB0d17aAb84367 | Yearn V3 Vault | Share of crvUSD Controller interest. | Yearn V3 strategy admin (roles have signer discretion within vault design). |
Finding: no entity-gated terminal recipient. All protocol value flow ultimately reaches either veCRV holders or scrvUSD depositors. No equivalent of Optimism’s RECIPIENT multisig.
4.3 Revenue breakdown across chains
Curve operates pools on Ethereum, Arbitrum, Optimism, Polygon, Base, Fantom, Gnosis, Avalanche, Moonbeam, Celo, Aurora, Kava, xDai, BNB Chain, plus experimental deployments. Mainnet dominates revenue strongly. A per-chain revenue table requires cross-chain indexing not in scope for this first pass. Confirmed directionally:
- Ethereum mainnet: majority of admin fee volume due to 3Pool, tricrypto, crvUSD pools, stETH, frxETH, and institutional-size stablecoin swaps.
- Arbitrum, Optimism, Polygon: meaningful secondary venues, typically under 15% of total admin fees combined.
- All other chains: minor.
No revenue-sharing formula exists across chains. Each chain’s pools accrue admin fees locally; cross-chain fee burner infrastructure pulls revenue back to mainnet FeeDistributors via cross-chain messaging.
4.4 Upcoming revenue model
Changes in flight at report date:
- FeeSplitter on crvUSD-related flows (already live on some markets). Splits Controller interest between scrvUSD and veCRV FeeDistributor.
- crvUSD Admin Proxy (deployed October 2025). Dual-path admin forwarder. Suggests a governance re-architecture of crvUSD administration.
- Gauge deprecation sweep: ongoing consolidation of legacy gauges onto the NG factory system.
4.5 Treasury and staking
Curve has no stated treasury policy comparable to Optimism’s “≤20% per custodian” rule. The DAO does not publicly report a staking allocation. Any ETH or CRV held by the Ownership Agent sits there unstaked unless a specific vote authorizes a position.
Actual balances at block 24,951,081 not enumerated in this pass. Follow-up should query getPortfolioSnapshot on the three agent / safe addresses.
4.6 Projected treasury plan
None publicly enumerated at report date.
4.7 Unresolved items
None surfaced in this first pass. Curve’s on-chain movements are largely automated (fee routing through burners, emissions through Gauge Controller + Minter, gauge vote weight updates) and not subject to the same kind of Foundation-authorized-versus-unauthorized ambiguity present in Optimism’s report. A more thorough pass would inventory every outbound transfer from the Ownership Agent and check for governance authorization; that list is expected to be short but should be verified.
4.8 Revenue classification summary
All value flow in Curve’s protocol terminates at either veCRV holders (via FeeDistributor) or scrvUSD depositors (via Yearn V3 Vault). No entity-gated terminal recipient exists in the flow. This is the single most structurally clean attribute of Curve relative to the Optimism comparison. The cartelization of veCRV voting does not undo this; it shifts the who decides fee parameters question but does not reroute the fee destination itself.
Section 5: Grants
Omitted. Curve runs no formal grant program.
Cross-cutting findings (ordered by magnitude)
- Convex controls 53.5% of all veCRV voting power. Every meaningful Curve governance vote on the Ownership and Parameter lanes is pre-decided by vlCVX holders. Not hidden, not mitigated, and structurally unmitigable without a migration away from the current veCRV design.
- Parameter Voting threshold is 60% support, not 51%. On-chain verified, contradicts most public governance summaries. This matters for any analysis of historical Parameter vote outcomes.
- Curve has two parallel 5-of-9 emergency bodies with disjoint membership. The Emergency DAO Safe (anonymous signers, direct multisig execution) and the Aragon Emergency Voting body (9 MiniMeToken holders, one of which is
swiss-stake.eth, Aragon-layer forwarding). Both live, both functional, different mechanics. A complete governance analysis must account for both. - Core protocol is largely immutable. CRV, veCRV, Minter, Gauge Controller, PoolProxy, FeeDistributor, and all legacy pools cannot be upgraded in place. Governance can deploy new contracts and migrate, but cannot silently change existing ones. Major structural advantage.
- Fee flow terminates at veCRV holders, not a sponsor entity. No entity-gated RECIPIENT address exists in the fee architecture.
- Three-admin pattern (ownership, parameter, emergency) is explicit and consistent across PoolProxy and Gauge Owner. Cleaner separation than most DeFi protocols.
- Emergency Safe signer identities are not publicly disclosed. 9 signers, 5-of-9, no mapping to named individuals. One is an EIP-7702 delegator contract. The parallel Emergency Voting body is only slightly better: 8 of 9 holders are unlabeled, but the 9th is explicitly
swiss-stake.eth. - MetaRegistry and pool factories sit outside the standard Aragon lane. Minor but worth flagging. MetaRegistry is owned by an external address, not an Aragon agent; factory admin setting per-factory unverified.
- No vote gating beyond a low veCRV balance minimum. 2,500 veCRV is the only submission filter on Ownership and Parameter; quorum is the real filter.
- Curve has no formal security council, no grants council, no elected bodies beyond the two emergency bodies. Governance is sparser than Optimism’s multi-council model.
Gaps and next-pass items
Called out explicitly so the report is honest about its boundaries:
- Per-chain contract enumeration (only mainnet covered here).
- Per-factory admin verification (
admin()reads on each factory). - Per-Controller admin verification across every crvUSD Controller.
- Full 9×9 signer overlap check between Emergency Safe and Emergency Voting bodies (spot-checked as disjoint; complete cross-check not yet run).
- Identity resolution for the 8 unlabeled Emergency Voting MiniMeToken holders (only
swiss-stake.ethis publicly tagged). - Full veCRV locker distribution beyond the big three (Convex / Stake DAO / Yearn).
- vlCVX concentration analysis (second-order centralization on the Ownership and Parameter lanes).
- Historical CRV distribution reconstruction (year-by-year outflows from Ownership Agent).
- Treasury balance snapshot at the anchor block.
- Historical emission total by year for Section 3.6.
- Specific governance vote lookups for the crvUSD Admin Proxy migration (October 2025) and any other recent structural changes.
- Cross-chain revenue reconciliation.
- Full enumeration of burner contracts currently registered in PoolProxy.