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. Six steps: install binaries, set up your environment, create a safe wallet, run a proxy, connect to the market, build the bot, and launch the optimizer.
1 · Install binaries
You need two CLIs: solpipe (proxy + bidder) and safejar (safe wallet).
Latest version: 0.4.962▶
Check your current version:
solpipe versionUpgrade via Homebrew:
brew upgrade noncepad/homebrew-tap/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.Dockerfile2 · Environment setup
mkdir catscope-run
cd catscope-run
mkdir jar proxyStart Tor
brew update && brew upgrade tor 2>/dev/null || brew install tor
brew services start tor
export TOR=tcp://127.0.0.1:90503 · Create a safe wallet
A safe wallet (a jar) controls how much your bot can spend and under what conditions.
Set OWNER to your keypair. We recommend using a hardware wallet or secure key management solution:
cd jar
export OWNER=<keypair>Set the wallet that will pay transaction fees, then initialize the jar. We recommend using a different keypair for the fee-payer than the owner:
export MY_WALLET=<keypair>
safejar jar init $OWNER --fee-payer=$MY_WALLETNote
safejar jar-id <owner-keypair>4 · Run a proxy
cd ../proxy
export JAR_ID=<jar-id>
# Initialize proxy configuration
solpipe bidder init $JAR_ID $JAR_ID .This generates authorizer.json and proxy.jsonin your working directory.
Fund the authorizer
export AUTHORIZER=$(solana-keygen pubkey authorizer.json)
safejar transfer-sol $MY_WALLET $AUTHORIZER 0.03 --fee-payer=$MY_WALLETStart the proxy
solpipe bidder proxy proxy.json --fee-payer=authorizer.jsonBack this up
market.db file generated in this directory. It contains your bidder state and is not recoverable if lost. For production, run the proxy as a systemd service.5 · Connect to the market
Leave the proxy running. In a new terminal, cd into catscope-run/jar.
Propose a rule set
cd catscope-run/jar
solpipe bidder propose-rule-set 6VQk8GA84p7zZSyL8XtX6oVd3Vp4EJ5hoUenKoC3fHSfInitialize delegation
export OWNER=<owner-keypair> # same keypair you used to create the jar
export RULE_SET=<proposed-rule-set>
echo $RULE_SET > rule.set # save it for later
safejar delegation init $OWNER 1 --rule="$RULE_SET" --fee-payer=$MY_WALLETWhat is max-tokens?
The maximum number of tokens this delegation permits the rule set to spend. The rule set cannot authorize spending beyond this limit.
Listen on the market
../proxy
solpipe bidder listen "$RULE_SET" 6VQk8GA84p7zZSyL8XtX6oVd3Vp4EJ5hoUenKoC3fHSf6 · Build the bot image
Your bot ships as a WebAssembly module. Clone the reference repo:
git clone https://github.com/noncepad/catscope-rust-bot
cd catscope-rust-botPick which bot to run in src/lib.rs. The default is BouncerV1. See Bot Design for how to wire in your own strategy.
Compile to WASM
rustup target add wasm32-wasip2
cargo build --target wasm32-wasip2 --release
export BOT_IMAGE=$(pwd)/target/wasm32-wasip2/release/catscope_rust_bot.wasm7 · Run the optimizer
git clone https://github.com/noncepad/catscope-optimizer
cd catscope-optimizer
go build -o ./optimizer ./cmdThe optimizer needs a fee-payer keypair to submit transactions. Generate or provide one securely — do not reuse a key that holds significant funds. Set FEE_PAYER to its path, then launch:
./optimizer run $FEE_PAYER -vThat's it — your bot is running inside a Solana validator. For tuning the strategy, see Bot Design. For fleet coordination, see Optimizer Design.