use bitcoin::{consensus::encode::serialize, transaction, BlockHash, Psbt};
use bitcoin::{constants::genesis_block, Amount};
use bitcoin::{secp256k1::Secp256k1, Weight};
-use chain::Staged;
use core::fmt;
use core::mem;
use core::ops::Deref;
secp: SecpCtx,
}
-impl Staged for Wallet {
- type ChangeSet = ChangeSet;
-
- fn staged(&mut self) -> &mut Self::ChangeSet {
- &mut self.stage
- }
-}
-
/// An update to [`Wallet`].
///
/// It updates [`KeychainTxOutIndex`], [`bdk_chain::TxGraph`] and [`local_chain::LocalChain`] atomically.
Ok(())
}
- /// Get a reference of the staged [`ChangeSet`] that are yet to be committed (if any).
+ /// Get a reference of the staged [`ChangeSet`] that is yet to be committed (if any).
pub fn staged(&self) -> Option<&ChangeSet> {
if self.stage.is_empty() {
None
}
}
+ /// Get a mutable reference of the staged [`ChangeSet`] that is yet to be commited (if any).
+ pub fn staged_mut(&mut self) -> Option<&mut ChangeSet> {
+ if self.stage.is_empty() {
+ None
+ } else {
+ Some(&mut self.stage)
+ }
+ }
+
/// Take the staged [`ChangeSet`] to be persisted now (if any).
pub fn take_staged(&mut self) -> Option<ChangeSet> {
self.stage.take()
};
use alloc::boxed::Box;
-use chain::{Merge, Staged};
+use chain::Merge;
use crate::{descriptor::DescriptorError, ChangeSet, CreateParams, LoadParams, Wallet};
where
P: WalletPersister,
{
- let stage = Staged::staged(&mut self.0);
- if stage.is_empty() {
- return Ok(false);
+ match self.0.staged_mut() {
+ Some(stage) => {
+ P::persist(persister, &*stage)?;
+ let _ = stage.take();
+ Ok(true)
+ }
+ None => Ok(false),
}
- P::persist(persister, &*stage)?;
- stage.take();
- Ok(true)
}
/// Persist staged changes of wallet into an async `persister`.
where
P: AsyncWalletPersister,
{
- let stage = Staged::staged(&mut self.0);
- if stage.is_empty() {
- return Ok(false);
+ match self.0.staged_mut() {
+ Some(stage) => {
+ P::persist(persister, &*stage).await?;
+ let _ = stage.take();
+ Ok(true)
+ }
+ None => Ok(false),
}
- P::persist(persister, &*stage).await?;
- stage.take();
- Ok(true)
}
}