diff --git a/Cargo.lock b/Cargo.lock index 579ba4fa51..5609dc5b20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4525,6 +4525,7 @@ dependencies = [ "mina-signer", "mina-tree", "node", + "openmina-core", "rand 0.8.5", "rayon", "redux", diff --git a/cli/src/commands/node/mod.rs b/cli/src/commands/node/mod.rs index f0dabbda60..43a471fa19 100644 --- a/cli/src/commands/node/mod.rs +++ b/cli/src/commands/node/mod.rs @@ -16,7 +16,12 @@ use openmina_node_native::{tracing, NodeBuilder}; /// Openmina node #[derive(Debug, clap::Args)] pub struct Node { - #[arg(long, short = 'd', default_value = "~/.openmina", env)] + #[arg( + long, + short = 'd', + default_value = "~/.openmina", + env = "OPENMINA_HOME" + )] pub work_dir: String, /// Peer secret key @@ -196,6 +201,7 @@ impl Node { } let work_dir = shellexpand::full(&self.work_dir).unwrap().into_owned(); + openmina_core::set_work_dir(work_dir.clone().into()); node_builder .http_server(self.port) diff --git a/core/src/lib.rs b/core/src/lib.rs index 5a29f0ac23..6301073699 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -23,6 +23,27 @@ pub use network::NetworkConfig; mod chain_id; pub use chain_id::*; +mod work_dir { + use once_cell::sync::OnceCell; + use std::path::PathBuf; + + static HOME_DIR: OnceCell = OnceCell::new(); + + pub fn set_work_dir(dir: PathBuf) { + HOME_DIR.set(dir).expect("Work dir can only be set once"); + } + + pub fn get_work_dir() -> PathBuf { + HOME_DIR.get().expect("Work dir is not set").clone() + } + + pub fn get_debug_dir() -> PathBuf { + get_work_dir().join("debug") + } +} + +pub use work_dir::{get_debug_dir, get_work_dir, set_work_dir}; + pub fn preshared_key(chain_id: &ChainId) -> [u8; 32] { use multihash::Hasher; let mut hasher = Blake2b256::default(); diff --git a/ledger/src/proofs/verification.rs b/ledger/src/proofs/verification.rs index 83037f1b8e..fe44d24342 100644 --- a/ledger/src/proofs/verification.rs +++ b/ledger/src/proofs/verification.rs @@ -769,7 +769,12 @@ fn dump_zkapp_verification( vec }; - let filename = generate_new_filename("/tmp/verify_zapp", "binprot", &bin)?; + let debug_dir = openmina_core::get_debug_dir(); + let filename = debug_dir + .join(generate_new_filename("verify_zapp", "binprot", &bin)?) + .to_string_lossy() + .to_string(); + std::fs::create_dir_all(&debug_dir)?; let mut file = std::fs::File::create(filename)?; file.write_all(&bin)?; diff --git a/node/common/Cargo.toml b/node/common/Cargo.toml index 225ff49e9a..64dfc44c70 100644 --- a/node/common/Cargo.toml +++ b/node/common/Cargo.toml @@ -20,6 +20,7 @@ ledger = { workspace = true } sha3 = "0.10.8" node = { path = "../../node", features = ["replay"] } +openmina-core = { path = "../../core" } [target.'cfg(target_family = "wasm")'.dependencies] redux = { workspace = true } diff --git a/node/common/src/service/block_producer/mod.rs b/node/common/src/service/block_producer/mod.rs index 94c350923f..74e5044f94 100644 --- a/node/common/src/service/block_producer/mod.rs +++ b/node/common/src/service/block_producer/mod.rs @@ -116,8 +116,13 @@ fn dump_failed_block_proof_input( block_hash: StateHash, input: Box, ) -> std::io::Result<()> { - let filename = format!("/tmp/failed_block_proof_input_{block_hash}.binprot"); + let debug_dir = openmina_core::get_debug_dir(); + let filename = debug_dir + .join(format!("failed_block_proof_input_{block_hash}.binprot")) + .to_string_lossy() + .to_string(); println!("Dumping failed block proof to {filename}"); + std::fs::create_dir_all(&debug_dir)?; let mut file = std::fs::File::create(&filename)?; input.binprot_write(&mut file)?; file.sync_all()?; diff --git a/node/src/ledger/ledger_service.rs b/node/src/ledger/ledger_service.rs index ef8da84839..64aa423e3b 100644 --- a/node/src/ledger/ledger_service.rs +++ b/node/src/ledger/ledger_service.rs @@ -1222,17 +1222,22 @@ fn dump_reconstruct_to_file( states: needed_blocks.clone(), }; - const FILENAME: &str = "/tmp/failed_reconstruct_ctx.binprot"; + let debug_dir = openmina_core::get_debug_dir(); + let filename = debug_dir + .join("failed_reconstruct_ctx.binprot") + .to_string_lossy() + .to_string(); + std::fs::create_dir_all(&debug_dir)?; use mina_p2p_messages::binprot::BinProtWrite; - let mut file = std::fs::File::create(FILENAME)?; + let mut file = std::fs::File::create(&filename)?; reconstruct_context.binprot_write(&mut file)?; file.sync_all()?; openmina_core::info!( openmina_core::log::system_time(); kind = "LedgerService::dump - Failed reconstruct", - summary = format!("Reconstruction saved to: {FILENAME:?}") + summary = format!("Reconstruction saved to: {filename:?}") ); Ok(()) @@ -1277,9 +1282,16 @@ fn dump_application_to_file( blocks: vec![(*block.block).clone()], }; - use mina_p2p_messages::binprot::BinProtWrite; - let filename = format!("/tmp/failed_application_ctx_{}.binprot", block_height); + let debug_dir = openmina_core::get_debug_dir(); + let filename = debug_dir + .join(format!("failed_application_ctx_{}.binprot", block_height)) + .to_string_lossy() + .to_string(); + std::fs::create_dir_all(&debug_dir)?; + let mut file = std::fs::File::create(&filename)?; + + use mina_p2p_messages::binprot::BinProtWrite; apply_context.binprot_write(&mut file)?; file.sync_all()?; diff --git a/p2p/src/network/pubsub/p2p_network_pubsub_reducer.rs b/p2p/src/network/pubsub/p2p_network_pubsub_reducer.rs index 0dea83c3c2..abea2dfdf1 100644 --- a/p2p/src/network/pubsub/p2p_network_pubsub_reducer.rs +++ b/p2p/src/network/pubsub/p2p_network_pubsub_reducer.rs @@ -104,7 +104,6 @@ impl P2pNetworkPubsubState { if err.to_string().contains("buffer underflow") && state.buffer.is_empty() { state.buffer = data.to_vec(); } - dbg!(err); } }