From 873c20ec5bb3f1172c8ef9797752eb6d6b778ece Mon Sep 17 00:00:00 2001 From: Omer Yacine Date: Fri, 16 Aug 2024 12:40:57 +0200 Subject: [PATCH] zombie: fix a couple of pitfalls outdated urls, a runtime panic, non-zero scan blocks per iteration --- .gitignore | 3 +- .../utxo/utxo_builder/utxo_coin_builder.rs | 3 +- mm2src/coins/z_coin.rs | 24 ++++++++++++---- mm2src/coins/z_coin/z_coin_native_tests.rs | 12 ++------ mm2src/coins/z_coin/z_rpc.rs | 4 +-- mm2src/mm2_test_helpers/src/for_tests.rs | 28 +++++++++++-------- 6 files changed, 43 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index e7735b0e63..37c4968be4 100755 --- a/.gitignore +++ b/.gitignore @@ -73,4 +73,5 @@ MM2.json [._]sw[a-p] # mergetool -*.orig \ No newline at end of file +*.orig +hidden \ No newline at end of file diff --git a/mm2src/coins/utxo/utxo_builder/utxo_coin_builder.rs b/mm2src/coins/utxo/utxo_builder/utxo_coin_builder.rs index 106f78374e..577f51855c 100644 --- a/mm2src/coins/utxo/utxo_builder/utxo_coin_builder.rs +++ b/mm2src/coins/utxo/utxo_builder/utxo_coin_builder.rs @@ -775,8 +775,7 @@ pub trait UtxoCoinBuilderCommonOps { }; let secs_since_date = current_time_sec - date_s; - // FIXME: This panics subtract with overflow. - let days_since_date = (secs_since_date / DAY_IN_SECONDS) - 1; + let days_since_date = (secs_since_date / DAY_IN_SECONDS).min(1) - 1; let blocks_to_sync = (days_since_date * blocks_per_day) + blocks_per_day; if current_block_height < blocks_to_sync { diff --git a/mm2src/coins/z_coin.rs b/mm2src/coins/z_coin.rs index a9fd085846..d443fad4ec 100644 --- a/mm2src/coins/z_coin.rs +++ b/mm2src/coins/z_coin.rs @@ -46,9 +46,8 @@ use async_trait::async_trait; use bitcrypto::dhash256; use chain::constants::SEQUENCE_FINAL; use chain::{Transaction as UtxoTx, TransactionOutput}; -use common::calc_total_pages; use common::executor::{AbortableSystem, AbortedError}; -use common::{log, one_thousand_u32}; +use common::{calc_total_pages, log}; use crypto::privkey::{key_pair_from_secret, secp_privkey_from_hash}; use crypto::HDPathToCoin; use crypto::{Bip32DerPathOps, GlobalHDAccountArc}; @@ -70,6 +69,7 @@ use serialization::CoinVariant; use std::collections::{HashMap, HashSet}; use std::convert::TryInto; use std::iter; +use std::num::NonZeroU32; use std::path::PathBuf; use std::sync::Arc; pub use z_coin_errors::*; @@ -748,19 +748,31 @@ pub enum ZcoinRpcMode { } #[derive(Clone, Deserialize)] +#[serde(default)] pub struct ZcoinActivationParams { pub mode: ZcoinRpcMode, pub required_confirmations: Option, pub requires_notarization: Option, pub zcash_params_path: Option, - #[serde(default = "one_thousand_u32")] - pub scan_blocks_per_iteration: u32, - #[serde(default)] + pub scan_blocks_per_iteration: NonZeroU32, pub scan_interval_ms: u64, - #[serde(default)] pub account: u32, } +impl Default for ZcoinActivationParams { + fn default() -> Self { + Self { + mode: ZcoinRpcMode::Native, + required_confirmations: None, + requires_notarization: None, + zcash_params_path: None, + scan_blocks_per_iteration: NonZeroU32::new(1000).expect("1000 is a valid value"), + scan_interval_ms: 0, + account: 0, + } + } +} + pub async fn z_coin_from_conf_and_params( ctx: &MmArc, ticker: &str, diff --git a/mm2src/coins/z_coin/z_coin_native_tests.rs b/mm2src/coins/z_coin/z_coin_native_tests.rs index b97bb1d976..0aa35f6980 100644 --- a/mm2src/coins/z_coin/z_coin_native_tests.rs +++ b/mm2src/coins/z_coin/z_coin_native_tests.rs @@ -2,7 +2,7 @@ use bitcrypto::dhash160; use common::custom_futures::timeout::FutureTimerExt; use common::{block_on, now_sec}; use mm2_core::mm_ctx::MmCtxBuilder; -use mm2_test_helpers::for_tests::{zombie_conf, ZOMBIE_TICKER}; +use mm2_test_helpers::for_tests::{zombie_conf, ZOMBIE_ELECTRUMS, ZOMBIE_LIGHTWALLETD_URLS, ZOMBIE_TICKER}; use std::path::PathBuf; use std::time::Duration; use zcash_client_backend::encoding::decode_extended_spending_key; @@ -33,7 +33,7 @@ fn native_zcoin_activation_params() -> ZcoinActivationParams { fn light_zcoin_activation_params() -> ZcoinActivationParams { ZcoinActivationParams { mode: ZcoinRpcMode::Light { - electrum_servers: ["zombie.dragonhound.info:10033", "zombie.dragonhound.info:10133"] + electrum_servers: ZOMBIE_ELECTRUMS .iter() .map(|s| ElectrumRpcRequest { url: s.to_string(), @@ -41,13 +41,7 @@ fn light_zcoin_activation_params() -> ZcoinActivationParams { disable_cert_verification: Default::default(), }) .collect(), - light_wallet_d_servers: [ - "https://zombie.dragonhound.info:443", - "https://zombie.dragonhound.info:1443", - ] - .iter() - .map(|s| s.to_string()) - .collect(), + light_wallet_d_servers: ZOMBIE_LIGHTWALLETD_URLS.iter().map(|s| s.to_string()).collect(), sync_params: Some(crate::z_coin::SyncStartPoint::Date(now_sec() - 24 * 60 * 60)), skip_sync_params: None, }, diff --git a/mm2src/coins/z_coin/z_rpc.rs b/mm2src/coins/z_coin/z_rpc.rs index 61f3d6a291..7bfd299bdc 100644 --- a/mm2src/coins/z_coin/z_rpc.rs +++ b/mm2src/coins/z_coin/z_rpc.rs @@ -567,7 +567,7 @@ pub(super) async fn init_light_client<'a>( main_sync_state_finished: false, on_tx_gen_watcher, watch_for_tx: None, - scan_blocks_per_iteration: builder.z_coin_params.scan_blocks_per_iteration, + scan_blocks_per_iteration: builder.z_coin_params.scan_blocks_per_iteration.into(), scan_interval_ms: builder.z_coin_params.scan_interval_ms, first_sync_block: first_sync_block.clone(), streaming_manager: builder.ctx.event_stream_manager.clone(), @@ -614,7 +614,7 @@ pub(super) async fn init_native_client<'a>( main_sync_state_finished: false, on_tx_gen_watcher, watch_for_tx: None, - scan_blocks_per_iteration: builder.z_coin_params.scan_blocks_per_iteration, + scan_blocks_per_iteration: builder.z_coin_params.scan_blocks_per_iteration.into(), scan_interval_ms: builder.z_coin_params.scan_interval_ms, first_sync_block: first_sync_block.clone(), streaming_manager: builder.ctx.event_stream_manager.clone(), diff --git a/mm2src/mm2_test_helpers/src/for_tests.rs b/mm2src/mm2_test_helpers/src/for_tests.rs index d207462f57..dd6b612695 100644 --- a/mm2src/mm2_test_helpers/src/for_tests.rs +++ b/mm2src/mm2_test_helpers/src/for_tests.rs @@ -194,21 +194,21 @@ pub const MARTY_ELECTRUM_ADDRS: &[&str] = &[ "electrum3.cipig.net:10021", ]; pub const ZOMBIE_TICKER: &str = "ZOMBIE"; +#[cfg(not(target_arch = "wasm32"))] +pub const ZOMBIE_ELECTRUMS: &[&str] = &["zombie.dragonhound.info:10033", "zombie.dragonhound.info:10133"]; +#[cfg(target_arch = "wasm32")] +pub const ZOMBIE_ELECTRUMS: &[&str] = &["zombie.dragonhound.info:30058", "zombie.dragonhound.info:30059"]; +pub const ZOMBIE_LIGHTWALLETD_URLS: &[&str] = &[ + "https://zombie.dragonhound.info:443", + "https://zombie.dragonhound.info:1443", +]; pub const ARRR: &str = "ARRR"; -pub const ZOMBIE_ELECTRUMS: &[&str] = &[ +#[cfg(not(target_arch = "wasm32"))] +pub const PIRATE_ELECTRUMS: &[&str] = &[ "electrum1.cipig.net:10008", "electrum2.cipig.net:10008", "electrum3.cipig.net:10008", ]; -pub const ZOMBIE_LIGHTWALLETD_URLS: &[&str] = &[ - "https://lightd1.pirate.black:443", - "https://piratelightd1.cryptoforge.cc:443", - "https://piratelightd2.cryptoforge.cc:443", - "https://piratelightd3.cryptoforge.cc:443", - "https://piratelightd4.cryptoforge.cc:443", -]; -#[cfg(not(target_arch = "wasm32"))] -pub const PIRATE_ELECTRUMS: &[&str] = &["node1.chainkeeper.pro:10132"]; #[cfg(target_arch = "wasm32")] pub const PIRATE_ELECTRUMS: &[&str] = &[ "electrum3.cipig.net:30008", @@ -216,7 +216,13 @@ pub const PIRATE_ELECTRUMS: &[&str] = &[ "electrum2.cipig.net:30008", ]; #[cfg(not(target_arch = "wasm32"))] -pub const PIRATE_LIGHTWALLETD_URLS: &[&str] = &["http://node1.chainkeeper.pro:443"]; +pub const PIRATE_LIGHTWALLETD_URLS: &[&str] = &[ + "https://lightd1.pirate.black:443", + "https://piratelightd1.cryptoforge.cc:443", + "https://piratelightd2.cryptoforge.cc:443", + "https://piratelightd3.cryptoforge.cc:443", + "https://piratelightd4.cryptoforge.cc:443", +]; #[cfg(target_arch = "wasm32")] pub const PIRATE_LIGHTWALLETD_URLS: &[&str] = &["https://pirate.battlefield.earth:8581"]; pub const DEFAULT_RPC_PASSWORD: &str = "pass";