vEPOCH
vEPOCH is the governance token of Epoch Island
Smart Contract Summary
The vEPOCH token lives on Ethereum Mainnet at contract address 0x731a2572b1cf56cfb804c74555715c8c8b5e980b and has 18 decimals.
The contract went live on Nov 17th 2023, deployed by the EPOCH DAO per a snapshot proposal.
vEPOCH is a custom developed Vote Escrow token contract that provides better flexibility to liquidity providers and has a straight forward veToken minting that does not reduce over time and can be extended at any time up to the maximum lock duration.
Participating within the Epoch Island governance structure requires that users have a balance of Voting Escrow EPOCH (vEPOCH) on Ethereum Mainnet.
vEPOCH cannot be transferred. The only way to obtain vEPOCH is to lock Balancer 80/20 (EPOCH/WETH) LP tokens (EPOCH-LP) for your chosen duration. The maximum lock duration is currently set to 365 days but can be updated at any time via governance.
The Epoch Island Dapp can be used to perform most actions found on this page and on-board users to the governance system.
Minting vEPOCH
The only way to mint new vEPOCH tokens is by locking up EPOCH-LP tokens for some period of time with the deposit method. While the LP tokens are locked, they can not be sold or transferred or be able to remove liquidity.
The minimum lock duration is 1 hour.
The maximum lock duration is currently 1 year but can be modified by governance. Any deposit that has not been locked for max duration can be extended at any time to mint more vEPOCH and be locked longer, up to the max duration.
Every deposit is managed separately and gets its own deposit ID and can be withdrawn at any time.
Locked EPOCH-LP tokens will continue to earn swap fees while they are locked.
Mint Calculation
The total amount of vEPOCH minted is equivalent to total EPOCH-LP tokens locked times total days locked. The number of vEPOCH minted is hard coded to follow this formula:
Math examples:
Locking 5 EPOCH-LP tokens for 100 days = 500 vEPOCH
Locking 24 EPOCH-LP tokens for 1 hour = 1 vEPOCH
Locking 1,000 EPOCH-LP tokens for 1 year = 365,000 vEPOCH
Burning vEPOCH
Withdrawing EPOCH-LP tokens will burn vEPOCH.
Withdraw
To withdraw after the deposit duration has matured, use the withdraw method. You will be able to keep all EPOCH rewards associated with this deposit.
Withdraw Early
To withdraw before the deposit duration has matured, use the withdrawForfeit method. You must pay back all EPOCH rewards associated with this deposit for the withdraw to succeed.
When withdrawing early and calling withdrawForfeit, there are no partial amount calculations. If for example you locked EPOCH-LP tokens for 1 year, then received 100 EPOCH reward distribution to this deposit and claimed them, you would need to pay back all 100 EPOCH tokens whether you are withdrawing after 1 day or 1 month since locking or withdrawing only minutes before the stake matures.
This means if a user has never claimed their EPOCH rewards they should have no problems withdrawing when ever they want to: the EPOCH tokens still exist in the contract and there are no tokens that must be paid back from the users wallet. The unclaimed reward tokens would simply stay in the vEPOCH contract.
Forfeited Tokens
When calling withdrawForfeit, the EPOCH tokens you must forfeit to withdraw early will go to all other vEPOCH holders, as though all of your forfeited tokens were sent directly to the addRewardTokens method immediately after your withdraw completed so that you are not participating in that reward distribution with this deposit.
This acts like a loyalty reward. Users who leave early forfeit their rewards, they weren't loyal to the terms they agreed to for duration they would remain locked. Users who are actively loyal receive these forfeited tokens as a bonus.
Transferring vEPOCH
It is possible for any user to transfer their deposit and all vEPOCH associated with it by calling transferDepositOwnership method. This sends their deposit, associated vEPOCH, and associated EPOCH-LP tokens ownership to the new address provided.
Non transferrable
vEPOCH tokens themselves are currently non-transferrable, but governance can control which addresses are whitelisted that allow transferring.
The benefit of allowing vEPOCH to be whitelisted is so future contracts not yet developed may need the ability to stake vEPOCH for additional utility. A new proposal could be made to enable a contract to gain whitelisting status to allow vEPOCH staking.
The reason for making vEPOCH non transferrable by default is because the vEPOCH contract requires vEPOCH tokens in the wallet that is attempting to withdraw EPOCH-LP tokens. If no vEPOCH exists in your wallet when attempting to withdraw EPOCH-LP tokens, the EPOCH-LP tokens would be stuck in the contract and you would not be able to withdraw them. Users could make a mistake by transferring or selling vEPOCH tokens from a wallet that has a deposit, and lose access to their deposit. A secondary reason is this also means whales can't buy voting rights without providing liquidity, which helps prevent governance attacks.
Reward Distributions
The vEPOCH contract also facilitates EPOCH reward distributions that are sent proportionally to all vEPOCH holders. Anyone can call the method addRewardTokens at any time to distribute the supplied amount of tokens to all vEPOCH holders, immediately, proportionally.
Math example: Alice has 10 vEPOCH. Bob has 90 vEPOCH. These are the only 2 users who have vEPOCH. Someone calls addRewardTokens and supplies 50 EPOCH tokens. Alice will receive 5 EPOCH and Bob will receive 45 EPOCH.
When EPOCH is distributed from calling addRewardTokens, those tokens still exist in the vEPOCH contract and must be manually claimed by each user.
These claimable rewards never expire. There is no time limit on when you must claim your rewards. Once they are associated to your address, the only way these become no longer yours to claim is if you call withdrawForfeit so you can withdraw early which means you have chosen to forfeit those rewards by distributing them to the other vEPOCH holders.
Subgraphs
Moai Labs is currently maintaining a subgraph tracking vEPOCH positions and events. This can be found below.
Mainnet
Sepolia
Audits
Moai Labs facilitated getting 5 different audits completed for the vEPOCH contract:
0xFoobar: IPFS upload | epochisland.io upload
Quantstamp: IPFS upload | epochisland.io upload
Hans Friese: IPFS upload | epochisland.io upload
Milo Truck: IPFS upload | epochisland.io upload
WeiChain: IPFS upload | epochisland.io upload
Last updated