Skip to content

Commit 1e8648a

Browse files
committed
QA: Test support for signet as parent chain
1 parent 3f874c2 commit 1e8648a

File tree

2 files changed

+53
-16
lines changed

2 files changed

+53
-16
lines changed

qa/rpc-tests/feature_fedpeg.py

+52-15
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ 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")
@@ -60,16 +60,35 @@ def setup_network(self, split=False):
6060
"-addresstype=legacy", # To make sure bitcoind gives back p2pkh no matter version
6161
"-deprecatedrpc=validateaddress",
6262
])
63-
else:
63+
elif self.options.parent_type == 'signet':
64+
self.parent_chain = 'signet'
65+
rpc_u, rpc_p = rpc_auth_pair(n)
66+
self.extra_args.append([
67+
"-printtoconsole=0",
68+
"-signet_blockscript=4104db082f6133b7d9cdb7be60d8384c818ae61233c20485b438e8c1d7772b7f2dbdc04f2f7273d534df0e6a54c8b333994f6275bb921df2438e9a672438e4ed4969ac",
69+
"-signet_siglen=77",
70+
"-signet_seednode=178.128.221.177",
71+
"-port=" + str(p2p_port(n)),
72+
"-rpcuser=" + rpc_u,
73+
"-rpcpassword=" + rpc_p,
74+
"-rpcport=" + str(rpc_port(n)),
75+
"-addresstype=legacy", # To make sure bitcoind gives back p2pkh no matter version
76+
"-deprecatedrpc=validateaddress",
77+
"-fallbackfee=0.00001",
78+
])
79+
elif self.options.parent_type == 'elements':
6480
self.parent_chain = 'parent'
6581
self.extra_args.append([
6682
"-printtoconsole=0",
6783
'-validatepegin=0',
6884
'-anyonecanspendaremine',
6985
'-initialfreecoins=2100000000000000',
7086
])
87+
7188
self.binary = self.options.parent_binpath if self.options.parent_binpath != "" else None
7289
self.nodes.append(start_node(n, self.options.tmpdir, self.extra_args[n], binary=self.binary, chain=self.parent_chain))
90+
if self.options.parent_type == 'signet':
91+
self.nodes[n].importprivkey('8Hh8jNjkx1aSCgEk3iq9Vo2APZUSDQJVt3rJ2BRpb5Tavqb68vW')
7392

7493
connect_nodes_bi(self.nodes, 0, 1)
7594
self.parentgenesisblockhash = self.nodes[0].getblockhash(0)
@@ -102,6 +121,14 @@ def setup_network(self, split=False):
102121
'-con_parent_chain_signblockscript=%s' % parent_chain_signblockscript,
103122
'-con_parent_pegged_asset=%s' % parent_pegged_asset,
104123
])
124+
elif self.options.parent_type == 'signet':
125+
args.extend([
126+
'-con_parent_is_signet=1',
127+
'-con_parent_signet_siglen=77',
128+
'-parentpubkeyprefix=125',
129+
'-parentscriptprefix=87',
130+
'-con_parent_chain_signblockscript=4104db082f6133b7d9cdb7be60d8384c818ae61233c20485b438e8c1d7772b7f2dbdc04f2f7273d534df0e6a54c8b333994f6275bb921df2438e9a672438e4ed4969ac',
131+
])
105132
self.extra_args.append(args)
106133
self.nodes.append(start_node(n + 2, self.options.tmpdir, self.extra_args[n + 2], chain='sidechain'))
107134

@@ -126,13 +153,21 @@ def test_pegout(self, parent_chain_addr, sidechain):
126153
break
127154
assert pegout_tested
128155

156+
# TODO Remove when signet supports generate
157+
def parent_generate(self, parent, n_blocks):
158+
if self.options.parent_type == 'signet':
159+
for i in range(0, n_blocks):
160+
blockhex = parent.getnewblockhex(True)
161+
else:
162+
parent.generate(n_blocks)
163+
129164
def run_test(self):
130165
parent = self.nodes[0]
131166
parent2 = self.nodes[1]
132167
sidechain = self.nodes[2]
133168
sidechain2 = self.nodes[3]
134169

135-
parent.generate(101)
170+
self.parent_generate(parent, 101)
136171
sidechain.generate(101)
137172

138173
addrs = sidechain.getpeginaddress()
@@ -141,7 +176,7 @@ def run_test(self):
141176
print(parent.validateaddress(addr))
142177
txid1 = parent.sendtoaddress(addr, 24)
143178
# 10+2 confirms required to get into mempool and confirm
144-
parent.generate(1)
179+
self.parent_generate(parent, 1)
145180
time.sleep(2)
146181
proof = parent.gettxoutproof([txid1])
147182

@@ -158,7 +193,7 @@ def run_test(self):
158193
assert("Peg-in Bitcoin transaction needs more confirmations to be sent." in e.error["message"])
159194

160195
# Second attempt simply doesn't hit mempool bar
161-
parent.generate(10)
196+
self.parent_generate(parent, 10)
162197
try:
163198
pegtxid = sidechain.claimpegin(raw, proof)
164199
raise Exception("Peg-in should not be mature enough yet, need another block.")
@@ -183,7 +218,7 @@ def run_test(self):
183218
assert("Given claim_script does not match the given Bitcoin transaction." in e.error["message"])
184219

185220
# 12 confirms allows in mempool
186-
parent.generate(1)
221+
self.parent_generate(parent, 1)
187222
# Should succeed via wallet lookup for address match, and when given
188223
pegtxid1 = sidechain.claimpegin(raw, proof)
189224

@@ -234,7 +269,7 @@ def run_test(self):
234269
for i in range(n_claims):
235270
addrs = sidechain.getpeginaddress()
236271
txid = parent.sendtoaddress(addrs["mainchain_address"], 1)
237-
parent.generate(12)
272+
self.parent_generate(parent, 12)
238273
proof = parent.gettxoutproof([txid])
239274
raw = parent.getrawtransaction(txid)
240275
pegtxs += [sidechain.claimpegin(raw, proof)]
@@ -249,11 +284,13 @@ def run_test(self):
249284
print("Test pegout")
250285
self.test_pegout(get_new_unconfidential_address(parent), sidechain)
251286

252-
print("Test pegout P2SH")
253-
parent_chain_addr = get_new_unconfidential_address(parent)
254-
parent_pubkey = parent.validateaddress(parent_chain_addr)["pubkey"]
255-
parent_chain_p2sh_addr = parent.createmultisig(1, [parent_pubkey])["address"]
256-
self.test_pegout(parent_chain_p2sh_addr, sidechain)
287+
# TODO Stop skipping this test once signet is rebased on top of 0.17
288+
if not self.options.parent_type == 'signet':
289+
print("Test pegout P2SH")
290+
parent_chain_addr = get_new_unconfidential_address(parent)
291+
parent_pubkey = parent.validateaddress(parent_chain_addr)["pubkey"]
292+
parent_chain_p2sh_addr = parent.createmultisig(1, [parent_pubkey])["address"]
293+
self.test_pegout(parent_chain_p2sh_addr, sidechain)
257294

258295
print("Test pegout Garbage")
259296
parent_chain_addr = "garbage"
@@ -290,7 +327,7 @@ def run_test(self):
290327
print ("Now test failure to validate peg-ins based on intermittant bitcoind rpc failure")
291328
stop_node(self.nodes[1], 1)
292329
txid = parent.sendtoaddress(addr, 1)
293-
parent.generate(12)
330+
self.parent_generate(parent, 12)
294331
proof = parent.gettxoutproof([txid])
295332
raw = parent.getrawtransaction(txid)
296333
stuck_peg = sidechain.claimpegin(raw, proof)

qa/rpc-tests/test_framework/util.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
341341
if binary is None:
342342
binary = os.getenv("ELEMENTSD", "elementsd")
343343
args = [ binary, "-datadir="+datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-mocktime="+str(get_mocktime()) ]
344-
args.append('-regtest' if chain == 'regtest' else '-chain=' + chain)
344+
args.append('-regtest' if chain == 'regtest' else '-signet' if chain == 'signet' else '-chain=' + chain)
345345
if extra_args is not None: args.extend(extra_args)
346346
bitcoind_processes[i] = subprocess.Popen(args)
347347
if os.getenv("PYTHON_DEBUG", ""):

0 commit comments

Comments
 (0)