Unlock Truth
Is the lock real? Token unlocks, verified on-chain
Everyone shows the promised unlock calendar — we check on-chain whether the "locked" tokens are actually in a vesting contract, or just a wallet the team can empty · How every number is computed →
Every unlock tracker shows you the same thing: the vesting calendar a project published. We show you what they don't — whether that lock actually exists on-chain. For each allocation we read the chain and ask one question: are the "locked" tokens sitting inside a vesting contract that mechanically blocks early transfer, or in a team wallet / multisig that can move them at any block? The first is enforced by code; the second is a promise the team can break — and we label it exactly that way.
3 tokens with real enforced locks · 7 with discretionary pockets · 0 pre-dump flags so far.
Each token below carries a colour-coded verdict of its examined allocation: Enforced tokens held inside a code-enforced vesting contract · Discretionary held in an EOA / multisig / owner-controlled contract with no on-chain lock (movable at any block) · Unverifiable a custom contract whose enforcement we could not confirm on-chain. "Discretionary" describes the mechanics only — it never implies the team intends to sell.
Per-token forensic verdicts
5,479,207,574 ONDO sits in discretionary wallets (EOA/multisig/owner-controlled) with NO on-chain lock — the calendar there is a promise, not code.
Show 3 allocation buckets — address · classification · evidence
| Bucket | Address | On-chain balance | Classification | Contract kind | Confidence | Schedule | Evidence / caveat |
|---|---|---|---|---|---|---|---|
| Foundation Multisig 2 — the locked insider/ecosystem allocation | 0x677F…A1A1 ↗ | 5,479,207,574 | Discretionary | Gnosis Safe multisig | high | — | Gnosis Safe proxy: getThreshold()+getOwners() both respond (4-of-7 signers, code 171B) |
| Management Multisig | 0xAEd4…8367 ↗ | 0 | Discretionary | Gnosis Safe multisig | high | — | Gnosis Safe proxy: getThreshold()+getOwners() both respond (4-of-7 signers, code 171B) |
| Deployer | 0xe2d0…4bBe ↗ | 0 | Discretionary | EOA (externally-owned account) | high | — | eth_getCode = 0x (externally-owned account); nothing on-chain restricts transfer |
38,899,020 MANTA sits in verifiable, schedule-enforced vesting contracts; 20,000,000 MANTA sits in discretionary wallets (EOA/multisig/owner-controlled) with NO on-chain lock — the calendar there is a promise, not code.
Show 6 allocation buckets — address · classification · evidence
| Bucket | Address | On-chain balance | Classification | Contract kind | Confidence | Schedule | Evidence / caveat |
|---|---|---|---|---|---|---|---|
| Investor vesting escrow | 0x21De…3d25 ↗ | 19,200,000 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2025-01-18 → 2028-01-18 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2025-01-18 duration=1095d end=2028-01-18 beneficiary=0x9228631d98814a604a3e318e9383de289616d85f |
| Investor vesting (monthly) | 0x8907…5829 ↗ | 5,464,286 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2024-12-18 → 2027-12-18 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2024-12-18 duration=1095d end=2027-12-18 beneficiary=0xfaf58420de97584c6b06f5fe375918f626cf26d7 |
| Investor vesting escrow | 0x122E…F13c ↗ | 5,200,000 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2025-01-18 → 2028-01-18 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2025-01-18 duration=1095d end=2028-01-18 beneficiary=0x47fbbd7af79f53430923bf05220ab3416277b862 |
| Investor vesting escrow | 0x7eB7…D243 ↗ | 4,847,712 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2025-01-18 → 2028-01-18 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2025-01-18 duration=1095d end=2028-01-18 beneficiary=0xfb2e1227a48c100073e476e92001239afd09598e |
| Investor vesting escrow | 0x9b19…3Ff0 ↗ | 4,187,022 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2025-01-18 → 2028-01-18 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2025-01-18 duration=1095d end=2028-01-18 beneficiary=0x8255a792b73f2052467b1cf77055bc4e60ff1038 |
| Round-number EOA (20,000,000 exactly) | 0xD7E5…9724 ↗ | 20,000,000 | Discretionary | EOA (externally-owned account) | high | — | eth_getCode = 0x (externally-owned account); nothing on-chain restricts transfer |
460,475,105 OP sits in discretionary wallets (EOA/multisig/owner-controlled) with NO on-chain lock — the calendar there is a promise, not code; 0 OP is in custom contracts we could not confirm as enforced (unverifiable).
Show 2 allocation buckets — address · classification · evidence
| Bucket | Address | On-chain balance | Classification | Contract kind | Confidence | Schedule | Evidence / caveat |
|---|---|---|---|---|---|---|---|
| Optimism Foundation (distribution/treasury multisig) | 0x2501…B3F0 ↗ | 460,475,105 | Discretionary | Gnosis Safe multisig | high | — | Gnosis Safe proxy: getThreshold()+getOwners() both respond (1-of-1 signers, code 171B) |
| Airdrop distributor | 0xFeDF…57de ↗ | 0 | Unverifiable | Custom contract (interface unrecognised) | low | — | Contract (code 7088B) matches NO known vesting/timelock/multisig/ownable interface — behaviour unconfirmed on-chain. |
4,174,643,311 WLD sits in verifiable, schedule-enforced vesting contracts; 781,929,358 WLD sits in discretionary wallets (EOA/multisig/owner-controlled) with NO on-chain lock — the calendar there is a promise, not code.
Show 8 allocation buckets — address · classification · evidence
| Bucket | Address | On-chain balance | Classification | Contract kind | Confidence | Schedule | Evidence / caveat |
|---|---|---|---|---|---|---|---|
| Community Tokens Unlock Contract #1 (2023 tranche) | 0x1770…C296 ↗ | 674,643,310 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2023-07-24 → 2026-07-24 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2023-07-24 duration=1096d end=2026-07-24 beneficiary=0x59a0f98345f54bab245a043488ece7fcecd7b596 |
| Community Tokens Unlock Contract #2 (2026 tranche, post-rate-cut) | 0xaEE0…0e57 ↗ | 1,750,000,001 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2026-07-24 → 2029-07-24 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2026-07-24 duration=1096d end=2029-07-24 beneficiary=0x59a0f98345f54bab245a043488ece7fcecd7b596 |
| Community Tokens Unlock Contract #3 (2029 tranche) | 0x938c…77F7 ↗ | 875,000,000 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2029-07-24 → 2032-07-24 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2029-07-24 duration=1096d end=2032-07-24 beneficiary=0x59a0f98345f54bab245a043488ece7fcecd7b596 |
| Community Tokens Unlock Contract #4 (2032 final tranche to ~2038) | 0x5B54…7D93 ↗ | 875,000,000 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2032-07-24 → 2038-07-24 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2032-07-24 duration=2191d end=2038-07-24 beneficiary=0x59a0f98345f54bab245a043488ece7fcecd7b596 |
| World Assets Ltd Cold Wallet (community-vesting beneficiary + OTC vehicle) | 0x59a0…B596 ↗ | 723,289,992 | Discretionary | Gnosis Safe multisig | high | — | Gnosis Safe proxy: getThreshold()+getOwners() both respond (1-of-1 signers, code 171B) |
| World Assets Ltd Hot Wallet (OTC settlement / operational) | 0xc415…3565 ↗ | 1,000,000 | Discretionary | Gnosis Safe multisig | high | — | Gnosis Safe proxy: getThreshold()+getOwners() both respond (2-of-8 signers, code 171B) |
| TFH Team/Investors 'Vesting/Unlock' wallet (labelled 'vesting' but is a plain EOA) | 0x0D4C…CcE7 ↗ | 22,663,258 | Discretionary | EOA (externally-owned account) | high | — | eth_getCode = 0x (externally-owned account); nothing on-chain restricts transfer |
| Three Arrows Capital (3AC) investor wallet | 0xC7C9…3741 ↗ | 34,976,108 | Discretionary | EOA (externally-owned account) | high | — | eth_getCode = 0x (externally-owned account); nothing on-chain restricts transfer |
139,449,101 ARB sits in verifiable, schedule-enforced vesting contracts; 2,556,141,992 ARB sits in discretionary wallets (EOA/multisig/owner-controlled) with NO on-chain lock — the calendar there is a promise, not code.
Show 2 allocation buckets — address · classification · evidence
| Bucket | Address | On-chain balance | Classification | Contract kind | Confidence | Schedule | Evidence / caveat |
|---|---|---|---|---|---|---|---|
| Arbitrum DAO Treasury | 0xF3FC…9B58 ↗ | 2,556,141,992 | Discretionary | Owner-controlled contract (treasury / governance timelock / reserve) | medium | — | Contract (code 2593B) responds to owner() but to NO standard vesting/timelock selector — owner-controlled reserve/treasury/timelock, not a schedule-enforced lock. |
| Arbitrum Foundation Vesting Budget Wallet | 0x1553…6844 ↗ | 139,449,101 | Contract-enforced | Vesting contract (OpenZeppelin VestingWallet type) | high | 2023-04-17 → 2027-04-17 | OpenZeppelin VestingWallet: start()+duration()+beneficiary() respond. start=2023-04-17 duration=1461d end=2027-04-17 beneficiary=0xd6c8a4e72584f24bd5517afed6c01d21477c17f6 |
15,445,004 MOVE sits in discretionary wallets (EOA/multisig/owner-controlled) with NO on-chain lock — the calendar there is a promise, not code.
Show 1 allocation bucket — address · classification · evidence
| Bucket | Address | On-chain balance | Classification | Contract kind | Confidence | Schedule | Evidence / caveat |
|---|---|---|---|---|---|---|---|
| Movement Strategic Reserve (buyback destination) | 0xA14C…cACe ↗ | 15,445,004 | Discretionary | EOA (externally-owned account) | high | — | eth_getCode = 0x (externally-owned account); nothing on-chain restricts transfer |
1,035,583,289 ENA sits in discretionary wallets (EOA/multisig/owner-controlled) with NO on-chain lock — the calendar there is a promise, not code.
Show 1 allocation bucket — address · classification · evidence
| Bucket | Address | On-chain balance | Classification | Contract kind | Confidence | Schedule | Evidence / caveat |
|---|---|---|---|---|---|---|---|
| Staked ENA (sENA) contract | 0x8bE3…B3b9 ↗ | 1,035,583,289 | Discretionary | Owner-controlled contract (treasury / governance timelock / reserve) | medium | — | Contract (code 2876B) responds to owner() but to NO standard vesting/timelock selector — owner-controlled reserve/treasury/timelock, not a schedule-enforced lock. |
Out of scope — shown for honesty, not verified
Our engine reads Ethereum, Arbitrum, Optimism. These well-known unlocks live on chains we cannot read, so we make no forensic claim about them — verifying a promise we can't read would betray the whole point.
| Token | Name | Why we don't verify it |
|---|---|---|
| W | Wormhole | supply + vesting live on Solana (non-EVM) — not indexable by our engine |
| ZK | zkSync | allocation/vesting on zkSync Era L2 (not in our indexed set); L1 token is dead |
| STRK | Starknet | vesting enforced in Cairo on Starknet L2 (non-EVM); L1 is bridge escrow only |
| SEI | Sei | Cosmos-based (non-EVM) |
On a chain we do read, but with no publicly-labelled team/investor/vesting addresses to check — so there is nothing for us to classify:
| Token | Name | Why it's opaque to us |
|---|---|---|
| BLUR | — | on Ethereum but no publicly-labeled team/investor/vesting addresses; ~95% already unlocked (mature) |
| ZRO | LayerZero | on Ethereum but Foundation/vesting addresses not officially disclosed |
| ETHFI | ether.fi | on Ethereum but team/investor vesting addresses not disclosed / Etherscan-gated |
Methodology & honesty
How we classify. For each allocation address we run eth_getCode:
an empty response means a plain wallet (EOA) — nothing on-chain restricts transfer. Where there
is contract code, we probe function selectors to recognise the interface:
start() + duration() + beneficiary() for an OpenZeppelin
VestingWallet (schedule-enforced); getThreshold() +
getOwners() for a Gnosis Safe multisig (discretionary — signers can move funds at
any block); owner() with no vesting selector for an owner-controlled
reserve/treasury/timelock (discretionary). A contract matching no known
interface is reported Unverifiable — we refuse to award
"enforced" without a chain-checkable basis. We bias toward not claiming enforcement:
a false "discretionary" is safe, a false "enforced" is brand-lethal.
A movement is described mechanically — "held in an EOA", "balance fell from X to Y", "no vesting contract found" — and never as intent: we do not publish "dumped", "rugged" or "scammed". · Absence of a flag is NOT a clean bill of health: our CEX/bridge label list is incomplete and drifts, our pre-dump scan uses a shallow recent-block window that deepens over time, and we only see the chains we index — tokens bridged elsewhere or moved on a CEX internal ledger are invisible. · Enforced today ≠ enforced tomorrow: an upgradeable or owner-mutable vesting contract can be changed, so a green verdict is a statement about the contract as it stands today.
Full method and contract addresses on the methodology page.
Citation & sources
Free to use with attribution. Please cite:
EstateFi Unlock Truth — on-chain token-lock verification — estatefi.io — retrieved 2026-07-29
See also: Price Index · Can you sell? · Is the rent paid? · Coverage & criteria · Methodology. Informational only — not investment advice.