📝Bot configurations

This is an example config.toml file.

[routing]
[[routing.mint_config_list]]
mint = "34HDZNbUkTyTrgYKy2ox43yp2f8PJ5hoM7xsrfNApump"
pump_pool_list = [
  "7USDHmdsFsJGsrvuYWvYHKejJBneCLVk8hdMWVvb7VqA",
]

# This is the Raydium V4 AMM Pool, not CPMM/CLMM
raydium_pool_list = []

# This is the Raydium CPMM
raydium_cp_pool_list = []

whirlpool_pool_list = []

meteora_dlmm_pool_list = [
  "7h93PJheNPgaVAztMqeFszzkaP1pEdsZyE4n6H9KRVE9",
  "3aRvsnLDyDevu9BvpiauGGQpwszXXqW6zLgxjMG57g2N",
  "CX2SFVBn6kAWm7utL3ccW3F6B9q9sHLmPTikPfPG9oSS",
]
lookup_table_accounts = [
  "AnrSWuNc4L4oj54W7g95YEaXfTS58FsSknZdynDqpUJd",
  "q52amtQzHcXs2PA3c4Xqv1LRRZCbFMzd4CGHu1tHdp1"
]
process_delay = 400

[rpc]
url = "xxx"

[spam]
enabled = true
sending_rpc_urls = [
  "RPC_URL_1",
  "RPC_URL_2"
]
compute_unit_price = { strategy = "Random", from = 100, to = 100, count = 1 }
max_retries = 10 # Optional
enable_simple_send = false # You should only set this to true if your sending rpc doesn't work with the default config.

[jito]
enabled = true
block_engine_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",
]
uuid = "" # Optional
ip_addresses = [] # Optional. You should only set this when you have multiple IPs. Support single IP or CIDR format like "192.168.1.0/24"

[jito.tip_config]
strategy = "Random" # Random/Linear/Exponential
from = 10000
to = 100000
count = 3 # This configs how many different tips to generate. All the tx will be send out together.

[kamino_flashloan]
enabled = true

[bot]
compute_unit_limit = 300_000 # Recommand at least 300_000 if you have dlmm, and at least 250_000 if not. Add 80000 more if you use kamino.
merge_mints = false # Send all the mints in the same tx

[wallet]
private_key = "xxx"

Routing

In routing, you define which mint(X), a raydium pool that is SOL/X, a meteora dlmm pool that is SOL/X. The bot's onchain program will check if there's a profitable route between the two onchain, and find the optimal trade size, and execute the trades if there's any.

Currently the bot only support one raydium pool and one meteora dlmm pool for each list, you can define multiple different ones for the same mint/raydium pool and different meteora dlmm pool. A later version will alow using multiple meteora dlmm pool together.

mint_config_list

You can define multiple mint and pools. The bot will send out a tx, wait for process_delay ms, then send again and repeat for every mint you define.

You can also define more than 1 meteora dlmm pool. If you use more than 2 you likely need to add an address lookup table for it as well, otherwise the tx will be too big.

[[routing.mint_config_list]]
mint = "34HDZNbUkTyTrgYKy2ox43yp2f8PJ5hoM7xsrfNApump"
pump_pool_list = [
  "7USDHmdsFsJGsrvuYWvYHKejJBneCLVk8hdMWVvb7VqA",
]
meteora_dlmm_pool_list = [
  "7h93PJheNPgaVAztMqeFszzkaP1pEdsZyE4n6H9KRVE9",
  "3aRvsnLDyDevu9BvpiauGGQpwszXXqW6zLgxjMG57g2N",
  "CX2SFVBn6kAWm7utL3ccW3F6B9q9sHLmPTikPfPG9oSS",
]
raydium_pool_list = []
raydium_cp_pool_list = []
whirlpool_pool_list = []
lookup_table_accounts = [
  "AnrSWuNc4L4oj54W7g95YEaXfTS58FsSknZdynDqpUJd",
  "q52amtQzHcXs2PA3c4Xqv1LRRZCbFMzd4CGHu1tHdp1"
]
process_delay = 400

Currently Pumpfun swap/Raydium AMM/Raydium CPMM/Meteora DLMM/Orca whirlpool are supported. You can define multiple ones in the same config as long as it can fit. You may need to add look up tables if you are using too many pools.

Arb between DLMM/DLMM, DLMM/Orca, Orca/Orca is not supported yet.

Define multiple mints

You can define multiple mints by simply copy the [[routing.mint_config_list]] config.

Example:

[[routing.mint_config_list]]
mint = "34HDZNbUkTyTrgYKy2ox43yp2f8PJ5hoM7xsrfNApump"
pump_pool_list = [
  "7USDHmdsFsJGsrvuYWvYHKejJBneCLVk8hdMWVvb7VqA",
]
meteora_dlmm_pool_list = [
  "7h93PJheNPgaVAztMqeFszzkaP1pEdsZyE4n6H9KRVE9",
]
lookup_table_accounts = []
process_delay = 400

[[routing.mint_config_list]]
mint = "7swLujtSwxcNxybT167ii9HXCfy5LZFxNwUEvsZgpump"
pump_pool_list = [
  "9iPVQkxUFiL4AQStRqPTcjN2KhZdbqZM7Lmk9vYzgnAT",
]
raydium_cp_pool_list = [
  "HXCjThojPP1f9uXdQYe7YdbKugT2PvVoTUyvapkErgBY",
]
lookup_table_accounts = []
process_delay = 400

RPC

You just need to put your rpc's url here. This is NOT the rpc you use to send transactions.

[rpc]
url = xxx

Spam

You can set the rpcs you use to send transactions. This can be the same as your reading rpc.

[spam]
enabled = true
sending_rpc_urls = [
  "RPC_URL_1",
  "RPC_URL_2"
]
compute_unit_price = { strategy = "Random", from = 100, to = 100, count = 1 }
max_retries = 10 # Optional
enable_simple_send = false # You should only set this to true if your sending rpc doesn't work with the default config.

Compute unit price

You need to config compute unit price when enable spam.

You can set from equals to to value and use any strategy to get a fixed tip amount for all your tx.

Note: the transaction generated from this will be send out together.

You can define it in two format. Define it under [spam] directly

[spam]
compute_unit_price = { strategy = "Random", from = 10000, to = 100000, count = 1 }

or define it in its own section

[spam.compute_unit_price]
strategy = "Random" # Random/Linear/Exponential
from = 10000
to = 100000
count = 3 # This configs how many different compute unit price to generate. All the tx will be send out together.

Jito

You can also enable sending through jito. Though the success rate of using jito is much lower due to the tip auction and how jito works, but the up side about it is you won't have any failed transactions.

Note: If you use multiple ip with jito, make sure you don't have ip rotation setup locally, instead you should use the bot's build in support for it. You can just set all the ips you want to use within the config, you can use either single ip or CIDR format like "192.168.1.0/24"

Note: The bot will send out tx through all the different urls one by one, instead of sending the same tx to all. This way you can have an effective 5/s rate limit with jito as this bot requires sending out a lot of tx.

[jito]
enabled = true
block_engine_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",
]
tip_amount = 100000
uuid = "" # Optional
ip_addresses = [] # Optional. You should only set this when you have multiple IPs. Support single IP or CIDR format like "192.168.1.0/24"

Tip config

You need to config tip when enable jito.

You can set from equals to to value and use any strategy to get a fixed tip amount for all your tx.

Note: the tx generated from this will be send out together. So make sure you have enough rate limit to handle it.

You can define it in two format. Define it under [jito] directly

[jito]
tip_config = { strategy = "Random", from = 10000, to = 100000, count = 1 }

or define it in its own section

[jito.tip_config]
strategy = "Random" # Random/Linear/Exponential
from = 10000
to = 100000
count = 3 # This configs how many different tips to generate. All the tx will be send out together.

Kamino flashloan

When enabled, you don't need a lot of wsol in your wallet.(You need some to keep your wsol account open). But this will add 73,000 compute unit to your tx.

[kamino_flashloan]
enabled = true

Bot

compute_unit_limit is a required param. If you have meteora dlmm in your pool you should set it to be at least 300_000. If not you should set it to at least 250_000. If you use kamino add another 80000 to it. If you have more than two dlmm pool you should consider adding more compute unit limit here.

When you have dlmm pool, the compute_unit_limit you set will affect how many bins the bot will look at when doing calculation onchain. Roughly each bin lookup will take ~ 10000 compute unit. 300_000 will allow the bot to look at ~10 bins onchain.

compute_unit_limit = 300_000
merge_mint = false

Merge mint

The merge_mint config allows you to find opportunities for different mints and pools within one transaction. This sounds good but has it's own limitation.

The tx is usually harder to land as you add more mints and pools. This is likely due to the transaction is locking too many accounts and the validator is impossible to find a slot to fit it in. You may also need to use higher fees when the market is hot.

You also need higher compute unit limit as the bot's program need to look at more pools onchain with this.

Note: Bot current support merge up to 3 mints, and 7 pools in total. Using a number higher than this will lead to your tx not being able to land at all.

Wallet

[wallet]
private_key = "xxx"

Last updated