Skip to content

Commit 1cbf7f4

Browse files
committed
Add support for "0" and "1" miniscript fragments in local embit clone
1 parent dec271a commit 1cbf7f4

File tree

1 file changed

+41
-4
lines changed

1 file changed

+41
-4
lines changed

bitcoin_client/ledger_bitcoin/embit/descriptor/miniscript.py

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,23 @@ def type(self):
5454

5555
@classmethod
5656
def read_from(cls, s, taproot=False):
57-
op, char = read_until(s, b"(")
57+
op, char = read_until(s, b"(,)")
5858
op = op.decode()
5959
wrappers = ""
6060
if ":" in op:
6161
wrappers, op = op.split(":")
62-
if char != b"(":
63-
raise MiniscriptError("Missing operator")
6462
if op not in OPERATOR_NAMES:
6563
raise MiniscriptError("Unknown operator '%s'" % op)
6664
# number of arguments, classes of args, compile fn, type, validity checker
6765
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 = []
6974
miniscript = MiniscriptCls(*args, taproot=taproot)
7075
for w in reversed(wrappers):
7176
if w not in WRAPPER_NAMES:
@@ -132,6 +137,36 @@ def carg(self):
132137
return self.arg.compile()
133138

134139

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+
135170
class PkK(OneArg):
136171
# <key>
137172
NAME = "pk_k"
@@ -739,6 +774,8 @@ def __len__(self):
739774

740775

741776
OPERATORS = [
777+
NumberZero,
778+
NumberOne,
742779
PkK,
743780
PkH,
744781
Older,

0 commit comments

Comments
 (0)