Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion test/functional/feature_dip3_v19.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,22 @@ def run_test(self):
self.test_revoke_protx(revoke_protx, revoke_keyoperator)

self.mine_quorum(llmq_type_name='llmq_test', llmq_type=100)
# revoking a MN results in disconnects, reconnect it back to let sync_blocks finish correctly
self.connect_nodes(hpmn_info_3.nodeIdx, 0)

return
self.log.info("Checking that adding more regular MNs after v19 doesn't break DKGs and IS/CLs")

for i in range(6):
new_mn = self.dynamically_add_masternode(hpmn=False, rnd=(10 + i))
assert new_mn is not None

# mine more quorums and make sure everything still works
prev_quorum = None
for _ in range(5):
quorum = self.mine_quorum()
assert prev_quorum != quorum

self.wait_for_chainlocked_block_all_nodes(self.nodes[0].getbestblockhash())

def test_revoke_protx(self, revoke_protx, revoke_keyoperator):
funds_address = self.nodes[0].getnewaddress()
Expand Down
16 changes: 10 additions & 6 deletions test/functional/test_framework/test_framework.py
Original file line number Diff line number Diff line change
Expand Up @@ -1120,7 +1120,7 @@ def dynamically_add_masternode(self, hpmn=False, rnd=None, should_be_rejected=Fa
created_mn_info = self.dynamically_prepare_masternode(mn_idx, node_p2p_port, hpmn, rnd)
protx_success = True
except:
self.log.info("protx_hpmn rejected")
self.log.info("dynamically_prepare_masternode failed")

assert_equal(protx_success, not should_be_rejected)

Expand All @@ -1136,7 +1136,7 @@ def dynamically_add_masternode(self, hpmn=False, rnd=None, should_be_rejected=Fa

for mn_info in self.mninfo:
if mn_info.proTxHash == created_mn_info.proTxHash:
mn_info.nodeIx = mn_idx
mn_info.nodeIdx = mn_idx
mn_info.node = self.nodes[mn_idx]

self.connect_nodes(mn_idx, 0)
Expand All @@ -1157,8 +1157,8 @@ def dynamically_prepare_masternode(self, idx, node_p2p_port, hpmn=False, rnd=Non
reward_address = self.nodes[0].getnewaddress()

platform_node_id = hash160(b'%d' % rnd).hex() if rnd is not None else hash160(b'%d' % node_p2p_port).hex()
platform_p2p_port = '%d' % (node_p2p_port + 101) if hpmn else ''
platform_http_port = '%d' % (node_p2p_port + 102) if hpmn else ''
platform_p2p_port = '%d' % (node_p2p_port + 101)
platform_http_port = '%d' % (node_p2p_port + 102)

collateral_amount = 4000 if hpmn else 1000
outputs = {collateral_address: collateral_amount, funds_address: 1}
Expand All @@ -1179,8 +1179,12 @@ def dynamically_prepare_masternode(self, idx, node_p2p_port, hpmn=False, rnd=Non
ipAndPort = '127.0.0.1:%d' % node_p2p_port
operatorReward = idx

register_rpc = 'register_hpmn' if hpmn else 'register'
protx_result = self.nodes[0].protx(register_rpc, collateral_txid, collateral_vout, ipAndPort, owner_address, bls['public'], voting_address, operatorReward, reward_address, platform_node_id, platform_p2p_port, platform_http_port, funds_address, True)
protx_result = None
if hpmn:
protx_result = self.nodes[0].protx("register_hpmn", collateral_txid, collateral_vout, ipAndPort, owner_address, bls['public'], voting_address, operatorReward, reward_address, platform_node_id, platform_p2p_port, platform_http_port, funds_address, True)
else:
protx_result = self.nodes[0].protx("register", collateral_txid, collateral_vout, ipAndPort, owner_address, bls['public'], voting_address, operatorReward, reward_address, funds_address, True)

self.wait_for_instantlock(protx_result, self.nodes[0])
tip = self.nodes[0].generate(1)[0]
self.sync_all(self.nodes)
Expand Down