mirror of
				https://github.com/0glabs/0g-storage-node.git
				synced 2025-11-04 00:27:39 +00:00 
			
		
		
		
	enhance config and cli (#116)
* Update default value in config file * Add config file for testnet * Change default value for testnet config file * Supports environment config source * Add cli args * add default value for cli args * fix fmt * Fix cli args default value
This commit is contained in:
		
							parent
							
								
									821e4bd06e
								
							
						
					
					
						commit
						727a9b8bb6
					
				@ -3,5 +3,11 @@ use clap::{arg, command, Command};
 | 
				
			|||||||
pub fn cli_app<'a>() -> Command<'a> {
 | 
					pub fn cli_app<'a>() -> Command<'a> {
 | 
				
			||||||
    command!()
 | 
					    command!()
 | 
				
			||||||
        .arg(arg!(-c --config <FILE> "Sets a custom config file"))
 | 
					        .arg(arg!(-c --config <FILE> "Sets a custom config file"))
 | 
				
			||||||
 | 
					        .arg(arg!(--"miner-key" [KEY] "Sets miner private key"))
 | 
				
			||||||
 | 
					        .arg(
 | 
				
			||||||
 | 
					            arg!(--"blockchain-rpc-endpoint" [URL] "Sets blockchain RPC endpoint")
 | 
				
			||||||
 | 
					                .default_value("http://127.0.0.1:8545"),
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        .arg(arg!(--"db-max-num-chunks" [NUM] "Sets the max number of chunks to store in db"))
 | 
				
			||||||
        .allow_external_subcommands(true)
 | 
					        .allow_external_subcommands(true)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -111,6 +111,11 @@ impl ZgsConfig {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        let mut config = config::Config::builder()
 | 
					        let mut config = config::Config::builder()
 | 
				
			||||||
            .add_source(config::File::with_name(config_file))
 | 
					            .add_source(config::File::with_name(config_file))
 | 
				
			||||||
 | 
					            .add_source(
 | 
				
			||||||
 | 
					                config::Environment::with_prefix("ZGS_NODE")
 | 
				
			||||||
 | 
					                    .separator("__")
 | 
				
			||||||
 | 
					                    .list_separator(" "),
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
            .build()
 | 
					            .build()
 | 
				
			||||||
            .map_err(|e| format!("Failed to build config: {:?}", e))?
 | 
					            .map_err(|e| format!("Failed to build config: {:?}", e))?
 | 
				
			||||||
            .try_deserialize::<ZgsConfig>()
 | 
					            .try_deserialize::<ZgsConfig>()
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										243
									
								
								run/config-testnet.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								run/config-testnet.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,243 @@
 | 
				
			|||||||
 | 
					# This is a TOML config file.
 | 
				
			||||||
 | 
					# For more information, see https://github.com/toml-lang/toml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                     Network Config Options                      ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Data directory where node's keyfile is stored.
 | 
				
			||||||
 | 
					# network_dir = "network"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# IP address to listen on.
 | 
				
			||||||
 | 
					# network_listen_address = "0.0.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The address to broadcast to peers about which address we are listening on. Generally,
 | 
				
			||||||
 | 
					# configure public IP address for UDP discovery. If not specified, program will try to
 | 
				
			||||||
 | 
					# detect public IP address automatically.
 | 
				
			||||||
 | 
					# network_enr_address = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The tcp port to broadcast to peers in order to reach back for libp2p services.
 | 
				
			||||||
 | 
					# network_enr_tcp_port = 1234
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The udp port to broadcast to peers in order to reach back for discovery.
 | 
				
			||||||
 | 
					# network_enr_udp_port = 1234
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The TCP port that libp2p listens on.
 | 
				
			||||||
 | 
					# network_libp2p_port = 1234
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# UDP port that discovery listens on.
 | 
				
			||||||
 | 
					# network_discovery_port = 1234
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Target number of connected peers.
 | 
				
			||||||
 | 
					# network_target_peers = 50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# List of nodes to bootstrap UDP discovery. Note, `network_enr_address` should be
 | 
				
			||||||
 | 
					# configured as well to enable UDP discovery.
 | 
				
			||||||
 | 
					network_boot_nodes = ["/ip4/54.219.26.22/udp/1234/p2p/16Uiu2HAmTVDGNhkHD98zDnJxQWu3i1FL1aFYeh9wiQTNu4pDCgps","/ip4/52.52.127.117/udp/1234/p2p/16Uiu2HAkzRjxK2gorngB1Xq84qDrT4hSVznYDHj6BkbaE4SGx9oS","/ip4/18.167.69.68/udp/1234/p2p/16Uiu2HAm2k6ua2mGgvZ8rTMV8GhpW71aVzkQWy7D37TTDuLCpgmX"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# List of libp2p nodes to initially connect to.
 | 
				
			||||||
 | 
					# network_libp2p_nodes = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Indicates if the user has set the network to be in private mode. Currently this
 | 
				
			||||||
 | 
					# prevents sending client identifying information over identify.
 | 
				
			||||||
 | 
					# network_private = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Disables the discovery protocol from starting.
 | 
				
			||||||
 | 
					# network_disable_discovery = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                   UDP Discovery Config Options                  ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					# The request timeout for each UDP request.
 | 
				
			||||||
 | 
					# discv5_request_timeout_secs = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The timeout after which a `QueryPeer` in an ongoing query is marked unresponsive.
 | 
				
			||||||
 | 
					# Unresponsive peers don't count towards the parallelism limits for a query.
 | 
				
			||||||
 | 
					# Hence, we may potentially end up making more requests to good peers.
 | 
				
			||||||
 | 
					# discv5_query_peer_timeout_secs = 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The number of retries for each UDP request.
 | 
				
			||||||
 | 
					# discv5_request_retries = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The number of peers to request in parallel in a single query.
 | 
				
			||||||
 | 
					# discv5_query_parallelism = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Reports all discovered ENR's when traversing the DHT to the event stream.
 | 
				
			||||||
 | 
					# discv5_report_discovered_peers = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Disables the incoming packet filter.
 | 
				
			||||||
 | 
					# discv5_disable_packet_filter = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Disable to limit the number of IP addresses from the same
 | 
				
			||||||
 | 
					# /24 subnet in the kbuckets table. This is to mitigate eclipse attacks.
 | 
				
			||||||
 | 
					# discv5_disable_ip_limit = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                     Log Sync Config Options                     ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# RPC endpoint to sync event logs on EVM compatible blockchain.
 | 
				
			||||||
 | 
					# blockchain_rpc_endpoint = "http://127.0.0.1:8545"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Flow contract address to sync event logs.
 | 
				
			||||||
 | 
					log_contract_address = "0x8873cc79c5b3b5666535C825205C9a128B1D75F1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Block number to sync event logs from blockchain. Generally, this is
 | 
				
			||||||
 | 
					# the block number when flow contract deployed.
 | 
				
			||||||
 | 
					log_sync_start_block_number = 802
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Number of blocks to confirm a transaction.
 | 
				
			||||||
 | 
					# confirmation_block_count = 12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Maximum number of event logs to poll at a time.
 | 
				
			||||||
 | 
					# log_page_size = 999
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Maximum data size to cache in memory (by default, 100MB).
 | 
				
			||||||
 | 
					# max_cache_data_size = 104857600
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TTL to cache data in memory.
 | 
				
			||||||
 | 
					# cache_tx_seq_ttl = 500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The number of retries after a RPC request times out.
 | 
				
			||||||
 | 
					# rate_limit_retries = 100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The nubmer of retries for rate limited responses.
 | 
				
			||||||
 | 
					# timeout_retries = 100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The duration to wait before retry, in ms.
 | 
				
			||||||
 | 
					# initial_backoff = 500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The duration between each paginated getLogs RPC call, in ms.
 | 
				
			||||||
 | 
					# This is set to avoid triggering the throttling mechanism in the RPC server.
 | 
				
			||||||
 | 
					# recover_query_delay = 50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The counter assumed the finalized block behind the latest block.
 | 
				
			||||||
 | 
					# default_finalized_block_count = 100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Remove finalized block trigger interval.
 | 
				
			||||||
 | 
					# remove_finalized_block_interval_minutes = 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Watch_loop (eth_getLogs) trigger interval.
 | 
				
			||||||
 | 
					# watch_loop_wait_time_ms = 500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                     RPC Config Options                          ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Whether to provide RPC service.
 | 
				
			||||||
 | 
					# rpc_enabled = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# HTTP server address to bind for public RPC.
 | 
				
			||||||
 | 
					# rpc_listen_address = "0.0.0.0:5678"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# HTTP server address to bind for admin and debug RPC.
 | 
				
			||||||
 | 
					# rpc_listen_address_admin = "127.0.0.1:5679"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Maximum data size of RPC request body (by default, 100MB).
 | 
				
			||||||
 | 
					# max_request_body_size = 104857600
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Number of chunks for a single segment.
 | 
				
			||||||
 | 
					# rpc_chunks_per_segment = 1024
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Maximum file size that allowed to cache in memory (by default, 10MB).
 | 
				
			||||||
 | 
					# rpc_max_cache_file_size = 10485760
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                     Chunk Pool Config Options                   ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Maximum number of threads to upload segments of a single file simultaneously.
 | 
				
			||||||
 | 
					# chunk_pool_write_window_size = 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Maximum data size of cached segment in pool (by default, 4MB).
 | 
				
			||||||
 | 
					# chunk_pool_max_cached_chunks_all = 4194304
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Maximum number of threads to upload segments for all files simultaneously.
 | 
				
			||||||
 | 
					# chunk_pool_max_writings = 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Expiration time to cache uploaded segments in memory.
 | 
				
			||||||
 | 
					# chunk_pool_expiration_time_secs = 300
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                     DB Config Options                           ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Directory to store data.
 | 
				
			||||||
 | 
					# db_dir = "db"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                     Misc Config Options                         ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Log configuration file.
 | 
				
			||||||
 | 
					# log_config_file = "log_config"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Log directory.
 | 
				
			||||||
 | 
					# log_directory = "log"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                     Mine Config Options                         ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Mine contract address for incentive.
 | 
				
			||||||
 | 
					mine_contract_address = "0x85F6722319538A805ED5733c5F4882d96F1C7384"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Miner key is used to sign blockchain transaction for incentive.
 | 
				
			||||||
 | 
					# The value should be a hex string of length 64 without 0x prefix.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Note, the corresponding address should have enough tokens to pay
 | 
				
			||||||
 | 
					# transaction gas fee.
 | 
				
			||||||
 | 
					# miner_key = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                   Sharding Config Options                       ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					# The max number of chunk entries to store in db.
 | 
				
			||||||
 | 
					# Each entry is 256B, so the db size is roughly limited to
 | 
				
			||||||
 | 
					# `256 * db_max_num_chunks` Bytes.
 | 
				
			||||||
 | 
					# If this limit is reached, the node will update its `shard_position`
 | 
				
			||||||
 | 
					# and store only half data.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# db_max_num_chunks = 1000000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The format is <shard_id>/<shard_number>, where the shard number is 2^n.
 | 
				
			||||||
 | 
					# This only applies if there is no stored shard config in db.
 | 
				
			||||||
 | 
					# shard_position = "0/2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The time interval to check if we should half `shard_position` to prune data.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# prune_check_time_s = 60
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The number of chunk entries to delete in a batch when we prune data.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# prune_batch_size = 1024
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The time interval to wait between each prune batch deletion to avoid
 | 
				
			||||||
 | 
					# IO resource exhaustion.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# prune_batch_wait_time_ms = 1000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					###                   File Sync Config Options                      ###
 | 
				
			||||||
 | 
					#######################################################################
 | 
				
			||||||
 | 
					[sync]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Enable file sync among peers automatically. When enabled, each node will store
 | 
				
			||||||
 | 
					# all files, and sufficient disk space is required.
 | 
				
			||||||
 | 
					auto_sync_enabled = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#  Maximum number of files in sync from other peers simultaneously.
 | 
				
			||||||
 | 
					# max_sync_files = 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Timeout to terminate a file sync when automatically sync from other peers.
 | 
				
			||||||
 | 
					# If timeout, terminated file sync will be triggered later.
 | 
				
			||||||
 | 
					# find_peer_timeout = "10s"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Enable to start a file sync via RPC (e.g. `admin_startSyncFile`).
 | 
				
			||||||
 | 
					# sync_file_by_rpc_enabled = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Enable to start a file sync automatically when a file announcement P2P message received.
 | 
				
			||||||
 | 
					# sync_file_on_announcement_enabled = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Maximum threads to sync files in sequence.
 | 
				
			||||||
 | 
					# max_sequential_workers = 8
 | 
				
			||||||
@ -33,7 +33,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# List of nodes to bootstrap UDP discovery. Note, `network_enr_address` should be
 | 
					# List of nodes to bootstrap UDP discovery. Note, `network_enr_address` should be
 | 
				
			||||||
# configured as well to enable UDP discovery.
 | 
					# configured as well to enable UDP discovery.
 | 
				
			||||||
network_boot_nodes = ["/ip4/54.219.26.22/udp/1234/p2p/16Uiu2HAmPxGNWu9eVAQPJww79J32pTJLKGcpjRMb4Qb8xxKkyuG1","/ip4/52.52.127.117/udp/1234/p2p/16Uiu2HAm93Hd5azfhkGBbkx1zero3nYHvfjQYM2NtiW4R3r5bE2g"]
 | 
					# network_boot_nodes = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# List of libp2p nodes to initially connect to.
 | 
					# List of libp2p nodes to initially connect to.
 | 
				
			||||||
# network_libp2p_nodes = []
 | 
					# network_libp2p_nodes = []
 | 
				
			||||||
@ -77,14 +77,14 @@ network_boot_nodes = ["/ip4/54.219.26.22/udp/1234/p2p/16Uiu2HAmPxGNWu9eVAQPJww79
 | 
				
			|||||||
#######################################################################
 | 
					#######################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# RPC endpoint to sync event logs on EVM compatible blockchain.
 | 
					# RPC endpoint to sync event logs on EVM compatible blockchain.
 | 
				
			||||||
blockchain_rpc_endpoint = "https://rpc-testnet.0g.ai"
 | 
					# blockchain_rpc_endpoint = "http://127.0.0.1:8545"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Flow contract address to sync event logs.
 | 
					# Flow contract address to sync event logs.
 | 
				
			||||||
log_contract_address = "0x22C1CaF8cbb671F220789184fda68BfD7eaA2eE1"
 | 
					# log_contract_address = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Block number to sync event logs from blockchain. Generally, this is
 | 
					# Block number to sync event logs from blockchain. Generally, this is
 | 
				
			||||||
# the block number when flow contract deployed.
 | 
					# the block number when flow contract deployed.
 | 
				
			||||||
log_sync_start_block_number = 512567
 | 
					# log_sync_start_block_number = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Number of blocks to confirm a transaction.
 | 
					# Number of blocks to confirm a transaction.
 | 
				
			||||||
# confirmation_block_count = 12
 | 
					# confirmation_block_count = 12
 | 
				
			||||||
@ -180,14 +180,14 @@ log_sync_start_block_number = 512567
 | 
				
			|||||||
#######################################################################
 | 
					#######################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Mine contract address for incentive.
 | 
					# Mine contract address for incentive.
 | 
				
			||||||
mine_contract_address = "0x8B9221eE2287aFBb34A7a1Ef72eB00fdD853FFC2"
 | 
					# mine_contract_address = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Miner key is used to sign blockchain transaction for incentive.
 | 
					# Miner key is used to sign blockchain transaction for incentive.
 | 
				
			||||||
# The value should be a hex string of length 64 without 0x prefix.
 | 
					# The value should be a hex string of length 64 without 0x prefix.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Note, the corresponding address should have enough tokens to pay
 | 
					# Note, the corresponding address should have enough tokens to pay
 | 
				
			||||||
# transaction gas fee.
 | 
					# transaction gas fee.
 | 
				
			||||||
miner_key = ""
 | 
					# miner_key = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################################################
 | 
					#######################################################################
 | 
				
			||||||
###                   Sharding Config Options                       ###
 | 
					###                   Sharding Config Options                       ###
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user