diff --git a/config-backtest-example.toml b/config-backtest-example.toml index f789ce939..48defd78e 100644 --- a/config-backtest-example.toml +++ b/config-backtest-example.toml @@ -7,6 +7,7 @@ backtest_fetch_eth_rpc_url = "http://127.0.0.1:8545" backtest_fetch_eth_rpc_parallel = 400 backtest_fetch_output_file = "~/.rbuilder/backtest/main.sqlite" backtest_fetch_mempool_data_dir = "~/.rbuilder/mempool-data" +coinbase_secret_key = "env:COINBASE_SECRET_KEY" sbundle_mergeabe_signers = [] diff --git a/crates/rbuilder/src/backtest/backtest_build_block.rs b/crates/rbuilder/src/backtest/backtest_build_block.rs index 8062f5651..3c5cb0803 100644 --- a/crates/rbuilder/src/backtest/backtest_build_block.rs +++ b/crates/rbuilder/src/backtest/backtest_build_block.rs @@ -7,6 +7,8 @@ use ahash::HashMap; use alloy_primitives::utils::format_ether; +use revm_primitives::hex; +use secp256k1::{rand::rngs::OsRng, SecretKey}; use crate::backtest::restore_landed_orders::{ restore_landed_orders, sim_historical_block, ExecutedBlockTx, ExecutedTxs, SimplifiedOrder, @@ -23,7 +25,7 @@ use crate::{ utils::timestamp_as_u64, }; use clap::Parser; -use std::path::PathBuf; +use std::{env, path::PathBuf}; #[derive(Parser, Debug)] struct Cli { @@ -101,6 +103,10 @@ pub async fn run_backtest_build_block() -> eyre:: print_onchain_block_data(tx_sim_results, &orders, &block_data); } + if let Err(_) = config.base_config().coinbase_signer() { + add_env_coinbase_signer(); + } + let BacktestBlockInput { ctx, sim_orders, .. } = backtest_prepare_ctx_for_block( @@ -401,3 +407,17 @@ fn print_onchain_block_data( } } } + +// Generate a random private key +fn generate_private_key() -> String { + let mut rng = OsRng; + let secret_key = SecretKey::new(&mut rng); + let hex_secret_key = hex::encode(secret_key.secret_bytes()); + hex_secret_key +} + +// Add COINBASE_SECRET_KEY as an environment variable during runtime +fn add_env_coinbase_signer() { + let private_key = generate_private_key(); + env::set_var("COINBASE_SECRET_KEY", private_key); +}