For the complete documentation index, see llms.txt. This page is also available as Markdown.

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 / 10000 is taken from the deposit into an incentiveCrv pool, which pays the address that later calls lockCurve(). A _lock=true caller may additionally receive the accumulated incentiveCrv, minting more than their own deposit. While lockIncentive = 0 on 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), calls increaseAmount, 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?