]> Untitled Git - bdk/commit
[blockchain] Add traits to reuse `Blockchain`s across multiple wallets
authorAlekos Filini <alekos.filini@gmail.com>
Tue, 15 Mar 2022 09:48:00 +0000 (10:48 +0100)
committerAlekos Filini <alekos.filini@gmail.com>
Mon, 9 May 2022 17:34:04 +0000 (19:34 +0200)
commit9c405e9c70e417dea0e610f9d44e99911d6b4e44
tree138d6ae97e9b6d7c835fcedaa135c4b6d3864843
parent2d83af49051f5d33105315164f3edf7f72f3741f
[blockchain] Add traits to reuse `Blockchain`s across multiple wallets

Add two new traits:
- `StatelessBlockchain` is used to tag `Blockchain`s that don't have any
  wallet-specic state, i.e. they can be used as-is to sync multiple wallets.
- `BlockchainFactory` is a trait for objects that can build multiple
  blockchains for different descriptors. It's implemented automatically
  for every `Arc<T>` where `T` is a `StatelessBlockchain`. This allows a
  piece of code that deals with multiple sub-wallets to just get a
  `&B: BlockchainFactory` to sync all of them.

These new traits have been implemented for Electrum, Esplora and RPC
(the first two being stateless and the latter having a dedicated
`RpcBlockchainFactory` struct). It hasn't been implemented on the CBF
blockchain, because I don't think it would work in its current form
(it throws away old block filters, so it's hard to go back and rescan).

This is the first step for #549, as BIP47 needs to sync many different
descriptors internally.

It's also very useful for #486.
CHANGELOG.md
src/blockchain/electrum.rs
src/blockchain/esplora/reqwest.rs
src/blockchain/esplora/ureq.rs
src/blockchain/mod.rs
src/blockchain/rpc.rs
src/testutils/mod.rs
src/wallet/mod.rs