pub struct Node {Show 29 fields
pub work_dir: String,
pub p2p_secret_key: Option<SecretKey>,
pub libp2p_keypair: Option<String>,
pub libp2p_password: Option<String>,
pub libp2p_external_ip: Vec<String>,
pub port: u16,
pub libp2p_port: u16,
pub verbosity: Level,
pub disable_filesystem_logging: bool,
pub log_path: String,
pub peers: Vec<P2pConnectionOutgoingInitOpts>,
pub peer_list_file: Option<PathBuf>,
pub peer_list_url: Option<Url>,
pub max_peers: usize,
pub seed: bool,
pub run_snarker: Option<AccountSecretKey>,
pub snarker_fee: u64,
pub snarker_strategy: SnarkerStrategy,
pub producer_key: Option<PathBuf>,
pub producer_key_password: String,
pub coinbase_receiver: Option<AccountPublicKey>,
pub record: String,
pub no_peers_discovery: bool,
pub config: Option<PathBuf>,
pub archive_local_storage: bool,
pub archive_archiver_process: bool,
pub archive_gcp_storage: bool,
pub archive_aws_storage: bool,
pub rng_seed: Option<String>,
}Expand description
Mina node configuration and runtime options
This struct defines all available command-line parameters for running a Mina node. The node can operate in different modes (basic node, block producer, archive node) depending on the parameters provided.
§Basic Usage
# Run a basic node on devnet
mina node --network devnet
# Run with custom ports and logging
mina node --network devnet --port 3001 --libp2p-port 8303 --verbosity debug§Block Producer Mode
# Run as block producer
mina node --network devnet --producer-key /path/to/key --coinbase-receiver B62q...§Archive Node Mode
# Run as archive node with local storage
mina node --network devnet --archive-local-storageFields§
§work_dir: StringWorking directory for node data, logs, and configuration files
Can be set via MINA_HOME environment variable. Defaults to ~/.mina
p2p_secret_key: Option<SecretKey>P2P networking secret key for node identity
If not provided, a new key will be generated automatically. Can be set via MINA_P2P_SEC_KEY environment variable.
libp2p_keypair: Option<String>Compatibility with OCaml Mina node
libp2p_password: Option<String>Compatibility with OCaml Mina node
libp2p_external_ip: Vec<String>List of external addresses at which this node is accessible
port: u16HTTP server port for RPC API and web interface
The node will serve its HTTP API and dashboard on this port. Default: 3000
libp2p_port: u16LibP2P networking port for peer-to-peer communication
This port is used for connecting to other nodes in the network. Default: 8302
verbosity: LevelLogging verbosity level
Controls the amount of logging output. Options in order of verbosity:
- error: Only show errors
- warn: Show warnings and errors
- info: Show informational messages, warnings, and errors (default)
- debug: Show debug information and all above
- trace: Show all possible logging output
disable_filesystem_logging: boolDisable filesystem logging
log_path: StringSpecify custom path for log files
peers: Vec<P2pConnectionOutgoingInitOpts>Initial peers to connect to on startup
Specify peer multiaddresses to connect to when the node starts. Can be used multiple times to add multiple peers.
§Multiaddr Format
Multiaddresses follow the format: /protocol/address/protocol/port/protocol/peer_id
IPv4 Example:
/ip4/192.168.1.100/tcp/8302/p2p/12D3KooWABCDEF1234567890abcdef...IPv6 Example:
/ip6/2001:db8::1/tcp/8302/p2p/12D3KooWABCDEF1234567890abcdef...DNS Example:
/dns4/node.example.com/tcp/8302/p2p/12D3KooWABCDEF1234567890abcdef...Where:
ip4/ip6/dns4specifies the address type- IP address or hostname
tcpprotocol with port number (typically 8302 for Mina)p2pprotocol with the peer’s public key identifier
peer_list_file: Option<PathBuf>File containing initial peers to connect to
Each line should contain a peer’s multiaddr following the format described above.
Example file content:
/ip4/192.168.1.100/tcp/8302/p2p/12D3KooWABCDEF1234567890abcdef...
/ip4/10.0.0.50/tcp/8302/p2p/12D3KooWXYZ9876543210fedcba...
/dns4/bootstrap.example.com/tcp/8302/p2p/12D3KooW123ABC...Empty lines and lines starting with # are ignored.
peer_list_url: Option<Url>URL to fetch initial peers list from
The URL should return a text file with one peer multiaddr per line,
using the same format as described in peer_list_file.
Useful for dynamic peer discovery from a central bootstrap service.
Example URL response:
/ip4/bootstrap1.example.com/tcp/8302/p2p/12D3KooW...
/ip4/bootstrap2.example.com/tcp/8302/p2p/12D3KooX...max_peers: usizeMaximum number of peer connections to maintain
The node will attempt to maintain up to this many connections to other peers in the network. Default: 100
seed: boolRun the node in seed mode. No default peers will be added.
run_snarker: Option<AccountSecretKey>Run Snark Worker.
Pass snarker private key as an argument.
snarker_fee: u64Snark fee, in Mina
snarker_strategy: SnarkerStrategy§producer_key: Option<PathBuf>Enable block producer with this key file
MINA_PRIVKEY_PASS must be set to decrypt the keyfile if it is password-protected
producer_key_password: StringPassword used to decrypt the producer key file.
coinbase_receiver: Option<AccountPublicKey>Address to send coinbase rewards to (if this node is producing blocks). If not provided, coinbase rewards will be sent to the producer of a block.
Warning: If the key is from a zkApp account, the account’s receive permission must be None.
record: String§no_peers_discovery: boolDo not use peers discovery.
config: Option<PathBuf>Config JSON file to load at startup.
archive_local_storage: boolEnable local precomputed storage.
This option requires the following environment variables to be set:
- MINA_ARCHIVE_LOCAL_STORAGE_PATH (otherwise the path to the working directory will be used)
archive_archiver_process: boolEnable archiver process.
This requires the following environment variables to be set:
- MINA_ARCHIVE_ADDRESS
archive_gcp_storage: boolEnable GCP precomputed storage.
This requires the following environment variables to be set:
- GCP_CREDENTIALS_JSON
- GCP_BUCKET_NAME
archive_aws_storage: boolEnable AWS precomputed storage.
This requires the following environment variables to be set:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_SESSION_TOKEN
- AWS_DEFAULT_REGION
- MINA_AWS_BUCKET_NAME
rng_seed: Option<String>Implementations§
Trait Implementations§
Source§impl Args for Node
impl Args for Node
Source§fn group_id() -> Option<Id>
fn group_id() -> Option<Id>
ArgGroup::id][crate::ArgGroup::id] for this set of argumentsSource§fn augment_args<'b>(__clap_app: Command) -> Command
fn augment_args<'b>(__clap_app: Command) -> Command
Source§fn augment_args_for_update<'b>(__clap_app: Command) -> Command
fn augment_args_for_update<'b>(__clap_app: Command) -> Command
Command] so it can instantiate self via
[FromArgMatches::update_from_arg_matches_mut] Read moreSource§impl FromArgMatches for Node
impl FromArgMatches for Node
Source§fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
Source§fn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches,
) -> Result<Self, Error>
fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>
Source§fn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§fn update_from_arg_matches_mut(
&mut self,
__clap_arg_matches: &mut ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches_mut( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Auto Trait Implementations§
impl Freeze for Node
impl RefUnwindSafe for Node
impl Send for Node
impl Sync for Node
impl Unpin for Node
impl UnwindSafe for Node
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.