11
2- use crate :: { mock:: * , Error , types:: ProposalStatus } ;
2+ use crate :: { mock:: * , Error , types:: { ProposalStatus , BDKStatus , Descriptors } , Vaults , Proposals } ;
3+ use core:: convert:: TryFrom ;
34use codec:: { Encode } ;
45use frame_support:: {
56 assert_noop, assert_ok,
6- //traits::{ConstU32,},
77 BoundedVec ,
88} ;
99use sp_io:: hashing:: blake2_256;
10+
1011fn dummy_xpub ( ) -> BoundedVec < u8 , XPubLen > {
1112 BoundedVec :: < u8 , XPubLen > :: try_from (
1213 b"[adc450e3/84'/1'/0'/0]tpubDEMkzn5sBo8Nct35y2BEFhJTqhsa72yeUf5S6ymb85G6LW2okSh1fDkrMhgCtYsrsCAuspm4yVjC63VUA6qrcQ54tVm5TKwhWFBLyyCjabX/*"
@@ -49,6 +50,29 @@ fn dummy_psbt() -> BoundedVec<u8, PSBTMaxLen>{
4950 . encode ( ) ) . unwrap_or_default ( )
5051}
5152
53+ fn dummy_descriptor ( ) ->BoundedVec < u8 , OutputDescriptorMaxLen > {
54+ let d_size: usize = OutputDescriptorMaxLen :: get ( ) . try_into ( ) . unwrap ( ) ;
55+ BoundedVec :: < u8 , OutputDescriptorMaxLen > :: try_from ( vec ! [ 0 ; d_size] ) . unwrap ( )
56+ }
57+ fn make_vault_valid ( vault_id : [ u8 ; 32 ] ) {
58+
59+ Vaults :: < Test > :: mutate ( vault_id, |v_option|{
60+ let v= v_option. as_mut ( ) . unwrap ( ) ;
61+ v. offchain_status . clone_from ( & BDKStatus :: Valid ) ;
62+ v. descriptors . clone_from ( & Descriptors {
63+ output_descriptor : dummy_descriptor ( ) ,
64+ change_descriptor : Some ( dummy_descriptor ( ) ) ,
65+ } ) ;
66+ } ) ;
67+ }
68+
69+ fn make_proposal_valid ( proposal_id : [ u8 ; 32 ] ) {
70+ Proposals :: < Test > :: mutate ( proposal_id, |p_option|{
71+ let p = p_option. as_mut ( ) . unwrap ( ) ;
72+ p. offchain_status . clone_from ( & BDKStatus :: Valid ) ;
73+ } ) ;
74+ }
75+
5276#[ test]
5377fn set_xpub_identity_works ( ) {
5478 new_test_ext ( ) . execute_with ( || {
@@ -314,6 +338,7 @@ fn proposing_should_work(){
314338 assert_ok ! ( BitcoinVaults :: create_vault( Origin :: signed( test_pub( 1 ) ) , 2 , dummy_description( ) , true , cosigners) ) ;
315339 assert ! ( !BitcoinVaults :: vaults_by_signer( test_pub( 1 ) ) . is_empty( ) ) ;
316340 let vault_id = BitcoinVaults :: vaults_by_signer ( test_pub ( 1 ) ) . pop ( ) . unwrap ( ) ;
341+ make_vault_valid ( vault_id) ;
317342 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ) ;
318343 } ) ;
319344}
@@ -346,6 +371,7 @@ fn proposing_twice_shouldnt_work(){
346371 assert_ok ! ( BitcoinVaults :: create_vault( Origin :: signed( test_pub( 1 ) ) , 2 , dummy_description( ) , true , cosigners) ) ;
347372 assert ! ( !BitcoinVaults :: vaults_by_signer( test_pub( 1 ) ) . is_empty( ) ) ;
348373 let vault_id = BitcoinVaults :: vaults_by_signer ( test_pub ( 1 ) ) . pop ( ) . unwrap ( ) ;
374+ make_vault_valid ( vault_id) ;
349375 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ) ;
350376 assert_noop ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ,
351377 Error :: <Test >:: AlreadyProposed ) ;
@@ -363,6 +389,7 @@ fn exceeding_max_proposals_per_vault_shouldnt_work(){
363389 assert_ok ! ( BitcoinVaults :: create_vault( Origin :: signed( test_pub( 1 ) ) , 2 , dummy_description( ) , true , cosigners) ) ;
364390 assert ! ( !BitcoinVaults :: vaults_by_signer( test_pub( 1 ) ) . is_empty( ) ) ;
365391 let vault_id = BitcoinVaults :: vaults_by_signer ( test_pub ( 1 ) ) . pop ( ) . unwrap ( ) ;
392+ make_vault_valid ( vault_id) ;
366393 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ) ;
367394 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1001 , dummy_description( ) ) ) ;
368395 assert_noop ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1002 , dummy_description( ) ) ,
@@ -381,6 +408,7 @@ fn saving_psbt_should_work(){
381408 assert_ok ! ( BitcoinVaults :: create_vault( Origin :: signed( test_pub( 1 ) ) , 2 , dummy_description( ) , true , cosigners) ) ;
382409 assert ! ( !BitcoinVaults :: vaults_by_signer( test_pub( 1 ) ) . is_empty( ) ) ;
383410 let vault_id = BitcoinVaults :: vaults_by_signer ( test_pub ( 1 ) ) . pop ( ) . unwrap ( ) ;
411+ make_vault_valid ( vault_id) ;
384412 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ) ;
385413 // obtaining proposal id and saving a psbt
386414 let proposal_id = BitcoinVaults :: proposals_by_vault ( vault_id) . pop ( ) . unwrap ( ) ;
@@ -415,6 +443,7 @@ fn saving_psbt_form_external_user_shouldnt_work(){
415443 assert_ok ! ( BitcoinVaults :: create_vault( Origin :: signed( test_pub( 1 ) ) , 2 , dummy_description( ) , true , cosigners) ) ;
416444 assert ! ( !BitcoinVaults :: vaults_by_signer( test_pub( 1 ) ) . is_empty( ) ) ;
417445 let vault_id = BitcoinVaults :: vaults_by_signer ( test_pub ( 1 ) ) . pop ( ) . unwrap ( ) ;
446+ make_vault_valid ( vault_id) ;
418447 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ) ;
419448 // obtaining proposal id and saving a psbt with a user that is not in the vault
420449 let proposal_id = BitcoinVaults :: proposals_by_vault ( vault_id) . pop ( ) . unwrap ( ) ;
@@ -434,6 +463,7 @@ fn saving_twice_psbt_shouldnt_work(){
434463 assert_ok ! ( BitcoinVaults :: create_vault( Origin :: signed( test_pub( 1 ) ) , 2 , dummy_description( ) , true , cosigners) ) ;
435464 assert ! ( !BitcoinVaults :: vaults_by_signer( test_pub( 1 ) ) . is_empty( ) ) ;
436465 let vault_id = BitcoinVaults :: vaults_by_signer ( test_pub ( 1 ) ) . pop ( ) . unwrap ( ) ;
466+ make_vault_valid ( vault_id) ;
437467 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ) ;
438468 // obtaining proposal id and saving a psbt with a user that is not in the vault
439469 let proposal_id = BitcoinVaults :: proposals_by_vault ( vault_id) . pop ( ) . unwrap ( ) ;
@@ -455,9 +485,11 @@ fn finalize_psbt_should_work(){
455485 assert_ok ! ( BitcoinVaults :: create_vault( Origin :: signed( test_pub( 1 ) ) , 1 , dummy_description( ) , true , cosigners) ) ;
456486 assert ! ( !BitcoinVaults :: vaults_by_signer( test_pub( 1 ) ) . is_empty( ) ) ;
457487 let vault_id = BitcoinVaults :: vaults_by_signer ( test_pub ( 1 ) ) . pop ( ) . unwrap ( ) ;
488+ make_vault_valid ( vault_id) ;
458489 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ) ;
459490 // obtaining proposal id and saving a psbt with a user that is not in the vault
460491 let proposal_id = BitcoinVaults :: proposals_by_vault ( vault_id) . pop ( ) . unwrap ( ) ;
492+ make_proposal_valid ( proposal_id) ;
461493
462494 assert_ok ! ( BitcoinVaults :: save_psbt( Origin :: signed( test_pub( 1 ) ) , proposal_id, dummy_psbt( ) ) ) ;
463495 assert_ok ! ( BitcoinVaults :: finalize_psbt( Origin :: signed( test_pub( 1 ) ) , proposal_id, false ) ) ;
@@ -476,9 +508,11 @@ fn finalize_psbt_twice_shouldnt_work(){
476508 assert_ok ! ( BitcoinVaults :: create_vault( Origin :: signed( test_pub( 1 ) ) , 1 , dummy_description( ) , true , cosigners) ) ;
477509 assert ! ( !BitcoinVaults :: vaults_by_signer( test_pub( 1 ) ) . is_empty( ) ) ;
478510 let vault_id = BitcoinVaults :: vaults_by_signer ( test_pub ( 1 ) ) . pop ( ) . unwrap ( ) ;
511+ make_vault_valid ( vault_id) ;
479512 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ) ;
480513 // obtaining proposal id and saving a psbt with a user that is not in the vault
481514 let proposal_id = BitcoinVaults :: proposals_by_vault ( vault_id) . pop ( ) . unwrap ( ) ;
515+ make_proposal_valid ( proposal_id) ;
482516
483517 assert_ok ! ( BitcoinVaults :: save_psbt( Origin :: signed( test_pub( 1 ) ) , proposal_id, dummy_psbt( ) ) ) ;
484518 assert_ok ! ( BitcoinVaults :: finalize_psbt( Origin :: signed( test_pub( 1 ) ) , proposal_id, false ) ) ;
@@ -498,9 +532,11 @@ fn finalize_psbt_without_signatures_shouldnt_work(){
498532 assert_ok ! ( BitcoinVaults :: create_vault( Origin :: signed( test_pub( 1 ) ) , 1 , dummy_description( ) , true , cosigners) ) ;
499533 assert ! ( !BitcoinVaults :: vaults_by_signer( test_pub( 1 ) ) . is_empty( ) ) ;
500534 let vault_id = BitcoinVaults :: vaults_by_signer ( test_pub ( 1 ) ) . pop ( ) . unwrap ( ) ;
535+ make_vault_valid ( vault_id) ;
501536 assert_ok ! ( BitcoinVaults :: propose( Origin :: signed( test_pub( 1 ) ) , vault_id, dummy_testnet_recipient_address( ) , 1000 , dummy_description( ) ) ) ;
502537 // obtaining proposal id and saving a psbt with a user that is not in the vault
503538 let proposal_id = BitcoinVaults :: proposals_by_vault ( vault_id) . pop ( ) . unwrap ( ) ;
539+ make_proposal_valid ( proposal_id) ;
504540
505541 assert_noop ! ( BitcoinVaults :: finalize_psbt( Origin :: signed( test_pub( 1 ) ) , proposal_id, false ) , Error :: <Test >:: NotEnoughSignatures ) ;
506542 } ) ;
0 commit comments