Skip to content

Commit ade5760

Browse files
committed
Allow registering MNs without actually starting them
This can be done by calling prepare_masternode() when inside run_test. Also implement remove_masternode() which spends the collateral.
1 parent ef6b6a1 commit ade5760

File tree

1 file changed

+39
-27
lines changed

1 file changed

+39
-27
lines changed

qa/rpc-tests/test_framework/test_framework.py

+39-27
Original file line numberDiff line numberDiff line change
@@ -277,36 +277,48 @@ def create_simple_node(self):
277277

278278
def prepare_masternodes(self):
279279
for idx in range(0, self.mn_count):
280-
bls = self.nodes[0].bls('generate')
281-
address = self.nodes[0].getnewaddress()
282-
txid = self.nodes[0].sendtoaddress(address, MASTERNODE_COLLATERAL)
283-
284-
txraw = self.nodes[0].getrawtransaction(txid, True)
285-
collateral_vout = 0
286-
for vout_idx in range(0, len(txraw["vout"])):
287-
vout = txraw["vout"][vout_idx]
288-
if vout["value"] == MASTERNODE_COLLATERAL:
289-
collateral_vout = vout_idx
290-
self.nodes[0].lockunspent(False, [{'txid': txid, 'vout': collateral_vout}])
291-
292-
# send to same address to reserve some funds for fees
293-
self.nodes[0].sendtoaddress(address, 0.001)
294-
295-
ownerAddr = self.nodes[0].getnewaddress()
296-
votingAddr = self.nodes[0].getnewaddress()
297-
rewardsAddr = self.nodes[0].getnewaddress()
298-
299-
port = p2p_port(len(self.nodes) + idx)
300-
if (idx % 2) == 0:
301-
self.nodes[0].lockunspent(True, [{'txid': txid, 'vout': collateral_vout}])
302-
proTxHash = self.nodes[0].protx('register_fund', address, '127.0.0.1:%d' % port, ownerAddr, bls['public'], votingAddr, 0, rewardsAddr, address)
303-
else:
304-
self.nodes[0].generate(1)
305-
proTxHash = self.nodes[0].protx('register', txid, collateral_vout, '127.0.0.1:%d' % port, ownerAddr, bls['public'], votingAddr, 0, rewardsAddr, address)
280+
self.prepare_masternode(idx)
281+
282+
def prepare_masternode(self, idx):
283+
bls = self.nodes[0].bls('generate')
284+
address = self.nodes[0].getnewaddress()
285+
txid = self.nodes[0].sendtoaddress(address, MASTERNODE_COLLATERAL)
286+
287+
txraw = self.nodes[0].getrawtransaction(txid, True)
288+
collateral_vout = 0
289+
for vout_idx in range(0, len(txraw["vout"])):
290+
vout = txraw["vout"][vout_idx]
291+
if vout["value"] == MASTERNODE_COLLATERAL:
292+
collateral_vout = vout_idx
293+
self.nodes[0].lockunspent(False, [{'txid': txid, 'vout': collateral_vout}])
294+
295+
# send to same address to reserve some funds for fees
296+
self.nodes[0].sendtoaddress(address, 0.001)
297+
298+
ownerAddr = self.nodes[0].getnewaddress()
299+
votingAddr = self.nodes[0].getnewaddress()
300+
rewardsAddr = self.nodes[0].getnewaddress()
301+
302+
port = p2p_port(len(self.nodes) + idx)
303+
if (idx % 2) == 0:
304+
self.nodes[0].lockunspent(True, [{'txid': txid, 'vout': collateral_vout}])
305+
proTxHash = self.nodes[0].protx('register_fund', address, '127.0.0.1:%d' % port, ownerAddr, bls['public'], votingAddr, 0, rewardsAddr, address)
306+
else:
306307
self.nodes[0].generate(1)
308+
proTxHash = self.nodes[0].protx('register', txid, collateral_vout, '127.0.0.1:%d' % port, ownerAddr, bls['public'], votingAddr, 0, rewardsAddr, address)
309+
self.nodes[0].generate(1)
307310

308-
self.mninfo.append(MasternodeInfo(proTxHash, ownerAddr, votingAddr, bls['public'], bls['secret'], address, txid, collateral_vout))
311+
self.mninfo.append(MasternodeInfo(proTxHash, ownerAddr, votingAddr, bls['public'], bls['secret'], address, txid, collateral_vout))
312+
self.sync_all()
313+
314+
def remove_mastermode(self, idx):
315+
mn = self.mninfo[idx]
316+
rawtx = self.nodes[0].createrawtransaction([{"txid": mn.collateral_txid, "vout": mn.collateral_vout}], {self.nodes[0].getnewaddress(): 999.9999})
317+
rawtx = self.nodes[0].signrawtransaction(rawtx)
318+
self.nodes[0].sendrawtransaction(rawtx["hex"])
319+
self.nodes[0].generate(1)
309320
self.sync_all()
321+
self.mninfo.remove(mn)
310322

311323
def prepare_datadirs(self):
312324
# stop faucet node so that we can copy the datadir

0 commit comments

Comments
 (0)