From 0112c67b6031b55a6c73f797db52d64a1b4ee38a Mon Sep 17 00:00:00 2001 From: Wei Chen Date: Sun, 12 Nov 2023 21:31:44 +0800 Subject: [PATCH] chore: rename `ConfirmationTimeAnchor` to `ConfirmationTimeHeightAnchor` An `Anchor` implementation that records both height and time should have both attributes included in the name. --- crates/bdk/src/wallet/mod.rs | 43 +++++++++++-------- crates/chain/src/chain_data.rs | 10 ++--- crates/electrum/src/electrum_ext.rs | 8 ++-- crates/esplora/src/async_ext.rs | 12 +++--- crates/esplora/src/blocking_ext.rs | 12 +++--- crates/esplora/src/lib.rs | 6 +-- .../example_bitcoind_rpc_polling/src/main.rs | 4 +- example-crates/example_esplora/src/main.rs | 4 +- 8 files changed, 54 insertions(+), 45 deletions(-) diff --git a/crates/bdk/src/wallet/mod.rs b/crates/bdk/src/wallet/mod.rs index 659da90a2..bc5093ce3 100644 --- a/crates/bdk/src/wallet/mod.rs +++ b/crates/bdk/src/wallet/mod.rs @@ -25,7 +25,7 @@ use bdk_chain::{ keychain::{self, KeychainTxOutIndex}, local_chain::{self, CannotConnectError, CheckPoint, CheckPointIter, LocalChain}, tx_graph::{CanonicalTx, TxGraph}, - Append, BlockId, ChainPosition, ConfirmationTime, ConfirmationTimeAnchor, FullTxOut, + Append, BlockId, ChainPosition, ConfirmationTime, ConfirmationTimeHeightAnchor, FullTxOut, IndexedTxGraph, Persist, PersistBackend, }; use bitcoin::consensus::encode::serialize; @@ -89,7 +89,7 @@ pub struct Wallet { signers: Arc, change_signers: Arc, chain: LocalChain, - indexed_graph: IndexedTxGraph>, + indexed_graph: IndexedTxGraph>, persist: Persist, network: Network, secp: SecpCtx, @@ -105,7 +105,7 @@ pub struct Update { pub last_active_indices: BTreeMap, /// Update for the wallet's internal [`TxGraph`]. - pub graph: TxGraph, + pub graph: TxGraph, /// Update for the wallet's internal [`LocalChain`]. /// @@ -124,8 +124,10 @@ pub struct ChangeSet { /// Changes to [`IndexedTxGraph`]. /// /// [`IndexedTxGraph`]: bdk_chain::indexed_tx_graph::IndexedTxGraph - pub indexed_tx_graph: - indexed_tx_graph::ChangeSet>, + pub indexed_tx_graph: indexed_tx_graph::ChangeSet< + ConfirmationTimeHeightAnchor, + keychain::ChangeSet, + >, } impl Append for ChangeSet { @@ -148,12 +150,17 @@ impl From for ChangeSet { } } -impl From>> - for ChangeSet +impl + From< + indexed_tx_graph::ChangeSet< + ConfirmationTimeHeightAnchor, + keychain::ChangeSet, + >, + > for ChangeSet { fn from( indexed_tx_graph: indexed_tx_graph::ChangeSet< - ConfirmationTimeAnchor, + ConfirmationTimeHeightAnchor, keychain::ChangeSet, >, ) -> Self { @@ -279,8 +286,10 @@ impl Wallet { { let secp = Secp256k1::new(); let mut chain = LocalChain::default(); - let mut indexed_graph = - IndexedTxGraph::>::default(); + let mut indexed_graph = IndexedTxGraph::< + ConfirmationTimeHeightAnchor, + KeychainTxOutIndex, + >::default(); let (descriptor, keymap) = into_wallet_descriptor_checked(descriptor, &secp, network) .map_err(NewError::Descriptor)?; @@ -654,7 +663,7 @@ impl Wallet { pub fn get_tx( &self, txid: Txid, - ) -> Option> { + ) -> Option> { let graph = self.indexed_graph.graph(); Some(CanonicalTx { @@ -724,7 +733,7 @@ impl Wallet { tip_height: self.chain.tip().map(|b| b.height()), tx_height: height, }) - .map(|(&anchor_height, &hash)| ConfirmationTimeAnchor { + .map(|(&anchor_height, &hash)| ConfirmationTimeHeightAnchor { anchor_block: BlockId { height: anchor_height, hash, @@ -756,7 +765,7 @@ impl Wallet { /// Iterate over the transactions in the wallet. pub fn transactions( &self, - ) -> impl Iterator> + '_ { + ) -> impl Iterator> + '_ { self.indexed_graph.graph().list_chain_txs( &self.chain, self.chain.tip().map(|cp| cp.block_id()).unwrap_or_default(), @@ -1973,7 +1982,7 @@ impl Wallet { } /// Get a reference to the inner [`TxGraph`]. - pub fn tx_graph(&self) -> &TxGraph { + pub fn tx_graph(&self) -> &TxGraph { self.indexed_graph.graph() } @@ -1988,8 +1997,8 @@ impl Wallet { } } -impl AsRef> for Wallet { - fn as_ref(&self) -> &bdk_chain::tx_graph::TxGraph { +impl AsRef> for Wallet { + fn as_ref(&self) -> &bdk_chain::tx_graph::TxGraph { self.indexed_graph.graph() } } @@ -2028,7 +2037,7 @@ where fn new_local_utxo( keychain: KeychainKind, derivation_index: u32, - full_txo: FullTxOut, + full_txo: FullTxOut, ) -> LocalUtxo { LocalUtxo { outpoint: full_txo.outpoint, diff --git a/crates/chain/src/chain_data.rs b/crates/chain/src/chain_data.rs index 537f0bf7e..4da644965 100644 --- a/crates/chain/src/chain_data.rs +++ b/crates/chain/src/chain_data.rs @@ -74,8 +74,8 @@ impl ConfirmationTime { } } -impl From> for ConfirmationTime { - fn from(observed_as: ChainPosition) -> Self { +impl From> for ConfirmationTime { + fn from(observed_as: ChainPosition) -> Self { match observed_as { ChainPosition::Confirmed(a) => Self::Confirmed { height: a.confirmation_height, @@ -193,7 +193,7 @@ impl AnchorFromBlockPosition for ConfirmationHeightAnchor { derive(serde::Deserialize, serde::Serialize), serde(crate = "serde_crate") )] -pub struct ConfirmationTimeAnchor { +pub struct ConfirmationTimeHeightAnchor { /// The anchor block. pub anchor_block: BlockId, /// The confirmation height of the chain data being anchored. @@ -202,7 +202,7 @@ pub struct ConfirmationTimeAnchor { pub confirmation_time: u64, } -impl Anchor for ConfirmationTimeAnchor { +impl Anchor for ConfirmationTimeHeightAnchor { fn anchor_block(&self) -> BlockId { self.anchor_block } @@ -212,7 +212,7 @@ impl Anchor for ConfirmationTimeAnchor { } } -impl AnchorFromBlockPosition for ConfirmationTimeAnchor { +impl AnchorFromBlockPosition for ConfirmationTimeHeightAnchor { fn from_block_position(block: &bitcoin::Block, block_id: BlockId, _tx_pos: usize) -> Self { Self { anchor_block: block_id, diff --git a/crates/electrum/src/electrum_ext.rs b/crates/electrum/src/electrum_ext.rs index 7ac16a046..5f8623abb 100644 --- a/crates/electrum/src/electrum_ext.rs +++ b/crates/electrum/src/electrum_ext.rs @@ -2,7 +2,7 @@ use bdk_chain::{ bitcoin::{OutPoint, ScriptBuf, Transaction, Txid}, local_chain::{self, CheckPoint}, tx_graph::{self, TxGraph}, - Anchor, BlockId, ConfirmationHeightAnchor, ConfirmationTimeAnchor, + Anchor, BlockId, ConfirmationHeightAnchor, ConfirmationTimeHeightAnchor, }; use electrum_client::{Client, ElectrumApi, Error, HeaderNotification}; use std::{ @@ -57,7 +57,7 @@ impl RelevantTxids { } /// Finalizes [`RelevantTxids`] with `new_txs` and anchors of type - /// [`ConfirmationTimeAnchor`]. + /// [`ConfirmationTimeHeightAnchor`]. /// /// **Note:** The confirmation time might not be precisely correct if there has been a reorg. /// Electrum's API intends that we use the merkle proof API, we should change `bdk_electrum` to @@ -67,7 +67,7 @@ impl RelevantTxids { client: &Client, seen_at: Option, missing: Vec, - ) -> Result, Error> { + ) -> Result, Error> { let graph = self.into_tx_graph(client, seen_at, missing)?; let relevant_heights = { @@ -103,7 +103,7 @@ impl RelevantTxids { .map(|(height_anchor, txid)| { let confirmation_height = height_anchor.confirmation_height; let confirmation_time = height_to_time[&confirmation_height]; - let time_anchor = ConfirmationTimeAnchor { + let time_anchor = ConfirmationTimeHeightAnchor { anchor_block: height_anchor.anchor_block, confirmation_height, confirmation_time, diff --git a/crates/esplora/src/async_ext.rs b/crates/esplora/src/async_ext.rs index 279c8e962..10df02d44 100644 --- a/crates/esplora/src/async_ext.rs +++ b/crates/esplora/src/async_ext.rs @@ -4,7 +4,7 @@ use bdk_chain::{ bitcoin::{BlockHash, OutPoint, ScriptBuf, Txid}, collections::{BTreeMap, BTreeSet}, local_chain::{self, CheckPoint}, - BlockId, ConfirmationTimeAnchor, TxGraph, + BlockId, ConfirmationTimeHeightAnchor, TxGraph, }; use esplora_client::{Error, TxStatus}; use futures::{stream::FuturesOrdered, TryStreamExt}; @@ -40,7 +40,7 @@ pub trait EsploraAsyncExt { /// indices. /// /// * `keychain_spks`: keychains that we want to scan transactions for - /// * `txids`: transactions for which we want updated [`ConfirmationTimeAnchor`]s + /// * `txids`: transactions for which we want updated [`ConfirmationTimeHeightAnchor`]s /// * `outpoints`: transactions associated with these outpoints (residing, spending) that we /// want to include in the update /// @@ -58,7 +58,7 @@ pub trait EsploraAsyncExt { outpoints: impl IntoIterator + Send> + Send, stop_gap: usize, parallel_requests: usize, - ) -> Result<(TxGraph, BTreeMap), Error>; + ) -> Result<(TxGraph, BTreeMap), Error>; /// Convenience method to call [`scan_txs_with_keychains`] without requiring a keychain. /// @@ -70,7 +70,7 @@ pub trait EsploraAsyncExt { txids: impl IntoIterator + Send> + Send, outpoints: impl IntoIterator + Send> + Send, parallel_requests: usize, - ) -> Result, Error> { + ) -> Result, Error> { self.scan_txs_with_keychains( [( (), @@ -211,10 +211,10 @@ impl EsploraAsyncExt for esplora_client::AsyncClient { outpoints: impl IntoIterator + Send> + Send, stop_gap: usize, parallel_requests: usize, - ) -> Result<(TxGraph, BTreeMap), Error> { + ) -> Result<(TxGraph, BTreeMap), Error> { type TxsOfSpkIndex = (u32, Vec); let parallel_requests = Ord::max(parallel_requests, 1); - let mut graph = TxGraph::::default(); + let mut graph = TxGraph::::default(); let mut last_active_indexes = BTreeMap::::new(); for (keychain, spks) in keychain_spks { diff --git a/crates/esplora/src/blocking_ext.rs b/crates/esplora/src/blocking_ext.rs index 17c364ca9..84c7fd4b6 100644 --- a/crates/esplora/src/blocking_ext.rs +++ b/crates/esplora/src/blocking_ext.rs @@ -5,7 +5,7 @@ use bdk_chain::collections::{BTreeMap, BTreeSet}; use bdk_chain::{ bitcoin::{BlockHash, OutPoint, ScriptBuf, Txid}, local_chain::{self, CheckPoint}, - BlockId, ConfirmationTimeAnchor, TxGraph, + BlockId, ConfirmationTimeHeightAnchor, TxGraph, }; use esplora_client::{Error, TxStatus}; @@ -38,7 +38,7 @@ pub trait EsploraExt { /// indices. /// /// * `keychain_spks`: keychains that we want to scan transactions for - /// * `txids`: transactions for which we want updated [`ConfirmationTimeAnchor`]s + /// * `txids`: transactions for which we want updated [`ConfirmationTimeHeightAnchor`]s /// * `outpoints`: transactions associated with these outpoints (residing, spending) that we /// want to include in the update /// @@ -53,7 +53,7 @@ pub trait EsploraExt { outpoints: impl IntoIterator, stop_gap: usize, parallel_requests: usize, - ) -> Result<(TxGraph, BTreeMap), Error>; + ) -> Result<(TxGraph, BTreeMap), Error>; /// Convenience method to call [`scan_txs_with_keychains`] without requiring a keychain. /// @@ -65,7 +65,7 @@ pub trait EsploraExt { txids: impl IntoIterator, outpoints: impl IntoIterator, parallel_requests: usize, - ) -> Result, Error> { + ) -> Result, Error> { self.scan_txs_with_keychains( [( (), @@ -199,10 +199,10 @@ impl EsploraExt for esplora_client::BlockingClient { outpoints: impl IntoIterator, stop_gap: usize, parallel_requests: usize, - ) -> Result<(TxGraph, BTreeMap), Error> { + ) -> Result<(TxGraph, BTreeMap), Error> { type TxsOfSpkIndex = (u32, Vec); let parallel_requests = Ord::max(parallel_requests, 1); - let mut graph = TxGraph::::default(); + let mut graph = TxGraph::::default(); let mut last_active_indexes = BTreeMap::::new(); for (keychain, spks) in keychain_spks { diff --git a/crates/esplora/src/lib.rs b/crates/esplora/src/lib.rs index 9954ccec0..e8c667277 100644 --- a/crates/esplora/src/lib.rs +++ b/crates/esplora/src/lib.rs @@ -1,5 +1,5 @@ #![doc = include_str!("../README.md")] -use bdk_chain::{BlockId, ConfirmationTimeAnchor}; +use bdk_chain::{BlockId, ConfirmationTimeHeightAnchor}; use esplora_client::TxStatus; pub use esplora_client; @@ -16,7 +16,7 @@ pub use async_ext::*; const ASSUME_FINAL_DEPTH: u32 = 15; -fn anchor_from_status(status: &TxStatus) -> Option { +fn anchor_from_status(status: &TxStatus) -> Option { if let TxStatus { block_height: Some(height), block_hash: Some(hash), @@ -24,7 +24,7 @@ fn anchor_from_status(status: &TxStatus) -> Option { .. } = status.clone() { - Some(ConfirmationTimeAnchor { + Some(ConfirmationTimeHeightAnchor { anchor_block: BlockId { height, hash }, confirmation_height: height, confirmation_time: time, diff --git a/example-crates/example_bitcoind_rpc_polling/src/main.rs b/example-crates/example_bitcoind_rpc_polling/src/main.rs index 32735022d..f0b9996d3 100644 --- a/example-crates/example_bitcoind_rpc_polling/src/main.rs +++ b/example-crates/example_bitcoind_rpc_polling/src/main.rs @@ -15,7 +15,7 @@ use bdk_chain::{ bitcoin::{Block, Transaction}, indexed_tx_graph, keychain, local_chain::{self, CheckPoint, LocalChain}, - ConfirmationTimeAnchor, IndexedTxGraph, + ConfirmationTimeHeightAnchor, IndexedTxGraph, }; use example_cli::{ anyhow, @@ -37,7 +37,7 @@ const DB_COMMIT_DELAY: Duration = Duration::from_secs(60); type ChangeSet = ( local_chain::ChangeSet, - indexed_tx_graph::ChangeSet>, + indexed_tx_graph::ChangeSet>, ); #[derive(Debug)] diff --git a/example-crates/example_esplora/src/main.rs b/example-crates/example_esplora/src/main.rs index d2ba62d0b..df669d36f 100644 --- a/example-crates/example_esplora/src/main.rs +++ b/example-crates/example_esplora/src/main.rs @@ -9,7 +9,7 @@ use bdk_chain::{ indexed_tx_graph::{self, IndexedTxGraph}, keychain, local_chain::{self, CheckPoint, LocalChain}, - Append, ConfirmationTimeAnchor, + Append, ConfirmationTimeHeightAnchor, }; use bdk_esplora::{esplora_client, EsploraExt}; @@ -25,7 +25,7 @@ const DB_PATH: &str = ".bdk_esplora_example.db"; type ChangeSet = ( local_chain::ChangeSet, - indexed_tx_graph::ChangeSet>, + indexed_tx_graph::ChangeSet>, ); #[derive(Subcommand, Debug, Clone)]