Skip to content

Commit 77ec208

Browse files
committed
[Tests] Fix TierTwo functional tests with BLS operator key
1 parent dd46f72 commit 77ec208

File tree

5 files changed

+99
-79
lines changed

5 files changed

+99
-79
lines changed

test/functional/test_framework/messages.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,26 +1438,26 @@ def serialize(self):
14381438

14391439
# PIVX Classes
14401440
class Masternode(object):
1441-
def __init__(self, idx, owner_addr, operator_addr, voting_addr, ipport, payout_addr, operator_key):
1441+
def __init__(self, idx, owner_addr, operator_pk, voting_addr, ipport, payout_addr, operator_sk):
14421442
self.idx = idx
14431443
self.owner = owner_addr
1444-
self.operator = operator_addr
1444+
self.operator_pk = operator_pk
14451445
self.voting = voting_addr
14461446
self.ipport = ipport
14471447
self.payee = payout_addr
1448-
self.operator_key = operator_key
1448+
self.operator_sk = operator_sk
14491449
self.proTx = None
14501450
self.collateral = None
14511451

14521452
def revoked(self):
14531453
self.ipport = "[::]:0"
1454-
self.operator = ""
1455-
self.operator_key = None
1454+
self.operator_pk = "0" * 96
1455+
self.operator_sk = None
14561456

14571457
def __repr__(self):
14581458
return "Masternode(idx=%d, owner=%s, operator=%s, voting=%s, ip=%s, payee=%s, opkey=%s, protx=%s, collateral=%s)" % (
1459-
self.idx, str(self.owner), str(self.operator), str(self.voting), str(self.ipport),
1460-
str(self.payee), str(self.operator_key), str(self.proTx), str(self.collateral)
1459+
self.idx, str(self.owner), str(self.operator_pk), str(self.voting), str(self.ipport),
1460+
str(self.payee), str(self.operator_sk), str(self.proTx), str(self.collateral)
14611461
)
14621462

14631463
def __str__(self):

test/functional/test_framework/test_framework.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,8 +1072,7 @@ def setupDMN(self,
10721072
collateralAdd = mnOwner.getnewaddress("dmn")
10731073
ipport = "127.0.0.1:" + str(p2p_port(mnRemotePos))
10741074
ownerAdd = mnOwner.getnewaddress("dmn_owner")
1075-
operatorAdd = mnOwner.getnewaddress("dmn_operator")
1076-
operatorKey = mnOwner.dumpprivkey(operatorAdd)
1075+
bls_keypair = mnOwner.generateblskeypair()
10771076
votingAdd = mnOwner.getnewaddress("dmn_voting")
10781077
if strType == "fund":
10791078
# send to the owner the collateral tx cost + some dust for the ProReg and fee
@@ -1083,7 +1082,7 @@ def setupDMN(self,
10831082
assert_greater_than(mnOwner.getrawtransaction(fundingTxId, 1)["confirmations"], 0)
10841083
# create and send the ProRegTx funding the collateral
10851084
proTxId = mnOwner.protx_register_fund(collateralAdd, ipport, ownerAdd,
1086-
operatorAdd, votingAdd, collateralAdd)
1085+
bls_keypair["public"], votingAdd, collateralAdd)
10871086
elif strType == "internal":
10881087
mnOwner.getnewaddress("dust")
10891088
# send to the owner the collateral tx cost + some dust for the ProReg and fee
@@ -1100,13 +1099,13 @@ def setupDMN(self,
11001099
assert_greater_than(collateralTxId_n, -1)
11011100
assert_greater_than(json_tx["confirmations"], 0)
11021101
proTxId = mnOwner.protx_register(collateralTxId, collateralTxId_n, ipport, ownerAdd,
1103-
operatorAdd, votingAdd, collateralAdd)
1102+
bls_keypair["public"], votingAdd, collateralAdd)
11041103
elif strType == "external":
11051104
self.log.info("Setting up ProRegTx with collateral externally-signed...")
11061105
# send the tx from the miner
11071106
payoutAdd = mnOwner.getnewaddress("payout")
11081107
register_res = miner.protx_register_prepare(outpoint.hash, outpoint.n, ipport, ownerAdd,
1109-
operatorAdd, votingAdd, payoutAdd)
1108+
bls_keypair["public"], votingAdd, payoutAdd)
11101109
self.log.info("ProTx prepared")
11111110
message_to_sign = register_res["signMessage"]
11121111
collateralAdd = register_res["collateralAddress"]
@@ -1121,7 +1120,7 @@ def setupDMN(self,
11211120
self.stake_and_sync(self.nodes.index(miner), 1)
11221121
assert_greater_than(self.nodes[mnRemotePos].getrawtransaction(proTxId, 1)["confirmations"], 0)
11231122
assert proTxId in self.nodes[mnRemotePos].protx_list(False)
1124-
return proTxId, operatorKey
1123+
return proTxId, bls_keypair["secret"]
11251124

11261125
def setupMasternode(self,
11271126
mnOwner,
@@ -1188,10 +1187,10 @@ def protx_register_fund(self, miner, controller, dmn, collateral_addr, op_rew=No
11881187
# create and send the ProRegTx funding the collateral
11891188
if op_rew is None:
11901189
dmn.proTx = controller.protx_register_fund(collateral_addr, dmn.ipport, dmn.owner,
1191-
dmn.operator, dmn.voting, dmn.payee)
1190+
dmn.operator_pk, dmn.voting, dmn.payee)
11921191
else:
11931192
dmn.proTx = controller.protx_register_fund(collateral_addr, dmn.ipport, dmn.owner,
1194-
dmn.operator, dmn.voting, dmn.payee,
1193+
dmn.operator_pk, dmn.voting, dmn.payee,
11951194
op_rew["reward"], op_rew["address"])
11961195
dmn.collateral = COutPoint(int(dmn.proTx, 16),
11971196
get_collateral_vout(controller.getrawtransaction(dmn.proTx, True)))
@@ -1213,7 +1212,7 @@ def protx_register(self, miner, controller, dmn, collateral_addr):
12131212
# create and send the ProRegTx
12141213
dmn.collateral = COutPoint(int(funding_txid, 16), get_collateral_vout(json_tx))
12151214
dmn.proTx = controller.protx_register(funding_txid, dmn.collateral.n, dmn.ipport, dmn.owner,
1216-
dmn.operator, dmn.voting, dmn.payee)
1215+
dmn.operator_pk, dmn.voting, dmn.payee)
12171216

12181217
"""
12191218
Create a ProReg tx, referencing a collateral signed externally (eg. HW wallets).
@@ -1232,7 +1231,7 @@ def protx_register_ext(self, miner, controller, dmn, outpoint, fSubmit):
12321231
dmn.collateral = outpoint
12331232
# Prepare the message to be signed externally by the owner of the collateral (the controller)
12341233
reg_tx = miner.protx_register_prepare("%064x" % outpoint.hash, outpoint.n, dmn.ipport, dmn.owner,
1235-
dmn.operator, dmn.voting, dmn.payee)
1234+
dmn.operator_pk, dmn.voting, dmn.payee)
12361235
sig = controller.signmessage(reg_tx["collateralAddress"], reg_tx["signMessage"])
12371236
if fSubmit:
12381237
dmn.proTx = miner.protx_register_submit(reg_tx["tx"], sig)
@@ -1248,12 +1247,12 @@ def protx_register_ext(self, miner, controller, dmn, outpoint, fSubmit):
12481247
outpoint: (COutPoint) collateral outpoint to be used with "external".
12491248
It must be owned by the controller (proTx is sent from the miner).
12501249
If not provided, a new utxo is created, sending it from the miner.
1251-
op_addr_and_key: (list of strings) List with two entries, operator address (0) and private key (1).
1250+
op_blskeys: (list of strings) List with two entries, operator public (0) and private (1) key.
12521251
If not provided, a new address-key pair is generated.
12531252
:return: dmn: (Masternode) the deterministic masternode object
12541253
"""
12551254
def register_new_dmn(self, idx, miner_idx, controller_idx, strType,
1256-
payout_addr=None, outpoint=None, op_addr_and_key=None):
1255+
payout_addr=None, outpoint=None, op_blskeys=None):
12571256
# Prepare remote node
12581257
assert idx != miner_idx
12591258
assert idx != controller_idx
@@ -1265,7 +1264,7 @@ def register_new_dmn(self, idx, miner_idx, controller_idx, strType,
12651264
collateral_addr = controller_node.getnewaddress("mncollateral-%d" % idx)
12661265
if payout_addr is None:
12671266
payout_addr = collateral_addr
1268-
dmn = create_new_dmn(idx, controller_node, payout_addr, op_addr_and_key)
1267+
dmn = create_new_dmn(idx, controller_node, payout_addr, op_blskeys)
12691268

12701269
# Create ProRegTx
12711270
self.log.info("Creating%s proRegTx for deterministic masternode idx=%d..." % (
@@ -1315,7 +1314,7 @@ def check_mn_list_on_node(self, idx, mns):
13151314
mn2 = protxs[mn.proTx]
13161315
collateral = mn.collateral.to_json()
13171316
assert_equal(mn.owner, mn2["dmnstate"]["ownerAddress"])
1318-
assert_equal(mn.operator, mn2["dmnstate"]["operatorAddress"])
1317+
assert_equal(mn.operator_pk, mn2["dmnstate"]["operatorPubKey"])
13191318
assert_equal(mn.voting, mn2["dmnstate"]["votingAddress"])
13201319
assert_equal(mn.ipport, mn2["dmnstate"]["service"])
13211320
assert_equal(mn.payee, mn2["dmnstate"]["payoutAddress"])
@@ -1334,7 +1333,7 @@ def check_proreg_payload(self, dmn, json_tx):
13341333
assert_equal(pl["service"], dmn.ipport)
13351334
assert_equal(pl["ownerAddress"], dmn.owner)
13361335
assert_equal(pl["votingAddress"], dmn.voting)
1337-
assert_equal(pl["operatorAddress"], dmn.operator)
1336+
assert_equal(pl["operatorPubKey"], dmn.operator_pk)
13381337
assert_equal(pl["payoutAddress"], dmn.payee)
13391338

13401339

test/functional/test_framework/util.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -602,19 +602,20 @@ def get_collateral_vout(json_tx):
602602
return funding_txidn
603603

604604
# owner and voting keys are created from controller node.
605-
# operator key and address are created, if operator_addr_and_key is None.
606-
def create_new_dmn(idx, controller, payout_addr, operator_addr_and_key):
605+
# operator keys are created, if operator_keys is None.
606+
def create_new_dmn(idx, controller, payout_addr, operator_keys):
607607
port = p2p_port(idx) if idx <= MAX_NODES else p2p_port(MAX_NODES) + (idx - MAX_NODES)
608608
ipport = "127.0.0.1:" + str(port)
609609
owner_addr = controller.getnewaddress("mnowner-%d" % idx)
610610
voting_addr = controller.getnewaddress("mnvoting-%d" % idx)
611-
if operator_addr_and_key is None:
612-
operator_addr = controller.getnewaddress("mnoperator-%d" % idx)
613-
operator_key = controller.dumpprivkey(operator_addr)
611+
if operator_keys is None:
612+
bls_keypair = controller.generateblskeypair()
613+
operator_pk = bls_keypair["public"]
614+
operator_sk = bls_keypair["secret"]
614615
else:
615-
operator_addr = operator_addr_and_key[0]
616-
operator_key = operator_addr_and_key[1]
617-
return messages.Masternode(idx, owner_addr, operator_addr, voting_addr, ipport, payout_addr, operator_key)
616+
operator_pk = operator_keys[0]
617+
operator_sk = operator_keys[1]
618+
return messages.Masternode(idx, owner_addr, operator_pk, voting_addr, ipport, payout_addr, operator_sk)
618619

619620
def spend_mn_collateral(spender, dmn):
620621
inputs = [dmn.collateral.to_json()]

0 commit comments

Comments
 (0)