[bdk_chain_redesign] MOVE TxIndex
into indexed_chain_graph.rs
`tx_graph.rs` is rearranged as well.
This commit is contained in:
parent
7d92337b93
commit
10ab77c549
@ -5,55 +5,9 @@ use bitcoin::{OutPoint, Script, Transaction, TxOut};
|
||||
use crate::{
|
||||
keychain::Balance,
|
||||
tx_graph::{Additions, TxGraph, TxNode},
|
||||
Append, BlockAnchor, BlockId, ChainOracle, FullTxOut, ObservedAs, TxIndex,
|
||||
Append, BlockAnchor, BlockId, ChainOracle, FullTxOut, ObservedAs,
|
||||
};
|
||||
|
||||
/// An outwards-facing view of a transaction that is part of the *best chain*'s history.
|
||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
||||
pub struct CanonicalTx<'a, T, A> {
|
||||
/// Where the transaction is observed (in a block or in mempool).
|
||||
pub observed_as: ObservedAs<&'a A>,
|
||||
/// The transaction with anchors and last seen timestamp.
|
||||
pub tx: TxNode<'a, T, A>,
|
||||
}
|
||||
|
||||
/// A structure that represents changes to an [`IndexedTxGraph`].
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[cfg_attr(
|
||||
feature = "serde",
|
||||
derive(serde::Deserialize, serde::Serialize),
|
||||
serde(
|
||||
crate = "serde_crate",
|
||||
bound(
|
||||
deserialize = "A: Ord + serde::Deserialize<'de>, IA: serde::Deserialize<'de>",
|
||||
serialize = "A: Ord + serde::Serialize, IA: serde::Serialize"
|
||||
)
|
||||
)
|
||||
)]
|
||||
#[must_use]
|
||||
pub struct IndexedAdditions<A, IA> {
|
||||
/// [`TxGraph`] additions.
|
||||
pub graph_additions: Additions<A>,
|
||||
/// [`TxIndex`] additions.
|
||||
pub index_additions: IA,
|
||||
}
|
||||
|
||||
impl<A, IA: Default> Default for IndexedAdditions<A, IA> {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
graph_additions: Default::default(),
|
||||
index_additions: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<A: BlockAnchor, IA: Append> Append for IndexedAdditions<A, IA> {
|
||||
fn append(&mut self, other: Self) {
|
||||
self.graph_additions.append(other.graph_additions);
|
||||
self.index_additions.append(other.index_additions);
|
||||
}
|
||||
}
|
||||
|
||||
pub struct IndexedTxGraph<A, I> {
|
||||
/// Transaction index.
|
||||
pub index: I,
|
||||
@ -367,3 +321,72 @@ impl<A: BlockAnchor, I: TxIndex> IndexedTxGraph<A, I> {
|
||||
.expect("error is infallible")
|
||||
}
|
||||
}
|
||||
|
||||
/// A structure that represents changes to an [`IndexedTxGraph`].
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[cfg_attr(
|
||||
feature = "serde",
|
||||
derive(serde::Deserialize, serde::Serialize),
|
||||
serde(
|
||||
crate = "serde_crate",
|
||||
bound(
|
||||
deserialize = "A: Ord + serde::Deserialize<'de>, IA: serde::Deserialize<'de>",
|
||||
serialize = "A: Ord + serde::Serialize, IA: serde::Serialize"
|
||||
)
|
||||
)
|
||||
)]
|
||||
#[must_use]
|
||||
pub struct IndexedAdditions<A, IA> {
|
||||
/// [`TxGraph`] additions.
|
||||
pub graph_additions: Additions<A>,
|
||||
/// [`TxIndex`] additions.
|
||||
pub index_additions: IA,
|
||||
}
|
||||
|
||||
impl<A, IA: Default> Default for IndexedAdditions<A, IA> {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
graph_additions: Default::default(),
|
||||
index_additions: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<A: BlockAnchor, IA: Append> Append for IndexedAdditions<A, IA> {
|
||||
fn append(&mut self, other: Self) {
|
||||
self.graph_additions.append(other.graph_additions);
|
||||
self.index_additions.append(other.index_additions);
|
||||
}
|
||||
}
|
||||
|
||||
/// An outwards-facing view of a transaction that is part of the *best chain*'s history.
|
||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
||||
pub struct CanonicalTx<'a, T, A> {
|
||||
/// Where the transaction is observed (in a block or in mempool).
|
||||
pub observed_as: ObservedAs<&'a A>,
|
||||
/// The transaction with anchors and last seen timestamp.
|
||||
pub tx: TxNode<'a, T, A>,
|
||||
}
|
||||
|
||||
/// Represents an index of transaction data.
|
||||
pub trait TxIndex {
|
||||
/// The resultant "additions" when new transaction data is indexed.
|
||||
type Additions;
|
||||
|
||||
/// Scan and index the given `outpoint` and `txout`.
|
||||
fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::Additions;
|
||||
|
||||
/// Scan and index the given transaction.
|
||||
fn index_tx(&mut self, tx: &Transaction) -> Self::Additions;
|
||||
|
||||
/// Apply additions to itself.
|
||||
fn apply_additions(&mut self, additions: Self::Additions);
|
||||
|
||||
/// Returns whether the txout is marked as relevant in the index.
|
||||
fn is_txout_relevant(&self, outpoint: OutPoint, txout: &TxOut) -> bool;
|
||||
|
||||
/// Returns whether the transaction is marked as relevant in the index.
|
||||
fn is_tx_relevant(&self, tx: &Transaction) -> bool;
|
||||
}
|
||||
|
||||
pub trait SpkIndex: TxIndex {}
|
||||
|
@ -1,7 +1,8 @@
|
||||
use crate::{
|
||||
collections::*,
|
||||
indexed_tx_graph::TxIndex,
|
||||
miniscript::{Descriptor, DescriptorPublicKey},
|
||||
ForEachTxOut, SpkTxOutIndex, TxIndex,
|
||||
ForEachTxOut, SpkTxOutIndex,
|
||||
};
|
||||
use alloc::{borrow::Cow, vec::Vec};
|
||||
use bitcoin::{secp256k1::Secp256k1, OutPoint, Script, TxOut};
|
||||
|
@ -2,7 +2,8 @@ use core::ops::RangeBounds;
|
||||
|
||||
use crate::{
|
||||
collections::{hash_map::Entry, BTreeMap, BTreeSet, HashMap},
|
||||
ForEachTxOut, TxIndex,
|
||||
indexed_tx_graph::TxIndex,
|
||||
ForEachTxOut,
|
||||
};
|
||||
use bitcoin::{self, OutPoint, Script, Transaction, TxOut, Txid};
|
||||
|
||||
|
@ -68,24 +68,3 @@ pub trait Append {
|
||||
impl Append for () {
|
||||
fn append(&mut self, _other: Self) {}
|
||||
}
|
||||
|
||||
/// Represents an index of transaction data.
|
||||
pub trait TxIndex {
|
||||
/// The resultant "additions" when new transaction data is indexed.
|
||||
type Additions;
|
||||
|
||||
/// Scan and index the given `outpoint` and `txout`.
|
||||
fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::Additions;
|
||||
|
||||
/// Scan and index the given transaction.
|
||||
fn index_tx(&mut self, tx: &Transaction) -> Self::Additions;
|
||||
|
||||
/// Apply additions to itself.
|
||||
fn apply_additions(&mut self, additions: Self::Additions);
|
||||
|
||||
/// Returns whether the txout is marked as relevant in the index.
|
||||
fn is_txout_relevant(&self, outpoint: OutPoint, txout: &TxOut) -> bool;
|
||||
|
||||
/// Returns whether the transaction is marked as relevant in the index.
|
||||
fn is_tx_relevant(&self, tx: &Transaction) -> bool;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user