@@ -58,7 +58,9 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> Miniscript<Pk, Ctx> {
58
58
/// them.
59
59
pub fn branches ( & self ) -> Vec < & Miniscript < Pk , Ctx > > {
60
60
match self . node {
61
- Terminal :: PkK ( _) | Terminal :: PkH ( _) | Terminal :: Multi ( _, _) => vec ! [ ] ,
61
+ Terminal :: PkK ( _) | Terminal :: PkH ( _) | Terminal :: RawPkH ( _) | Terminal :: Multi ( _, _) => {
62
+ vec ! [ ]
63
+ }
62
64
63
65
Terminal :: Alt ( ref node)
64
66
| Terminal :: Swap ( ref node)
@@ -123,7 +125,7 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> Miniscript<Pk, Ctx> {
123
125
/// `miniscript.iter_pubkeys().collect()`.
124
126
pub fn get_leapk ( & self ) -> Vec < Pk > {
125
127
match self . node {
126
- Terminal :: PkK ( ref key) => vec ! [ key. clone( ) ] ,
128
+ Terminal :: PkK ( ref key) | Terminal :: PkH ( ref key ) => vec ! [ key. clone( ) ] ,
127
129
Terminal :: Multi ( _, ref keys) | Terminal :: MultiA ( _, ref keys) => keys. clone ( ) ,
128
130
_ => vec ! [ ] ,
129
131
}
@@ -140,8 +142,8 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> Miniscript<Pk, Ctx> {
140
142
/// for example `miniscript.iter_pubkey_hashes().collect()`.
141
143
pub fn get_leapkh ( & self ) -> Vec < Pk :: Hash > {
142
144
match self . node {
143
- Terminal :: PkH ( ref hash) => vec ! [ hash. clone( ) ] ,
144
- Terminal :: PkK ( ref key) => vec ! [ key. to_pubkeyhash( ) ] ,
145
+ Terminal :: RawPkH ( ref hash) => vec ! [ hash. clone( ) ] ,
146
+ Terminal :: PkK ( ref key) | Terminal :: PkH ( ref key ) => vec ! [ key. to_pubkeyhash( ) ] ,
145
147
Terminal :: Multi ( _, ref keys) | Terminal :: MultiA ( _, ref keys) => {
146
148
keys. iter ( ) . map ( Pk :: to_pubkeyhash) . collect ( )
147
149
}
@@ -158,8 +160,10 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> Miniscript<Pk, Ctx> {
158
160
/// function, for example `miniscript.iter_pubkeys_and_hashes().collect()`.
159
161
pub fn get_leapk_pkh ( & self ) -> Vec < PkPkh < Pk > > {
160
162
match self . node {
161
- Terminal :: PkH ( ref hash) => vec ! [ PkPkh :: HashedPubkey ( hash. clone( ) ) ] ,
162
- Terminal :: PkK ( ref key) => vec ! [ PkPkh :: PlainPubkey ( key. clone( ) ) ] ,
163
+ Terminal :: RawPkH ( ref hash) => vec ! [ PkPkh :: HashedPubkey ( hash. clone( ) ) ] ,
164
+ Terminal :: PkH ( ref key) | Terminal :: PkK ( ref key) => {
165
+ vec ! [ PkPkh :: PlainPubkey ( key. clone( ) ) ]
166
+ }
163
167
Terminal :: Multi ( _, ref keys) | Terminal :: MultiA ( _, ref keys) => keys
164
168
. iter ( )
165
169
. map ( |key| PkPkh :: PlainPubkey ( key. clone ( ) ) )
@@ -174,7 +178,7 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> Miniscript<Pk, Ctx> {
174
178
/// NB: The function analyzes only single miniscript item and not any of its descendants in AST.
175
179
pub fn get_nth_pk ( & self , n : usize ) -> Option < Pk > {
176
180
match ( & self . node , n) {
177
- ( & Terminal :: PkK ( ref key) , 0 ) => Some ( key. clone ( ) ) ,
181
+ ( & Terminal :: PkK ( ref key) , 0 ) | ( & Terminal :: PkH ( ref key ) , 0 ) => Some ( key. clone ( ) ) ,
178
182
( & Terminal :: Multi ( _, ref keys) , _) | ( & Terminal :: MultiA ( _, ref keys) , _) => {
179
183
keys. get ( n) . cloned ( )
180
184
}
@@ -191,8 +195,10 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> Miniscript<Pk, Ctx> {
191
195
/// NB: The function analyzes only single miniscript item and not any of its descendants in AST.
192
196
pub fn get_nth_pkh ( & self , n : usize ) -> Option < Pk :: Hash > {
193
197
match ( & self . node , n) {
194
- ( & Terminal :: PkH ( ref hash) , 0 ) => Some ( hash. clone ( ) ) ,
195
- ( & Terminal :: PkK ( ref key) , 0 ) => Some ( key. to_pubkeyhash ( ) ) ,
198
+ ( & Terminal :: RawPkH ( ref hash) , 0 ) => Some ( hash. clone ( ) ) ,
199
+ ( & Terminal :: PkK ( ref key) , 0 ) | ( & Terminal :: PkH ( ref key) , 0 ) => {
200
+ Some ( key. to_pubkeyhash ( ) )
201
+ }
196
202
( & Terminal :: Multi ( _, ref keys) , _) | ( & Terminal :: MultiA ( _, ref keys) , _) => {
197
203
keys. get ( n) . map ( Pk :: to_pubkeyhash)
198
204
}
@@ -206,8 +212,10 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> Miniscript<Pk, Ctx> {
206
212
/// NB: The function analyzes only single miniscript item and not any of its descendants in AST.
207
213
pub fn get_nth_pk_pkh ( & self , n : usize ) -> Option < PkPkh < Pk > > {
208
214
match ( & self . node , n) {
209
- ( & Terminal :: PkH ( ref hash) , 0 ) => Some ( PkPkh :: HashedPubkey ( hash. clone ( ) ) ) ,
210
- ( & Terminal :: PkK ( ref key) , 0 ) => Some ( PkPkh :: PlainPubkey ( key. clone ( ) ) ) ,
215
+ ( & Terminal :: RawPkH ( ref hash) , 0 ) => Some ( PkPkh :: HashedPubkey ( hash. clone ( ) ) ) ,
216
+ ( & Terminal :: PkH ( ref key) , 0 ) | ( & Terminal :: PkK ( ref key) , 0 ) => {
217
+ Some ( PkPkh :: PlainPubkey ( key. clone ( ) ) )
218
+ }
211
219
( & Terminal :: Multi ( _, ref keys) , _) | ( & Terminal :: MultiA ( _, ref keys) , _) => {
212
220
keys. get ( n) . map ( |key| PkPkh :: PlainPubkey ( key. clone ( ) ) )
213
221
}
@@ -493,7 +501,7 @@ pub mod test {
493
501
494
502
pub fn gen_testcases ( ) -> Vec < TestData > {
495
503
let k = gen_bitcoin_pubkeys ( 10 , true ) ;
496
- let h : Vec < hash160:: Hash > = k
504
+ let _h : Vec < hash160:: Hash > = k
497
505
. iter ( )
498
506
. map ( |pk| hash160:: Hash :: hash ( & pk. to_bytes ( ) ) )
499
507
. collect ( ) ;
@@ -520,11 +528,11 @@ pub mod test {
520
528
false ,
521
529
) ,
522
530
( ms_str!( "c:pk_k({})" , k[ 0 ] ) , vec![ k[ 0 ] ] , vec![ ] , true ) ,
523
- ( ms_str!( "c:pk_h({})" , h [ 6 ] ) , vec![ ] , vec![ h [ 6 ] ] , true ) ,
531
+ ( ms_str!( "c:pk_h({})" , k [ 0 ] ) , vec![ k [ 0 ] ] , vec![ ] , true ) ,
524
532
(
525
- ms_str!( "and_v(vc:pk_k({}),c:pk_h({}))" , k[ 0 ] , h [ 1 ] ) ,
526
- vec![ k[ 0 ] ] ,
527
- vec![ h [ 1 ] ] ,
533
+ ms_str!( "and_v(vc:pk_k({}),c:pk_h({}))" , k[ 0 ] , k [ 1 ] ) ,
534
+ vec![ k[ 0 ] , k [ 1 ] ] ,
535
+ vec![ ] ,
528
536
false ,
529
537
) ,
530
538
(
@@ -538,10 +546,10 @@ pub mod test {
538
546
"andor(c:pk_k({}),jtv:sha256({}),c:pk_h({}))" ,
539
547
k[ 1 ] ,
540
548
sha256_hash,
541
- h [ 2 ]
549
+ k [ 2 ]
542
550
) ,
543
- vec![ k[ 1 ] ] ,
544
- vec![ h [ 2 ] ] ,
551
+ vec![ k[ 1 ] , k [ 2 ] ] ,
552
+ vec![ ] ,
545
553
false ,
546
554
) ,
547
555
(
@@ -585,12 +593,12 @@ pub mod test {
585
593
k[ 4 ] ,
586
594
k[ 6 ] ,
587
595
k[ 9 ] ,
588
- h [ 8 ] ,
589
- h [ 7 ] ,
590
- h [ 0 ]
596
+ k [ 1 ] ,
597
+ k [ 3 ] ,
598
+ k [ 5 ]
591
599
) ,
592
- vec![ k[ 0 ] , k[ 2 ] , k[ 4 ] , k[ 6 ] , k[ 9 ] ] ,
593
- vec![ h [ 8 ] , h [ 7 ] , h [ 0 ] ] ,
600
+ vec![ k[ 0 ] , k[ 2 ] , k[ 4 ] , k[ 6 ] , k[ 9 ] , k [ 1 ] , k [ 3 ] , k [ 5 ] ] ,
601
+ vec![ ] ,
594
602
false ,
595
603
) ,
596
604
]
0 commit comments