diff --git a/.gitignore b/.gitignore index a4d92ce8e..b17513daf 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,5 @@ node_modules/ *DS_Store *.iml book/ + +.claude/ diff --git a/bin/node/.env b/bin/node/.env index 51cfaa3f1..ff01242d7 100644 --- a/bin/node/.env +++ b/bin/node/.env @@ -2,17 +2,25 @@ # miden-node start -h MIDEN_NODE_BLOCK_PRODUCER_URL= MIDEN_NODE_VALIDATOR_URL= -MIDEN_NODE_BATCH_PROVER_URL= -MIDEN_NODE_BLOCK_PROVER_URL= -MIDEN_NODE_NTX_PROVER_URL= +MIDEN_NODE_RPC_URL=http://0.0.0.0:57291 +MIDEN_NODE_NTX_BUILDER_URL= +MIDEN_NODE_BLOCK_PRODUCER_BATCH_PROVER_URL= +MIDEN_NODE_STORE_BLOCK_PROVER_URL= +MIDEN_NODE_NTX_BUILDER_NTX_PROVER_URL= MIDEN_NODE_STORE_RPC_URL= +MIDEN_NODE_RPC_STORE_URL= MIDEN_NODE_STORE_NTX_BUILDER_URL= +MIDEN_NODE_NTX_BUILDER_STORE_URL= MIDEN_NODE_STORE_BLOCK_PRODUCER_URL= -MIDEN_NODE_VALIDATOR_BLOCK_PRODUCER_URL= +MIDEN_NODE_BLOCK_PRODUCER_STORE_URL= +MIDEN_NODE_BLOCK_PRODUCER_VALIDATOR_URL= MIDEN_NODE_VALIDATOR_KEY= MIDEN_NODE_VALIDATOR_KMS_KEY_ID= -MIDEN_NODE_RPC_URL=http://0.0.0.0:57291 -MIDEN_NODE_DATA_DIRECTORY=./ +MIDEN_NODE_DATA_DIRECTORY= +MIDEN_NODE_BLOCK_PRODUCER_MAX_TXS_PER_BATCH= +MIDEN_NODE_BLOCK_PRODUCER_MAX_BATCHES_PER_BLOCK= +MIDEN_NODE_BLOCK_PRODUCER_MEMPOOL_TX_CAPACITY= +MIDEN_NODE_NTX_BUILDER_SCRIPT_CACHE_SIZE= +MIDEN_NODE_NTX_BUILDER_MAX_CYCLES= MIDEN_NODE_ENABLE_OTEL=true -MIDEN_NTX_DATA_STORE_SCRIPT_CACHE_SIZE= -MIDEN_NODE_NTX_DATA_DIRECTORY= +MIDEN_NODE_VALIDATOR_GENESIS_CONFIG_FILE= diff --git a/bin/node/src/commands/block_producer.rs b/bin/node/src/commands/block_producer.rs index efc4d36af..b7e60913b 100644 --- a/bin/node/src/commands/block_producer.rs +++ b/bin/node/src/commands/block_producer.rs @@ -4,23 +4,27 @@ use miden_node_utils::clap::GrpcOptionsInternal; use miden_node_utils::grpc::UrlExt; use url::Url; -use super::{ENV_BLOCK_PRODUCER_URL, ENV_STORE_BLOCK_PRODUCER_URL}; -use crate::commands::{BlockProducerConfig, ENV_ENABLE_OTEL, ENV_VALIDATOR_BLOCK_PRODUCER_URL}; +use super::ENV_ENABLE_OTEL; +use crate::commands::BlockProducerConfig; + +const ENV_URL: &str = "MIDEN_NODE_BLOCK_PRODUCER_URL"; +const ENV_STORE_URL: &str = "MIDEN_NODE_BLOCK_PRODUCER_STORE_URL"; +const ENV_VALIDATOR_URL: &str = "MIDEN_NODE_BLOCK_PRODUCER_VALIDATOR_URL"; #[derive(clap::Subcommand)] pub enum BlockProducerCommand { /// Starts the block-producer component. Start { /// Url at which to serve the gRPC API. - #[arg(env = ENV_BLOCK_PRODUCER_URL)] + #[arg(env = ENV_URL)] url: Url, /// The store's block-producer service gRPC url. - #[arg(long = "store.url", env = ENV_STORE_BLOCK_PRODUCER_URL)] + #[arg(long = "store.url", env = ENV_STORE_URL)] store_url: Url, /// The validator's service gRPC url. - #[arg(long = "validator.url", env = ENV_VALIDATOR_BLOCK_PRODUCER_URL)] + #[arg(long = "validator.url", env = ENV_VALIDATOR_URL)] validator_url: Url, #[command(flatten)] diff --git a/bin/node/src/commands/mod.rs b/bin/node/src/commands/mod.rs index 4297bc594..b12fbd34f 100644 --- a/bin/node/src/commands/mod.rs +++ b/bin/node/src/commands/mod.rs @@ -23,32 +23,14 @@ pub mod validator; const INSECURE_VALIDATOR_KEY_HEX: &str = "0101010101010101010101010101010101010101010101010101010101010101"; -const ENV_BLOCK_PRODUCER_URL: &str = "MIDEN_NODE_BLOCK_PRODUCER_URL"; -const ENV_VALIDATOR_URL: &str = "MIDEN_NODE_VALIDATOR_URL"; -const ENV_BATCH_PROVER_URL: &str = "MIDEN_NODE_BATCH_PROVER_URL"; -const ENV_BLOCK_PROVER_URL: &str = "MIDEN_NODE_BLOCK_PROVER_URL"; -const ENV_NTX_PROVER_URL: &str = "MIDEN_NODE_NTX_PROVER_URL"; -const ENV_RPC_URL: &str = "MIDEN_NODE_RPC_URL"; -const ENV_STORE_RPC_URL: &str = "MIDEN_NODE_STORE_RPC_URL"; -const ENV_STORE_NTX_BUILDER_URL: &str = "MIDEN_NODE_STORE_NTX_BUILDER_URL"; -const ENV_STORE_BLOCK_PRODUCER_URL: &str = "MIDEN_NODE_STORE_BLOCK_PRODUCER_URL"; -const ENV_VALIDATOR_BLOCK_PRODUCER_URL: &str = "MIDEN_NODE_VALIDATOR_BLOCK_PRODUCER_URL"; const ENV_DATA_DIRECTORY: &str = "MIDEN_NODE_DATA_DIRECTORY"; const ENV_ENABLE_OTEL: &str = "MIDEN_NODE_ENABLE_OTEL"; -const ENV_GENESIS_CONFIG_FILE: &str = "MIDEN_GENESIS_CONFIG_FILE"; -const ENV_MAX_TXS_PER_BATCH: &str = "MIDEN_MAX_TXS_PER_BATCH"; -const ENV_MAX_BATCHES_PER_BLOCK: &str = "MIDEN_MAX_BATCHES_PER_BLOCK"; -const ENV_MEMPOOL_TX_CAPACITY: &str = "MIDEN_NODE_MEMPOOL_TX_CAPACITY"; -const ENV_NTX_SCRIPT_CACHE_SIZE: &str = "MIDEN_NTX_DATA_STORE_SCRIPT_CACHE_SIZE"; +const ENV_MAX_TXS_PER_BATCH: &str = "MIDEN_NODE_BLOCK_PRODUCER_MAX_TXS_PER_BATCH"; +const ENV_MAX_BATCHES_PER_BLOCK: &str = "MIDEN_NODE_BLOCK_PRODUCER_MAX_BATCHES_PER_BLOCK"; +const ENV_MEMPOOL_TX_CAPACITY: &str = "MIDEN_NODE_BLOCK_PRODUCER_MEMPOOL_TX_CAPACITY"; +const ENV_BATCH_PROVER_URL: &str = "MIDEN_NODE_BLOCK_PRODUCER_BATCH_PROVER_URL"; const ENV_VALIDATOR_KEY: &str = "MIDEN_NODE_VALIDATOR_KEY"; const ENV_VALIDATOR_KMS_KEY_ID: &str = "MIDEN_NODE_VALIDATOR_KMS_KEY_ID"; -const ENV_NTX_DATA_DIRECTORY: &str = "MIDEN_NODE_NTX_DATA_DIRECTORY"; -const ENV_NTX_BUILDER_URL: &str = "MIDEN_NODE_NTX_BUILDER_URL"; -const ENV_NTX_MAX_CYCLES: &str = "MIDEN_NTX_MAX_CYCLES"; - -const DEFAULT_NTX_IDLE_TIMEOUT: Duration = Duration::from_secs(5 * 60); -const DEFAULT_NTX_SCRIPT_CACHE_SIZE: NonZeroUsize = NonZeroUsize::new(1000).unwrap(); -const DEFAULT_NTX_MAX_CYCLES: u32 = 1 << 18; /// Configuration for the Validator key used to sign blocks. /// diff --git a/bin/node/src/commands/ntx_builder.rs b/bin/node/src/commands/ntx_builder.rs index c9279668e..8bc0cb3f4 100644 --- a/bin/node/src/commands/ntx_builder.rs +++ b/bin/node/src/commands/ntx_builder.rs @@ -8,31 +8,31 @@ use miden_node_utils::grpc::UrlExt; use tokio::net::TcpListener; use url::Url; -use super::{ - DEFAULT_NTX_IDLE_TIMEOUT, - DEFAULT_NTX_MAX_CYCLES, - DEFAULT_NTX_SCRIPT_CACHE_SIZE, - ENV_BLOCK_PRODUCER_URL, - ENV_ENABLE_OTEL, - ENV_NTX_DATA_DIRECTORY, - ENV_NTX_MAX_CYCLES, - ENV_NTX_PROVER_URL, - ENV_NTX_SCRIPT_CACHE_SIZE, - ENV_STORE_NTX_BUILDER_URL, - ENV_VALIDATOR_URL, -}; -use crate::commands::ENV_NTX_BUILDER_URL; +use super::ENV_ENABLE_OTEL; + +const ENV_URL: &str = "MIDEN_NODE_NTX_BUILDER_URL"; +const ENV_STORE_URL: &str = "MIDEN_NODE_NTX_BUILDER_STORE_URL"; +const ENV_BLOCK_PRODUCER_URL: &str = "MIDEN_NODE_BLOCK_PRODUCER_URL"; +const ENV_VALIDATOR_URL: &str = "MIDEN_NODE_VALIDATOR_URL"; +const ENV_TX_PROVER_URL: &str = "MIDEN_NODE_NTX_BUILDER_NTX_PROVER_URL"; +const ENV_SCRIPT_CACHE_SIZE: &str = "MIDEN_NODE_NTX_BUILDER_SCRIPT_CACHE_SIZE"; +const ENV_DATA_DIRECTORY: &str = "MIDEN_NODE_DATA_DIRECTORY"; +const ENV_MAX_CYCLES: &str = "MIDEN_NODE_NTX_BUILDER_MAX_CYCLES"; + +const DEFAULT_IDLE_TIMEOUT: Duration = Duration::from_secs(5 * 60); +const DEFAULT_SCRIPT_CACHE_SIZE: NonZeroUsize = NonZeroUsize::new(1000).unwrap(); +const DEFAULT_MAX_CYCLES: u32 = 1 << 18; #[derive(clap::Subcommand)] pub enum NtxBuilderCommand { /// Starts the network transaction builder component. Start { /// Url at which to serve the ntx-builder's gRPC API. - #[arg(long = "url", env = ENV_NTX_BUILDER_URL, value_name = "URL")] + #[arg(long = "url", env = ENV_URL, value_name = "URL")] url: Option, /// The store's ntx-builder service gRPC url. - #[arg(long = "store.url", env = ENV_STORE_NTX_BUILDER_URL, value_name = "URL")] + #[arg(long = "store.url", env = ENV_STORE_URL, value_name = "URL")] store_url: Url, /// The block-producer's gRPC url. @@ -45,7 +45,7 @@ pub enum NtxBuilderCommand { /// The remote transaction prover's gRPC url. If unset, will default to running a /// prover in-process which is expensive. - #[arg(long = "tx-prover.url", env = ENV_NTX_PROVER_URL, value_name = "URL")] + #[arg(long = "tx-prover.url", env = ENV_TX_PROVER_URL, value_name = "URL")] tx_prover_url: Option, /// Number of note scripts to cache locally. @@ -53,9 +53,9 @@ pub enum NtxBuilderCommand { /// Note scripts not in cache must first be retrieved from the store. #[arg( long = "script-cache-size", - env = ENV_NTX_SCRIPT_CACHE_SIZE, + env = ENV_SCRIPT_CACHE_SIZE, value_name = "NUM", - default_value_t = DEFAULT_NTX_SCRIPT_CACHE_SIZE + default_value_t = DEFAULT_SCRIPT_CACHE_SIZE )] script_cache_size: NonZeroUsize, @@ -65,7 +65,7 @@ pub enum NtxBuilderCommand { /// A deactivated account will reactivate if targeted with new notes. #[arg( long = "idle-timeout", - default_value = &duration_to_human_readable_string(DEFAULT_NTX_IDLE_TIMEOUT), + default_value = &duration_to_human_readable_string(DEFAULT_IDLE_TIMEOUT), value_parser = humantime::parse_duration, value_name = "DURATION" )] @@ -83,14 +83,14 @@ pub enum NtxBuilderCommand { /// cycles. #[arg( long = "max-cycles", - env = ENV_NTX_MAX_CYCLES, - default_value_t = DEFAULT_NTX_MAX_CYCLES, + env = ENV_MAX_CYCLES, + default_value_t = DEFAULT_MAX_CYCLES, value_name = "NUM", )] max_tx_cycles: u32, /// Directory for the ntx-builder's persistent database. - #[arg(long = "data-directory", env = ENV_NTX_DATA_DIRECTORY, value_name = "DIR")] + #[arg(long = "data-directory", env = ENV_DATA_DIRECTORY, value_name = "DIR")] data_directory: PathBuf, /// Enables the exporting of traces for OpenTelemetry. diff --git a/bin/node/src/commands/rpc.rs b/bin/node/src/commands/rpc.rs index 37607d1c9..1f2149623 100644 --- a/bin/node/src/commands/rpc.rs +++ b/bin/node/src/commands/rpc.rs @@ -4,25 +4,24 @@ use miden_node_utils::clap::GrpcOptionsExternal; use miden_node_utils::grpc::UrlExt; use url::Url; -use super::{ - ENV_BLOCK_PRODUCER_URL, - ENV_NTX_BUILDER_URL, - ENV_RPC_URL, - ENV_STORE_RPC_URL, - ENV_VALIDATOR_URL, -}; -use crate::commands::ENV_ENABLE_OTEL; +use super::ENV_ENABLE_OTEL; + +const ENV_URL: &str = "MIDEN_NODE_RPC_URL"; +const ENV_STORE_URL: &str = "MIDEN_NODE_RPC_STORE_URL"; +const ENV_BLOCK_PRODUCER_URL: &str = "MIDEN_NODE_BLOCK_PRODUCER_URL"; +const ENV_VALIDATOR_URL: &str = "MIDEN_NODE_VALIDATOR_URL"; +const ENV_NTX_BUILDER_URL: &str = "MIDEN_NODE_NTX_BUILDER_URL"; #[derive(clap::Subcommand)] pub enum RpcCommand { /// Starts the RPC component. Start { /// Url at which to serve the gRPC API. - #[arg(long = "url", env = ENV_RPC_URL, value_name = "URL")] + #[arg(long = "url", env = ENV_URL, value_name = "URL")] url: Url, /// The store's RPC service gRPC url. - #[arg(long = "store.url", env = ENV_STORE_RPC_URL, value_name = "URL")] + #[arg(long = "store.url", env = ENV_STORE_URL, value_name = "URL")] store_url: Url, /// The block-producer's gRPC url. If unset, will run the RPC in read-only mode, diff --git a/bin/node/src/commands/store.rs b/bin/node/src/commands/store.rs index d3ea6038f..292d78449 100644 --- a/bin/node/src/commands/store.rs +++ b/bin/node/src/commands/store.rs @@ -11,13 +11,11 @@ use miden_protocol::block::SignedBlock; use miden_protocol::utils::serde::Deserializable; use url::Url; -use super::{ - ENV_DATA_DIRECTORY, - ENV_STORE_BLOCK_PRODUCER_URL, - ENV_STORE_NTX_BUILDER_URL, - ENV_STORE_RPC_URL, -}; -use crate::commands::{ENV_BLOCK_PROVER_URL, ENV_ENABLE_OTEL}; +use super::{ENV_DATA_DIRECTORY, ENV_ENABLE_OTEL}; +const ENV_RPC_URL: &str = "MIDEN_NODE_STORE_RPC_URL"; +const ENV_NTX_BUILDER_URL: &str = "MIDEN_NODE_STORE_NTX_BUILDER_URL"; +const ENV_BLOCK_PRODUCER_URL: &str = "MIDEN_NODE_STORE_BLOCK_PRODUCER_URL"; +const ENV_BLOCK_PROVER_URL: &str = "MIDEN_NODE_STORE_BLOCK_PROVER_URL"; #[expect(clippy::large_enum_variant, reason = "single use enum")] #[derive(clap::Subcommand)] @@ -40,15 +38,15 @@ pub enum StoreCommand { /// endpoints to be accessed by the node's components. Start { /// Url at which to serve the store's RPC API. - #[arg(long = "rpc.url", env = ENV_STORE_RPC_URL, value_name = "URL")] + #[arg(long = "rpc.url", env = ENV_RPC_URL, value_name = "URL")] rpc_url: Url, /// Url at which to serve the store's network transaction builder API. - #[arg(long = "ntx-builder.url", env = ENV_STORE_NTX_BUILDER_URL, value_name = "URL")] + #[arg(long = "ntx-builder.url", env = ENV_NTX_BUILDER_URL, value_name = "URL")] ntx_builder_url: Url, /// Url at which to serve the store's block producer API. - #[arg(long = "block-producer.url", env = ENV_STORE_BLOCK_PRODUCER_URL, value_name = "URL")] + #[arg(long = "block-producer.url", env = ENV_BLOCK_PRODUCER_URL, value_name = "URL")] block_producer_url: Url, /// The remote block prover's gRPC url. If not provided, a local block prover will be used. diff --git a/bin/node/src/commands/validator.rs b/bin/node/src/commands/validator.rs index 24bc15bad..59606ac70 100644 --- a/bin/node/src/commands/validator.rs +++ b/bin/node/src/commands/validator.rs @@ -15,14 +15,15 @@ use url::Url; use crate::commands::{ ENV_DATA_DIRECTORY, ENV_ENABLE_OTEL, - ENV_GENESIS_CONFIG_FILE, ENV_VALIDATOR_KEY, ENV_VALIDATOR_KMS_KEY_ID, - ENV_VALIDATOR_URL, INSECURE_VALIDATOR_KEY_HEX, ValidatorKey, }; +const ENV_URL: &str = "MIDEN_NODE_VALIDATOR_URL"; +const ENV_GENESIS_CONFIG_FILE: &str = "MIDEN_NODE_VALIDATOR_GENESIS_CONFIG_FILE"; + /// The filename used for the genesis block file. pub const GENESIS_BLOCK_FILENAME: &str = "genesis.dat"; @@ -54,7 +55,7 @@ pub enum ValidatorCommand { /// Starts the validator component. Start { /// Url at which to serve the gRPC API. - #[arg(env = ENV_VALIDATOR_URL)] + #[arg(env = ENV_URL)] url: Url, /// Enables the exporting of traces for OpenTelemetry.