The keeper

The keeper is a Node service in keeper/. It takes launch requests and launches coins on both chains. It talks to Solana through @solana/web3.js and to Robinhood Chain through viem.

Modules

FileWhat it does
pump.mjspump.fun instructions: create_v2, fee sharing, with simulation (buy and sell exist but are not used in a launch)
rh.mjsRobinhood Chain: the launcher and vault ABIs, curve reads
fx.mjsThe ETH/SOL rate from Coinbase, Binance and Jupiter, the median, and a flag when they disagree
pipeline.mjsThe launch as a saved state machine, with retries and refunds
soldeposit.mjsVerifies the creator's SOL deposit on Solana: signer, recipient, memo reference, success, amount
metadata.mjsUploads the image and metadata to pump.fun's IPFS endpoint
adapters.mjsThe real chain calls behind each pipeline step, dry or live
server.mjsThe HTTP API for the launch page and the loops that watch deposits and run launches
index.mjsDry-run reads of both chains

The API

RouteWhat it does
GET /api/configDeposit address, image limits
POST /api/quoteThe deposit for a set of options, itemised
POST /api/metadataUploads the logo (base64, 1.5 MB at most) and the metadata to IPFS, returns the metadata URI
POST /api/requestsValidates the parameters, reads the rate, returns an id, the deposit address, the amount in SOL and the expiry
POST /api/requests/:id/depositTakes the transaction signature of the SOL deposit, reads it on Solana and starts the launch if it is valid
GET /api/requests/:idStatus and public log of a launch
GET /api/healthAlive

Commands

CommandWhat it does
node keeper/index.mjs newestDry run on the newest live pump.fun coin and the newest Pons coin: reads both curves and the rate. Sends nothing
node keeper/launch.mjs params.jsonDry run of a whole launch through the pipeline: simulates the Pons launch and the pump.fun creation, plans the fee sharing
node keeper/launch.mjs params.json --liveThe real launch, with keys
node keeper/server.mjsThe API and the background loops, dry by default; --live for real launches
node keeper/check-solana.mjsSimulates a buy, a sell, a create_v2 and a create_v2 with the fee sharing config against mainnet state
node keeper/test-rh-fork.mjsIntegration test of the Robinhood path on an anvil fork

Keys and configuration

VariableUsed for
KEEPER_SOL_SECRETThe Solana keeper wallet: deposit address, creator of record on pump.fun
KEEPER_EVM_KEYThe Robinhood Chain keeper address, the only one the contracts accept
LAUNCHERThe address of PivotLauncher once it is deployed
SOLANA_RPC, RH_RPCRPC endpoints, public ones by default
SITE_ORIGIN, PORTCORS origin and port of the API

Without the keys the keeper stays in dry-run mode and can only read and simulate.

What the dry runs prove

What they do not prove

Public limits