Skip to main content

AFX LP Bonus Window: Monthly Reward Data

Each epoch's complete reward data is published here after the epoch closes. Every file lists the merkle root, the total distributed, and for each eligible address its cumulative amount and claim proof.

The root in each file is the same root posted on-chain to the distributor contract 0xFA9f14E13FEece4eE62AC2b74d7194d64a857495, so you can confirm the data matches what the contract will actually pay.

How rewards are calculated is set out in the reward formula. How to claim is covered in the program announcement.

Epochs​

EpochPeriod (approximate)Data
12026-08-03 16:00:11 UTC to 2026-09-02 16:00:11 UTCepoch-1.json, 10 addresses, 59,999,999.999999999999999311 AFX, paid in full
22026-09-02 to 2026-10-02published after the epoch closes
32026-10-02 to 2026-11-01published after the epoch closes
42026-11-01 to 2026-12-01published after the epoch closes
52026-12-01 to 2026-12-31published after the epoch closes
62026-12-31 to 2027-01-30published after the epoch closes

Each epoch runs exactly 2,592,000 seconds from the on-chain start block, so the boundaries above are fixed by that block rather than by the calendar. The start block landed at 16:00:11 UTC on 2026-08-03, and every epoch boundary carries that same time of day.

Epoch 1​

Settled and paid on 2026-09-02. Every eligible position was in range for the whole month, so the full monthly budget was distributed and undistributed is zero.

Root0xb718a13d1aca60eef7cfd64d4f0f7119d6459b0c92a4905317e029f3e6dff6c0
Total distributed59,999,999.999999999999999311 AFX (the 60,000,000 budget less 689 wei of rounding)
Addresses10
Dataepoch-1.json
Root posted on-chain0x5be7d22e…545c (funds the distributor and sets the root)
Claims paid0x35944c12…1d56 (all ten, in one transaction)

Nobody needs to claim epoch 1: every address in the file has already received its amount.

Recompute it yourself​

The engine that produced each file is published here, unchanged from what we run:

  • Formula: the accrual rules in prose (also as the raw file the engine ships with).
  • Engine source: /afx-lp/engine/src/ (run.ts is the entry point, merkle.ts builds the tree) with its tests under /afx-lp/engine/test/ and the mainnet configuration at /afx-lp/engine/config/mainnet.json.

With Node 20+ and an Ethereum archive RPC: copy the engine directory, run npm install, set ALCHEMY_KEY to your key, and run npm run epoch -- --config config/mainnet.json --epoch 1. The root it prints is the one above.

Reading a file​

{
"epoch": 1,
"root": "0x…",
"totalCumulative": "…",
"undistributed": "…",
"claims": {
"0xYourAddress": {
"cumulativeAmount": "…",
"proof": ["0x…", "0x…"]
}
}
}

cumulativeAmount is your lifetime total for the program so far, not just that month. A claim pays that amount minus whatever you have already received, which is why skipping a month costs you nothing.

undistributed is emission that accrued to no eligible position, usually because no eligible liquidity was in range. It stays in the treasury and is not re-emitted.