Linear release with optional cliff. Each grant tracks beneficiary, total amount, start time, cliff, duration, revocability. The owner (foundation multi-sig) can revoke revocable grants, vested-but-unclaimed tokens stay claimable, unvested tokens return to the owner.
Owner creates grant ──► start time cliff linear vest end
│ │ │ │
Beneficiary balance: 0 ──────────► 0 ─────────► proportional─► totalAmount
call release()
to claim vested
Optional: owner.revoke() ──► unvested portion returns to owner;
vested-but-unclaimed remains claimable by beneficiary.
Use cases:
- Foundation alloc 180M AERE released over 4 years with 1-year cliff
- Team grants (4yr / 1yr cliff)
- Investor lock-ups
- Bug-bounty payouts
- Market-maker incentives