Trait bdk::blockchain::BlockchainFactory
source · pub trait BlockchainFactory {
type Inner: Blockchain;
// Required method
fn build(
&self,
wallet_name: &str,
override_skip_blocks: Option<u32>
) -> Result<Self::Inner, Error>;
// Provided methods
fn build_for_wallet<D: BatchDatabase>(
&self,
wallet: &Wallet<D>,
override_skip_blocks: Option<u32>
) -> Result<Self::Inner, Error> { ... }
fn sync_wallet<D: BatchDatabase>(
&self,
wallet: &Wallet<D>,
override_skip_blocks: Option<u32>,
sync_options: SyncOptions
) -> Result<(), Error> { ... }
}
Expand description
Trait for a factory of blockchains that share the underlying connection or configuration
Example
This example shows how to sync multiple walles and return the sum of their balances
fn sum_of_balances<B: BlockchainFactory>(blockchain_factory: B, wallets: &[Wallet<MemoryDatabase>]) -> Result<Balance, Error> {
Ok(wallets
.iter()
.map(|w| -> Result<_, Error> {
blockchain_factory.sync_wallet(&w, None, SyncOptions::default())?;
w.get_balance()
})
.collect::<Result<Vec<_>, _>>()?
.into_iter()
.sum())
}
Required Associated Types§
sourcetype Inner: Blockchain
type Inner: Blockchain
The type returned when building a blockchain from this factory
Required Methods§
sourcefn build(
&self,
wallet_name: &str,
override_skip_blocks: Option<u32>
) -> Result<Self::Inner, Error>
fn build( &self, wallet_name: &str, override_skip_blocks: Option<u32> ) -> Result<Self::Inner, Error>
Build a new blockchain for the given descriptor wallet_name
If override_skip_blocks
is None
, the returned blockchain will inherit the number of blocks
from the factory. Since it’s not possible to override the value to None
, set it to
Some(0)
to rescan from the genesis.
Provided Methods§
sourcefn build_for_wallet<D: BatchDatabase>(
&self,
wallet: &Wallet<D>,
override_skip_blocks: Option<u32>
) -> Result<Self::Inner, Error>
fn build_for_wallet<D: BatchDatabase>( &self, wallet: &Wallet<D>, override_skip_blocks: Option<u32> ) -> Result<Self::Inner, Error>
Build a new blockchain for a given wallet
Internally uses wallet_name_from_descriptor
to derive the name, and then calls
BlockchainFactory::build
to create the blockchain instance.
sourcefn sync_wallet<D: BatchDatabase>(
&self,
wallet: &Wallet<D>,
override_skip_blocks: Option<u32>,
sync_options: SyncOptions
) -> Result<(), Error>
fn sync_wallet<D: BatchDatabase>( &self, wallet: &Wallet<D>, override_skip_blocks: Option<u32>, sync_options: SyncOptions ) -> Result<(), Error>
async-interface
only.Use BlockchainFactory::build_for_wallet
to get a blockchain, then sync the wallet
This can be used when a new blockchain would only be used to sync a wallet and then
immediately dropped. Keep in mind that specific blockchain factories may perform slow
operations to build a blockchain for a given wallet, so if a wallet needs to be synced
often it’s recommended to use BlockchainFactory::build_for_wallet
to reuse the same
blockchain multiple times.
Object Safety§
Implementations on Foreign Types§
source§impl<T: StatelessBlockchain> BlockchainFactory for Arc<T>
impl<T: StatelessBlockchain> BlockchainFactory for Arc<T>
Implementors§
source§impl BlockchainFactory for RpcBlockchainFactory
Available on crate feature rpc
only.
impl BlockchainFactory for RpcBlockchainFactory
rpc
only.