@@ -977,10 +977,7 @@ impl<Pk: MiniscriptKey> Descriptor<Pk> {
977977 {
978978 match * self {
979979 Descriptor :: Bare ( ref d) => {
980- let wit = match d. satisfy ( satisfier, to_pk_ctx) {
981- Some ( wit) => wit,
982- None => return Err ( Error :: CouldNotSatisfy ) ,
983- } ;
980+ let wit = d. satisfy ( satisfier, to_pk_ctx) ?;
984981 let script_sig = witness_to_scriptsig ( & wit) ;
985982 let witness = vec ! [ ] ;
986983 Ok ( ( witness, script_sig) )
@@ -1044,20 +1041,14 @@ impl<Pk: MiniscriptKey> Descriptor<Pk> {
10441041 }
10451042 }
10461043 Descriptor :: Sh ( ref d) => {
1047- let mut script_witness = match d. satisfy ( satisfier, to_pk_ctx) {
1048- Some ( wit) => wit,
1049- None => return Err ( Error :: CouldNotSatisfy ) ,
1050- } ;
1044+ let mut script_witness = d. satisfy ( satisfier, to_pk_ctx) ?;
10511045 script_witness. push ( d. encode ( to_pk_ctx) . into_bytes ( ) ) ;
10521046 let script_sig = witness_to_scriptsig ( & script_witness) ;
10531047 let witness = vec ! [ ] ;
10541048 Ok ( ( witness, script_sig) )
10551049 }
10561050 Descriptor :: Wsh ( ref d) => {
1057- let mut witness = match d. satisfy ( satisfier, to_pk_ctx) {
1058- Some ( wit) => wit,
1059- None => return Err ( Error :: CouldNotSatisfy ) ,
1060- } ;
1051+ let mut witness = d. satisfy ( satisfier, to_pk_ctx) ?;
10611052 witness. push ( d. encode ( to_pk_ctx) . into_bytes ( ) ) ;
10621053 let script_sig = Script :: new ( ) ;
10631054 Ok ( ( witness, script_sig) )
@@ -1068,28 +1059,19 @@ impl<Pk: MiniscriptKey> Descriptor<Pk> {
10681059 . push_slice ( & witness_script. to_v0_p2wsh ( ) [ ..] )
10691060 . into_script ( ) ;
10701061
1071- let mut witness = match d. satisfy ( satisfier, to_pk_ctx) {
1072- Some ( wit) => wit,
1073- None => return Err ( Error :: CouldNotSatisfy ) ,
1074- } ;
1062+ let mut witness = d. satisfy ( satisfier, to_pk_ctx) ?;
10751063 witness. push ( witness_script. into_bytes ( ) ) ;
10761064 Ok ( ( witness, script_sig) )
10771065 }
10781066 Descriptor :: ShSortedMulti ( ref smv) => {
1079- let mut script_witness = match smv. satisfy ( satisfier, to_pk_ctx) {
1080- Some ( wit) => wit,
1081- None => return Err ( Error :: CouldNotSatisfy ) ,
1082- } ;
1067+ let mut script_witness = smv. satisfy ( satisfier, to_pk_ctx) ?;
10831068 script_witness. push ( smv. encode ( to_pk_ctx) . into_bytes ( ) ) ;
10841069 let script_sig = witness_to_scriptsig ( & script_witness) ;
10851070 let witness = vec ! [ ] ;
10861071 Ok ( ( witness, script_sig) )
10871072 }
10881073 Descriptor :: WshSortedMulti ( ref smv) => {
1089- let mut witness = match smv. satisfy ( satisfier, to_pk_ctx) {
1090- Some ( wit) => wit,
1091- None => return Err ( Error :: CouldNotSatisfy ) ,
1092- } ;
1074+ let mut witness = smv. satisfy ( satisfier, to_pk_ctx) ?;
10931075 witness. push ( smv. encode ( to_pk_ctx) . into_bytes ( ) ) ;
10941076 let script_sig = Script :: new ( ) ;
10951077 Ok ( ( witness, script_sig) )
@@ -1100,10 +1082,7 @@ impl<Pk: MiniscriptKey> Descriptor<Pk> {
11001082 . push_slice ( & witness_script. to_v0_p2wsh ( ) [ ..] )
11011083 . into_script ( ) ;
11021084
1103- let mut witness = match smv. satisfy ( satisfier, to_pk_ctx) {
1104- Some ( wit) => wit,
1105- None => return Err ( Error :: CouldNotSatisfy ) ,
1106- } ;
1085+ let mut witness = smv. satisfy ( satisfier, to_pk_ctx) ?;
11071086 witness. push ( witness_script. into_bytes ( ) ) ;
11081087 Ok ( ( witness, script_sig) )
11091088 }
@@ -1545,7 +1524,11 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> SortedMultiVec<Pk, Ctx> {
15451524
15461525 /// Attempt to produce a satisfying witness for the
15471526 /// witness script represented by the parse tree
1548- pub fn satisfy < ToPkCtx , S > ( & self , satisfier : S , to_pk_ctx : ToPkCtx ) -> Option < Vec < Vec < u8 > > >
1527+ pub fn satisfy < ToPkCtx , S > (
1528+ & self ,
1529+ satisfier : S ,
1530+ to_pk_ctx : ToPkCtx ,
1531+ ) -> Result < Vec < Vec < u8 > > , Error >
15491532 where
15501533 ToPkCtx : Copy ,
15511534 Pk : ToPublicKey < ToPkCtx > ,
0 commit comments