Depositors & Token Conversions
The Convex system includes depositor contracts that convert a gauge platform's governance token into Convex's liquid staking representation. These are how CRV becomes cvxCRV, FXS becomes cvxFXS, and FXN becomes cvxFXN.
CrvDepositor (CRV → cvxCRV)
CrvDepositor.sol (mainnet 0x8014595F2AB54cD7c604B00E9fb932176fDc86Ae) accepts CRV and mints cvxCRV. With lockIncentive = 0 (current mainnet state) the mint is 1:1; if the governance-set lockIncentive is raised, a fee applies to deposits that defer locking.
//deposit CRV, mint cvxCRV immediately
await crvDepositor.deposit( amount, true ) //locks CRV into the voter proxy's veCRV now
//deposit CRV, defer locking (fee may be due to the caller who locks later)
await crvDepositor.deposit( amount, false )
//deposit and optionally stake the cvxCRV immediately
await crvDepositor.deposit( amount, lock, stakeAddress )Key mechanics (from source):
The incentive is charged on
_lock=false(locking is deferred to a future caller):callIncentive = amount * lockIncentive / 10000is taken from the deposit into anincentiveCrvpool, which pays the address that later callslockCurve(). A_lock=truecaller may additionally receive the accumulatedincentiveCrv, minting more than their own deposit. WhilelockIncentive = 0on mainnet, this is governance-adjustable (max 30 bps).lockCurve()is the public function that locks accumulated CRV into the voter proxy's veCRV escrow (0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2), callsincreaseAmount, and conditionally extends the unlock time.initialLock()(operator) sets up the first lock.Deposited CRV is locked into the protocol's veCRV via the voting proxy (
staker=0x989AEb4d175e16225E39E87d0D97A3360524AD80), which is what gives cvxCRV its share of Curve emissions and trading fees.minter= cvxCRV token (0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7).
cvxCRV is transferable but has no redemption function on the depositor — there is no unbonding path back to raw CRV. Exit relies on secondary-market liquidity (the incentivized cvxCRV/CRV pools) rather than a contract redemption.
FxsDepositor (FXS → cvxFXS)
FxsDepositor.sol (mainnet 0x8f55d7c21bDFf1A51AFAa60f3De7590222A3181e) accepts FXS and mints cvxFXS. The FXS is locked into the veFXS system (through the Convex veFXS proxy / escrow 0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0), and the resulting veFXS power boosts the Frax-platform user vaults. cvxFXS holders hold a liquid token and may stake it for configured rewards; they do not directly receive the boost themselves.
FxnDepositor (FXN → cvxFXN)
FxnDepositor.sol (mainnet 0x56B3c8eF8A095f8637B6A84942aA898326B82b91) accepts FXN and mints cvxFXN, locking the FXN into veFXN via the Function(X) escrow (0xEC6B8A3F3605B083F7044C0F31f2cac0caf1d469). It exposes:
The mint is always 1:1, with a conditional platformHolding route: after minting, if depositAmount + cvxFxn.totalSupply() <= veFXN.locked(staker) (the post-mint supply plus the new amount stays within the veFXN backing), up to platformHolding bps of the incoming FXN is diverted to platformDeposit (mainnet: 2000 bps / 20%, treasury)
ClaimZap & reward plumbing (mainnet)
ClaimZap.sol (mainnet 0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516) is a convenience contract that batches common claim operations (claiming pool rewards, cvxCRV/CVX staking rewards, veCRV fees, and CVX minting in a single transaction) — useful for integrators building "claim everything" flows for end users.
MasterChef / liquidity mining (historical)
The ConvexMasterChef.sol contract ran the launch liquidity-mining program (CVX/ETH and cvxCRV/CRV Sushiswap pools). The launch pools are historical — but note the contract itself is still deployed and live (deposits/withdraws/claims remain callable; whether any pool currently carries emission allocation is queryable via poolLength()/poolInfo()). Treat it as a legacy distribution contract, not a new-position integration surface; the chefPools entries in contracts.json reference its pools.
Last updated
Was this helpful?