Test results
Four layers are tested: the Robinhood Chain contracts on a fork of the real chain, the Solana transactions by simulation on live mainnet state, the engine and the keeper's logic in node, and the whole launch pipeline in dry run. Some contract tests cover the vault's keeper-only trading functions, which Pivot does not use in a launch.
Robinhood Chain contracts on a mainnet fork
12 tests, all passing, against the real Pons V2 contracts. Run forge test in contracts/.
| Test | What it proves |
|---|---|
| Keeper launches and wires the vault | One call launches the coin on Pons, creates the vault, funds it, and the coin opens at 1.68 ETH of virtual quote |
| Only the keeper launches, inputs are checked | Fee above 10 %, share above 100 %, a deposit below the Pons fee, a caller that is not the keeper: all revert |
| Keeper buy matches the curve maths | The tokens received match the constant-product formula within 0.3 % |
| Keeper sell returns ETH and cash | Half the tokens return a bit over half the ETH, as a convex curve should, and the proceeds are added to the vault's cash |
| Keeper cannot spend more than the cash | A buy above the maker cash reverts |
| Only the keeper can trade | buy, sell, sweep and retire revert for anyone else |
| Sweep only goes to the pool | ETH and tokens reach the pool address and nowhere else |
| The pool can rescue the funds without the keeper | With the keeper key out of the picture, the pool address sweeps all the cash and inventory to itself, a stranger still cannot, and the pool cannot trade |
| Fees split between creator and pool | After 2 ETH of trades at a 3 % creator fee and a 50 % payout share: 0.037 ETH to the creator's address, 0.037 ETH to the pool |
| Without a creator address all fees go to the pool | The pool receives all of it |
| Retire after graduation | Cannot retire early, retire after a 5 ETH buy sends the cash and inventory to the pool, buy then reverts |
| Initialize twice | Reverts, only the launcher can initialize a vault |
Keeper path on a fork
node keeper/test-rh-fork.mjs runs the keeper's own Robinhood code against an anvil fork:
- launch through the launcher with a 1 ETH vault,
vault.buy(0.4 ETH)returned 189,189,189 tokens and the engine predicted 189,189,189,vault.sellof half returned 0.2121 ETH and the engine predicted 0.2121,- the engine's decision on the resulting pair,
vault.sweepreached the pool address.
Solana transactions on live state
node keeper/check-solana.mjs reads a live pump.fun curve and simulates, with signatures disabled and nothing sent:
- a buy of 0.5 SOL on the live curve,
- a sell by a real holder of that coin,
- a
create_v2for a brand new mint, - a
create_v2followed bycreate_fee_sharing_configin one transaction, so the sharing config is created for a coin that exists only inside the simulation.
All four simulate without error. The script also checks that the curve is a constant product on the initial invariant and that the supply is one billion.
The whole pipeline in dry run
node keeper/launch.mjs keeper/sample-launch.json against an anvil fork and live Solana state: the Pons launch is simulated by the real launcher, the pump.fun creation is simulated on mainnet, the fee sharing is planned and the coin is registered, in the order Pons, pump.fun, fee sharing, register.
Engine, keeper and pipeline in node
46 tests, all passing. Run npm test.
- Curves, fees and graduation points match the on-chain constants.
- The pipeline runs in the order Pons, pump.fun, fee sharing, register.
- A failed Pons launch refunds in full and runs nothing else. A failed pump.fun creation leaves the coin on Pons and refunds minus costs.
- A transient failure is retried. After a crash the pipeline resumes and never repeats a finished step. Overlapping passes never send a step twice.
- A deposit below the amount, or from another wallet, does not start a launch. A request without a deposit expires.
- The rate is the median of the sources and a source that disagrees raises a flag.
- The API validates parameters, quotes a deposit, refuses to quote when the rate sources disagree, applies rate limits, and moves a request to done once a deposit arrives.
- The metadata upload posts the image and fails loudly on a bad answer.
- A public request cannot ask for an alignment buy, maker cash or a different pump.fun fee share.
- A browser run of the launch page with mocked Solana and Robinhood wallets and a local keeper: logo bytes reach the uploader, the Solana wallet is asked for the right transfer with the memo, the page follows the steps to "is live on both chains".
What the tests do not cover
- A live run with real funds on either chain.
- The keeper through a long outage or an RPC failure.
update_fee_shares_v2on a new coin.- An independent audit. See status.