The Boundless Prover Node is a computational proving system that participates in the Boundless decentralized proving market. Provers stake USDC bid on computational tasks generate zero-knowledge proofs using GPU acceleration and earn rewards for successful proof generation.
-
Requester posts ZKP request on Boundless (say 10M cycle proof in $5-$10 and 30 min is deadline)
-
All provers (say Prover 1-5) see request simultaneously
-
Prover 1 locks order at $5 he has to fulfill in 10 mins (LockAndFulfill order)
-
Provers 2-5 skip locked order awaiting higher price
- If Prover 1 attempts proof
SuccessSubmits in 10 mins, gets paid, no slashing - If Failure: Lock expires, Prover 1 slashed
- If Prover 1 attempts proof
-
Post-lock expiry: Order becomes FulfillAfterLockExpire; secondary provers (2-5) attempt proof in remaining 20 mins.
-
First secondary prover to submit wins payment; others earn nothing, no slashing.
- In all this chaos Boundless has mentioned rewards for primary provers - but i did not come across a single post which says Secondary Provers will be rewarded too - maybe in future they may announce
- Almost all one click nodes (mintair, easy nodes etc) are not able to lock orders even if they do are max secondary orders
- CPU - 16 threads, reasonable single core boost performance (>3Ghz)
- Memory - 32 GB
- Disk - 100 GB NVME/SSD
- GPU
- Minimum: one 8GB vRAM GPU
- Recommended to be competetive: 10x GPU with min 8GB vRAM
- Recomended GPU models are 4090, 5090 and L4
- Supported: Ubuntu 20.04/22.04
- Not supports : Ubuntu 24.04
- Have minimum: $2-5 ETH on Base
- Have minimum: $5 USDC on Base
- note: use burner wallet
-
For Local Pc Users: DockerDesktop
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install -y docker-ce && sudo systemctl enable --now docker
sudo usermod -aG docker $USER && newgrp docker
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose
- Verify installation
docker --version && docker-compose --version
sudo apt update && sudo apt upgrade -y
sudo apt install curl iptables build-essential git wget lz4 jq make gcc postgresql-client nano automake autoconf tmux htop nvme-cli libgbm1 pkg-config libssl-dev tar clang bsdmainutils ncdu unzip libleveldb-dev libclang-dev ninja-build -y
git clone https://github.com/boundless-xyz/boundless
cd boundless && git checkout v0.13.0 && git submodule update --init
Boundless packages, GPU drivers for provers, Docker with NVIDIA support, Rust, CUDA Toolkit
sudo ./scripts/setup.sh
sudo -v
curl -sL https://raw.githubusercontent.com/morsyxbt/rzup-setup/main/setup.sh | bash
cargo install --locked --git https://github.com/risc0/risc0 bento-client --branch release-2.3 --bin bento_cli
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
cargo install --locked boundless-cli
export PATH=$PATH:/root/.cargo/bin
source ~/.bashrc
bento_cli --version
boundless -h
cargo install just
just --version
cd boundless
sudo curl -o $HOME/boundless/.env https://raw.githubusercontent.com/morsyxbt/boundless-env/main/.env
sudo nano $HOME/boundless/.env
Replace
Your_ENV_Wallet_PVT_Key_Without_0xwith your wallet Pvt key without 0x
Replace
Your_RPC_URLwith your Base Mainnet RPC Endpoint don't remove " "
source .env
-
To apply changes You will need to run this command every time you start the prover
sudo nano compose.yml
IMP Chnages Needed
-
Scroll down to :
x-exec-agent-common: &exec-agent-commonsectionmem_limit:: write how much ram you can allocate - tip allocate half of what your pc has
cpus:: write number of CPU cores you can allocate - tip allocate 50-70% of what you have
-
Scroll down to :
gpu_prove_agent0:- change
mem_limit:&cpus:same as above
- change
-
change Segment Size in
x-exec-agent-common: &exec-agent-commonaccording to yourVRAM- check below table :VRAM : Segment Size MAX
8GB : 19 16GB : 20 20GB : 21 40GB : 22- ctrl + o > Y > enter
- First copy
.env.broker-templateinto.env.broker
sudo cp .env.broker-template .env.broker
- Open and set
Segment Sizesame as above step :
sudo nano .env.broker
source .env.broker
note everytime you run prover/broker you will need to inject
deposit some
$USDCon Base main net in Boundless marketplcae for staking and for locking orders - tip do around $5
- Inject
.envfirst:
source .env
- Add boundless CLI into Path
source ~/.bashrc
- Deposit Usdc
boundless account deposit-stake STAKE_AMOUNT
remove STAKE_AMOUNT from above command and enter how much USDC you want to stake note: just write : 2 , 3 or 5 don't put any $ sign
- Verify Stake
boundless account stake-balance
sudo just bento
-
Your Docker should be running in background
-
may take upto 10 minutes
-
check logs
just bento logs
Benchmark our bento to know about
peak_prove_khz, which we will use in the broker configuration: This corresponds to the maximum number of cycles per second (in kHz) that your proving backend can operate
- Inject .env first:
source .env
- Benchmark
- visit : Order_Id
- Grab a fullfilled order id - but conditions :
order id should have : 10M-50M cycles order id should be : atleast 30minutes-1.5hours old if there's none availabe then you can grab : 100M cycles - check ss
boundless proving benchmark --request-ids {Order_ID}
Replace
{Order_ID)from the actual previous order id you got above
-
You will see
peak_prove_khz = xxx, the prover is estimated to handle ~xxx,xxx cycles per second (~xxx khz)write the number
xxxor whatever you get somewhere repeat this benchmark test atleast 3 times with different order id's to get the average number -
This was a test to get our average peak prove khz which we will use in Broker Configuration
-
Download my updated
Broker.tomlfile : But configure it manually according to your specs and resourcesall the configurations from here will decide whether you can lock orders and be competitive or not so read every detail properly from here - i have added tips accordingly, you can use them or modify them if you want
-
First Install
Broker.toml
cd boundless
sudo wget https://raw.githubusercontent.com/morsyxbt/boundless-env/main/broker.toml -O broker.toml
- Open
Broker.toml
sudo nano broker.toml
Now make changes according to your specs and resources :
-
defines the price you're bidding per million cycles (mcycle) when proving. This value helps determine the minimum price you're willing to accept for a job
-
Tip : Lowering this value allows your broker to bid more competitively
-
You can set it to something like "0.000000000000001" or even lower
-
specifies the token (e.g., usdc) used to calculate pricing for orders paid in staking tokens
-
Tip : Adjust this up or down depending on your strategy
-
Example : You can keep it like: 0.000001
- A list of requestor addresses that bypass the mcycle and input size limits
- I have already included four official
priority_requestor_addressesin this config
-
Represents your GPU's maximum proving speed measured in thousands of cycles per second (kHz)
-
How to set :
You alraedy tested it and got your
peak_prove_khzaverage above : Benchmarking Bento
- Now edit your
peak_prove_khzinbroker.tomlas per the average you got above
-
Controls the maximum maximum job size (in mcycles) you’ll accept
(1 mcycle= 1 million cycles)this helps avoid assigning jobs too large for your hardware -
Tip:
- If you're on a single GPU, keep it around
1000–2000*If you have multiple GPUs, set it higher, like 4000–500
- If you're on a single GPU, keep it around
change this according to your system - prover with limited resources should reduce this number otherwise you won't complete big orders
-
Minimum number of blocks before a job expires, below which the broker won’t attempt to lock the job
-
Example :
min_deadline = 300means your broker will only accept jobs that expire in more than 5 minutes -
Tip : If your setup is fast and reliable, consider lowering this to 200 to grab more jobs
-
Controls how many jobs your broker can prove simultaneously
-
If the number of running proofs reaches this cap the broker will pause before locking new ones
-
Tip : On single-GPU systems keep this at
2or less -
For multi-GPU setups, you can raise it
-
Minimum gas fee (in wei) used for priority lock-in transactions. Higher values help you outbid others and get your lock-in confirmed faster
-
Example :
lockin_priority_gas= 3000000000000 means 3000 Gwei (≈ 0.000003 ETH) -
Tip : Keep it between 2000–4000 Gwei for better on-chain competition
-
Here's a web to calculate it : GWEI_Calculator
stop
bentoto run the broker & applying config changes :
sudo just bento down
This prevents from an error which comes at building broker
sudo curl -L https://foundry.paradigm.xyz | bash -s -- --skip-confirm
echo 'export PATH="$HOME/.foundry/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
foundryup
forge --version
forge install Arachnid/solidity-stringutils
- Inject .env
source .env
- Run Prover
sudo just broker
Running a broker with
justcan also start theBentothrough docker compose
- Check logs
If Local Pc then check your Docker Desktop that all 11 containers are running
Check the
Brokercontainers Logs
- If cloud GPU :
docker ps
- Broker Logs
just broker logs
- Boom congrats : you completed Boundless Prover setup
-
Fullfilled Transaction Primary Prover :
0x8e3b6945 -
Lock Order Successfully :
0xb4206dd2 -
Complete Order As Secondry Prover :
0x2f13a90a
everything about primary/secondary provers is discussed in the beginning of guide make sure to read that also :
and reminding again : Boundless has mentioned rewards for primary provers - but i did not come across a single post which says Secondary Provers will be rewarded too - they may or may not announce in future
- Explorer: https://basescan.org/address/
This error pops due to env file not etting injected into broker/bento or docker compose file sets to use env in place of env.base
- Down broker/bento :
sudo just bento down
sudo just broker down
mv .env.base .env
source .env
sudo just bento
sudo just broker
- This should fix the error
- Move to boundless Directory :
cd boundless
-
start your docker desktop
-
Inject .env and .env.broker into broker :
source .env.broker
source .env
sudo just broker
- check your containers and logs
- done
Made with ❤️ by Morsyxbt
A note in the end :
This took a lot of hardwork analysing docs not only that - i had to checek almost 10+ other guides to see what's going wrong why aren't people being able to lock primary orders max guides were not even understandable for non-coding background people
shoutout to all those people that had put in the work even before me - they were a huge help with some time i will be adding more accurate configurations don't worry boundless is truly one of the tough nodes out there - you are competing against devs who have maybe 5-10x of resources so be glad if you will be able to lock orders against them you will learn a lot in this journey peace out

