@@ -54,18 +54,23 @@ def type(self):
54
54
55
55
@classmethod
56
56
def read_from (cls , s , taproot = False ):
57
- op , char = read_until (s , b"(" )
57
+ op , char = read_until (s , b"(,) " )
58
58
op = op .decode ()
59
59
wrappers = ""
60
60
if ":" in op :
61
61
wrappers , op = op .split (":" )
62
- if char != b"(" :
63
- raise MiniscriptError ("Missing operator" )
64
62
if op not in OPERATOR_NAMES :
65
63
raise MiniscriptError ("Unknown operator '%s'" % op )
66
64
# number of arguments, classes of args, compile fn, type, validity checker
67
65
MiniscriptCls = OPERATORS [OPERATOR_NAMES .index (op )]
68
- args = MiniscriptCls .read_arguments (s , taproot = taproot )
66
+ if MiniscriptCls .NARGS != 0 and char != b"(" :
67
+ raise MiniscriptError ("Missing operator" )
68
+
69
+ if MiniscriptCls .NARGS is None or MiniscriptCls .NARGS > 0 :
70
+ args = MiniscriptCls .read_arguments (s , taproot = taproot )
71
+ else :
72
+ s .seek (- 1 , 1 )
73
+ args = []
69
74
miniscript = MiniscriptCls (* args , taproot = taproot )
70
75
for w in reversed (wrappers ):
71
76
if w not in WRAPPER_NAMES :
@@ -132,6 +137,36 @@ def carg(self):
132
137
return self .arg .compile ()
133
138
134
139
140
+ class NumberZero (Miniscript ):
141
+ # 0
142
+
143
+ NARGS = 0
144
+ NAME = "0"
145
+ TYPE = "B"
146
+ PROPS = "zud"
147
+
148
+ def inner_compile (self ):
149
+ return b"\x00 "
150
+
151
+ def __len__ (self ):
152
+ return 1
153
+
154
+
155
+ class NumberOne (Miniscript ):
156
+ # 1
157
+
158
+ NARGS = 0
159
+ NAME = "1"
160
+ TYPE = "B"
161
+ PROPS = "zu"
162
+
163
+ def inner_compile (self ):
164
+ return b"\x51 "
165
+
166
+ def __len__ (self ):
167
+ return 1
168
+
169
+
135
170
class PkK (OneArg ):
136
171
# <key>
137
172
NAME = "pk_k"
@@ -739,6 +774,8 @@ def __len__(self):
739
774
740
775
741
776
OPERATORS = [
777
+ NumberZero ,
778
+ NumberOne ,
742
779
PkK ,
743
780
PkH ,
744
781
Older ,
0 commit comments