From d181ce73e6650c4dc7197765474c9269badd5e3c Mon Sep 17 00:00:00 2001 From: Oleksandr Pravdyvyi Date: Mon, 28 Jul 2025 16:31:43 +0300 Subject: [PATCH] fix: node and sequencer startup --- .../configs/debug/node_config.json | 17 +++++ .../configs/debug/sequencer_config.json | 19 +++++ integration_tests/src/lib.rs | 74 ++++++++++++++++++- 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 integration_tests/configs/debug/node_config.json create mode 100644 integration_tests/configs/debug/sequencer_config.json diff --git a/integration_tests/configs/debug/node_config.json b/integration_tests/configs/debug/node_config.json new file mode 100644 index 0000000..c948b82 --- /dev/null +++ b/integration_tests/configs/debug/node_config.json @@ -0,0 +1,17 @@ +{ + "home": ".", + "override_rust_log": null, + "sequencer_addr": "http://127.0.0.1:3040", + "seq_poll_timeout_secs": 10, + "port": 3041, + "gas_config": { + "gas_fee_per_byte_deploy": 100, + "gas_fee_per_input_buffer_runtime": 1000, + "gas_fee_per_byte_runtime": 10, + "gas_cost_runtime": 100, + "gas_cost_deploy": 1000, + "gas_limit_deploy": 30000000, + "gas_limit_runtime": 30000000 + }, + "shapshot_frequency_in_blocks": 10 +} \ No newline at end of file diff --git a/integration_tests/configs/debug/sequencer_config.json b/integration_tests/configs/debug/sequencer_config.json new file mode 100644 index 0000000..18d1b72 --- /dev/null +++ b/integration_tests/configs/debug/sequencer_config.json @@ -0,0 +1,19 @@ +{ + "home": ".", + "override_rust_log": null, + "genesis_id": 1, + "is_genesis_random": true, + "max_num_tx_in_block": 20, + "block_create_timeout_millis": 10000, + "port": 3040, + "initial_accounts": [ + { + "addr": "bfd91e6703273a115ad7f099ef32f621243be69369d00ddef5d3a25117d09a8c", + "balance": 10 + }, + { + "addr": "20573479053979b98d2ad09ef31a0750f22c77709bed51c4e64946bd1e376f31", + "balance": 100 + } + ] +} \ No newline at end of file diff --git a/integration_tests/src/lib.rs b/integration_tests/src/lib.rs index c539bd4..af98f4d 100644 --- a/integration_tests/src/lib.rs +++ b/integration_tests/src/lib.rs @@ -1,5 +1,77 @@ +use std::{path::PathBuf, sync::Arc}; + use anyhow::Result; +use clap::Parser; +use common::rpc_primitives::RpcConfig; +use log::info; +use node_core::NodeCore; +use sequencer_core::SequencerCore; +use tokio::{sync::Mutex, task::JoinHandle}; + +#[derive(Parser, Debug)] +#[clap(version)] +struct Args { + /// Path to configs + home_dir: PathBuf, +} pub async fn main_tests_runner() -> Result<()> { - Ok(()) + env_logger::init(); + + let args = Args::parse(); + let Args { home_dir } = args; + + let sequencer_config = sequencer_runner::config::from_file(home_dir.join("sequencer_config.json"))?; + let node_config = node_runner::config::from_file(home_dir.join("node_config.json"))?; + + let block_timeout = sequencer_config.block_create_timeout_millis; + let sequencer_port = sequencer_config.port; + + let sequencer_core = SequencerCore::start_from_config(sequencer_config); + + info!("Sequencer core set up"); + + let seq_core_wrapped = Arc::new(Mutex::new(sequencer_core)); + + let http_server = sequencer_rpc::new_http_server(RpcConfig::with_port(sequencer_port), seq_core_wrapped.clone())?; + info!("HTTP server started"); + let _http_server_handle = http_server.handle(); + tokio::spawn(http_server); + + info!("Starting main sequencer loop"); + + let _sequencer_loop_handle: JoinHandle> = tokio::spawn(async move { + loop { + tokio::time::sleep(std::time::Duration::from_millis(block_timeout)).await; + + info!("Collecting transactions from mempool, block creation"); + + let id = { + let mut state = seq_core_wrapped.lock().await; + + state.produce_new_block_with_mempool_transactions()? + }; + + info!("Block with id {id} created"); + + info!("Waiting for new transactions"); + } + }); + + let node_port = node_config.port; + + let node_core = NodeCore::start_from_config_update_chain(node_config.clone()).await?; + let wrapped_node_core = Arc::new(Mutex::new(node_core)); + + let http_server = node_rpc::new_http_server( + RpcConfig::with_port(node_port), + node_config.clone(), + wrapped_node_core.clone(), + )?; + info!("HTTP server started"); + let _http_server_handle = http_server.handle(); + tokio::spawn(http_server); + + #[allow(clippy::empty_loop)] + loop {} }