@@ -46,52 +46,91 @@ fn spk_at_index(descriptor: &Descriptor<DescriptorPublicKey>, index: u32) -> Scr
4646fn append_keychain_derivation_indices ( ) {
4747 #[ derive( Ord , PartialOrd , Eq , PartialEq , Clone , Debug ) ]
4848 enum Keychain {
49+ Zero ,
4950 One ,
5051 Two ,
5152 Three ,
5253 Four ,
5354 }
54- let mut lhs_di = BTreeMap :: < Keychain , u32 > :: default ( ) ;
55- let mut rhs_di = BTreeMap :: < Keychain , u32 > :: default ( ) ;
56- lhs_di. insert ( Keychain :: One , 7 ) ;
57- lhs_di. insert ( Keychain :: Two , 0 ) ;
58- rhs_di. insert ( Keychain :: One , 3 ) ;
59- rhs_di. insert ( Keychain :: Two , 5 ) ;
60- lhs_di. insert ( Keychain :: Three , 3 ) ;
61- rhs_di. insert ( Keychain :: Four , 4 ) ;
55+
56+ let descriptors: Vec < _ > = common:: DESCRIPTORS
57+ . into_iter ( )
58+ . map ( |s| {
59+ Descriptor :: parse_descriptor ( & Secp256k1 :: signing_only ( ) , s)
60+ . unwrap ( )
61+ . 0
62+ } )
63+ . collect ( ) ;
64+
65+ let mut lhs_di = BTreeMap :: < Keychain , ( Descriptor < DescriptorPublicKey > , u32 ) > :: default ( ) ;
66+ let mut rhs_di = BTreeMap :: < Keychain , ( Descriptor < DescriptorPublicKey > , u32 ) > :: default ( ) ;
67+ lhs_di. insert ( Keychain :: Zero , ( descriptors[ 0 ] . clone ( ) , 1 ) ) ;
68+ lhs_di. insert ( Keychain :: One , ( descriptors[ 1 ] . clone ( ) , 7 ) ) ;
69+ lhs_di. insert ( Keychain :: Two , ( descriptors[ 2 ] . clone ( ) , 0 ) ) ;
70+
71+ lhs_di. insert ( Keychain :: Zero , ( descriptors[ 1 ] . clone ( ) , 13 ) ) ;
72+ rhs_di. insert ( Keychain :: One , ( descriptors[ 1 ] . clone ( ) , 3 ) ) ;
73+ rhs_di. insert ( Keychain :: Two , ( descriptors[ 2 ] . clone ( ) , 5 ) ) ;
74+ lhs_di. insert ( Keychain :: Three , ( descriptors[ 3 ] . clone ( ) , 3 ) ) ;
75+ rhs_di. insert ( Keychain :: Four , ( descriptors[ 4 ] . clone ( ) , 4 ) ) ;
6276
6377 let mut lhs = ChangeSet ( lhs_di) ;
6478 let rhs = ChangeSet ( rhs_di) ;
6579 lhs. append ( rhs) ;
6680
81+ // Descriptor gets updated
82+ assert_eq ! (
83+ lhs. 0 . get( & Keychain :: Zero ) ,
84+ ( Some ( & ( descriptors[ 1 ] . clone( ) , 13 ) ) )
85+ ) ;
6786 // Exiting index doesn't update if the new index in `other` is lower than `self`.
68- assert_eq ! ( lhs. 0 . get( & Keychain :: One ) , Some ( & 7 ) ) ;
87+ assert_eq ! (
88+ lhs. 0 . get( & Keychain :: One ) ,
89+ ( Some ( & ( descriptors[ 1 ] . clone( ) , 7 ) ) )
90+ ) ;
6991 // Existing index updates if the new index in `other` is higher than `self`.
70- assert_eq ! ( lhs. 0 . get( & Keychain :: Two ) , Some ( & 5 ) ) ;
92+ assert_eq ! (
93+ lhs. 0 . get( & Keychain :: Two ) ,
94+ Some ( & ( descriptors[ 2 ] . clone( ) , 5 ) )
95+ ) ;
7196 // Existing index is unchanged if keychain doesn't exist in `other`.
72- assert_eq ! ( lhs. 0 . get( & Keychain :: Three ) , Some ( & 3 ) ) ;
97+ assert_eq ! (
98+ lhs. 0 . get( & Keychain :: Three ) ,
99+ Some ( & ( descriptors[ 3 ] . clone( ) , 3 ) )
100+ ) ;
73101 // New keychain gets added if the keychain is in `other` but not in `self`.
74- assert_eq ! ( lhs. 0 . get( & Keychain :: Four ) , Some ( & 4 ) ) ;
102+ assert_eq ! (
103+ lhs. 0 . get( & Keychain :: Four ) ,
104+ Some ( & ( descriptors[ 4 ] . clone( ) , 4 ) )
105+ ) ;
75106}
76107
77108#[ test]
78109fn test_set_all_derivation_indices ( ) {
79110 use bdk_chain:: indexed_tx_graph:: Indexer ;
80111
81- let ( mut txout_index, _, _) = init_txout_index ( ) ;
82- let derive_to: BTreeMap < _ , _ > =
83- [ ( TestKeychain :: External , 12 ) , ( TestKeychain :: Internal , 24 ) ] . into ( ) ;
112+ let ( mut txout_index, external_desc, internal_desc) = init_txout_index ( ) ;
113+ let result: BTreeMap < _ , _ > = [
114+ ( TestKeychain :: External , ( external_desc, 12 ) ) ,
115+ ( TestKeychain :: Internal , ( internal_desc, 24 ) ) ,
116+ ]
117+ . into ( ) ;
118+ let derive_to = result
119+ . clone ( )
120+ . into_iter ( )
121+ . map ( |( k, ( _, i) ) | ( k, i) )
122+ . collect ( ) ;
84123 assert_eq ! (
85124 txout_index. reveal_to_target_multi( & derive_to) . 1 . as_inner( ) ,
86- & derive_to
125+ & result
87126 ) ;
88127 assert_eq ! ( txout_index. last_revealed_indices( ) , & derive_to) ;
89128 assert_eq ! (
90129 txout_index. reveal_to_target_multi( & derive_to) . 1 ,
91130 keychain:: ChangeSet :: default ( ) ,
92131 "no changes if we set to the same thing"
93132 ) ;
94- assert_eq ! ( txout_index. initial_changeset( ) . as_inner( ) , & derive_to ) ;
133+ assert_eq ! ( txout_index. initial_changeset( ) . as_inner( ) , & result ) ;
95134}
96135
97136#[ test]
@@ -123,7 +162,7 @@ fn test_lookahead() {
123162 ) ;
124163 assert_eq ! (
125164 revealed_changeset. as_inner( ) ,
126- & [ ( TestKeychain :: External , index) ] . into( )
165+ & [ ( TestKeychain :: External , ( external_desc . clone ( ) , index) ) ] . into( )
127166 ) ;
128167
129168 assert_eq ! (
@@ -175,7 +214,7 @@ fn test_lookahead() {
175214 ) ;
176215 assert_eq ! (
177216 revealed_changeset. as_inner( ) ,
178- & [ ( TestKeychain :: Internal , 24 ) ] . into( )
217+ & [ ( TestKeychain :: Internal , ( internal_desc . clone ( ) , 24 ) ) ] . into( )
179218 ) ;
180219 assert_eq ! (
181220 txout_index. inner( ) . all_spks( ) . len( ) ,
@@ -284,7 +323,7 @@ fn test_scan_with_lookahead() {
284323 let changeset = txout_index. index_txout ( op, & txout) ;
285324 assert_eq ! (
286325 changeset. as_inner( ) ,
287- & [ ( TestKeychain :: External , spk_i) ] . into( )
326+ & [ ( TestKeychain :: External , ( external_desc . clone ( ) , spk_i) ) ] . into( )
288327 ) ;
289328 assert_eq ! (
290329 txout_index. last_revealed_index( & TestKeychain :: External ) ,
@@ -328,7 +367,7 @@ fn test_wildcard_derivations() {
328367 assert_eq ! ( txout_index. next_index( & TestKeychain :: External ) , ( 0 , true ) ) ;
329368 let ( spk, changeset) = txout_index. reveal_next_spk ( & TestKeychain :: External ) ;
330369 assert_eq ! ( spk, ( 0_u32 , external_spk_0. as_script( ) ) ) ;
331- assert_eq ! ( changeset. as_inner( ) , & [ ( TestKeychain :: External , 0 ) ] . into( ) ) ;
370+ assert_eq ! ( changeset. as_inner( ) , & [ ( TestKeychain :: External , ( external_desc . clone ( ) , 0 ) ) ] . into( ) ) ;
332371 let ( spk, changeset) = txout_index. next_unused_spk ( & TestKeychain :: External ) ;
333372 assert_eq ! ( spk, ( 0_u32 , external_spk_0. as_script( ) ) ) ;
334373 assert_eq ! ( changeset. as_inner( ) , & [ ] . into( ) ) ;
@@ -352,7 +391,7 @@ fn test_wildcard_derivations() {
352391 let ( spk, changeset) = txout_index. reveal_next_spk ( & TestKeychain :: External ) ;
353392 assert_eq ! ( spk, ( 26 , external_spk_26. as_script( ) ) ) ;
354393
355- assert_eq ! ( changeset. as_inner( ) , & [ ( TestKeychain :: External , 26 ) ] . into( ) ) ;
394+ assert_eq ! ( changeset. as_inner( ) , & [ ( TestKeychain :: External , ( external_desc . clone ( ) , 26 ) ) ] . into( ) ) ;
356395
357396 let ( spk, changeset) = txout_index. next_unused_spk ( & TestKeychain :: External ) ;
358397 assert_eq ! ( spk, ( 16 , external_spk_16. as_script( ) ) ) ;
@@ -366,7 +405,7 @@ fn test_wildcard_derivations() {
366405
367406 let ( spk, changeset) = txout_index. next_unused_spk ( & TestKeychain :: External ) ;
368407 assert_eq ! ( spk, ( 27 , external_spk_27. as_script( ) ) ) ;
369- assert_eq ! ( changeset. as_inner( ) , & [ ( TestKeychain :: External , 27 ) ] . into( ) ) ;
408+ assert_eq ! ( changeset. as_inner( ) , & [ ( TestKeychain :: External , ( external_desc , 27 ) ) ] . into( ) ) ;
370409}
371410
372411#[ test]
@@ -380,7 +419,7 @@ fn test_non_wildcard_derivations() {
380419 . unwrap ( )
381420 . script_pubkey ( ) ;
382421
383- txout_index. add_keychain ( TestKeychain :: External , no_wildcard_descriptor) ;
422+ txout_index. add_keychain ( TestKeychain :: External , no_wildcard_descriptor. clone ( ) ) ;
384423
385424 // given:
386425 // - `txout_index` with no stored scripts
@@ -391,7 +430,10 @@ fn test_non_wildcard_derivations() {
391430 assert_eq ! ( txout_index. next_index( & TestKeychain :: External ) , ( 0 , true ) ) ;
392431 let ( spk, changeset) = txout_index. reveal_next_spk ( & TestKeychain :: External ) ;
393432 assert_eq ! ( spk, ( 0 , external_spk. as_script( ) ) ) ;
394- assert_eq ! ( changeset. as_inner( ) , & [ ( TestKeychain :: External , 0 ) ] . into( ) ) ;
433+ assert_eq ! (
434+ changeset. as_inner( ) ,
435+ & [ ( TestKeychain :: External , ( no_wildcard_descriptor, 0 ) ) ] . into( )
436+ ) ;
395437
396438 let ( spk, changeset) = txout_index. next_unused_spk ( & TestKeychain :: External ) ;
397439 assert_eq ! ( spk, ( 0 , external_spk. as_script( ) ) ) ;
0 commit comments