Skip to content

api3dao/stakeable-vesting

Repository files navigation

Stakeable vesting

We previously had two implementations to reward contributors with API3 tokens:

  1. TimelockManager grants a token allocation that is timelocked with linear release. These tokens can be transferred to the API3 staking pool and staked before being released by the timelock. The allocations made this way are not revocable.

  2. TimeLockManagerReversible vests tokens linearly. This contract only allows vested tokens to be withdrawable, it implements no functionality to transfer tokens (vested or unvested) to the API3 staking pool. It allows the tokens that are not yet vested to be revoked.

This contract implements a mix of the two with the following properties:

  • The tokens are vested linearly and the vested tokens can be withdrawn
  • The tokens (vested or unvested) can be transferred to the staking pool and staked
  • The tokens that are held by this contract or transferred to the staking pool are revocable

Vestings are granted through a factory contract that deploys a proxy contract per each vesting. The proxy contract has a beneficiary that can stake the tokens (and receive rewards, use voting power), or withdraw them within the limits of the vesting schedule. The proxy contract has an owner that can update beneficiary (which is to be used as the means of revocation), and withdraw all tokens (vested or not). Here, beneficiary is the vesting recipient, and owner is the "hot wallet multisig" referred to in the related proposal.

Instructions

Install the dependencies and build

yarn
yarn build

Test the contracts and get test coverage

yarn test
# Outputs to `./coverage`
yarn test:coverage

To derive the expected address of a StakeableVesting deployment

BENEFICIARY=... \
  START_TIMESTAMP=...\
  END_TIMESTAMP=...\
  AMOUNT=...\
  yarn derive-vesting-address

See the beneficiary guide and the owner guide for instructions

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published