@@ -986,10 +986,7 @@ impl<Pk: MiniscriptKey> Descriptor<Pk> {
986986 {
987987 match * self {
988988 Descriptor :: Bare ( ref d) => {
989- let wit = match d. satisfy ( satisfier, to_pk_ctx) {
990- Some ( wit) => wit,
991- None => return Err ( Error :: CouldNotSatisfy ) ,
992- } ;
989+ let wit = d. satisfy ( satisfier, to_pk_ctx) ?;
993990 let script_sig = witness_to_scriptsig ( & wit) ;
994991 let witness = vec ! [ ] ;
995992 Ok ( ( witness, script_sig) )
@@ -1053,20 +1050,14 @@ impl<Pk: MiniscriptKey> Descriptor<Pk> {
10531050 }
10541051 }
10551052 Descriptor :: Sh ( ref d) => {
1056- let mut script_witness = match d. satisfy ( satisfier, to_pk_ctx) {
1057- Some ( wit) => wit,
1058- None => return Err ( Error :: CouldNotSatisfy ) ,
1059- } ;
1053+ let mut script_witness = d. satisfy ( satisfier, to_pk_ctx) ?;
10601054 script_witness. push ( d. encode ( to_pk_ctx) . into_bytes ( ) ) ;
10611055 let script_sig = witness_to_scriptsig ( & script_witness) ;
10621056 let witness = vec ! [ ] ;
10631057 Ok ( ( witness, script_sig) )
10641058 }
10651059 Descriptor :: Wsh ( ref d) => {
1066- let mut witness = match d. satisfy ( satisfier, to_pk_ctx) {
1067- Some ( wit) => wit,
1068- None => return Err ( Error :: CouldNotSatisfy ) ,
1069- } ;
1060+ let mut witness = d. satisfy ( satisfier, to_pk_ctx) ?;
10701061 witness. push ( d. encode ( to_pk_ctx) . into_bytes ( ) ) ;
10711062 let script_sig = Script :: new ( ) ;
10721063 Ok ( ( witness, script_sig) )
@@ -1077,28 +1068,19 @@ impl<Pk: MiniscriptKey> Descriptor<Pk> {
10771068 . push_slice ( & witness_script. to_v0_p2wsh ( ) [ ..] )
10781069 . into_script ( ) ;
10791070
1080- let mut witness = match d. satisfy ( satisfier, to_pk_ctx) {
1081- Some ( wit) => wit,
1082- None => return Err ( Error :: CouldNotSatisfy ) ,
1083- } ;
1071+ let mut witness = d. satisfy ( satisfier, to_pk_ctx) ?;
10841072 witness. push ( witness_script. into_bytes ( ) ) ;
10851073 Ok ( ( witness, script_sig) )
10861074 }
10871075 Descriptor :: ShSortedMulti ( ref smv) => {
1088- let mut script_witness = match smv. satisfy ( satisfier, to_pk_ctx) {
1089- Some ( wit) => wit,
1090- None => return Err ( Error :: CouldNotSatisfy ) ,
1091- } ;
1076+ let mut script_witness = smv. satisfy ( satisfier, to_pk_ctx) ?;
10921077 script_witness. push ( smv. encode ( to_pk_ctx) . into_bytes ( ) ) ;
10931078 let script_sig = witness_to_scriptsig ( & script_witness) ;
10941079 let witness = vec ! [ ] ;
10951080 Ok ( ( witness, script_sig) )
10961081 }
10971082 Descriptor :: WshSortedMulti ( ref smv) => {
1098- let mut witness = match smv. satisfy ( satisfier, to_pk_ctx) {
1099- Some ( wit) => wit,
1100- None => return Err ( Error :: CouldNotSatisfy ) ,
1101- } ;
1083+ let mut witness = smv. satisfy ( satisfier, to_pk_ctx) ?;
11021084 witness. push ( smv. encode ( to_pk_ctx) . into_bytes ( ) ) ;
11031085 let script_sig = Script :: new ( ) ;
11041086 Ok ( ( witness, script_sig) )
@@ -1109,10 +1091,7 @@ impl<Pk: MiniscriptKey> Descriptor<Pk> {
11091091 . push_slice ( & witness_script. to_v0_p2wsh ( ) [ ..] )
11101092 . into_script ( ) ;
11111093
1112- let mut witness = match smv. satisfy ( satisfier, to_pk_ctx) {
1113- Some ( wit) => wit,
1114- None => return Err ( Error :: CouldNotSatisfy ) ,
1115- } ;
1094+ let mut witness = smv. satisfy ( satisfier, to_pk_ctx) ?;
11161095 witness. push ( witness_script. into_bytes ( ) ) ;
11171096 Ok ( ( witness, script_sig) )
11181097 }
@@ -1554,7 +1533,11 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> SortedMultiVec<Pk, Ctx> {
15541533
15551534 /// Attempt to produce a satisfying witness for the
15561535 /// witness script represented by the parse tree
1557- pub fn satisfy < ToPkCtx , S > ( & self , satisfier : S , to_pk_ctx : ToPkCtx ) -> Option < Vec < Vec < u8 > > >
1536+ pub fn satisfy < ToPkCtx , S > (
1537+ & self ,
1538+ satisfier : S ,
1539+ to_pk_ctx : ToPkCtx ,
1540+ ) -> Result < Vec < Vec < u8 > > , Error >
15581541 where
15591542 ToPkCtx : Copy ,
15601543 Pk : ToPublicKey < ToPkCtx > ,
0 commit comments