> For the complete documentation index, see [llms.txt](https://igra-labs.gitbook.io/igralabs-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://igra-labs.gitbook.io/igralabs-docs/igra-token/unlock-and-vesting-schedule.md).

# Unlock and Vesting Schedule

All tokens vest from a single contract: [`VestingPools`](https://explorer.igralabs.com/address/0xc9c88C5b4a0E5ae4C0812F3bc04A5FeA9ffC580b) at `0xc9c88C5b4a0E5ae4C0812F3bc04A5FeA9ffC580b`. It holds 10 pools. All pools have `isAdjustable = false` — schedules are immutable, including to the contract owner.

## Vesting pools

The contract stores IDs, not names — this mapping exists nowhere on-chain.

| ID | Pool                          |         Allocation | Start (UTC)         | Vesting days | Pre-minted | Beneficiary                                                                                      |
| -: | ----------------------------- | -----------------: | ------------------- | -----------: | :--------: | ------------------------------------------------------------------------------------------------ |
|  0 | Ecosystem & Rewards (TGE)     |        470,000,000 | 2026-02-25 16:15:10 |            1 |     yes    | [`0xB330…f18`](https://explorer.igralabs.com/address/0xB3300fcC2F3EF3DeCdF8B1f710c21666f33Cbf18) |
|  1 | Ecosystem & Rewards (Vesting) |      4,230,000,000 | 2026-02-25 16:15:10 |         1800 |     no     | [`0xB330…f18`](https://explorer.igralabs.com/address/0xB3300fcC2F3EF3DeCdF8B1f710c21666f33Cbf18) |
|  2 | IGRA Association (TGE)        |        200,000,000 | 2026-02-25 16:15:10 |            1 |     yes    | [`0xC340…c2`](https://explorer.igralabs.com/address/0xC3409E999fF3E33Fe975E85dab7258F7fe28E1c2)  |
|  3 | IGRA Association (Vesting)    |      1,800,000,000 | 2026-02-25 16:15:10 |          720 |     no     | [`0xC340…c2`](https://explorer.igralabs.com/address/0xC3409E999fF3E33Fe975E85dab7258F7fe28E1c2)  |
|  4 | Team & Angels (TGE)           |        180,000,000 | 2026-02-25 16:15:10 |            1 |     yes    | [`0xb19b…Ac`](https://explorer.igralabs.com/address/0xb19b82d3C62219bDEf9fe2FD50b074bb7Efa74Ac)  |
|  5 | Team & Angels (Vesting)       |      1,620,000,000 | 2026-08-24 16:15:10 |          900 |     no     | [`0x3B13…F2`](https://explorer.igralabs.com/address/0x3B130a69FabE5F9641e964c01BC17B961F830CF2)  |
|  6 | Round 1 (TGE)                 |        100,000,000 | 2026-02-25 16:15:10 |            1 |     yes    | [`0x9087…c2`](https://explorer.igralabs.com/address/0x90870B1017f3FcbB11647BF563F3c2333EA8a2c2)  |
|  7 | Round 1 (Vesting)             |        900,000,000 | 2026-08-24 16:15:10 |          540 |     no     | [`0x4E68…66`](https://explorer.igralabs.com/address/0x4E6803879EF2A5A666c8b792f242B52E9B2A8966)  |
|  8 | Round 2 (TGE)                 |         50,000,000 | 2026-02-25 16:15:10 |            1 |     yes    | [`0x9087…c2`](https://explorer.igralabs.com/address/0x90870B1017f3FcbB11647BF563F3c2333EA8a2c2)  |
|  9 | Round 2 (Vesting)             |        450,000,000 | 2026-03-27 16:15:10 |          360 |     no     | [`0x9087…c2`](https://explorer.igralabs.com/address/0x90870B1017f3FcbB11647BF563F3c2333EA8a2c2)  |
|    | **Total**                     | **10,000,000,000** |                     |              |            |                                                                                                  |

Five categories, each split 10% TGE / 90% linear vesting.

Beneficiaries can be reassigned by the current beneficiary via `updatePoolWallet`. This table reflects the state at time of writing — `getWallet(id)` on VestingPools is authoritative.

## Vesting formula

`sAllocation` and `sUnlocked` are stored with a `1e12` scale factor; `vested` and `releasableAmount` are 18-decimal.

```
allocationIGRA = sAllocation / 1e6
releasable(t)  = allocation × clamp((t − start) / (vestingDays × 86400), 0, 1)
mintedWei      = isPreMinted ? allocationWei : vested
```

`sAllocation` and `sUnlocked` use a `1e12` scale factor — divide by `1e6` to get IGRA amounts.

## Staking lock

The attester staking lock is block-based, not time-based. The intended tokenomics period is 180 days, but the actual unlock depends on observed block cadence.

| Parameter                | Value                                 |
| ------------------------ | ------------------------------------- |
| `LOCK_PERIOD_BLOCKS`     | 15,552,000                            |
| `VALIDATION_START_BLOCK` | 86,400                                |
| Full-exit unlock block   | 15,638,400                            |
| Intended unlock date     | 2026-08-24 16:15:10 UTC               |
| Estimated actual unlock  | \~2026-08-30/31 (block cadence drift) |

`exit()` reverts with `LockPeriodNotEnded()` before the unlock block. `decreaseStake(uint96)` was removed at block 13,411,949.
