@@ -30,7 +30,8 @@ macro_rules! impl_top_level_sh {
3030 use $crate:: miniscript:: $ctx;
3131
3232 let build_desc = |k, pks| {
33- Ok ( ( Descriptor :: <DescriptorPublicKey >:: $inner_struct( $inner_struct:: $sortedmulti_constructor( k, pks) ?) , PhantomData :: <$ctx>) )
33+ let thresh = miniscript:: Threshold :: new( k, pks) ?;
34+ Ok ( ( Descriptor :: <DescriptorPublicKey >:: $inner_struct( $inner_struct:: $sortedmulti_constructor( thresh) ?) , PhantomData :: <$ctx>) )
3435 } ;
3536
3637 $crate:: impl_sortedmulti!( build_desc, sortedmulti $( $inner ) * )
@@ -42,7 +43,8 @@ macro_rules! impl_top_level_sh {
4243 use $crate:: miniscript:: $ctx;
4344
4445 let build_desc = |k, pks| {
45- Ok ( ( Descriptor :: <DescriptorPublicKey >:: $inner_struct( $inner_struct:: $sortedmulti_constructor( k, pks) ?) , PhantomData :: <$ctx>) )
46+ let thresh = miniscript:: Threshold :: new( k, pks) ?;
47+ Ok ( ( Descriptor :: <DescriptorPublicKey >:: $inner_struct( $inner_struct:: $sortedmulti_constructor( thresh) ?) , PhantomData :: <$ctx>) )
4648 } ;
4749
4850 $crate:: impl_sortedmulti!( build_desc, sortedmulti_vec $( $inner ) * )
@@ -294,7 +296,7 @@ macro_rules! parse_tap_tree {
294296 . and_then( |tree_a| Ok ( ( tree_a, $tree_b?) ) )
295297 . and_then( |( ( a_tree, mut a_keymap, a_network_kinds) , ( b_tree, b_keymap, b_network_kinds) ) | {
296298 a_keymap. extend( b_keymap. into_iter( ) ) ;
297- Ok ( ( TapTree :: combine( a_tree, b_tree) , a_keymap, $crate:: keys:: intersect_network_kinds( & a_network_kinds, & b_network_kinds) ) )
299+ Ok ( ( TapTree :: combine( a_tree, b_tree) ? , a_keymap, $crate:: keys:: intersect_network_kinds( & a_network_kinds, & b_network_kinds) ) )
298300 } )
299301
300302 } } ;
@@ -331,11 +333,10 @@ macro_rules! parse_tap_tree {
331333
332334 // Single leaf
333335 ( $op: ident ( $( $minisc: tt ) * ) ) => { {
334- use $crate:: alloc:: sync:: Arc ;
335336 use $crate:: miniscript:: descriptor:: TapTree ;
336337
337338 $crate:: fragment!( $op ( $( $minisc ) * ) )
338- . map( |( a_minisc, a_keymap, a_network_kinds) | ( TapTree :: Leaf ( Arc :: new ( a_minisc) ) , a_keymap, a_network_kinds) )
339+ . map( |( a_minisc, a_keymap, a_network_kinds) | ( TapTree :: leaf ( a_minisc) , a_keymap, a_network_kinds) )
339340 } } ;
340341}
341342
@@ -721,10 +722,14 @@ macro_rules! fragment {
721722 $crate:: keys:: make_pkh( $key, & secp)
722723 } ) ;
723724 ( after ( $value: expr ) ) => ( {
724- $crate:: impl_leaf_opcode_value!( After , $crate:: miniscript:: AbsLockTime :: from_consensus( $value) . expect( "valid `AbsLockTime`" ) )
725+ $crate:: miniscript:: AbsLockTime :: from_consensus( $value)
726+ . map_err( $crate:: descriptor:: DescriptorError :: from)
727+ . and_then( |abs_lt| $crate:: impl_leaf_opcode_value!( After , abs_lt) )
725728 } ) ;
726729 ( older ( $value: expr ) ) => ( {
727- $crate:: impl_leaf_opcode_value!( Older , $crate:: miniscript:: RelLockTime :: from_consensus( $value) . expect( "valid `RelLockTime`" ) ) // TODO!!
730+ $crate:: miniscript:: RelLockTime :: from_consensus( $value)
731+ . map_err( $crate:: descriptor:: DescriptorError :: from)
732+ . and_then( |rel_lt| $crate:: impl_leaf_opcode_value!( Older , rel_lt) )
728733 } ) ;
729734 ( sha256 ( $hash: expr ) ) => ( {
730735 $crate:: impl_leaf_opcode_value!( Sha256 , $hash)
@@ -775,9 +780,12 @@ macro_rules! fragment {
775780 ( keys_acc, net_acc)
776781 } ) ;
777782
778- let thresh = $crate:: miniscript:: Threshold :: new( $thresh, items) . expect( "valid threshold and pks collection" ) ;
779- $crate:: impl_leaf_opcode_value!( Thresh , thresh)
780- . map( |( minisc, _, _) | ( minisc, key_maps, valid_network_kinds) )
783+ $crate:: miniscript:: Threshold :: new( $thresh, items)
784+ . map_err( $crate:: descriptor:: DescriptorError :: from)
785+ . and_then( |thresh| {
786+ $crate:: impl_leaf_opcode_value!( Thresh , thresh)
787+ . map( |( minisc, _, _) | ( minisc, key_maps, valid_network_kinds) )
788+ } )
781789 } ) ;
782790 ( thresh ( $thresh: expr, $( $inner: tt ) * ) ) => ( {
783791 let items = $crate:: fragment_internal!( @v $( $inner ) * ) ;
@@ -789,8 +797,8 @@ macro_rules! fragment {
789797 let secp = $crate:: bitcoin:: secp256k1:: Secp256k1 :: new( ) ;
790798
791799 let fun = |k, pks| {
792- let thresh = $crate:: miniscript:: Threshold :: new( k, pks) . expect ( "valid threshold and pks collection" ) ;
793- $crate:: miniscript:: Terminal :: Multi ( thresh)
800+ let thresh = $crate:: miniscript:: Threshold :: new( k, pks) ? ;
801+ Ok ( $crate:: miniscript:: Terminal :: Multi ( thresh) )
794802 } ;
795803
796804 $crate:: keys:: make_multi( $thresh, fun, $keys, & secp)
@@ -803,8 +811,8 @@ macro_rules! fragment {
803811 let secp = $crate:: bitcoin:: secp256k1:: Secp256k1 :: new( ) ;
804812
805813 let fun = |k, pks| {
806- let thresh = $crate:: miniscript:: Threshold :: new( k, pks) . expect ( "valid threshold and pks collection" ) ;
807- $crate:: miniscript:: Terminal :: MultiA ( thresh)
814+ let thresh = $crate:: miniscript:: Threshold :: new( k, pks) ? ;
815+ Ok ( $crate:: miniscript:: Terminal :: MultiA ( thresh) )
808816 } ;
809817
810818 $crate:: keys:: make_multi( $thresh, fun, $keys, & secp)
0 commit comments