ETH$3,420
Tools/locker

Locker

Free token and LP locks plus batch vesting schedules, with public on-chain proof anyone can verify.

HoodLocker is two products in one contract: time locks for any ERC-20 (including v2-style LP tokens), and batch vesting schedules. It has no owner, no admin, no pause, no upgrade path and no fee — you pay gas and nothing else.

note
This is for tokens you hold. A hood.dev launch’s own liquidity is already locked permanently by the FeeLocker and needs nothing from this page.

#Locks

solidity
function createLock(address token, uint256 amount, uint64 unlockTime, address unlocker)
    external returns (uint256 lockId);

function extendLock(uint256 lockId, uint64 newUnlockTime) external;  // owner; extend only
function withdraw(uint256 lockId) external;                          // unlocker, after expiry
What can be locked
Any ERC-20, including Uniswap v2-style LP tokens
Who can withdraw
Only the unlocker — which defaults to you if you pass the zero address. Tokens always go to the unlocker, never to a caller-supplied address.
Extending
The lock’s creator can push unlockTime further out at any time — including re-locking one that already expired but was not withdrawn. It can never be shortened.
Fee-on-transfer tokens
Supported. The lock records what actually arrived, not what you asked for.
Separating owner from unlocker is the useful bit
The creator keeps the power to extend; the unlocker holds the only key that opens it. Point the unlocker at a multisig, a co-founder, or a DAO and you have a credible commitment that a single compromised wallet cannot undo — an attacker with your key can lengthen the lock, not release it.

#Vesting

solidity
function createVestings(
    address token,
    address[] calldata recipients,
    uint256[] calldata amounts,
    uint64 start,      // 0 = now; must not be in the past
    uint64 duration,   // seconds
    uint32 interval    // 0 = continuous; 86400 / 604800 / 2592000 = daily / weekly / monthly
) external returns (uint256 firstVestingId);

function claim(uint256 vestingId) external;                                 // beneficiary only
function claimable(uint256 vestingId) external view returns (uint256);
function vestedAmount(uint256 vestingId, uint64 timestamp) external view returns (uint256);

One call creates one schedule per recipient, funded by a single transfer, and the batch occupies ids [firstVestingId, firstVestingId + recipients.length). Beneficiaries claim their own schedules whenever they like; nobody can claim on their behalf and nobody can revoke.

#Linear vs stepped

intervalBehaviour
0Continuous. Vested amount is exactly proportional to elapsed time.
86400 / 604800 / 2592000Stepped. The schedule splits into ceil(duration / interval) equal tranches, one unlocking at the end of each interval — daily, weekly, or monthly.
  • interval may not exceed duration, and duration may not be zero.
  • Fee-on-transfer tokens are rejected here (unlike locks). A skim would make the per-recipient amounts unpayable, and silently rescaling somebody’s allocation is not an acceptable failure mode.
  • A cliff is a stepped schedule whose first tranche is the cliff — there is no separate cliff parameter.

#Reading locks and schedules

The contract keeps on-chain list views — locksOf(owner), vestingsOf(beneficiary), vestingsCreatedBy(creator) — but they do not paginate, so they are a fallback rather than a UI data source. Everything here also lands in indexed form as TokenLock, VestingSchedule and VestingClaim, already joined to token metadata — see Data & indexing.

What this contract deliberately does not do
No lock-ownership transfer, no partial withdrawals, no revocable vesting, and no locking of Uniswap V3/V4 positions (those are NFTs — a different problem, solved for launches by the FeeLocker). If you need any of that, do not try to emulate it here.

#Proof

Every lock and schedule emits an event and is indexed, so a lock is a public fact rather than a screenshot: anyone can read the token, the amount, the unlock time and the unlocker straight off the chain. That is the entire point of using a lock contract instead of a promise.

#Deployment

HoodLocker
Token/LP locks and vesting schedules. No owner, no admin, no fee.
chain 4663·on-chain values read 2026-07-29·Blockscout