11mod  regtestenv; 
22use  bdk_reserves:: reserves:: * ; 
3+ use  bdk_tx:: Signer ; 
4+ use  bdk_wallet:: bitcoin:: Network ; 
35use  bdk_wallet:: bitcoin:: key:: { PrivateKey ,  PublicKey } ; 
46use  bdk_wallet:: bitcoin:: psbt:: Psbt ; 
57use  bdk_wallet:: bitcoin:: secp256k1:: Secp256k1 ; 
6- use  bdk_wallet:: bitcoin:: Network ; 
8+ use  bdk_wallet:: descriptor:: DescriptorPublicKey ; 
9+ use  bdk_wallet:: keys:: { SinglePriv ,  SinglePub ,  SinglePubKey } ; 
10+ use  bdk_wallet:: miniscript:: descriptor:: { DescriptorSecretKey ,  KeyMap } ; 
711use  bdk_wallet:: { KeychainKind ,  Wallet } ; 
812use  regtestenv:: RegTestEnv ; 
913use  rstest:: rstest; 
@@ -79,6 +83,10 @@ fn test_proof_multisig(
7983    let  mut  wallet1 = construct_multisig_wallet ( & signer2,  & pubkeys,  & script_type) ?; 
8084    let  mut  wallet2 = construct_multisig_wallet ( & signer3,  & pubkeys,  & script_type) ?; 
8185    let  mut  wallets = [ & mut  wallet0,  & mut  wallet1,  & mut  wallet2] ; 
86+     let  signer1 = signer_from_priv ( signer1,  pubkeys[ 0 ] ) ; 
87+     let  signer2 = signer_from_priv ( signer2,  pubkeys[ 1 ] ) ; 
88+     let  signer3 = signer_from_priv ( signer3,  pubkeys[ 2 ] ) ; 
89+     let  signers = [ & signer1,  & signer2,  & signer3] ; 
8290
8391    wallets
8492        . iter_mut ( ) 
@@ -98,8 +106,7 @@ fn test_proof_multisig(
98106        } ) ; 
99107
100108    let  regtestenv = RegTestEnv :: new ( ) ; 
101-     /* 
102-     regtestenv.generate(&mut wallets); 
109+     regtestenv. generate ( & mut  wallets,  & signers) ; 
103110
104111    wallets. iter ( ) . enumerate ( ) . for_each ( |( i,  wallet) | { 
105112        let  balance = wallet. balance ( ) ; 
@@ -131,31 +138,28 @@ fn test_proof_multisig(
131138        } ) 
132139    } ; 
133140
134-     let signopts = SignOptions { 
135-         trust_witness_utxo: true, 
136-         //remove_partial_sigs: false, 
137-         ..Default::default() 
138-     }; 
139-     let finalized = wallets[0].sign(&mut psbt, signopts.clone())?; 
141+     psbt. sign ( signers[ 0 ] ,  & secp) . unwrap ( ) ; 
140142    assert_eq ! ( count_signatures( & psbt) ,  ( num_inp - 1 ,  1 ,  0 ) ) ; 
141-     assert!(!finalized); 
142143
143-     let finalized = wallets[1] .sign(&mut psbt, signopts.clone())? ; 
144+     psbt . sign ( signers [ 1 ] ,   & secp ) . unwrap ( ) ; 
144145    assert_eq ! ( 
145146        count_signatures( & psbt) , 
146147        ( 0 ,  num_inp. pow( count_mult. 0 ) ,  ( num_inp - 1 )  *  count_mult. 1 ) 
147148    ) ; 
148-     assert!(finalized); 
149149
150150    // 2 signatures are enough. Just checking what happens... 
151-     let finalized = wallets[2] .sign(&mut psbt, signopts.clone())? ; 
151+     psbt . sign ( signers [ 2 ] ,   & secp ) . unwrap ( ) ; 
152152    assert_eq ! ( 
153153        count_signatures( & psbt) , 
154154        ( 0 ,  num_inp. pow( count_mult. 0 ) ,  ( num_inp - 1 )  *  count_mult. 1 ) 
155155    ) ; 
156-     assert!(finalized); 
157156
158-     let finalized = wallets[0].finalize_psbt(&mut psbt, signopts)?; 
157+     let  signopts = bdk_wallet:: SignOptions  { 
158+         trust_witness_utxo :  true , 
159+         //remove_partial_sigs: false, 
160+         ..Default :: default ( ) 
161+     } ; 
162+     let  finalized = wallets[ 0 ] . finalize_psbt ( & mut  psbt,  signopts) . unwrap ( ) ; 
159163    assert_eq ! ( 
160164        count_signatures( & psbt) , 
161165        ( 0 ,  num_inp. pow( count_mult. 0 ) ,  ( num_inp - 1 )  *  count_mult. 1 ) 
@@ -170,7 +174,23 @@ fn test_proof_multisig(
170174        spendable, 
171175        balance. confirmed, 
172176    ) ; 
173-     */ 
174177
175178    Ok ( ( ) ) 
176179} 
180+ 
181+ fn  signer_from_priv ( prvk :  PrivateKey ,  pubk :  PublicKey )  -> Signer  { 
182+     let  mut  keymap = KeyMap :: new ( ) ; 
183+ 
184+     let  pubk = DescriptorPublicKey :: Single ( SinglePub  { 
185+         origin :  None , 
186+         key :  SinglePubKey :: FullKey ( pubk) , 
187+     } ) ; 
188+     let  prvk = DescriptorSecretKey :: Single ( SinglePriv  { 
189+         //let prvk = KeyMap::V::Single(SinglePriv { 
190+         origin :  None , 
191+         key :  prvk, 
192+     } ) ; 
193+     keymap. insert ( pubk,  prvk) ; 
194+ 
195+     Signer ( keymap) 
196+ } 
0 commit comments