veToken Finance is an forked version of the convex yield protocol that targets all ve-model projects
- veAsset projects: the projects which protocols interact with in order to let users get maximum yield from them (Curve, Pickle, Ribbon, Idle, Angle, Balancer)
- veAsset token: the main token of the veAsset project (crv, pickle, rbn, idle, angle, bal)
- veToken: governance token issued by veToken Finance ($VE3D)
- ve3Token: tokenized veAsset token created by veToken finance (ve3CRV, ve3Dill, ve3RBN, ve3IDLE, ve3ANGLE, ve3BAL)
-
VeAssetDepositor
- this contract allows users to lock their veAsset token like crv, pickle, ribbon...etc
- users get VE3Token in exchange
- users can stake VE3Token in the base reward pool
- the veAsset token deposited to the contract , will be transferred to external locking contract (voting escrow) of each veAsset project by VoterProxy contract
- the user who calls the lock function will get some incentives to cover the gas cost
- platform gets a reward (fee token) for locking veAsset from veAsset projects from their fee distro contract
- for each veAsset project, there will be a dedicated VeAssetDepositor contract deployed.
-
Booster
- this contract allows users to deposit lp tokens getting from veAsset projects
- users get another new token in exchange (token name is concatenated from lp token name + "veToken Deposit")
- users can stake the new token in the base reward pool
- the lp token deposited to the contract, will be transferred to external gauges of each veAsset project by VoterProxy contract
- platform gets rewards (as veAsset token) for depositing lp token to gauges
- the user who calls the function for collecting the rewards from gauges, will get some incentives to cover the gas cost
- the rewards (veAsset token) collected from gauges are distributed 20% max among caller, lock reward pool, ve3d token staker pool , fee platform and ve3d token locking pool , 80% is distributed to reward pools of lp tokens
- for each veAsset project, there will be a dedicated Booster contract deployed.
-
BaseRewardPool
- this contract allows users to stake their VE3Token which they get when depositing their veAsset token in VeAssetDepositor contract
- this contract also allows users to stake the new token they get in exchange when depositing lp token to the Booster contract. For each new token representing a lp pool, a new instance of this contract will be created by reward factory contract.
- for reward pool of VE3token , it collects a portion (configurable) of veAsset token collected from gauges + fee token collected from fee distro contract as extra reward
- for reward pool of lp token, it collects no less than 80% of veAsset token collected from gauges
- there are extra pools which added to the reward pool for extra reward tokens collected from veAsset project
- when a user claims rewards , a certain amount of veToken will be minted based on formula
- it is one contract instance for each veAsset project , and one for each lp token
-
VE3DRewardPool
- this contract allows users to stake veToken token
- it gets a portion (configurable) of veAsset token collected from gauges for all projects
- when a user claim s rewards , the contract will lock his veAsset rewards in VeAssetDepositor contract and mint him VE3Tokens with option to stake them in base reward pool
- There is only one contract for the platform
-
VoterProxy
- this contract handles all deposits into VotingEscrow and into the gauges. This is the address that has the voting power.
-
veTokenMinter
- This contract handles addional rewards when user claim veAsset rewards (PICKLE, CURVE, etc)
ve3Token is tokenized for veAsset. And locked veAsset kept in projects’s VotingEscrow . ve3Token can be obtained by deposit veAsset (Angle, PICKLE, etc) to Depositor. And user can stake ve3Token through base reward pool to get rewards.
LP tokens are received for depositing assets into veAsset farming pools or liquidity pools ( eg: Deposit liquidity into the angle pool without staking in the angle gauge) . And LP Token then deposited to Booster contracts and receives TOKEN (VE3DlpToken). And this TOKEN can stake into the BaseRewardPool in order to receive boosted rewards. Once deposited in the Booster. The LP tokens will be sent through VoterProxy which then deposits into their corresponding gauges.
Rewards can be harvested by calling earmarkRewards and earmarkFees on the Booster contract for a specific pool. This then calls claimVeAsset (claims Fees), claimRewards (claims any additional reward tokens registered for the gauge) and claimFees (claims pool fees from the fee distro). The caller of earmarkRewards and earmarkFees is paid an incentive to do so.
Each voting proxy has the voting power for corresponding projects. And it delegates to veToken Fiannce DAO and vote through projects’ snapshot. Voting hashes are set on the VoterProxy through Booster with EIP-1271 signatures
node version 16 delete .openzeppelin, contracts.json if you have them from previous run
npm ci
truffle compile
set up config keys in .env based on .env.example
npm run idle_network
npm run deploy-basic-contract-idle && npm run deploy-local-idle
npm run angle_network
npm run deploy-basic-contract-angle && npm run deploy-local-angle
npm run test-no-deploy-idle
npm run test-no-deploy-angle
npm run fork-mainnet
npm run deploy-basic-contract && npm run deploy-local
npm run test-no-deploy-custom
Note: all deployed addresses will be in contracts.json file