@@ -9,27 +9,12 @@ use Terminal;
9
9
10
10
pub const MAX_OPS_PER_SCRIPT : usize = 201 ;
11
11
12
- /// Whether a fragment is OK to be used in non-segwit scripts
13
- #[ derive( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Debug , Hash ) ]
14
- pub enum LegacySafe {
15
- /// The fragment can be used in pre-segwit contexts without concern
16
- /// about malleability attacks/unbounded 3rd-party fee stuffing. This
17
- /// means it has no `pk_h` constructions (cannot estimate public key
18
- /// size from a hash) and no `d:`/`or_i` constructions (cannot control
19
- /// the size of the switch input to `OP_IF`)
20
- LegacySafe ,
21
- /// This fragment can only be safely used with Segwit
22
- SegwitOnly ,
23
- }
24
-
25
12
/// Structure representing the extra type properties of a fragment which are
26
13
/// relevant to legacy(pre-segwit) safety and fee estimation. If a fragment is
27
14
/// used in pre-segwit transactions it will only be malleable but still is
28
15
/// correct and sound.
29
16
#[ derive( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Debug , Hash ) ]
30
17
pub struct ExtData {
31
- ///enum sorting whether the fragment is safe to be in used in pre-segwit context
32
- pub legacy_safe : LegacySafe ,
33
18
/// The number of bytes needed to encode its scriptpubkey
34
19
pub pk_cost : usize ,
35
20
/// Whether this fragment can be verify-wrapped for free
@@ -49,7 +34,6 @@ impl Property for ExtData {
49
34
50
35
fn from_true ( ) -> Self {
51
36
ExtData {
52
- legacy_safe : LegacySafe :: LegacySafe ,
53
37
pk_cost : 1 ,
54
38
has_verify_form : false ,
55
39
ops_count_static : 0 ,
@@ -60,7 +44,6 @@ impl Property for ExtData {
60
44
61
45
fn from_false ( ) -> Self {
62
46
ExtData {
63
- legacy_safe : LegacySafe :: LegacySafe ,
64
47
pk_cost : 1 ,
65
48
has_verify_form : false ,
66
49
ops_count_static : 0 ,
@@ -71,7 +54,6 @@ impl Property for ExtData {
71
54
72
55
fn from_pk_k ( ) -> Self {
73
56
ExtData {
74
- legacy_safe : LegacySafe :: LegacySafe ,
75
57
pk_cost : 34 ,
76
58
has_verify_form : false ,
77
59
ops_count_static : 0 ,
@@ -82,7 +64,6 @@ impl Property for ExtData {
82
64
83
65
fn from_pk_h ( ) -> Self {
84
66
ExtData {
85
- legacy_safe : LegacySafe :: SegwitOnly ,
86
67
pk_cost : 24 ,
87
68
has_verify_form : false ,
88
69
ops_count_static : 3 ,
@@ -99,7 +80,6 @@ impl Property for ExtData {
99
80
( false , false ) => 2 ,
100
81
} ;
101
82
ExtData {
102
- legacy_safe : LegacySafe :: LegacySafe ,
103
83
pk_cost : num_cost + 34 * n + 1 ,
104
84
has_verify_form : true ,
105
85
ops_count_static : 1 ,
@@ -115,7 +95,6 @@ impl Property for ExtData {
115
95
116
96
fn from_sha256 ( ) -> Self {
117
97
ExtData {
118
- legacy_safe : LegacySafe :: LegacySafe ,
119
98
pk_cost : 33 + 6 ,
120
99
has_verify_form : true ,
121
100
ops_count_static : 4 ,
@@ -126,7 +105,6 @@ impl Property for ExtData {
126
105
127
106
fn from_hash256 ( ) -> Self {
128
107
ExtData {
129
- legacy_safe : LegacySafe :: LegacySafe ,
130
108
pk_cost : 33 + 6 ,
131
109
has_verify_form : true ,
132
110
ops_count_static : 4 ,
@@ -137,7 +115,6 @@ impl Property for ExtData {
137
115
138
116
fn from_ripemd160 ( ) -> Self {
139
117
ExtData {
140
- legacy_safe : LegacySafe :: LegacySafe ,
141
118
pk_cost : 21 + 6 ,
142
119
has_verify_form : true ,
143
120
ops_count_static : 4 ,
@@ -148,7 +125,6 @@ impl Property for ExtData {
148
125
149
126
fn from_hash160 ( ) -> Self {
150
127
ExtData {
151
- legacy_safe : LegacySafe :: LegacySafe ,
152
128
pk_cost : 21 + 6 ,
153
129
has_verify_form : true ,
154
130
ops_count_static : 4 ,
@@ -159,7 +135,6 @@ impl Property for ExtData {
159
135
160
136
fn from_time ( t : u32 ) -> Self {
161
137
ExtData {
162
- legacy_safe : LegacySafe :: LegacySafe ,
163
138
pk_cost : script_num_size ( t as usize ) + 1 ,
164
139
has_verify_form : false ,
165
140
ops_count_static : 1 ,
@@ -169,7 +144,6 @@ impl Property for ExtData {
169
144
}
170
145
fn cast_alt ( self ) -> Result < Self , ErrorKind > {
171
146
Ok ( ExtData {
172
- legacy_safe : self . legacy_safe ,
173
147
pk_cost : self . pk_cost + 2 ,
174
148
has_verify_form : false ,
175
149
ops_count_static : self . ops_count_static + 2 ,
@@ -180,7 +154,6 @@ impl Property for ExtData {
180
154
181
155
fn cast_swap ( self ) -> Result < Self , ErrorKind > {
182
156
Ok ( ExtData {
183
- legacy_safe : self . legacy_safe ,
184
157
pk_cost : self . pk_cost + 1 ,
185
158
has_verify_form : self . has_verify_form ,
186
159
ops_count_static : self . ops_count_static + 1 ,
@@ -191,7 +164,6 @@ impl Property for ExtData {
191
164
192
165
fn cast_check ( self ) -> Result < Self , ErrorKind > {
193
166
Ok ( ExtData {
194
- legacy_safe : self . legacy_safe ,
195
167
pk_cost : self . pk_cost + 1 ,
196
168
has_verify_form : true ,
197
169
ops_count_static : self . ops_count_static + 1 ,
@@ -202,7 +174,6 @@ impl Property for ExtData {
202
174
203
175
fn cast_dupif ( self ) -> Result < Self , ErrorKind > {
204
176
Ok ( ExtData {
205
- legacy_safe : LegacySafe :: SegwitOnly ,
206
177
pk_cost : self . pk_cost + 3 ,
207
178
has_verify_form : false ,
208
179
ops_count_static : self . ops_count_static + 3 ,
@@ -214,7 +185,6 @@ impl Property for ExtData {
214
185
fn cast_verify ( self ) -> Result < Self , ErrorKind > {
215
186
let verify_cost = if self . has_verify_form { 0 } else { 1 } ;
216
187
Ok ( ExtData {
217
- legacy_safe : self . legacy_safe ,
218
188
pk_cost : self . pk_cost + if self . has_verify_form { 0 } else { 1 } ,
219
189
has_verify_form : false ,
220
190
ops_count_static : self . ops_count_static + verify_cost,
@@ -225,7 +195,6 @@ impl Property for ExtData {
225
195
226
196
fn cast_nonzero ( self ) -> Result < Self , ErrorKind > {
227
197
Ok ( ExtData {
228
- legacy_safe : self . legacy_safe ,
229
198
pk_cost : self . pk_cost + 4 ,
230
199
has_verify_form : false ,
231
200
ops_count_static : self . ops_count_static + 4 ,
@@ -236,7 +205,6 @@ impl Property for ExtData {
236
205
237
206
fn cast_zeronotequal ( self ) -> Result < Self , ErrorKind > {
238
207
Ok ( ExtData {
239
- legacy_safe : self . legacy_safe ,
240
208
pk_cost : self . pk_cost + 1 ,
241
209
has_verify_form : false ,
242
210
ops_count_static : self . ops_count_static + 1 ,
@@ -247,7 +215,6 @@ impl Property for ExtData {
247
215
248
216
fn cast_true ( self ) -> Result < Self , ErrorKind > {
249
217
Ok ( ExtData {
250
- legacy_safe : self . legacy_safe ,
251
218
pk_cost : self . pk_cost + 1 ,
252
219
has_verify_form : false ,
253
220
ops_count_static : self . ops_count_static ,
@@ -263,7 +230,6 @@ impl Property for ExtData {
263
230
264
231
fn cast_unlikely ( self ) -> Result < Self , ErrorKind > {
265
232
Ok ( ExtData {
266
- legacy_safe : self . legacy_safe ,
267
233
pk_cost : self . pk_cost + 4 ,
268
234
has_verify_form : false ,
269
235
ops_count_static : self . ops_count_static + 3 ,
@@ -274,7 +240,6 @@ impl Property for ExtData {
274
240
275
241
fn cast_likely ( self ) -> Result < Self , ErrorKind > {
276
242
Ok ( ExtData {
277
- legacy_safe : self . legacy_safe ,
278
243
pk_cost : self . pk_cost + 4 ,
279
244
has_verify_form : false ,
280
245
ops_count_static : self . ops_count_static + 3 ,
@@ -285,7 +250,6 @@ impl Property for ExtData {
285
250
286
251
fn and_b ( l : Self , r : Self ) -> Result < Self , ErrorKind > {
287
252
Ok ( ExtData {
288
- legacy_safe : legacy_safe2 ( l. legacy_safe , r. legacy_safe ) ,
289
253
pk_cost : l. pk_cost + r. pk_cost + 1 ,
290
254
has_verify_form : false ,
291
255
ops_count_static : l. ops_count_static + r. ops_count_static + 1 ,
@@ -300,7 +264,6 @@ impl Property for ExtData {
300
264
301
265
fn and_v ( l : Self , r : Self ) -> Result < Self , ErrorKind > {
302
266
Ok ( ExtData {
303
- legacy_safe : legacy_safe2 ( l. legacy_safe , r. legacy_safe ) ,
304
267
pk_cost : l. pk_cost + r. pk_cost ,
305
268
has_verify_form : r. has_verify_form ,
306
269
ops_count_static : l. ops_count_static + r. ops_count_static ,
@@ -311,7 +274,6 @@ impl Property for ExtData {
311
274
312
275
fn or_b ( l : Self , r : Self ) -> Result < Self , ErrorKind > {
313
276
Ok ( ExtData {
314
- legacy_safe : legacy_safe2 ( l. legacy_safe , r. legacy_safe ) ,
315
277
pk_cost : l. pk_cost + r. pk_cost + 1 ,
316
278
has_verify_form : false ,
317
279
ops_count_static : l. ops_count_static + r. ops_count_static + 1 ,
@@ -329,7 +291,6 @@ impl Property for ExtData {
329
291
330
292
fn or_d ( l : Self , r : Self ) -> Result < Self , ErrorKind > {
331
293
Ok ( ExtData {
332
- legacy_safe : LegacySafe :: SegwitOnly ,
333
294
pk_cost : l. pk_cost + r. pk_cost + 3 ,
334
295
has_verify_form : false ,
335
296
ops_count_static : l. ops_count_static + r. ops_count_static + 1 ,
@@ -346,7 +307,6 @@ impl Property for ExtData {
346
307
347
308
fn or_c ( l : Self , r : Self ) -> Result < Self , ErrorKind > {
348
309
Ok ( ExtData {
349
- legacy_safe : legacy_safe2 ( l. legacy_safe , r. legacy_safe ) ,
350
310
pk_cost : l. pk_cost + r. pk_cost + 2 ,
351
311
has_verify_form : false ,
352
312
ops_count_static : l. ops_count_static + r. ops_count_static + 2 ,
@@ -361,7 +321,6 @@ impl Property for ExtData {
361
321
362
322
fn or_i ( l : Self , r : Self ) -> Result < Self , ErrorKind > {
363
323
Ok ( ExtData {
364
- legacy_safe : legacy_safe2 ( l. legacy_safe , r. legacy_safe ) ,
365
324
pk_cost : l. pk_cost + r. pk_cost + 3 ,
366
325
has_verify_form : false ,
367
326
ops_count_static : l. ops_count_static + r. ops_count_static + 3 ,
@@ -379,7 +338,6 @@ impl Property for ExtData {
379
338
380
339
fn and_or ( a : Self , b : Self , c : Self ) -> Result < Self , ErrorKind > {
381
340
Ok ( ExtData {
382
- legacy_safe : legacy_safe2 ( legacy_safe2 ( a. legacy_safe , b. legacy_safe ) , c. legacy_safe ) ,
383
341
pk_cost : a. pk_cost + b. pk_cost + c. pk_cost + 3 ,
384
342
has_verify_form : false ,
385
343
ops_count_static : a. ops_count_static + b. ops_count_static + c. ops_count_static + 3 ,
@@ -400,7 +358,6 @@ impl Property for ExtData {
400
358
S : FnMut ( usize ) -> Result < Self , ErrorKind > ,
401
359
{
402
360
let mut pk_cost = 1 + script_num_size ( k) ; //Equal and k
403
- let mut legacy_safe = LegacySafe :: LegacySafe ;
404
361
let mut ops_count_static = 0 as usize ;
405
362
let mut ops_count_sat_vec = Vec :: with_capacity ( n) ;
406
363
let mut ops_count_nsat_sum = 0 as usize ;
@@ -424,7 +381,6 @@ impl Property for ExtData {
424
381
}
425
382
_ => { }
426
383
}
427
- legacy_safe = legacy_safe2 ( legacy_safe, sub. legacy_safe ) ;
428
384
}
429
385
let remaining_sat = k - sat_count;
430
386
let mut sum: i32 = 0 ;
@@ -440,7 +396,6 @@ impl Property for ExtData {
440
396
. sum ( ) ;
441
397
}
442
398
Ok ( ExtData {
443
- legacy_safe : legacy_safe,
444
399
pk_cost : pk_cost + n - 1 , //all pk cost + (n-1)*ADD
445
400
has_verify_form : true ,
446
401
ops_count_static : ops_count_static + ( n - 1 ) + 1 , //adds and equal
@@ -582,10 +537,3 @@ impl Property for ExtData {
582
537
ret
583
538
}
584
539
}
585
-
586
- fn legacy_safe2 ( a : LegacySafe , b : LegacySafe ) -> LegacySafe {
587
- match ( a, b) {
588
- ( LegacySafe :: LegacySafe , LegacySafe :: LegacySafe ) => LegacySafe :: LegacySafe ,
589
- _ => LegacySafe :: SegwitOnly ,
590
- }
591
- }
0 commit comments