Holder rewards
A token's pot is paid out when it reaches $25, at most once a day, and otherwise every Monday. When the launch chose holders, it goes to the wallets that held the token, in proportion to how much they held and for how long. When it chose the creator, all of it goes to the wallet that launched it.
How a period is counted
- Creator launches. The whole free pot goes to the wallet that signed the launch's choice, with the same periods, minimum and 48 hours as below.
- Period. It starts where the last one ended (the first, when the pool is created) and ends at Monday 00:00 UTC, or earlier once the pot's free part reaches $25 and at least 24 hours have passed since the period started.
- Weight. A wallet's balance times the seconds it held it, added up over the period. Trades through the pool are counted at their exact time; transfers between wallets at the next reading of all balances: every 15 minutes while the token traded in the last 48 hours, every hour after that.
- Amount. The period's total times the wallet's weight over the total weight, rounded down. The total is what the pot holds free when the period is published.
- Left out before the shares are computed. The vaults of the curve and the pool, AGI's account, burn addresses and any account owned by a program rather than a wallet. The creator counts like any other holder.
- Minimum. $0.50 per wallet, in the pair at its price when the period is published. A smaller amount stays in the pot for the next period. Claiming costs network fees and, for a wallet with no account for the pair, about 0.002 SOL of rent.
- Size. At most 80,000 wallets a period. With more, the 80,000 with the largest amounts are paid and the rest roll over.
From publishing to claiming
- When a period closes, AGI's publisher key posts its Merkle root, total and wallet count on chain. The file with every wallet, amount and proof is public.
- Nobody can claim for 48 hours. In that time the guardian can void a period that does not add up.
- Then a bot claims for every holder who already has an account for the pair token and is owed at least the minimum. Otherwise, claim from the token page. The money goes from the pot to your account, never through the bot, which pays the network fee.
- When the pair is SOL, claim from the token page: the bot does not pay SOL for you. Claiming sends you plain SOL.
- A claim always pays the holder, whoever sends the transaction.
- A period can be claimed for 180 days after the 48 hours. What is left goes back to the pot and is shared in later periods.
- While the issuer has the pair paused nobody can claim and no period expires.
Check a period yourself
Each period is a public file at /api/sol/epochs/<config>/<n>.json, where
<config> is the token's rewardsConfig and
<n> the period number. Its root, total and wallet count must match the period's account on
chain, and every proof must lead to the root.
verificar-epoch.mjs checks all of it against the chain: one file
for Node 18 or later, with no dependencies. Run it with --rpc (a Solana node),
--rewards-id (the reward program), --config (the token's
rewardsConfig), --epoch (the period number) and
--json (the period's file, a path or a URL). To recompute the amounts too, add
--log with the URL of /api/sol/epochs/<config>/<n>/log on
api.agiartificialgatointelligence.com, whose pages it reads one after another, or a file with that
log as a JSON list of owner, at and amount.
It exits 0 when everything matches and 1 when something does not.
leaf = sha256(0x00 || config || n u64 LE || index u32 LE || holder || amount u64 LE)
node = sha256(0x01 || min(a, b) || max(a, b))
weight = sum of balance(s), for each second s of the period
amount = floor(total * weight / sum of the weights)
Leaves are sorted by holder in base58, and a node with no pair moves up unchanged.
The file
rule, formatagi-sol-twab-v2 and 2. A different rule would have a different name.config, dbcConfig, mint, quoteMint, nwindowfrom and to, in Unix seconds.gapsfrom and to in Unix seconds. Transfers between wallets inside one count from the next reading.free, minimum, total, dustfree minus total).count, root, maxLeavesmode, creatorholders: the period is shared by balance, as above, and creator is null.
creator: the wallet that signed the launch's choice is the only leaf and gets the whole free pot;
creator holds that wallet, maxLeaves is 1, and weight,
excluded and inputs are null.weighttotal, holders, and how many wallets fell under the minimum (belowMinimum) or over the cap (cutOff).excludedlist) and every excluded owner found, with its weight and the reason: list or off-curve.inputspricingleavesindex, holder, amount and proof, the sibling hashes from the leaf up, ready for the claim.