@@ -56,7 +56,7 @@ mod private {
56
56
pub use crate :: miniscript:: context:: ScriptContext ;
57
57
use crate :: miniscript:: types;
58
58
use crate :: prelude:: sync:: Arc ;
59
- use crate :: { Error , MiniscriptKey , Terminal , MAX_RECURSION_DEPTH } ;
59
+ use crate :: { AbsLockTime , Error , MiniscriptKey , RelLockTime , Terminal , MAX_RECURSION_DEPTH } ;
60
60
61
61
/// The top-level miniscript abstract syntax tree (AST).
62
62
pub struct Miniscript < Pk : MiniscriptKey , Ctx : ScriptContext > {
@@ -157,6 +157,118 @@ mod private {
157
157
phantom : PhantomData ,
158
158
} ;
159
159
160
+ /// The `pk` combinator, which is an alias for `c:pk_k`.
161
+ pub fn pk ( pk : Pk ) -> Self {
162
+ let inner = Arc :: new ( Self :: pk_k ( pk) ) ;
163
+ Self {
164
+ ty : types:: Type :: cast_check ( inner. ty ) . unwrap ( ) ,
165
+ ext : types:: extra_props:: ExtData :: cast_check ( inner. ext ) ,
166
+ node : Terminal :: Check ( inner) ,
167
+ phantom : PhantomData ,
168
+ }
169
+ }
170
+
171
+ /// The `pkh` combinator, which is an alias for `c:pk_h`.
172
+ pub fn pkh ( pk : Pk ) -> Self {
173
+ let inner = Arc :: new ( Self :: pk_h ( pk) ) ;
174
+ Self {
175
+ ty : types:: Type :: cast_check ( inner. ty ) . unwrap ( ) ,
176
+ ext : types:: extra_props:: ExtData :: cast_check ( inner. ext ) ,
177
+ node : Terminal :: Check ( inner) ,
178
+ phantom : PhantomData ,
179
+ }
180
+ }
181
+
182
+ /// The `pk_k` combinator.
183
+ pub fn pk_k ( pk : Pk ) -> Self {
184
+ Self {
185
+ node : Terminal :: PkK ( pk) ,
186
+ ty : types:: Type :: pk_k ( ) ,
187
+ ext : types:: extra_props:: ExtData :: pk_k :: < Ctx > ( ) ,
188
+ phantom : PhantomData ,
189
+ }
190
+ }
191
+
192
+ /// The `pk_h` combinator.
193
+ pub fn pk_h ( pk : Pk ) -> Self {
194
+ Self {
195
+ node : Terminal :: PkH ( pk) ,
196
+ ty : types:: Type :: pk_h ( ) ,
197
+ ext : types:: extra_props:: ExtData :: pk_h :: < Ctx > ( ) ,
198
+ phantom : PhantomData ,
199
+ }
200
+ }
201
+
202
+ /// The `expr_raw_pkh` combinator.
203
+ pub fn expr_raw_pkh ( hash : bitcoin:: hashes:: hash160:: Hash ) -> Self {
204
+ Self {
205
+ node : Terminal :: RawPkH ( hash) ,
206
+ ty : types:: Type :: pk_h ( ) ,
207
+ ext : types:: extra_props:: ExtData :: pk_h :: < Ctx > ( ) ,
208
+ phantom : PhantomData ,
209
+ }
210
+ }
211
+
212
+ /// The `after` combinator.
213
+ pub fn after ( time : AbsLockTime ) -> Self {
214
+ Self {
215
+ node : Terminal :: After ( time) ,
216
+ ty : types:: Type :: time ( ) ,
217
+ ext : types:: extra_props:: ExtData :: after ( time) ,
218
+ phantom : PhantomData ,
219
+ }
220
+ }
221
+
222
+ /// The `older` combinator.
223
+ pub fn older ( time : RelLockTime ) -> Self {
224
+ Self {
225
+ node : Terminal :: Older ( time) ,
226
+ ty : types:: Type :: time ( ) ,
227
+ ext : types:: extra_props:: ExtData :: older ( time) ,
228
+ phantom : PhantomData ,
229
+ }
230
+ }
231
+
232
+ /// The `sha256` combinator.
233
+ pub const fn sha256 ( hash : Pk :: Sha256 ) -> Self {
234
+ Self {
235
+ node : Terminal :: Sha256 ( hash) ,
236
+ ty : types:: Type :: hash ( ) ,
237
+ ext : types:: extra_props:: ExtData :: sha256 ( ) ,
238
+ phantom : PhantomData ,
239
+ }
240
+ }
241
+
242
+ /// The `hash256` combinator.
243
+ pub const fn hash256 ( hash : Pk :: Hash256 ) -> Self {
244
+ Self {
245
+ node : Terminal :: Hash256 ( hash) ,
246
+ ty : types:: Type :: hash ( ) ,
247
+ ext : types:: extra_props:: ExtData :: hash256 ( ) ,
248
+ phantom : PhantomData ,
249
+ }
250
+ }
251
+
252
+ /// The `ripemd160` combinator.
253
+ pub const fn ripemd160 ( hash : Pk :: Ripemd160 ) -> Self {
254
+ Self {
255
+ node : Terminal :: Ripemd160 ( hash) ,
256
+ ty : types:: Type :: hash ( ) ,
257
+ ext : types:: extra_props:: ExtData :: ripemd160 ( ) ,
258
+ phantom : PhantomData ,
259
+ }
260
+ }
261
+
262
+ /// The `hash160` combinator.
263
+ pub const fn hash160 ( hash : Pk :: Hash160 ) -> Self {
264
+ Self {
265
+ node : Terminal :: Hash160 ( hash) ,
266
+ ty : types:: Type :: hash ( ) ,
267
+ ext : types:: extra_props:: ExtData :: hash160 ( ) ,
268
+ phantom : PhantomData ,
269
+ }
270
+ }
271
+
160
272
/// Add type information(Type and Extdata) to Miniscript based on
161
273
/// `AstElem` fragment. Dependent on display and clone because of Error
162
274
/// Display code of type_check.
0 commit comments