Token vests
A vest locks an amount of any alkane and releases it to its holders on one schedule. It is for team allocations, investor unlocks, grants, or anything that should arrive gradually.
Each vest is its own contract, created from the controller template 4:1792. The creator holds an admin NFT. Every position in the vest is a stream NFT (template 4:1793), and holding one is the right to claim that position.
The schedule
| term | meaning |
|---|---|
| start | when vesting begins (unix time) |
| cliff | how long after start before anything vests (0 = no cliff) |
| duration | how long the whole amount takes to vest |
| initial unlock | a share, in basis points, available at start (1,000 = 10%) |
After the initial unlock and the cliff, the rest streams in a straight line until start + duration. Every position in a vest shares the same schedule; positions differ only in size.
Steps
- Create the vest with the token and schedule. You receive the admin NFT.
- Seed it with the tokens to vest. Anyone can seed.
- Create positions, one NFT per recipient and amount. The total can't exceed what was seeded.
- Send each NFT to its recipient.
Recipients Claim whenever they like and receive everything vested so far. The NFT comes back with the payout.
Admin actions
- Cancel a position (if the vest is cancelable): the recipient keeps everything vested up to now and can still claim it. The unvested rest returns to you.
- Withdraw excess: return tokens that were seeded but not committed to any position.
Vest or payroll?
| vest | payroll | |
|---|---|---|
| denominated in | the token itself | US dollars |
| paid in | the vested token | DIESEL |
| schedule | linear, one per vest | fixed paydays, one per person |
| funding | seeded up front into the vest | drawn from a shared pool on each payday |
| terms after creation | fixed | amend, bonus, advance |
If the promise is "this many tokens over this period", use a vest. If the promise is "this many dollars every two weeks", use payroll.