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
OpenMina node configuration and runtime options
This struct defines all available command-line parameters for running an OpenMina 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
openmina node --network devnet
# Run with custom ports and logging
openmina node --network devnet --port 3001 --libp2p-port 8303 --verbosity debug
§Block Producer Mode
# Run as block producer
openmina node --network devnet --producer-key /path/to/key --coinbase-receiver B62q...
§Archive Node Mode
# Run as archive node with local storage
openmina node --network devnet --archive-local-storage
Fields§
§work_dir: String
Working directory for node data, logs, and configuration files
Can be set via OPENMINA_HOME environment variable. Defaults to ~/.openmina
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 OPENMINA_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: u16
HTTP server port for RPC API and web interface
The node will serve its HTTP API and dashboard on this port. Default: 3000
libp2p_port: u16
LibP2P networking port for peer-to-peer communication
This port is used for connecting to other nodes in the network. Default: 8302
verbosity: Level
Logging 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: bool
Disable filesystem logging
log_path: String
Specify 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/dns4
specifies the address type- IP address or hostname
tcp
protocol with port number (typically 8302 for OpenMina)p2p
protocol 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: usize
Maximum 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: bool
Run 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: u64
Snark 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: String
Password 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: bool
Do not use peers discovery.
config: Option<PathBuf>
Config JSON file to load at startup.
archive_local_storage: bool
Enable local precomputed storage.
This option requires the following environment variables to be set:
- OPENMINA_ARCHIVE_LOCAL_STORAGE_PATH (otherwise the path to the working directory will be used)
archive_archiver_process: bool
Enable archiver process.
This requires the following environment variables to be set:
- OPENMINA_ARCHIVE_ADDRESS
archive_gcp_storage: bool
Enable GCP precomputed storage.
This requires the following environment variables to be set:
- GCP_CREDENTIALS_JSON
- GCP_BUCKET_NAME
archive_aws_storage: bool
Enable 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
- OPENMINA_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.