Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,5 @@ node_modules/
*DS_Store
*.iml
book/

.claude/
24 changes: 16 additions & 8 deletions bin/node/.env
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tbh I still don't understand why we want this file to exist?

The only source of truth is miden-node --help.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For an easy copy paste into infra repo. Just a bit less manual and error prone this way. Still not ideal though

Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,25 @@
# miden-node <component> 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=
14 changes: 9 additions & 5 deletions bin/node/src/commands/block_producer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down
26 changes: 4 additions & 22 deletions bin/node/src/commands/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
///
Expand Down
46 changes: 23 additions & 23 deletions bin/node/src/commands/ntx_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Url>,

/// 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.
Expand All @@ -45,17 +45,17 @@ 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<Url>,

/// Number of note scripts to cache locally.
///
/// 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,

Expand All @@ -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"
)]
Expand All @@ -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.
Expand Down
19 changes: 9 additions & 10 deletions bin/node/src/commands/rpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
18 changes: 8 additions & 10 deletions bin/node/src/commands/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand All @@ -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.
Expand Down
7 changes: 4 additions & 3 deletions bin/node/src/commands/validator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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";

Expand Down Expand Up @@ -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.
Expand Down
Loading