Parameters
As you may have noticed, copychain never reads your private key. The tool relies on an external bot, 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. Enabling this option should resolve the issue. Only enable it if you encounter an error message similar to this:
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.
[engine]
bot
(required)
Underlying engine to use: smb, notarb or copy . The later will use the same one as the copied wallet.
[engine.smb]
config
(required)
Full path to your initial SMB configuration file.
binary
default: ./smb-onchain
Full path to the smb-onchain binary file.
[engine.notarb]
config
(required)
Full path to your initial NotArb configuration file.
install_dir
default: .
Full path to the NotArb installation directory.
[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_delayms, then send again and repeat [...]
default_lookup_tables
default: []
Additional Address Lookup Tables (ALT, LUT, or ALUT) to include in each transaction. Even though this tool copies the ALTs used by other users, you can specify extra ALTs here.
This can be useful if you have your own ALT.
compute_units_limit
default: { source = "Copy" }
Compute units are set for each sent transaction using the following options:
source:Fixed: fixed compute units limit.{ source = "Fixed", value = 350_000 }
Copy: dynamically uses the same as the copied wallet.
percentage: if you want 20% more compute units than the copied wallet, set this to120. Only used whensource = "Copy".{ 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 bot configuration file.Copy: automatically and dynamically adjusted based on copied wallets and fees_history_size. Astrategyparameter (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,ExponentialorExponentialRandom: works the same as in SMB.ExponentialRandomReverse: works the same asExponentialRandombut 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 on 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:
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:
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:
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:
[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]]
enabled
default: true
Enable or disable enclosed filters.
copy_pubkeys
default: []
Specific pubkeys these filters apply to. If empty, copy_pubkeys is used.
[[automation.filters.start]]
enabled
default: true
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_raw_profit_per_success
Minimum raw profit per successful transaction, 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
default: true
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.
initial_delay
default: 0
Minimum number of seconds to wait before starting to evaluate this filter.
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.
[slot_check]
check_interval
default: 30
Time interval in seconds between RPC slot-lag checks.
gRPC (= processing) slot lag is monitored in realtime.
max_distance
default: 5
Maximum slot delta from mainnet before considering the connection is lagging.
copy_if_lagging
default: false
Allow CopyChain to continue copying even if the connection is lagging.
[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:
log_session_end
default: true
Wheher or not to log sessions end. Log messages look like this:
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.
show_transaction_errors
default: true
Log transaction parsing errors.
Last updated