- 2026-08-29SHIPPED
The implementation repository, and the plan for all three pieces
Indexer, site and program, scoped as five phases. Nothing in the build waits on pump.
- 2026-08-30SHIPPED
Phase 3 -- the evidence walk, and what it reconciles
Fee inflows reconciled per destination, SPL burn and boost decoders, initial supply derived from the coin's own CreateEvent, and the atomicity check that holds a swap and its burn to one transaction. Figures are published through one accessor, so a number with no passing check behind it cannot reach a page.
- 2026-08-31SHIPPED
Phase 3, continued -- the public surface
The coin page, its raw JSON record, and the checks list that names every check that passed, failed, or was never run. Built deliberately ahead of the deploy gate rather than behind it.
- 2026-09-02SHIPPED
/verify takes a pasted contract address, with no JavaScript
Any pump.fun coin, no wallet and no signup. The chain is read while the reader waits.
- 2026-09-05SHIPPED
The coin index, and enrollment read from the chain
Whether a coin is enrolled is read from its pump fee-sharing config rather than asserted, on every coin page and in the index.
- 2026-09-11SHIPPED
/dilution -- what issuance costs a reader's own bag
The one page here that argues rather than reports. Two measured figures and arithmetic a reader can redo. No price anywhere in it, deliberately.
- 2026-09-12DEVNET
Phase 4 -- the program is written, and on devnet
Four instructions: init_charlie_pool, init_route, set_route, distribute. The guarantee is the absence of code -- nothing debits a coin's collector except distribute, and no instruction anywhere sends to an address its caller supplied. Every destination is re-derived from the mint or read from the coin's own route account. 13 tests pass. Deployed to DEVNET at the id below; mainnet gets its own keypair and is not this.
GFA3nG9geMhpPXaExVLGYBtj6aJX7S125dLzv4EcXGiGdevnet program id - 2026-09-12DEVNET
The first devnet run of distribute failed, and why
A system-program transfer CPI cannot debit the collector, because the collector is owned by this program and the runtime refuses to let the system program move lamports out of an account it does not own. The first devnet run returned ExternalAccountLamportSpend. A program moves lamports out of an account it owns by mutating the balances directly, with the runtime checking the sum is conserved when the instruction returns -- which also removes the CPI from the guarantee, so there is no inner instruction and no signer seeds handed to another program for a reader to follow. 13 tests pass, including a cross-check that the PDAs this program derives match the ones the Python driver derives.
- 2026-09-12DEVNET
The $CHARLIE flywheel, run on a chain
A separate splitter program, deployed to devnet, answering a hypothetical: $CHARLIE's own sharing config is admin_revoked and its one irreversible update is spent, so no key its deployer or Charlie holds can point its fees anywhere (pump's own admin_cto still could). If that destination COULD be changed to a splitter, would the mechanism hold? Three rounds ran. 2,400,000 lamports of simulated fee split 1,349,414 to the incinerator, 674,707 to the buyback vault, 674,707 to ops, and 3 lamports left behind rather than swept to a leg. The fee ARRIVING is simulated, because pump does not exist on devnet; the split of it is a landed transaction every time. One round was cranked by a wallet that is not ops, which is what permissionless means here. The buyback leg is funded and not spent -- burning needs a live pool devnet does not have -- and /charlie-flywheel says so rather than implying tokens were burned.
2CfShCuyuLw1935ihB5BjzaymdZsmPLNtUFAAqUeMHBSdevnet splitter program id - 2026-09-12DEVNET
A keeper that runs unattended
The split is not much of a mechanism if a person has to run it. The keeper calls split on an hourly schedule so fees do not sit, and writes every invocation to state/flywheel/keeper.jsonl with its signature and outcome -- including the idle ones, where there was nothing above the rent reserve and it did nothing. A log that only recorded the interesting runs would not be evidence of a schedule.
- 2026-09-18SHIPPED
Mainnet operations: the launch and enrolment consoles
/launch and /enroll went live and enrolment opened. A coin enrols by spending pump's one sharing-config change on the protocol's destinations, so the SOL burn leg pays Solana's incinerator directly and the protocol's share reaches its collection wallet -- both without a program of ours, which is why this entry is not phase 5. The BURN leg runs from that wallet: one transaction that buys $CHARLIE and burns it, with the swap and the burn in the same transaction, recorded in protocol-burns.json with the signature behind every unit and a statement of whether the total is exact or a floor.
- no dateGATED
Phase 5 -- mainnet deploy, and revoking upgrade authority
Held, not blocked. The cost is measured and published in the 2026-09-13 entry above; what remains is the deploy order, which is deliberate. The absence-of-code guarantee only means anything once the program is immutable, and revoking upgrade authority is a one-way door that freezes every bug permanently. Until this happens there is no mainnet program id, so no mainnet address derives as a SOL-burn or token-burn vault, and the indexer holds PROGRAM_ID = None rather than guessing.
- no dateGATED
/enroll, as a live path
The page exists and describes the mechanism. Enrolling a coin through the program is behind the same phase 5 gate.