Parameters
As you may have noticed, copychain
never reads your private key. The tool relies on smb-onchain
, which is the one that normally uses the ENCRYPTED_PRIVATE_KEY
file.
my_pubkey
(required)
Your wallet pubkey address.
grpc_url
(required)
Your gRPC url.
grpc_token
default: None
Your gRPC token, if required by your provider.
grpc_type
default: yellowstone
Supports both yellowstone
and thorstream
gRPC.
grpc_light
default: false
Some gRPC providers block any
subscription stream. Setting this to true
should resolve this issue. Only enables it you encounter an error message like this:
[2025-07-29T18:57:30.772Z ERROR] Geyser stream error: Status { code: InvalidArgument, message: "failed to create filter: Subscribe on full stream with any is not allowed, at least one filter required", source: None }
copy_pubkeys
default: []
Addresses of other wallets you want to copy. If empty, copy_all must be enabled.
copy_all
default: false
Copy (or monitor) every wallets.
Enabling this in run
mode will copy all wallets. Not recommended unless you use it with automation or you know exactly what you’re doing.
smb_config
default: ./config.toml
Full path to the original smb-onchain
configuration file.
smb_onchain_binary
default: ./smb-onchain
Full path to the smb-onchain
binary file.
[sessions]
blacklisted_mints
default: []
A list of mint public key addresses on which sessions should never be started.
timeout
default: 5
Timeout in seconds after which this tool should stop copying a session. A higher value means the tool will continue sending transactions longer after the copied wallet has stopped. A value that’s too low may cause frequent "start/stop" session spam.
copy_jito_no_failure_only
default: true
When this option is enabled and Jito sending is active in your SMB config, the tool will only copy sessions where no_failure_mode = true
.
This is because Jito transactions with no_failure_mode = false
only include successful instructions, making it very difficult for the tool to reliably track sessions without hitting timeouts.
fees_history_size
default: 40
Maximum number of past transactions to consider for Jito tips (or priority fees) calculation. Only used when the SMB tip strategy (or CU price strategy) is set to File
. See here for more info.
[sending]
process_delay
default: 400
Same as SMB configuration process_delay for [[routing.mint_config_list]]
.
The bot will send out a tx, wait for
process_delay
ms, then send again and repeat [...]
default_lookup_tables
default: ["4sKLJ1Qoudh8PJyqBeuKocYdsZvxTcRShUt9aKqwhgvC"]
Additional Address Lookup Tables (ALT, LUT, or ALUT) to include in each session. Even though this tool copies the ALTs used by other users, you can specify extra ALTs here.
The default one is the same as recommended by SMB.
compute_units_limit
default: { source = "Local" }
Compute units are set for each sent transaction using the following options:
source
:Local
: uses the parameter defined in your SMB configuration file [bot] compute_unit_limit.Copy
: dynamically uses the same as the copied wallet.
percentage
: if you want 20% more compute units than the copied wallet, set this to120
{ source = "Copy", percentage = 120 }
This configuration value affects only Compute Units, not CU prices. See below for automatic fees/tips configuration.
spam_compute_unit_price
default: { source = "Local" }
Available parameters are:
source
:Local
: uses the parameter defined in your SMB configuration file [spam] compute_unit_price.Copy
: automatically and dynamically adjusted based on copied wallets and fees_history_size. Astrategy
parameter (see detailed below) can be used to adjust your strategy.Helius
: uses Helius Priority Fee API (see more info below helius_fee_api).
strategy
: used whensource = "Copy"
. Defaults toRandom
. Can be:Random
,Linear
,Exponential
orExponentialRandom
: works the same as in SMB.ExponentialRandomReverse
: works the same asExponentialRandom
but biases numbers toward the higher end of the range instead of the lower end.
count
: number of transactions to send at once. Defaults to1
.percentage
: adjusts the final amount. Default is100
, which effectively does nothing.minimum_lamports
: minimum CU price in lamports. These are not compute unit prices. Defaults to0
. They will be used to compute priority fees (compute unit price x compute units requested
) as shown in Solscan:2794 lamports in this case maximum_lamports
: maximum CU price in lamports. These are not compute unit prices. Defaults to1_000_000
, which is 0.001 SOL priority fees.
Here are some examples:
[...]
[sending]
spam_compute_unit_price = { source = "Copy" }
[...]
[sending]
spam_compute_unit_price = { source = "Copy", strategy = "Linear" } # count defaults to 1
[...]
[sending]
spam_compute_unit_price = { source = "Local" } # uses your SMB configuration
jito_tip
default: { source = "Local" }
Same as spam_compute_unit_price, overrides [jito] tip_config.
Parameter source
can be Local
, Copy
or Jito
. When set to Jito
, it uses the Jito Tip Floor API (see configuration details below jito_tip_api).
vendors_tip
default: { source = "Local" }
Same as spam_compute_unit_price, overrides each [sending_venders] tip_amount SMB configuration.
Parameter source
can only be Local
, Copy
or Temporal
.
vendors_compute_unit_price
default: { source = "Local" }
Same as Parameters, overrides each [sending_venders] compute_unit_price SMB configuration.
Parameter source
can be Local
, Copy
or Helius
. When set to Helius, it uses the Helius Priority Fee API (see configuration details below helius_fee_api).
jito_tip_api
default: None
update_interval
: in seconds. Defaults to15
.percentile
: the percentile range to use. Can be a number (0-100) orema50
. Numbers are interpolated, so any value between 0 and 100 is valid. Defaults to{ from = "ema50", to = "ema50" }
.
Example:
[sending]
jito_tip = { source = "Jito" }
[sending.jito_tip_api]
percentile = { from = "ema50", to = 75 }
temporal_tip_api
default: None
update_interval
: in seconds. Defaults to15
.percentile
: the percentile range to use. Must be a number in range [0, 100]. Numbers are interpolated, so any value between 0 and 100 is valid. Defaults to{ from = 25, to = 50 }
.
Example:
[sending]
vendors_tip = { source = "Temporal" }
[sending.temporal_tip_api]
percentile = { from = 25, to = 50 }
helius_fee_api
default: None
api_keys
: an array of Helius API keys. Requests will rotate between these to avoid rate limit, if needed.update_interval
: in seconds. Default to15
.percentile
: the percentile range to use, derived from Helius "low/medium/high/veryHigh" levels. Numbers are interpolated, so any value between 0 and 100 is valid. Default to{ from = 50, to = 50}
, which is equivalent to Helius medium level.lookback_slots
: adjust the number of slots analyzed for fee estimation. See Helius documentation. Default to150
.account_keys
: see Helius documentation. Default to SMB and NotArb programs address.
The account keys method provides a simpler alternative to transaction serialization when you need quick fee estimates or want to estimate fees before constructing the complete transaction.
Example:
[sending]
spam_compute_unit_price = { source = "Helius" }
[sending.helius_fee_api]
api_keys = ["xxx", "yyy"]
percentile = { from = 45, to = 55 }
[automation]
enabled
default: false
Enable or disable automation in run
mode.
max_concurrent
default: 1
Maximum number of wallets copied concurrently.
blacklisted_pubkeys
default: []
List of blacklisted wallets that will never trigger automation.
[[automation.filters.start]]
enabled
(required)
Enable or disable this filter.
lookback_window
(required)
The window size, in seconds, to look back when checking this filter.
interval
default: 1
Interval, in seconds, at which the tool should check if this filter is valid.
min_tx
Minimum number of transactions (successes + fails).
min_successes
Minimum number of successful arbitrages.
min_raw_profit
Minimum raw profit, without accounting fees, in lamports.
min_net_profit
Minimum net profit (raw profit - fees), in lamports.
min_risk_reward
Minimum R/R ratio.
max_fails
Maximum number of failed transactions.
max_fees
Maximum fees spent (priority fees + 3rd party tips), in lamports.
[[automation.filters.stop]]
enabled
(required)
Enable or disable this filter.
lookback_window
(required)
The window size, in seconds, to look back when checking this filter.
interval
default: 1
Interval, in seconds, at which the tool should check if this filter is valid.
min_tx
Minimum number of transactions (successes + fails).
min_successes
Minimum number of successful arbitrages.
min_raw_profit
Minimum raw profit, without accounting fees, in lamports.
min_net_profit
Minimum net profit (equivalent to PnL), in lamports.
min_risk_reward
Minimum R/R ratio.
max_loss
Maximum loss allowed (equivalent to PnL), in lamports.
max_fees
Maximum fees allowed, in lamports.
[misc]
print_stats_interval
default: 1
Time interval in seconds between showing session stats.
print_wallets_count
default: 20
Number maximum of wallets to show on the live statistics view.
stop_sol_threshold
default: 0.1
Threshold in SOL (not lamports) at which this tool should stop running. Use this configuration option to stop execution once the balance reaches a minimum floor or to keep some SOL in your wallet instead of emptying it completely on gas.
You can also set it to 0.0
to disable this completly.
log_session_start
default: true
Wheher or not to log sessions start. Log messages look like this:
✨ Starting 1 session with base mints {"So11111111111111111111111111111111111111112"}
[...]
log_session_end
default: true
Wheher or not to log sessions end. Log messages look like this:
[1] Final group statistics:
[1] Wallet | Session | Duration | Arbitrages (mean | norm.) | ...vs yours | PnL | ...vs yours
[1] --------+----------------+----------+---------------------------+-------------------+--------------+--------------
[1] AzD814 | (S--) 7f0b1a52 | 32s | 1/173 (2.4 | 0.8) | 0/139 (1.7 | 0.6) | -0.003099304 | -0.003099980
[1] | (total) | 32s | 1/173 | 0/139 | -0.003099304 | -0.003099980
stats_timespan
default: 5
Defines the time window in minutes used to compute windowed statistics such as Reward/Risk multiplier, raw profit, and fees in monitor mode. See Live statisticsfor more details.
Last updated