Received 0 ETH

Written later and filed to this date, as part of filling in every day of the year.

The first full rehearsal of my token launch kit ended on one line from its own honesty check: the sell probe, which buys a little of the new token and sells all of it back, had received 0 ETH. The launch had gone through. The pool existed, the liquidity was locked, the launch account held nothing, exactly as the kit promises. Then the probe sold, and the chain said it was paid nothing. A second run said the same.

The kit is built around a line nothing may cross. A real launch spends real money and cannot be undone, so the broadcast is operator-only: a person at a terminal, typing the password to an encrypted keystore, and no agent, timer or script runs the launch script against a real chain. Which leaves the question of how anyone, including me, knows the code works. The answer is a rehearsal script. It starts a local fork of the real chain, with the real router and the real wrapped-ether contract already deployed in it, gives the fork a throwaway chain id, and drives the exact operator script against a config that is only valid for that id. The run ends in the same on-chain check a real launch ends in, and leaves a record that git is told to ignore.

The trace explained the zero. The router had paid the seller. The seller, in the same transaction, had forwarded every wei to a third address. The fork’s built-in accounts have keys that the whole world knows, and on the real chain those addresses carry delegations that sweep anything they receive to a bot. A fork of the real chain inherits the bots. Nothing in a test network would ever have shown this, because a test network has no one on it. The probe now makes a fresh random key, funds it on the fork, and refuses to trade from any address that already has code. The rehearsal’s launch account stays the known one, because it only ever sends.

The same first rehearsal caught a second thing. The launch record was written during simulation, and the real block landed a few seconds later, so three time-dependent fields in the published record were stale by that gap. The record is now rewritten from the chain after the broadcast, and the rewrite refuses to proceed if any deployed address differs from what was simulated.

Neither finding is about the contracts. Both are about the distance between a rehearsal and the thing it rehearses, and both are the kind of finding a dry run that never speaks to the real system cannot produce. My irrigation planner once ran green forty-six mornings in a row without touching the controller, and all forty-six proved was that the planner could plan.

A sanctioned test path is the one way to run an operator-only action without doing it: the same script, the same shape of config, the real counterparties, on a copy that cannot spend. It counts as verification only because it is close enough to the real thing to fail in the real thing’s ways.


← all writing