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
Holds the rules. Verify the deployed bytecode against the source.
Global state account
BFM88ZRxmTWwgp8uLF7jwMvoheRPobiGm2kzq43wxyjT
Roles, emission schedule, the active and pending roots.
Vault authority (PDA)
B3Zz1LyUaKthn1uMbbwcspbnQsWZkVQfLPcft7F6bjfW
No private key exists for it. Only the program can sign for the vault.
Goon Vault token account
created when the mint is bound
Where the 500M mining reserve sits.
GOON token address (mainnet)
Wn46fj2vUJwJtcu877TWX5XvXTmrEhvJfSSUM9vgoon
Published ahead of launch. Full token integration is on the roadmap and not yet fully live on mainnet.
GOON mint bound to the program
none yet
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 equal cumulativeAllocatedRaw, and the program rejects a root whose total exceeds what the emission schedule has released by that epoch.
  • Recompute rewards from 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.