@@ -5,6 +5,7 @@ use std::cmp;
55use std:: iter:: once;
66
77use super :: { Error , ErrorKind , Property , ScriptContext } ;
8+ use crate :: miniscript:: context:: SigType ;
89use crate :: miniscript:: limits:: {
910 HEIGHT_TIME_THRESHOLD , SEQUENCE_LOCKTIME_DISABLE_FLAG , SEQUENCE_LOCKTIME_TYPE_FLAG ,
1011} ;
@@ -183,30 +184,42 @@ impl Property for ExtData {
183184 }
184185 }
185186
186- fn from_pk_k ( ) -> Self {
187+ fn from_pk_k < Ctx : ScriptContext > ( ) -> Self {
187188 ExtData {
188- pk_cost : 34 ,
189+ pk_cost : match Ctx :: sig_type ( ) {
190+ SigType :: Ecdsa => 34 ,
191+ SigType :: Schnorr => 33 ,
192+ } ,
189193 has_free_verify : false ,
190194 ops : OpLimits :: new ( 0 , Some ( 0 ) , Some ( 0 ) ) ,
191195 stack_elem_count_sat : Some ( 1 ) ,
192196 stack_elem_count_dissat : Some ( 1 ) ,
193- max_sat_size : Some ( ( 73 , 73 ) ) ,
197+ max_sat_size : match Ctx :: sig_type ( ) {
198+ SigType :: Ecdsa => Some ( ( 73 , 73 ) ) ,
199+ SigType :: Schnorr => Some ( ( 66 , 66 ) ) ,
200+ } ,
194201 max_dissat_size : Some ( ( 1 , 1 ) ) ,
195202 timelock_info : TimeLockInfo :: default ( ) ,
196203 exec_stack_elem_count_sat : Some ( 1 ) , // pushes the pk
197204 exec_stack_elem_count_dissat : Some ( 1 ) ,
198205 }
199206 }
200207
201- fn from_pk_h ( ) -> Self {
208+ fn from_pk_h < Ctx : ScriptContext > ( ) -> Self {
202209 ExtData {
203210 pk_cost : 24 ,
204211 has_free_verify : false ,
205212 ops : OpLimits :: new ( 3 , Some ( 0 ) , Some ( 0 ) ) ,
206213 stack_elem_count_sat : Some ( 2 ) ,
207214 stack_elem_count_dissat : Some ( 2 ) ,
208- max_sat_size : Some ( ( 34 + 73 , 34 + 73 ) ) ,
209- max_dissat_size : Some ( ( 35 , 35 ) ) ,
215+ max_sat_size : match Ctx :: sig_type ( ) {
216+ SigType :: Ecdsa => Some ( ( 34 + 73 , 34 + 73 ) ) ,
217+ SigType :: Schnorr => Some ( ( 66 + 33 , 33 + 66 ) ) ,
218+ } ,
219+ max_dissat_size : match Ctx :: sig_type ( ) {
220+ SigType :: Ecdsa => Some ( ( 35 , 35 ) ) ,
221+ SigType :: Schnorr => Some ( ( 34 , 34 ) ) ,
222+ } ,
210223 timelock_info : TimeLockInfo :: default ( ) ,
211224 exec_stack_elem_count_sat : Some ( 2 ) , // dup and hash push
212225 exec_stack_elem_count_dissat : Some ( 2 ) ,
@@ -244,7 +257,7 @@ impl Property for ExtData {
244257 ( false , false ) => 2 ,
245258 } ;
246259 ExtData {
247- pk_cost : num_cost + 33 * n /*pks*/ + ( n- 1 ) /*checksigadds*/ + 1 ,
260+ pk_cost : num_cost + 33 * n /*pks*/ + ( n - 1 ) /*checksigadds*/ + 1 ,
248261 has_free_verify : true ,
249262 // These numbers are irrelevant here are there is no op limit in tapscript
250263 ops : OpLimits :: new ( n, Some ( 0 ) , Some ( 0 ) ) ,
@@ -903,8 +916,8 @@ impl Property for ExtData {
903916 let ret = match * fragment {
904917 Terminal :: True => Ok ( Self :: from_true ( ) ) ,
905918 Terminal :: False => Ok ( Self :: from_false ( ) ) ,
906- Terminal :: PkK ( ..) => Ok ( Self :: from_pk_k ( ) ) ,
907- Terminal :: PkH ( ..) => Ok ( Self :: from_pk_h ( ) ) ,
919+ Terminal :: PkK ( ..) => Ok ( Self :: from_pk_k :: < Ctx > ( ) ) ,
920+ Terminal :: PkH ( ..) => Ok ( Self :: from_pk_h :: < Ctx > ( ) ) ,
908921 Terminal :: Multi ( k, ref pks) | Terminal :: MultiA ( k, ref pks) => {
909922 if k == 0 {
910923 return Err ( Error {
0 commit comments