mirror of
https://github.com/planetmint/planetmint.git
synced 2025-11-24 14:35:45 +00:00
moved get_validators and get_recipients to planetmint
Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
parent
b397cc98b6
commit
c3c9f405b0
@ -119,7 +119,7 @@ def run_election_new(args, planet):
|
||||
def create_new_election(sk, planet, election_class, data):
|
||||
try:
|
||||
key = load_node_key(sk)
|
||||
voters = election_class.recipients(planet)
|
||||
voters = planet.get_recipients_list()
|
||||
election = election_class.generate([key.public_key], voters, data, None).sign([key.private_key])
|
||||
planet.validate_election(election)
|
||||
except ValidationError as e:
|
||||
|
||||
@ -720,4 +720,25 @@ class Planetmint(object):
|
||||
return None
|
||||
return self.get_validator_set(latest_block["height"])
|
||||
|
||||
def get_validator_dict(self, height=None):
|
||||
"""Return a dictionary of validators with key as `public_key` and
|
||||
value as the `voting_power`
|
||||
"""
|
||||
validators = {}
|
||||
for validator in self.get_validators(height):
|
||||
# NOTE: we assume that Tendermint encodes public key in base64
|
||||
public_key = public_key_from_ed25519_key(key_from_base64(validator["public_key"]["value"]))
|
||||
validators[public_key] = validator["voting_power"]
|
||||
|
||||
return validators
|
||||
|
||||
def get_recipients_list(self):
|
||||
"""Convert validator dictionary to a recipient list for `Transaction`"""
|
||||
|
||||
recipients = []
|
||||
for public_key, voting_power in self.get_validator_dict().items():
|
||||
recipients.append(([public_key], voting_power))
|
||||
|
||||
return recipients
|
||||
|
||||
Block = namedtuple("Block", ("app_hash", "height", "transactions"))
|
||||
|
||||
@ -41,7 +41,7 @@ class ChainMigrationElection(Election):
|
||||
},
|
||||
"power": v,
|
||||
}
|
||||
for k, v in self.get_validators(planet).items()
|
||||
for k, v in planet.get_validator_dict().items()
|
||||
]
|
||||
output += f"\nvalidators={json.dumps(validators, indent=4)}"
|
||||
return output
|
||||
|
||||
@ -34,29 +34,6 @@ class Election(Transaction):
|
||||
# Vote ratio to approve an election
|
||||
ELECTION_THRESHOLD = 2 / 3
|
||||
|
||||
@classmethod
|
||||
def get_validators(cls, planet, height=None): # TODO: move somewhere else
|
||||
"""Return a dictionary of validators with key as `public_key` and
|
||||
value as the `voting_power`
|
||||
"""
|
||||
validators = {}
|
||||
for validator in planet.get_validators(height):
|
||||
# NOTE: we assume that Tendermint encodes public key in base64
|
||||
public_key = public_key_from_ed25519_key(key_from_base64(validator["public_key"]["value"]))
|
||||
validators[public_key] = validator["voting_power"]
|
||||
|
||||
return validators
|
||||
|
||||
@classmethod
|
||||
def recipients(cls, planet): # TODO: move somewhere else
|
||||
"""Convert validator dictionary to a recipient list for `Transaction`"""
|
||||
|
||||
recipients = []
|
||||
for public_key, voting_power in cls.get_validators(planet).items():
|
||||
recipients.append(([public_key], voting_power))
|
||||
|
||||
return recipients
|
||||
|
||||
@classmethod
|
||||
def is_same_topology(cls, current_topology, election_topology): # TODO: move somewhere else
|
||||
voters = {}
|
||||
|
||||
@ -611,7 +611,7 @@ def call_election(b, new_validator, node_key):
|
||||
b.write_transaction = mock_write
|
||||
|
||||
# our voters is a list of length 1, populated from our mocked validator
|
||||
voters = ValidatorElection.recipients(b)
|
||||
voters = b.get_recipients_list()
|
||||
# and our voter is the public key from the voter list
|
||||
voter = node_key.public_key
|
||||
valid_election = ValidatorElection.generate([voter], voters, new_validator, None).sign([node_key.private_key])
|
||||
|
||||
@ -719,13 +719,13 @@ def new_validator():
|
||||
|
||||
@pytest.fixture
|
||||
def valid_upsert_validator_election(b_mock, node_key, new_validator):
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
return ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def valid_upsert_validator_election_2(b_mock, node_key, new_validator):
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
return ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
|
||||
|
||||
|
||||
@ -755,14 +755,14 @@ def ongoing_validator_election_2(b, valid_upsert_validator_election_2, ed25519_n
|
||||
|
||||
@pytest.fixture
|
||||
def validator_election_votes(b_mock, ongoing_validator_election, ed25519_node_keys):
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
votes = generate_votes(ongoing_validator_election, voters, ed25519_node_keys)
|
||||
return votes
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def validator_election_votes_2(b_mock, ongoing_validator_election_2, ed25519_node_keys):
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
votes = generate_votes(ongoing_validator_election_2, voters, ed25519_node_keys)
|
||||
return votes
|
||||
|
||||
|
||||
@ -2,6 +2,6 @@ from planetmint.transactions.types.elections.chain_migration_election import Cha
|
||||
|
||||
|
||||
def test_valid_migration_election(b_mock, node_key):
|
||||
voters = ChainMigrationElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
election = ChainMigrationElection.generate([node_key.public_key], voters, {}, None).sign([node_key.private_key])
|
||||
assert b_mock.validate_election(election)
|
||||
|
||||
@ -12,14 +12,14 @@ from planetmint.transactions.types.elections.validator_election import Validator
|
||||
|
||||
@pytest.fixture
|
||||
def valid_upsert_validator_election_b(b, node_key, new_validator):
|
||||
voters = ValidatorElection.recipients(b)
|
||||
voters = b.get_recipients_list()
|
||||
return ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@patch("planetmint.transactions.types.elections.election.uuid4", lambda: "mock_uuid4")
|
||||
def fixed_seed_election(b_mock, node_key, new_validator):
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
return ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
|
||||
|
||||
|
||||
|
||||
@ -175,7 +175,6 @@ def test_valid_election_conclude(b_mock, valid_upsert_validator_election, ed2551
|
||||
assert not valid_upsert_validator_election.has_concluded(b_mock)
|
||||
|
||||
# validate vote
|
||||
# assert tx_vote0.validate(b_mock)
|
||||
assert b_mock.validate_transaction(tx_vote0)
|
||||
assert not valid_upsert_validator_election.has_concluded(b_mock, [tx_vote0])
|
||||
|
||||
@ -243,7 +242,7 @@ def test_upsert_validator(b, node_key, node_keys, ed25519_node_keys):
|
||||
"power": power,
|
||||
}
|
||||
|
||||
voters = ValidatorElection.recipients(b)
|
||||
voters = b.get_recipients_list()
|
||||
election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
|
||||
[node_key.private_key]
|
||||
)
|
||||
@ -282,7 +281,7 @@ def test_get_validator_update(b, node_keys, node_key, ed25519_node_keys):
|
||||
"node_id": "some_node_id",
|
||||
"power": power,
|
||||
}
|
||||
voters = ValidatorElection.recipients(b)
|
||||
voters = b.get_recipients_list()
|
||||
election = ValidatorElection.generate([node_key.public_key], voters, new_validator).sign([node_key.private_key])
|
||||
# store election
|
||||
b.store_bulk_transactions([election])
|
||||
@ -310,7 +309,7 @@ def test_get_validator_update(b, node_keys, node_key, ed25519_node_keys):
|
||||
"node_id": "some_node_id",
|
||||
"power": power,
|
||||
}
|
||||
voters = ValidatorElection.recipients(b)
|
||||
voters = b.get_recipients_list()
|
||||
election = ValidatorElection.generate([node_key.public_key], voters, new_validator).sign([node_key.private_key])
|
||||
# store election
|
||||
b.store_bulk_transactions([election])
|
||||
|
||||
@ -21,7 +21,7 @@ pytestmark = pytest.mark.bdb
|
||||
|
||||
|
||||
def test_upsert_validator_valid_election(b_mock, new_validator, node_key):
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
|
||||
[node_key.private_key]
|
||||
)
|
||||
@ -33,14 +33,14 @@ def test_upsert_validator_invalid_election_public_key(b_mock, new_validator, nod
|
||||
|
||||
for iv in ["ed25519-base32", "ed25519-base64"]:
|
||||
new_validator["public_key"]["type"] = iv
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
|
||||
with pytest.raises(InvalidPublicKey):
|
||||
ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
|
||||
|
||||
|
||||
def test_upsert_validator_invalid_power_election(b_mock, new_validator, node_key):
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
new_validator["power"] = 30
|
||||
|
||||
election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
|
||||
@ -54,7 +54,7 @@ def test_upsert_validator_invalid_proposed_election(b_mock, new_validator, node_
|
||||
from planetmint.transactions.common.crypto import generate_key_pair
|
||||
|
||||
alice = generate_key_pair()
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
election = ValidatorElection.generate([alice.public_key], voters, new_validator, None).sign([alice.private_key])
|
||||
with pytest.raises(InvalidProposer):
|
||||
b_mock.validate_election(election)
|
||||
@ -64,7 +64,7 @@ def test_upsert_validator_invalid_inputs_election(b_mock, new_validator, node_ke
|
||||
from planetmint.transactions.common.crypto import generate_key_pair
|
||||
|
||||
alice = generate_key_pair()
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
election = ValidatorElection.generate([node_key.public_key, alice.public_key], voters, new_validator, None).sign(
|
||||
[node_key.private_key, alice.private_key]
|
||||
)
|
||||
@ -74,7 +74,7 @@ def test_upsert_validator_invalid_inputs_election(b_mock, new_validator, node_ke
|
||||
|
||||
@patch("planetmint.transactions.types.elections.election.uuid4", lambda: "mock_uuid4")
|
||||
def test_upsert_validator_invalid_election(b_mock, new_validator, node_key, fixed_seed_election):
|
||||
voters = ValidatorElection.recipients(b_mock)
|
||||
voters = b_mock.get_recipients_list()
|
||||
duplicate_election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
|
||||
[node_key.private_key]
|
||||
)
|
||||
@ -95,7 +95,7 @@ def test_upsert_validator_invalid_election(b_mock, new_validator, node_key, fixe
|
||||
with pytest.raises(UnequalValidatorSet):
|
||||
b_mock.validate_election(invalid_election)
|
||||
|
||||
recipients = ValidatorElection.recipients(b_mock)
|
||||
recipients = b_mock.get_recipients_list()
|
||||
altered_recipients = []
|
||||
for r in recipients:
|
||||
([r_public_key], voting_power) = r
|
||||
|
||||
@ -119,7 +119,7 @@ def generate_validators(powers):
|
||||
|
||||
|
||||
def generate_election(b, cls, public_key, private_key, asset_data, voter_keys):
|
||||
voters = cls.recipients(b)
|
||||
voters = b.get_recipients_list()
|
||||
election = cls.generate([public_key], voters, asset_data, None).sign([private_key])
|
||||
|
||||
votes = [
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user