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:

bash
solpipe version

Upgrade via Homebrew:

bash
brew upgrade noncepad/homebrew-tap/noncepad-solpipe

For Linux / Docker, recreate your container with the new image.

macOS (Homebrew)

bash
brew install noncepad/homebrew-tap/noncepad-solpipe

Linux / Docker

bash
docker build https://noncepad.com/dev/nightly.Dockerfile

2 · Environment setup

bash
mkdir catscope-run
cd catscope-run
mkdir jar proxy

Start Tor

brew update && brew upgrade tor 2>/dev/null || brew install tor
brew services start tor
export TOR=tcp://127.0.0.1:9050

3 · 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:

bash
export MY_WALLET=<keypair>
safejar jar init $OWNER --fee-payer=$MY_WALLET

Note

Record your jar ID from the output. To retrieve it later:
bash
safejar jar-id <owner-keypair>

4 · Run a proxy

bash
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

bash
export AUTHORIZER=$(solana-keygen pubkey authorizer.json)
safejar transfer-sol $MY_WALLET $AUTHORIZER 0.03 --fee-payer=$MY_WALLET

Start the proxy

bash
solpipe bidder proxy proxy.json --fee-payer=authorizer.json

Back this up

Back up the 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

bash
cd catscope-run/jar
solpipe bidder propose-rule-set 6VQk8GA84p7zZSyL8XtX6oVd3Vp4EJ5hoUenKoC3fHSf

Initialize delegation

bash
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_WALLET

What 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

bash
../proxy
solpipe bidder listen "$RULE_SET" 6VQk8GA84p7zZSyL8XtX6oVd3Vp4EJ5hoUenKoC3fHSf

6 · Build the bot image

Your bot ships as a WebAssembly module. Clone the reference repo:

bash
git clone https://github.com/noncepad/catscope-rust-bot
cd catscope-rust-bot

Pick 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

bash
rustup target add wasm32-wasip2
cargo build --target wasm32-wasip2 --release

export BOT_IMAGE=$(pwd)/target/wasm32-wasip2/release/catscope_rust_bot.wasm

7 · Run the optimizer

bash
git clone https://github.com/noncepad/catscope-optimizer
cd catscope-optimizer
go build -o ./optimizer ./cmd

The 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:

bash
./optimizer run $FEE_PAYER -v

That's it — your bot is running inside a Solana validator. For tuning the strategy, see Bot Design. For fleet coordination, see Optimizer Design.