Skip to content

Commit 23cb9ae

Browse files
committed
QA: Test support for signet as parent chain
1 parent b3a28f2 commit 23cb9ae

File tree

2 files changed

+57
-6
lines changed

2 files changed

+57
-6
lines changed

qa/rpc-tests/feature_fedpeg.py

+56-5
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,46 @@ def add_options(self, parser):
3434
parser.add_option("--parent_binpath", dest="parent_binpath", default="",
3535
help="Use a different binary for launching nodes")
3636
parser.add_option("--parent_type", dest="parent_type", default="elements",
37-
help="Type of parent nodes {elements, bitcoin}")
37+
help="Type of parent nodes {elements, bitcoin, signet}")
3838

3939
def setup_network(self, split=False):
4040
self.nodes = []
4141
self.extra_args = []
4242

43-
if self.options.parent_type not in ['elements', 'bitcoin']:
44-
raise Exception("Invalid option --parent_type=%s, valid options: elements, bitcoin" % self.options.parent_type)
43+
if self.options.parent_type not in ['elements', 'bitcoin', 'signet']:
44+
raise Exception("Invalid option --parent_type=%s, valid values: {elements, bitcoin, signet}" % self.options.parent_type)
4545

4646
if self.options.parent_type == 'bitcoin' and self.options.parent_binpath == "":
4747
raise Exception("Can't run with --parent_type=bitcoin without specifying --parent_binpath")
4848

49+
self.binary = self.options.parent_binpath if self.options.parent_binpath != "" else None
50+
51+
if self.options.parent_type == 'signet':
52+
from binascii import hexlify
53+
from test_framework import script, key
54+
from test_framework.util import hex_str_to_bytes
55+
import shutil
56+
temp_args = [
57+
"-port=" + str(p2p_port(0)),
58+
"-rpcport=" + str(rpc_port(0)),
59+
"-addresstype=legacy",
60+
"-deprecatedrpc=validateaddress"
61+
]
62+
temp_node = start_node(0, self.options.tmpdir, temp_args, binary=self.binary, chain='signet', cookie_auth=True)
63+
addr = temp_node.getnewaddress()
64+
k = key.CECKey()
65+
pub = temp_node.validateaddress(addr)["pubkey"]
66+
k.set_pubkey(hex_str_to_bytes(pub))
67+
pubkey = key.CPubKey(k.get_pubkey())
68+
wif = temp_node.dumpprivkey(addr)
69+
stop_node(temp_node, 0)
70+
shutil.rmtree(os.path.join(self.options.tmpdir, 'node0', 'signet'))
71+
script = script.CScript([pubkey, script.OP_CHECKSIG])
72+
blockscript = hexlify(script).decode('ascii')
73+
74+
print('blockscript', blockscript)
75+
print('wif', wif)
76+
4977
# Parent chain args
5078
for n in range(2):
5179
# We want to test the rpc cookie method so we force the use of a
@@ -62,7 +90,21 @@ def setup_network(self, split=False):
6290
"-port="+str(p2p_port(n)),
6391
"-rpcport="+str(rpc_port(n))
6492
])
65-
else:
93+
elif self.options.parent_type == 'signet':
94+
self.parent_chain = 'signet'
95+
rpc_u, rpc_p = rpc_auth_pair(n)
96+
self.extra_args.append([
97+
"-printtoconsole=0",
98+
"-signet_blockscript=%s" % blockscript,
99+
"-signet_siglen=77",
100+
"-signet_seednode=178.128.221.177",
101+
"-port=" + str(p2p_port(n)),
102+
"-rpcport=" + str(rpc_port(n)),
103+
"-addresstype=legacy", # To make sure bitcoind gives back p2pkh no matter version
104+
"-deprecatedrpc=validateaddress",
105+
"-fallbackfee=0.00001",
106+
])
107+
elif self.options.parent_type == 'elements':
66108
self.parent_chain = 'parent'
67109
self.extra_args.append([
68110
"-conf=dummy",
@@ -77,8 +119,9 @@ def setup_network(self, split=False):
77119
if not use_cookie_auth:
78120
self.extra_args[n].extend(["-rpcuser="+rpc_u, "-rpcpassword="+rpc_p])
79121

80-
self.binary = self.options.parent_binpath if self.options.parent_binpath != "" else None
81122
self.nodes.append(start_node(n, self.options.tmpdir, self.extra_args[n], binary=self.binary, chain=self.parent_chain, cookie_auth=use_cookie_auth))
123+
if self.options.parent_type == 'signet':
124+
self.nodes[n].importprivkey(wif)
82125

83126
connect_nodes_bi(self.nodes, 0, 1)
84127
self.parentgenesisblockhash = self.nodes[0].getblockhash(0)
@@ -111,6 +154,14 @@ def setup_network(self, split=False):
111154
'-con_parent_chain_signblockscript=%s' % parent_chain_signblockscript,
112155
'-con_parent_pegged_asset=%s' % parent_pegged_asset,
113156
])
157+
elif self.options.parent_type == 'signet':
158+
args.extend([
159+
'-con_parent_is_signet=1',
160+
'-con_parent_signet_siglen=77',
161+
'-parentpubkeyprefix=125',
162+
'-parentscriptprefix=87',
163+
'-con_parent_chain_signblockscript=%s' % blockscript,
164+
])
114165

115166
if used_cookie_auth:
116167
# Need to specify where to find parent cookie file

qa/rpc-tests/test_framework/util.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
348348
if binary is None:
349349
binary = os.getenv("ELEMENTSD", "elementsd")
350350
args = [ binary, "-datadir="+datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-mocktime="+str(get_mocktime()) ]
351-
args.append('-regtest' if chain == 'regtest' else '-chain=' + chain)
351+
args.append('-regtest' if chain == 'regtest' else '-signet' if chain == 'signet' else '-chain=' + chain)
352352
if extra_args is not None: args.extend(extra_args)
353353
bitcoind_processes[i] = subprocess.Popen(args)
354354
if os.getenv("PYTHON_DEBUG", ""):

0 commit comments

Comments
 (0)