@@ -34,6 +34,8 @@ use std::path::Path;
3434use std:: str:: FromStr ;
3535use std:: sync:: Arc ;
3636
37+ use crate :: KeychainKind ;
38+
3739const DESCRIPTORS : [ & str ; 4 ] = [
3840 "tr([5940b9b9/86'/0'/0']tpubDDVNqmq75GNPWQ9UNKfP43UwjaHU4GYfoPavojQbfpyfZp2KetWgjGBRRAy4tYCrAA6SB11mhQAkqxjh1VtQHyKwT4oYxpwLaGHvoKmtxZf/0/*)#44aqnlam" ,
3941 "tr([5940b9b9/86'/0'/0']tpubDDVNqmq75GNPWQ9UNKfP43UwjaHU4GYfoPavojQbfpyfZp2KetWgjGBRRAy4tYCrAA6SB11mhQAkqxjh1VtQHyKwT4oYxpwLaGHvoKmtxZf/1/*)#ypcpw2dr" ,
@@ -66,6 +68,16 @@ fn spk_at_index(descriptor: &Descriptor<DescriptorPublicKey>, index: u32) -> Scr
6668 . script_pubkey ( )
6769}
6870
71+ // Check equalit of changesets.
72+ fn check_changesets ( changeset1 : & ChangeSet < KeychainKind > , changeset2 : & ChangeSet < KeychainKind > ) {
73+ assert_eq ! ( changeset1. network, changeset2. network) ;
74+ assert_eq ! ( changeset1. local_chain, changeset2. local_chain) ;
75+ assert_eq ! ( changeset1. tx_graph, changeset2. tx_graph) ;
76+ assert_eq ! ( changeset1. indexer, changeset2. indexer) ;
77+ assert_eq ! ( changeset1. locked_outpoints, changeset2. locked_outpoints) ;
78+ assert_eq ! ( changeset1. descriptors, changeset2. descriptors) ;
79+ }
80+
6981/// tests if [`Wallet`] is being persisted correctly
7082///
7183/// [`Wallet`]: <https://docs.rs/bdk_wallet/latest/bdk_wallet/struct.Wallet.html>
@@ -77,7 +89,7 @@ fn spk_at_index(descriptor: &Descriptor<DescriptorPublicKey>, index: u32) -> Scr
7789pub fn persist_wallet_changeset < Store , CreateStore > ( filename : & str , create_store : CreateStore )
7890where
7991 CreateStore : Fn ( & Path ) -> anyhow:: Result < Store > ,
80- Store : WalletPersister ,
92+ Store : WalletPersister < KeychainKind > ,
8193 Store :: Error : Debug ,
8294{
8395 // create store
@@ -172,6 +184,11 @@ where
172184 tx_graph : tx_graph_changeset,
173185 indexer : keychain_txout_changeset,
174186 locked_outpoints : locked_outpoints_changeset,
187+ descriptors : [
188+ ( KeychainKind :: External , descriptor. clone ( ) ) ,
189+ ( KeychainKind :: Internal , change_descriptor) ,
190+ ]
191+ . into ( ) ,
175192 } ;
176193
177194 // persist and load
@@ -180,7 +197,7 @@ where
180197 let changeset_read =
181198 WalletPersister :: initialize ( & mut store) . expect ( "changeset should get loaded" ) ;
182199
183- assert_eq ! ( changeset, changeset_read) ;
200+ check_changesets ( & changeset, & changeset_read) ;
184201
185202 // create another changeset
186203 let local_chain_changeset = local_chain:: ChangeSet {
@@ -231,6 +248,7 @@ where
231248 tx_graph : tx_graph_changeset,
232249 indexer : keychain_txout_changeset,
233250 locked_outpoints : locked_outpoints_changeset,
251+ descriptors : [ ] . into ( ) ,
234252 } ;
235253
236254 // persist, load and check if same as merged
@@ -239,7 +257,7 @@ where
239257
240258 changeset. merge ( changeset_new) ;
241259
242- assert_eq ! ( changeset, changeset_read_new) ;
260+ check_changesets ( & changeset, & changeset_read_new) ;
243261}
244262
245263/// tests if multiple [`Wallet`]s can be persisted in a single file correctly
@@ -255,7 +273,7 @@ pub fn persist_multiple_wallet_changesets<Store, CreateStores>(
255273 create_dbs : CreateStores ,
256274) where
257275 CreateStores : Fn ( & Path ) -> anyhow:: Result < ( Store , Store ) > ,
258- Store : WalletPersister ,
276+ Store : WalletPersister < KeychainKind > ,
259277 Store :: Error : Debug ,
260278{
261279 // create stores
@@ -279,7 +297,8 @@ pub fn persist_multiple_wallet_changesets<Store, CreateStores>(
279297 change_descriptor : Some ( change_descriptor. clone ( ) ) ,
280298 network : Some ( Network :: Testnet ) ,
281299 ..ChangeSet :: default ( )
282- } ;
300+ }
301+ . from_v3 ( ) ;
283302
284303 // persist first changeset
285304 WalletPersister :: persist ( & mut store_first, & changeset1) . expect ( "should persist changeset" ) ;
@@ -298,20 +317,24 @@ pub fn persist_multiple_wallet_changesets<Store, CreateStores>(
298317 change_descriptor : Some ( change_descriptor. clone ( ) ) ,
299318 network : Some ( Network :: Testnet ) ,
300319 ..ChangeSet :: default ( )
301- } ;
320+ }
321+ . from_v3 ( ) ;
302322
303323 // persist second changeset
304324 WalletPersister :: persist ( & mut store_sec, & changeset2) . expect ( "should persist changeset" ) ;
305325
306326 // load first changeset
307327 let changeset_read =
308328 WalletPersister :: initialize ( & mut store_first) . expect ( "should load persisted changeset1" ) ;
309- assert_eq ! ( changeset_read, changeset1) ;
329+
330+ check_changesets ( & changeset_read, & changeset1) ;
310331
311332 // load second changeset
312333 let changeset_read =
313334 WalletPersister :: initialize ( & mut store_sec) . expect ( "should load persisted changeset2" ) ;
314335 assert_eq ! ( changeset_read, changeset2) ;
336+
337+ check_changesets ( & changeset_read, & changeset2) ;
315338}
316339
317340/// tests if [`Network`] is being persisted correctly
@@ -324,7 +347,7 @@ pub fn persist_multiple_wallet_changesets<Store, CreateStores>(
324347pub fn persist_network < Store , CreateStore > ( filename : & str , create_store : CreateStore )
325348where
326349 CreateStore : Fn ( & Path ) -> anyhow:: Result < Store > ,
327- Store : WalletPersister ,
350+ Store : WalletPersister < KeychainKind > ,
328351 Store :: Error : Debug ,
329352{
330353 // create store
@@ -360,7 +383,7 @@ where
360383pub fn persist_keychains < Store , CreateStore > ( filename : & str , create_store : CreateStore )
361384where
362385 CreateStore : Fn ( & Path ) -> anyhow:: Result < Store > ,
363- Store : WalletPersister ,
386+ Store : WalletPersister < KeychainKind > ,
364387 Store :: Error : Debug ,
365388{
366389 // create store
@@ -381,16 +404,23 @@ where
381404 descriptor : Some ( descriptor. clone ( ) ) ,
382405 change_descriptor : Some ( change_descriptor. clone ( ) ) ,
383406 ..ChangeSet :: default ( )
384- } ;
407+ }
408+ . from_v3 ( ) ;
385409
386410 WalletPersister :: persist ( & mut store, & changeset) . expect ( "should persist descriptors" ) ;
387411
388412 // load the descriptors
389413 let changeset_read =
390414 WalletPersister :: initialize ( & mut store) . expect ( "should read persisted changeset" ) ;
391415
392- assert_eq ! ( changeset_read. descriptor. unwrap( ) , descriptor) ;
393- assert_eq ! ( changeset_read. change_descriptor. unwrap( ) , change_descriptor) ;
416+ assert_eq ! (
417+ changeset_read. descriptors,
418+ [
419+ ( KeychainKind :: External , descriptor) ,
420+ ( KeychainKind :: Internal , change_descriptor)
421+ ]
422+ . into( )
423+ ) ;
394424}
395425
396426/// tests if descriptor(in a single keychain wallet) is being persisted correctly
@@ -402,7 +432,7 @@ where
402432pub fn persist_single_keychain < Store , CreateStore > ( filename : & str , create_store : CreateStore )
403433where
404434 CreateStore : Fn ( & Path ) -> anyhow:: Result < Store > ,
405- Store : WalletPersister ,
435+ Store : WalletPersister < KeychainKind > ,
406436 Store :: Error : Debug ,
407437{
408438 // create store
@@ -421,14 +451,17 @@ where
421451 let changeset = ChangeSet {
422452 descriptor : Some ( descriptor. clone ( ) ) ,
423453 ..ChangeSet :: default ( )
424- } ;
454+ }
455+ . from_v3 ( ) ;
425456
426457 WalletPersister :: persist ( & mut store, & changeset) . expect ( "should persist descriptors" ) ;
427458
428459 // load the descriptor
429460 let changeset_read =
430461 WalletPersister :: initialize ( & mut store) . expect ( "should read persisted changeset" ) ;
431462
432- assert_eq ! ( changeset_read. descriptor. unwrap( ) , descriptor) ;
433- assert_eq ! ( changeset_read. change_descriptor, None ) ;
463+ assert_eq ! (
464+ changeset_read. descriptors,
465+ [ ( KeychainKind :: External , descriptor) ] . into( )
466+ ) ;
434467}
0 commit comments