From: Steve Myers Date: Thu, 6 Mar 2025 03:12:02 +0000 (-0600) Subject: fix(wallet): allow PersistedWallet

to be Send + Sync even if P is !Sync X-Git-Tag: wallet-1.2.0~9^2 X-Git-Url: http://internal-gitweb-vhost/script/%22https:/-sqlite-db-configuration/static/bitcoin/struct.CommandStringError.html?a=commitdiff_plain;h=14251a43be73796f0db98cee8a0b5e88e4b4c51a;p=bdk fix(wallet): allow PersistedWallet

to be Send + Sync even if P is !Sync The goal of this change is to ensure that PersistWallet

remains Send and Sync, even if the functions implemented on it have a &mut P parameter and P is not Sync. The reason to change PersistWallet

's _marker field type from PhatonData

to PhantomData is to tell the Rust compiler that this struct is a "consumer" of &mut P, but it does not own P and therefore should not be tied to its lifetime. --- diff --git a/crates/wallet/src/wallet/persisted.rs b/crates/wallet/src/wallet/persisted.rs index 1bc0a788..28a6ec78 100644 --- a/crates/wallet/src/wallet/persisted.rs +++ b/crates/wallet/src/wallet/persisted.rs @@ -120,7 +120,7 @@ pub trait AsyncWalletPersister { #[derive(Debug)] pub struct PersistedWallet

{ inner: Wallet, - marker: PhantomData

, + _marker: PhantomData, } impl

Deref for PersistedWallet

{ @@ -155,7 +155,7 @@ impl PersistedWallet

{ } Ok(Self { inner, - marker: PhantomData, + _marker: PhantomData, }) } @@ -169,7 +169,7 @@ impl PersistedWallet

{ .map(|opt| { opt.map(|inner| PersistedWallet { inner, - marker: PhantomData, + _marker: PhantomData, }) }) .map_err(LoadWithPersistError::InvalidChangeSet) @@ -214,7 +214,7 @@ impl PersistedWallet

{ } Ok(Self { inner, - marker: PhantomData, + _marker: PhantomData, }) } @@ -230,7 +230,7 @@ impl PersistedWallet

{ .map(|opt| { opt.map(|inner| PersistedWallet { inner, - marker: PhantomData, + _marker: PhantomData, }) }) .map_err(LoadWithPersistError::InvalidChangeSet) diff --git a/crates/wallet/tests/wallet.rs b/crates/wallet/tests/wallet.rs index f42f0bcd..35cbd85d 100644 --- a/crates/wallet/tests/wallet.rs +++ b/crates/wallet/tests/wallet.rs @@ -12,7 +12,9 @@ use bdk_wallet::psbt::PsbtUtils; use bdk_wallet::signer::{SignOptions, SignerError}; use bdk_wallet::test_utils::*; use bdk_wallet::tx_builder::AddForeignUtxoError; -use bdk_wallet::{AddressInfo, Balance, ChangeSet, Update, Wallet, WalletPersister, WalletTx}; +use bdk_wallet::{ + AddressInfo, Balance, ChangeSet, PersistedWallet, Update, Wallet, WalletPersister, WalletTx, +}; use bdk_wallet::{KeychainKind, LoadError, LoadMismatch, LoadWithPersistError}; use bitcoin::constants::{ChainHash, COINBASE_MATURITY}; use bitcoin::hashes::Hash; @@ -4209,6 +4211,7 @@ fn test_tx_cancellation() { fn test_thread_safety() { fn thread_safe() {} thread_safe::(); // compiles only if true + thread_safe::>(); } #[test]