From 7f8af7926d9a77924cb2a1c7a9a4f322319f1470 Mon Sep 17 00:00:00 2001 From: Daniel Karzel Date: Wed, 12 May 2021 11:25:45 +1000 Subject: [PATCH] ASB config may specify finality confirmations By default the finality confirmations of the network's `env::Config` will be applied and no finality confirmations will be persisted on disk in the config file. It is however possible to set finality confirmations in the config file for bitcoin and monero for power users at their own risk. If set the defaults will be overwritten with the parameter from the config file upon startup. --- swap/src/asb/config.rs | 6 ++++++ swap/src/bin/asb.rs | 7 +------ swap/src/env.rs | 28 ++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/swap/src/asb/config.rs b/swap/src/asb/config.rs index 08ba65c5..c27a04da 100644 --- a/swap/src/asb/config.rs +++ b/swap/src/asb/config.rs @@ -293,10 +293,12 @@ pub fn query_user_for_initial_config(testnet: bool) -> Result { bitcoin: Bitcoin { electrum_rpc_url, target_block, + finality_confirmations: None, network: bitcoin_network, }, monero: Monero { wallet_rpc_url: monero_wallet_rpc_url, + finality_confirmations: None, network: monero_network, }, tor: TorConf { @@ -330,6 +332,7 @@ mod tests { bitcoin: Bitcoin { electrum_rpc_url: defaults.electrum_rpc_url, target_block: defaults.bitcoin_confirmation_target, + finality_confirmations: None, network: bitcoin::Network::Testnet, }, network: Network { @@ -338,6 +341,7 @@ mod tests { monero: Monero { wallet_rpc_url: defaults.monero_wallet_rpc_url, + finality_confirmations: None, network: monero::Network::Stagenet, }, tor: Default::default(), @@ -368,6 +372,7 @@ mod tests { bitcoin: Bitcoin { electrum_rpc_url: defaults.electrum_rpc_url, target_block: defaults.bitcoin_confirmation_target, + finality_confirmations: None, network: bitcoin::Network::Bitcoin, }, network: Network { @@ -376,6 +381,7 @@ mod tests { monero: Monero { wallet_rpc_url: defaults.monero_wallet_rpc_url, + finality_confirmations: None, network: monero::Network::Mainnet, }, tor: Default::default(), diff --git a/swap/src/bin/asb.rs b/swap/src/bin/asb.rs index 511955ac..d32ba3af 100644 --- a/swap/src/bin/asb.rs +++ b/swap/src/bin/asb.rs @@ -26,7 +26,6 @@ use swap::asb::config::{ GetDefaults, }; use swap::database::Database; -use swap::env::GetConfig; use swap::monero::Amount; use swap::network::swarm; use swap::protocol::alice; @@ -69,11 +68,7 @@ async fn main() -> Result<()> { } }; - let env_config = if testnet { - env::Testnet::get_config() - } else { - env::Mainnet::get_config() - }; + let env_config = env::new(testnet, &config); if config.monero.network != env_config.monero_network { bail!(format!( diff --git a/swap/src/env.rs b/swap/src/env.rs index 3164c3bd..e7834e6a 100644 --- a/swap/src/env.rs +++ b/swap/src/env.rs @@ -1,3 +1,4 @@ +use crate::asb; use crate::bitcoin::{CancelTimelock, PunishTimelock}; use std::cmp::max; use std::time::Duration; @@ -91,6 +92,33 @@ fn sync_interval(avg_block_time: Duration) -> Duration { max(avg_block_time / 10, Duration::from_secs(1)) } +pub fn new(is_testnet: bool, asb_config: &asb::config::Config) -> Config { + let env_config = if is_testnet { + Testnet::get_config() + } else { + Mainnet::get_config() + }; + + let env_config = + if let Some(bitcoin_finality_confirmations) = asb_config.bitcoin.finality_confirmations { + Config { + bitcoin_finality_confirmations, + ..env_config + } + } else { + env_config + }; + + if let Some(monero_finality_confirmations) = asb_config.monero.finality_confirmations { + Config { + monero_finality_confirmations, + ..env_config + } + } else { + env_config + } +} + #[cfg(test)] mod tests { use super::*;