The contract in numbers — right now
Why the contract holds most of the supply
Because that's how the model works. Node rewards exist first as entitlements (Merkle tree leaves), and the tokens backing them physically sit in the contract until their owner claims them. The contract balance is not a team treasury — it is collateral for other people's not-yet-claimed rewards, plus user deposits and recycled network spending.
You don't have to take our word for it — compare pool balance with outstanding claims above. Solvency is enforced by the contract itself: after every mint it checks that balanceOf(pool) ≥ entitlement − claimed, and any claim exceeding the pool balance is rejected on-chain.
What nobody can do — including us
No premine
The constructor mints nothing. Supply started at zero; every GALU in existence came from the daily reward emission.
Mint goes only into the pool
The only mint in the code is _mint(address(this)) — fresh tokens can only land in the contract. The minter physically cannot mint to its own (or any other) address.
40M cap — immutable
Hard cap via ERC20Capped (OpenZeppelin), declared constant. There is no function that can change it.
Emission throttle
Max 40,000 GALU per epoch and at least 10 h between mints — constants in the code. Even a stolen minter key cannot emit more.
Immutable code
This is not a proxy — the contract has no upgrade path. The rules you see in the source are final.
The only outflow: claim
Tokens leave the pool only via claim with a Merkle proof, to the address the entitlement belongs to. A "withdraw the pool" function does not exist.
Who can do what — exactly
mintEpoch — settle the daily epoch: mint into the pool (within limits), burn from the pool, set the new Merkle root.claim (with a Merkle proof), deposit (your own GALU to spend in the network), fundPool (top up the pool), ERC-20 transfers, burning your own tokens.