Token vesting.
A lock says “not before this date”. Vesting says “a little at a time, starting here, finishing there”, which is what team and contributor allocations actually need.
How release is calculated#
A schedule has four numbers: a total, a start, an optional cliff and an end. Between start and end the claimable amount grows linearly. Before the cliff it is zero, regardless of how much time has passed.
before cliff → 0
between cliff and end → total × (now − start) / (end − start) − already claimed
at or after end → everything remainingThe final claim sweeps the exact remainder rather than recomputing the fraction, so a schedule always finishes at precisely the total. No dust is stranded.
What a cliff is for#
A cliff is a date before which nothing is claimable, even though time is accruing. When it passes, everything earned up to that point becomes claimable at once. The usual reason is commitment: a one-year cliff on a four-year schedule means someone who leaves in month eleven takes nothing.
What a vesting cliff is covers how holders read one.
What the contract forbids#
No HoodLock function can cancel, edit or reverse a schedule. There is no revoke, no sweep and no rescue. Check the beneficiary address and the amount before you sign — a mistake cannot be undone by us.
The token is the exception, and it matters. A token that is upgradeable, pausable, mintable, or that can blacklist an address can still make a schedule worthless or unclaimable after the fact. Where the schedule's creator is also the token's deployer — the common case for team vesting. They may retain exactly that power, whatever this contract does.
It cuts the other way too. Because there is no rescue path, a token that pauses or freezes the beneficiary locks the tokens permanently, with no recourse from anyone. Irrevocable and unrecoverable are the same property.
| Constraint | Value | Why it exists |
|---|---|---|
| Minimum duration | 24 hours | Stops a schedule that would be fully vested the moment it is created. |
| Maximum fee | 0.05 ETH, hard-coded | A ceiling the admin can never exceed, whatever else changes. |
| Batch limit | 200 beneficiaries | Bounds gas on a single createMany call. |
The admin can change the fee and the fee collector, and nothing else. No admin function can touch an existing schedule. See the contract reference.
Claiming#
- The beneficiary claims, not the creator. Claiming is a transaction they send when they choose.
- Claims are free. The fee is charged once, at creation. Claiming costs gas only.
- Nothing arrives automatically. Unclaimed tokens accumulate and stay claimable. There is no expiry.
- The beneficiary can be transferred by the current beneficiary, for a wallet change or a handover.
Vesting or locking?#
| If the supply is… | Use |
|---|---|
| One allocation you hold and intend to keep | a lock |
| Going to a team, advisors or contributors over time | vesting |
| A treasury you need to spend from on a schedule | several locks on different dates |
| Meant never to return | a burn |
Locks vs vesting vs burning compares all three in full, and allocation benchmarks covers what sizes and schedules hold up to scrutiny.
Batches#
createMany creates one schedule per beneficiary in a single transaction, up to 200, all
sharing the same token and the same timing. The fee is charged per schedule. It is the practical way to
set up a whole team at once.
The proof page#
Each schedule gets a public page showing the total, the amount already claimed, the cliff and end dates, and the percentage released. Because no HoodLock function can alter a schedule, that page describes a commitment we cannot walk back for you. See proof of lock.
One thing worth stating on your own page rather than leaving to inference: what share of the schedule had already vested when it was created. A schedule back-dated so that half of it is claimable on day one is technically vesting and practically a transfer. Our proof pages show it; say it yourself before someone else does.
Create a vesting schedule
Flat 0.005 ETH per schedule, claims are free, and no HoodLock function can alter it afterwards.
Open vesting →