[wallet_redesign] Move the majority of Update
to bdk_chain
This is to make it easier for chain source crates to formulate updates.
This commit is contained in:
parent
e69fccb15f
commit
aba88130d9
@ -22,7 +22,7 @@ use alloc::{
|
|||||||
pub use bdk_chain::keychain::Balance;
|
pub use bdk_chain::keychain::Balance;
|
||||||
use bdk_chain::{
|
use bdk_chain::{
|
||||||
indexed_tx_graph::{IndexedAdditions, IndexedTxGraph},
|
indexed_tx_graph::{IndexedAdditions, IndexedTxGraph},
|
||||||
keychain::{DerivationAdditions, KeychainTxOutIndex},
|
keychain::{DerivationAdditions, KeychainTxOutIndex, LocalUpdate},
|
||||||
local_chain::{self, LocalChain, UpdateNotConnectedError},
|
local_chain::{self, LocalChain, UpdateNotConnectedError},
|
||||||
tx_graph::{CanonicalTx, TxGraph},
|
tx_graph::{CanonicalTx, TxGraph},
|
||||||
Anchor, Append, BlockId, ConfirmationTime, ConfirmationTimeAnchor, FullTxOut, ObservedAs,
|
Anchor, Append, BlockId, ConfirmationTime, ConfirmationTimeAnchor, FullTxOut, ObservedAs,
|
||||||
@ -94,21 +94,14 @@ pub struct Wallet<D = ()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// The update to a [`Wallet`] used in [`Wallet::apply_update`]. This is usually returned from blockchain data sources.
|
/// The update to a [`Wallet`] used in [`Wallet::apply_update`]. This is usually returned from blockchain data sources.
|
||||||
/// The type parameter `T` indicates the kind of transaction contained in the update. It's usually a [`bitcoin::Transaction`].
|
pub type Update = LocalUpdate<KeychainKind, ConfirmationTimeAnchor>;
|
||||||
#[derive(Debug, Default, PartialEq)]
|
|
||||||
pub struct Update<K = KeychainKind, A = ConfirmationTimeAnchor> {
|
|
||||||
keychain: BTreeMap<K, u32>,
|
|
||||||
graph: TxGraph<A>,
|
|
||||||
chain: LocalChain,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The changeset produced internally by applying an update
|
/// The changeset produced internally by applying an update.
|
||||||
#[derive(Debug, PartialEq, serde::Deserialize, serde::Serialize)]
|
#[derive(Debug, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(bound(
|
#[serde(bound(
|
||||||
deserialize = "A: Ord + serde::Deserialize<'de>, K: Ord + serde::Deserialize<'de>",
|
deserialize = "A: Ord + serde::Deserialize<'de>, K: Ord + serde::Deserialize<'de>",
|
||||||
serialize = "A: Ord + serde::Serialize, K: Ord + serde::Serialize"
|
serialize = "A: Ord + serde::Serialize, K: Ord + serde::Serialize"
|
||||||
))]
|
))]
|
||||||
// #[cfg_attr(predicate, attr)]
|
|
||||||
pub struct ChangeSet<K = KeychainKind, A = ConfirmationTimeAnchor> {
|
pub struct ChangeSet<K = KeychainKind, A = ConfirmationTimeAnchor> {
|
||||||
pub chain_changeset: local_chain::ChangeSet,
|
pub chain_changeset: local_chain::ChangeSet,
|
||||||
pub indexed_additions: IndexedAdditions<A, DerivationAdditions<K>>,
|
pub indexed_additions: IndexedAdditions<A, DerivationAdditions<K>>,
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
chain_graph::{self, ChainGraph},
|
chain_graph::{self, ChainGraph},
|
||||||
collections::BTreeMap,
|
collections::BTreeMap,
|
||||||
|
local_chain::LocalChain,
|
||||||
sparse_chain::ChainPosition,
|
sparse_chain::ChainPosition,
|
||||||
tx_graph::TxGraph,
|
tx_graph::TxGraph,
|
||||||
Append, ForEachTxOut,
|
Append, ForEachTxOut,
|
||||||
@ -102,6 +103,28 @@ impl<K> AsRef<BTreeMap<K, u32>> for DerivationAdditions<K> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A structure to update [`KeychainTxOutIndex`], [`TxGraph`] and [`LocalChain`]
|
||||||
|
/// atomically.
|
||||||
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
|
pub struct LocalUpdate<K, A> {
|
||||||
|
/// Last active derivation index per keychain (`K`).
|
||||||
|
pub keychain: BTreeMap<K, u32>,
|
||||||
|
/// Update for the [`TxGraph`].
|
||||||
|
pub graph: TxGraph<A>,
|
||||||
|
/// Update for the [`LocalChain`].
|
||||||
|
pub chain: LocalChain,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<K, A> Default for LocalUpdate<K, A> {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
keychain: Default::default(),
|
||||||
|
graph: Default::default(),
|
||||||
|
chain: Default::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
/// An update that includes the last active indexes of each keychain.
|
/// An update that includes the last active indexes of each keychain.
|
||||||
pub struct KeychainScan<K, P> {
|
pub struct KeychainScan<K, P> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user