From b24a79859678de9ccf4bd9bd509b5f83ab4acfc2 Mon Sep 17 00:00:00 2001 From: Rupert Lento Date: Mon, 28 Jul 2025 15:18:00 -0400 Subject: [PATCH 1/5] add standard config for fullnodes, and an option for fast syncing nodes --- tools/config/src/make_yaml_public_fullnode.rs | 61 +++++++++++++++++-- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/tools/config/src/make_yaml_public_fullnode.rs b/tools/config/src/make_yaml_public_fullnode.rs index ae850ae87..92d1ee275 100644 --- a/tools/config/src/make_yaml_public_fullnode.rs +++ b/tools/config/src/make_yaml_public_fullnode.rs @@ -85,6 +85,43 @@ pub async fn fetch_seed_addresses( Ok(seeds) } + +/// A fullnode config which does a fast sync to the chain +/// as opposed to the default fullnode config for archive nodes. +pub fn make_fast_sync_yaml(home_dir: Option, waypoint: Waypoint) -> anyhow::Result { + let home_dir = home_dir.unwrap_or_else(global_config_dir); + let path = home_dir.display().to_string(); + + // Create the YAML template with necessary configurations + let template = format!( + " +base: + role: 'full_node' + data_dir: '{path}/data' + waypoint: + from_config: '{waypoint}' + +execution: + genesis_file_location: '{path}/genesis/genesis.blob' + +state_sync: + state_sync_driver: + bootstrapping_mode: DownloadLatestStates + continuous_syncing_mode: ApplyTransactionOutputs + +full_node_networks: +- network_id: 'public' + listen_address: '/ip4/0.0.0.0/tcp/6182' + + +api: + enabled: true + address: '0.0.0.0:8080' +" + ); + Ok(template) +} + /// Create a fullnode yaml to bootstrap node pub fn make_fullnode_yaml(home_dir: Option, waypoint: Waypoint) -> anyhow::Result { let home_dir = home_dir.unwrap_or_else(global_config_dir); @@ -106,11 +143,20 @@ state_sync: state_sync_driver: bootstrapping_mode: ExecuteOrApplyFromGenesis continuous_syncing_mode: ApplyTransactionOutputs +storage: + storage_pruner_config: + ledger_pruner_config: + enable: false + state_merkle_pruner_config: + enable: false + epoch_snapshot_pruner_config: + enable: false full_node_networks: - network_id: 'public' listen_address: '/ip4/0.0.0.0/tcp/6182' + api: enabled: true address: '0.0.0.0:8080' @@ -146,6 +192,15 @@ state_sync: bootstrapping_mode: ApplyTransactionOutputsFromGenesis continuous_syncing_mode: ApplyTransactionOutputs +storage: + storage_pruner_config: + ledger_pruner_config: + enable: false + state_merkle_pruner_config: + enable: false + epoch_snapshot_pruner_config: + enable: false + full_node_networks: - network_id: 'public' listen_address: '/ip4/0.0.0.0/tcp/6182' @@ -180,12 +235,6 @@ mempool: Ok(template) } -// #[tokio::test] -// async fn get_peers() { -// let _seed = fetch_seed_addresses(None).await.unwrap(); - -// TODO: test -// } #[tokio::test] async fn get_yaml() { From cd1419e4663216b14ee247cffe329218f0509706 Mon Sep 17 00:00:00 2001 From: Algernon O'Crescendo Date: Mon, 28 Jul 2025 18:42:41 -0400 Subject: [PATCH 2/5] config option to create an archive node cfg file --- tools/config/src/config_cli.rs | 17 ++++++++++++++-- tools/config/src/make_yaml_public_fullnode.rs | 20 +++++++++++++------ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/tools/config/src/config_cli.rs b/tools/config/src/config_cli.rs index bb96f8328..4b406f46f 100644 --- a/tools/config/src/config_cli.rs +++ b/tools/config/src/config_cli.rs @@ -7,6 +7,7 @@ use crate::{ }; use anyhow::{bail, Context, Result}; use clap::Parser; +use dialoguer::Select; use libra_types::{ core_types::network_playlist::NetworkPlaylist, exports::{AccountAddress, AuthenticationKey, NamedChain}, @@ -211,8 +212,20 @@ impl ConfigCli { Some(ConfigSub::FullnodeInit { home_path }) => { download_genesis(home_path.to_owned()).await?; println!("downloaded genesis block"); - - let p = init_fullnode_yaml(home_path.to_owned(), true).await?; + let sync_options = vec!["Fast Sync (default)", "Archive (full history)"]; + let selection = Select::new() + .with_prompt("choose fullnode sync mode") + .default(0) + .items(&sync_options) + .interact()?; + + let archive_mode = match selection { + 0 => false, + _ => true, + }; + + // You can now use `archive_mode` to configure the fullnode accordingly. + let p = init_fullnode_yaml(home_path.to_owned(), true, archive_mode).await?; println!("config created at {}", p.display()); diff --git a/tools/config/src/make_yaml_public_fullnode.rs b/tools/config/src/make_yaml_public_fullnode.rs index 92d1ee275..84154d335 100644 --- a/tools/config/src/make_yaml_public_fullnode.rs +++ b/tools/config/src/make_yaml_public_fullnode.rs @@ -31,10 +31,14 @@ struct GithubContent { pub async fn init_fullnode_yaml( home_dir: Option, overwrite_peers: bool, + archive_mode: bool, ) -> anyhow::Result { let waypoint = get_genesis_waypoint(home_dir.clone()).await?; - let yaml = make_fullnode_yaml(home_dir.clone(), waypoint)?; + let yaml = match archive_mode { + true => make_fullnode_archive_yaml(home_dir.clone(), waypoint)?, + false => make_fullnode_fast_sync_yaml(home_dir.clone(), waypoint)?, + }; let home = home_dir.unwrap_or_else(global_config_dir); let p = home.join(FN_FILENAME); @@ -85,10 +89,12 @@ pub async fn fetch_seed_addresses( Ok(seeds) } - /// A fullnode config which does a fast sync to the chain /// as opposed to the default fullnode config for archive nodes. -pub fn make_fast_sync_yaml(home_dir: Option, waypoint: Waypoint) -> anyhow::Result { +pub fn make_fullnode_fast_sync_yaml( + home_dir: Option, + waypoint: Waypoint, +) -> anyhow::Result { let home_dir = home_dir.unwrap_or_else(global_config_dir); let path = home_dir.display().to_string(); @@ -123,7 +129,10 @@ api: } /// Create a fullnode yaml to bootstrap node -pub fn make_fullnode_yaml(home_dir: Option, waypoint: Waypoint) -> anyhow::Result { +pub fn make_fullnode_archive_yaml( + home_dir: Option, + waypoint: Waypoint, +) -> anyhow::Result { let home_dir = home_dir.unwrap_or_else(global_config_dir); let path = home_dir.display().to_string(); @@ -235,7 +244,6 @@ mempool: Ok(template) } - #[tokio::test] async fn get_yaml() { use std::str::FromStr; @@ -243,7 +251,7 @@ async fn get_yaml() { let seeds = fetch_seed_addresses(None).await.unwrap(); - let y = make_fullnode_yaml( + let y = make_fullnode_archive_yaml( Some(p.clone()), Waypoint::from_str("0:95023f4d6a7e24cac3e52cad29697184db260214210b57aef3f1031ad4d8c02c") .unwrap(), From 0a47a785ae72f51d1a6c739f15372d71d4df6ae6 Mon Sep 17 00:00:00 2001 From: Basil MacPianissimo Date: Mon, 28 Jul 2025 18:48:41 -0400 Subject: [PATCH 3/5] update validator configs to keep full history --- tools/config/src/make_yaml_validator.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/config/src/make_yaml_validator.rs b/tools/config/src/make_yaml_validator.rs index cb01eb7b4..38695ed2c 100644 --- a/tools/config/src/make_yaml_validator.rs +++ b/tools/config/src/make_yaml_validator.rs @@ -47,6 +47,20 @@ validator_network: type: 'from_file' path: {path}/validator-identity.yaml +state_sync: + state_sync_driver: + bootstrapping_mode: ExecuteOrApplyFromGenesis + continuous_syncing_mode: ApplyTransactionOutputs + +storage: + storage_pruner_config: + ledger_pruner_config: + enable: false + state_merkle_pruner_config: + enable: false + epoch_snapshot_pruner_config: + enable: false + full_node_networks: - network_id: private: 'vfn' From 4cf8650780ed8387b8495c34a701f4b7f6717d07 Mon Sep 17 00:00:00 2001 From: Caty Heron Date: Wed, 30 Jul 2025 11:38:10 -0400 Subject: [PATCH 4/5] patch lint --- tools/config/src/config_cli.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/config/src/config_cli.rs b/tools/config/src/config_cli.rs index 4b406f46f..0b3134397 100644 --- a/tools/config/src/config_cli.rs +++ b/tools/config/src/config_cli.rs @@ -219,10 +219,7 @@ impl ConfigCli { .items(&sync_options) .interact()?; - let archive_mode = match selection { - 0 => false, - _ => true, - }; + let archive_mode = selection != 0; // You can now use `archive_mode` to configure the fullnode accordingly. let p = init_fullnode_yaml(home_path.to_owned(), true, archive_mode).await?; From bbd3fef8ef75b45803a46c764cae7d6f22203431 Mon Sep 17 00:00:00 2001 From: Gabi McAndante Date: Wed, 30 Jul 2025 11:42:10 -0400 Subject: [PATCH 5/5] increase max_outbound_connections from 4 to 10 --- tools/config/src/make_yaml_public_fullnode.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/config/src/make_yaml_public_fullnode.rs b/tools/config/src/make_yaml_public_fullnode.rs index 84154d335..f87215b4a 100644 --- a/tools/config/src/make_yaml_public_fullnode.rs +++ b/tools/config/src/make_yaml_public_fullnode.rs @@ -118,6 +118,7 @@ state_sync: full_node_networks: - network_id: 'public' listen_address: '/ip4/0.0.0.0/tcp/6182' + max_outbound_connections: 10 api: @@ -164,7 +165,7 @@ storage: full_node_networks: - network_id: 'public' listen_address: '/ip4/0.0.0.0/tcp/6182' - + max_outbound_connections: 10 api: enabled: true @@ -213,6 +214,7 @@ storage: full_node_networks: - network_id: 'public' listen_address: '/ip4/0.0.0.0/tcp/6182' + max_outbound_connections: 10 identity: type: 'from_file' path: {path}/validator-full-node-identity.yaml