Tutorial · Try Catscope
Quickstart.
Get the tooling, pull the bot image, and run a bot inside a Solana validator. Should take under an hour.
This guide walks you from a clean machine to a running bot: install the binaries, run the setup wizard, start the proxy, build the bot, and launch the optimizer.
1 · Install binaries
Prerequisites▶
- Solana CLI — for
solana-keygen(step 2) git- Rust (rustup) — to build the bot (step 5)
- Go 1.26 or newer — to build the optimizer (step 6)
- A keypair file holding ~0.1 SOL (step 2)
You need two CLIs: solpipe (proxy + bidder) and safejar (safe wallet).
Latest version: 0.5.1129▶
Check your current version:
solpipe versionUpgrade via Homebrew:
brew upgrade noncepad-solpipeFor Linux / Docker, recreate your container with the new image.
macOS (Homebrew)
brew install noncepad/homebrew-tap/noncepad-solpipeLinux / Docker
docker build https://noncepad.com/dev/nightly.DockerfileDirect downloads (unsigned)▶
Prefer Homebrew: its packages are signed. If you need a standalone binary:
https://catscope.io/downloads/debian/bin/amd64/solpipe
https://catscope.io/downloads/debian/bin/amd64/safejar
https://catscope.io/downloads/macos/bin/intel/solpipe
https://catscope.io/downloads/macos/bin/intel/safejar
https://catscope.io/downloads/macos/bin/arm/solpipe
https://catscope.io/downloads/macos/bin/arm/safejar2 · Environment setup
Create the directory you'll work in:
mkdir catscope-runcd catscope-runYou need two things: a wallet file that pays for setup, and an address that recovered funds are swept back to. Using your wallet's own address as SWEEP is the simplest choice; use a colder address if you have one.
export MY_WALLET=$(pwd)/wallet.json # keypair FILE that pays for setup (needs ~0.1 SOL)export NETWORK=mainnet # mainnet, testnet, devnet, or localnetexport SWEEP=$(solana-keygen pubkey $MY_WALLET) # ADDRESS that recovered funds go back to3 · Run the setup wizard
One command sets up everything your bidder needs on the Catscope Read, Write, and Bot market places, in a single transaction:
solpipe -v bidder wizard --fee-payer=$MY_WALLET --out=. $SWEEP- creates your safe wallet (a jar)
- creates and funds the proxy's authorizer key
- creates a bidder account on each market
- creates and approves a delegation on each market: the rules that let the proxy spend from your jar
When it finishes you'll see wizard complete. Note the delegation=… ID logged for each market; you'll need it later to fund the jar for paid bids. The wizard writes four files:
owner.json— the jar owner keyproxy/authorizer.json— the proxy's fee-paying keyproxy/proxy.json— the proxy configurationproxy/market.db— your bidder state
Back these up
owner.json controls every token in your jar, and proxy/market.db holds your bidder state. Neither can be recovered if lost. Store copies somewhere safe before you fund the jar.Safe to rerun▶
If the wizard fails (for example, the wallet runs out of SOL), top up and run the same command again in the same directory. It reuses the keys it already created and skips anything that already exists on chain.
4 · Start the proxy
From the same directory, start the proxy. For production, run it as a systemd service.
solpipe -v bidder proxy --fee-payer=./proxy/authorizer.json --config=./proxy/proxy.jsonProxy won't start?▶
If you see bind: address already in use and no proxy is running, a previous proxy left its socket behind. Remove it with rm ~/.solpipe.bidder.proxy.sock and start again.
Leave the proxy running: it holds your connection to the markets, and your bot reaches them through it. Open a second terminal in the same directory for the next steps, and re-run the exports from step 2 there.
5 · Get the bot source
Your bot ships as a WebAssembly module, built from the reference repo. From your working directory, clone it and add the WebAssembly target. You don't need to compile it yourself: the optimizer builds it in the next step.
git clone https://github.com/noncepad/catscope-rust-botrustup target add wasm32-wasip2See Bot Design for how to wire in your own strategy.
6 · Run your first bot
The optimizer is the program on your machine that drives your bot. When you start it, it:
- compiles the bot from
catscope-rust-bot - asks your proxy (step 4) for a pipeline: a slot in a validator's Catscope runtime
- uploads the bot to that validator, where it runs next to live chain data
- shows what the bot reports back, live, in your terminal
Your first bot is marketwatchv1: it tracks live pool prices for SOL, JUP, JTO, BONK, WIF and RAY and computes their volatility and correlation, which the optimizer shows as a live dashboard in your terminal. It has no wallet and never trades, so it's a safe way to see the whole pipeline working end to end.
Build the optimizer, still in your working directory:
git clone https://github.com/noncepad/optimizercd optimizer && go build -o ./optimizer ./cmdFrom inside optimizer, launch the bot with your wallet from step 2 (not proxy/authorizer.json, which belongs to the proxy). The wallet only pays to allocate and upload the bot; logs go to run.log so the dashboard has the terminal:
REPO=$PWD/../catscope-rust-bot ./optimizer market-watch $MY_WALLET 2>run.log