use crate::collections::BTreeMap;
use crate::{BlockId, ChainOracle};
use alloc::sync::Arc;
-use alloc::vec::Vec;
use bitcoin::block::Header;
use bitcoin::BlockHash;
prev: Option<Arc<CPInner>>,
}
+impl PartialEq for CheckPoint {
+ fn eq(&self, other: &Self) -> bool {
+ let self_cps = self.iter().map(|cp| cp.block_id());
+ let other_cps = other.iter().map(|cp| cp.block_id());
+ self_cps.eq(other_cps)
+ }
+}
+
impl CheckPoint {
/// Construct a new base block at the front of a linked list.
pub fn new(block: BlockId) -> Self {
/// Script-pubkey based syncing mechanisms may not introduce transactions in a chronological order
/// so some updates require introducing older blocks (to anchor older transactions). For
/// script-pubkey based syncing, `introduce_older_blocks` would typically be `true`.
-#[derive(Debug, Clone)]
+#[derive(Debug, Clone, PartialEq)]
pub struct Update {
/// The update chain's new tip.
pub tip: CheckPoint,
}
/// This is a local implementation of [`ChainOracle`].
-#[derive(Debug, Clone)]
+#[derive(Debug, Clone, PartialEq)]
pub struct LocalChain {
tip: CheckPoint,
}
-impl PartialEq for LocalChain {
- fn eq(&self, other: &Self) -> bool {
- self.iter_checkpoints()
- .map(|cp| cp.block_id())
- .collect::<Vec<_>>()
- == other
- .iter_checkpoints()
- .map(|cp| cp.block_id())
- .collect::<Vec<_>>()
- }
-}
-
// TODO: Figure out whether we can get rid of this
impl From<LocalChain> for BTreeMap<u32, BlockHash> {
fn from(value: LocalChain) -> Self {