Getting Started
Install SolanaMevBot 2.0.0 and start automatic onchain arbitrage
SolanaMevBot 2.0.0 selects markets automatically and uses the V10 onchain program to choose and execute trades. You configure a wallet, a read RPC, market filters, and transaction senders.
1. Prepare your machine and wallet
Use a Linux machine with a private Solana RPC endpoint. The bot uses that RPC to read accounts and fetch blockhashes. A sending-only endpoint belongs in [[senders]], not bot.rpc_url.
Keep native SOL in the wallet for transaction fees, tips, and token account creation. For trading capital, either enable bot.flashloan to use the executor's settlement loan vault, or fund the wallet with WSOL for [auto.sol] and USDC for [auto.usdc]. Creating a WSOL account does not wrap your SOL automatically. See Wrap/Unwrap SOL if you are trading with your own WSOL.
2. Download 2.0.0
The archive is available on the 2.0.0 release page.
sudo apt update
sudo apt install wget unzip
mkdir -p smb-2.0.0
cd smb-2.0.0
wget https://github.com/Cetipoo/solana-mev-bot/releases/download/2.0.0/smb-onchain-2.0.0.zip
unzip smb-onchain-2.0.0.zip
chmod +x smb-onchain3. Create config.toml
This configuration runs SOL and USDC settlement with RPC and Jito senders. Replace the RPC URLs and Jito UUID with your own values. encrypted_key_path points to the bot key file in the working directory; use your file’s path if it is stored elsewhere.
[bot]
rpc_url = "https://YOUR_RPC_ENDPOINT"
flashloan = true
encrypted_key_path = "./ENCRYPTED_PRIVATE_KEY"
[auto.sol]
min_total_profit = 1_000_000_000 # 1 SOL
min_tx_count = 1
lookback_secs = 300
max_routes = 1
process_delay = 400
[auto.usdc]
min_total_profit = 100_000_000 # 100 USDC
min_tx_count = 1
lookback_secs = 300
max_routes = 1
process_delay = 400
[[senders]]
name = "rpc"
type = "json_rpc"
urls = ["https://YOUR_RPC_ENDPOINT"]
timeout_ms = 1500
request_params = { maxRetries = 10 }
compute_unit_price = { strategy = "Random", from = 5000, to = 20000, count = 1 }
[[senders]]
name = "jito"
type = "jito"
urls = [
"https://ny.mainnet.block-engine.jito.wtf/api/v1",
"https://tokyo.mainnet.block-engine.jito.wtf/api/v1",
"https://slc.mainnet.block-engine.jito.wtf/api/v1",
"https://amsterdam.mainnet.block-engine.jito.wtf/api/v1",
"https://frankfurt.mainnet.block-engine.jito.wtf/api/v1",
"https://singapore.mainnet.block-engine.jito.wtf/api/v1",
"https://london.mainnet.block-engine.jito.wtf/api/v1",
]
sending_strategy = "OneByOne"
uuid = "YOUR_JITO_UUID"
use_separate_tip_account = false
no_failure_mode = true
tip_amount = { strategy = "ExponentialRandom", from = 1000, to = 5000, count = 1 }
[log]
enable_sending_log_summary = true
summary_interval_seconds = 5This example selects routes with at least 1 SOL or 100 USDC of observed profit over the last five minutes. Each settlement follows one route with a 400 ms delay between send passes.
Sender rate limits are omitted, so the bot uses 20 submissions per second for RPC and one for Jito, shared across both settlement profiles. Jito’s OneByOne strategy rotates the starting region for each submission. It tries the next region on a connection failure, timeout, or HTTP server error; an accepted or rejected submission stops there. Replace YOUR_JITO_UUID with your UUID, or remove the uuid line if you do not use one.
The Jito sender enables no_failure_mode: a transaction may succeed without a trade and still pay its tip and network fees. The RPC sender retains the default no_failure_mode = false.
min_total_profit filters the profit the feed has already observed. It does not promise that a selected route will still be profitable when your transaction executes.
Set up a new wallet key
If you already have an ENCRYPTED_PRIVATE_KEY from the bot, use its path as shown above and omit private_key.
For a new key, omit encrypted_key_path and temporarily put private_key = "YOUR_PRIVATE_KEY" under [bot]. The bot accepts a base58 private key or a JSON byte array inside the string. Run ./smb-onchain run config.toml once. It writes ENCRYPTED_PRIVATE_KEY in the working directory and exits with a request to remove the plaintext key.
After the log confirms that the file was saved, remove private_key, set encrypted_key_path = "./ENCRYPTED_PRIVATE_KEY", and run again. Treat the generated file as a private key and keep it private.
4. Run the bot
./smb-onchain run config.tomlStartup logs show the wallet address, settlement token accounts, and the observed-arbitrage feed connection. Once matching routes arrive, the bot starts processing them. A connected feed with no matching routes can remain idle; adjust the filters if you want a broader selection.
The bot creates missing WSOL and USDC token accounts at startup. Flashloans supply trading capital, but the wallet still needs native SOL for fees, tips, and account creation.
Moving from 1.x
Create a fresh 2.0.0 config. Old sections such as [rpc], [wallet], [spam], [jito], [flashloan], [routing], and [sending_venders] are no longer accepted. The bot also manages transaction sizing and compute limits; there are no manual market lists or address lookup table settings to copy over.
See Bot Configurations for every current field, Config Examples for SOL and USDC setups, and Sending Vendor Examples to add a relay or Jito.
For help, join the SolanaMevBot Discord.