The ledger
Don't take our word for any of it. Every address, root and distribution file, with links to check them.
On-chain addresses
- Proof of Goon program
- 6KZLGdp5LEeE7PAMHLGQNoU1dQBwnSrxPF2FczoUr13
- Global state account
- BFM88ZRxmTWwgp8uLF7jwMvoheRPobiGm2kzq43wxyjT
- Vault authority (PDA)
- B3Zz1LyUaKthn1uMbbwcspbnQsWZkVQfLPcft7F6bjfW
- Goon Vault token account
- created when the mint is bound
- GOON token address (mainnet)
- Wn46fj2vUJwJtcu877TWX5XvXTmrEhvJfSSUM9vgoon
- GOON mint bound to the program
- none yet
Holds the rules. Verify the deployed bytecode against the source.
Roles, emission schedule, the active and pending roots.
No private key exists for it. Only the program can sign for the vault.
Where the 500M mining reserve sits.
Published ahead of launch. Full token integration is on the roadmap and not yet fully live on mainnet.
Fixed supply. Mint and freeze authority must both read as none.
Epochs
One row per epoch. Published roots are cumulative: each one covers everything before it.
Loading epochs…
Verify it yourself
How to check a root
Each settled epoch has a distribution file. Its cumulative array is every wallet's lifetime allocation, and those entries are the leaves of the Merkle tree whose root is stored on-chain.
leaf = sha256( 0x00 || "PoG-claim-v1" || wallet (32 bytes) || cumulative_amount (u64, little-endian) ) node = sha256( 0x01 || min(a, b) || max(a, b) ) leaves are ordered by wallet bytes; an odd node is carried up unchanged
- Download the file from the row above and hash its canonical JSON (keys sorted, no whitespace) with SHA-256. It must equal the row's data hash, which is also stored on-chain next to the root.
- Rebuild the tree from
cumulative. The root must equal the on-chain root. - Sum
cumulative. It must equalcumulativeAllocatedRaw, and the program rejects a root whose total exceeds what the emission schedule has released by that epoch. - Recompute
rewardsfrom the published Goon Power:reward = pool × gp ÷ max(total GP, floor), rounded down.
The prefix bytes stop an inner node from being passed off as a leaf, and the domain tag stops a leaf from being replayed against any other program.