diff --git a/planetmint/commands/planetmint.py b/planetmint/commands/planetmint.py index d5c3892..926b0ab 100644 --- a/planetmint/commands/planetmint.py +++ b/planetmint/commands/planetmint.py @@ -19,6 +19,7 @@ from planetmint.transactions.common.transaction_mode_types import BROADCAST_TX_C from planetmint.transactions.common.exceptions import DatabaseDoesNotExist, ValidationError from planetmint.transactions.types.elections.vote import Vote from planetmint.transactions.types.elections.chain_migration_election import ChainMigrationElection +from planetmint.transactions.types.elections.validator_utils import election_id_to_public_key import planetmint from planetmint import ValidatorElection, Planetmint from planetmint.backend import schema @@ -197,7 +198,7 @@ def run_election_approve(args, planet): return False inputs = [i for i in tx.to_inputs() if key.public_key in i.owners_before] - election_pub_key = ValidatorElection.to_public_key(tx.id) + election_pub_key = election_id_to_public_key(tx.id) approval = Vote.generate(inputs, [([election_pub_key], voting_power)], tx.id).sign([key.private_key]) planet.validate_transaction(approval) diff --git a/planetmint/transactions/types/elections/election.py b/planetmint/transactions/types/elections/election.py index 137a7e7..981258b 100644 --- a/planetmint/transactions/types/elections/election.py +++ b/planetmint/transactions/types/elections/election.py @@ -10,11 +10,10 @@ from typing import Optional from planetmint import backend from planetmint.transactions.types.elections.vote import Vote -from planetmint.tendermint_utils import key_from_base64, public_key_to_base64 -from planetmint.transactions.common.crypto import public_key_from_ed25519_key from planetmint.transactions.common.transaction import Transaction from planetmint.transactions.common.schema import _validate_schema, TX_SCHEMA_COMMON +from .validator_utils import election_id_to_public_key class Election(Transaction): """Represents election transactions. @@ -74,9 +73,6 @@ class Election(Transaction): if cls.TX_SCHEMA_CUSTOM: _validate_schema(cls.TX_SCHEMA_CUSTOM, tx) - @classmethod - def to_public_key(cls, election_id): # TODO: move somewhere else - return base58.b58encode(bytes.fromhex(election_id)).decode() @classmethod def count_votes(cls, election_pk, transactions, getter=getattr): # TODO: move somewhere else @@ -93,7 +89,7 @@ class Election(Transaction): def get_commited_votes(self, planet, election_pk=None): # TODO: move somewhere else if election_pk is None: - election_pk = self.to_public_key(self.id) + election_pk = election_id_to_public_key(self.id) txns = list(backend.query.get_asset_tokens_for_public_key(planet.connection, self.id, election_pk)) return self.count_votes(election_pk, txns, dict.get) @@ -109,7 +105,7 @@ class Election(Transaction): if planet.has_validator_set_changed(self): return False - election_pk = self.to_public_key(self.id) + election_pk = election_id_to_public_key(self.id) votes_committed = self.get_commited_votes(planet, election_pk) votes_current = self.count_votes(election_pk, current_votes) diff --git a/planetmint/transactions/types/elections/validator_utils.py b/planetmint/transactions/types/elections/validator_utils.py index f797860..85cba76 100644 --- a/planetmint/transactions/types/elections/validator_utils.py +++ b/planetmint/transactions/types/elections/validator_utils.py @@ -1,3 +1,4 @@ +import base58 import base64 import binascii import codecs @@ -77,3 +78,7 @@ def get_public_key_decoder(pk): raise InvalidPublicKey("Invalid `type` specified for public key `value`") return decoder + + +def election_id_to_public_key(election_id): + return base58.b58encode(bytes.fromhex(election_id)).decode() diff --git a/tests/upsert_validator/test_upsert_validator_vote.py b/tests/upsert_validator/test_upsert_validator_vote.py index 10f802e..9313c95 100644 --- a/tests/upsert_validator/test_upsert_validator_vote.py +++ b/tests/upsert_validator/test_upsert_validator_vote.py @@ -14,6 +14,7 @@ from planetmint.transactions.common.crypto import generate_key_pair from planetmint.transactions.common.exceptions import ValidationError from planetmint.transactions.common.transaction_mode_types import BROADCAST_TX_COMMIT from planetmint.transactions.types.elections.vote import Vote +from planetmint.transactions.types.elections.validator_utils import election_id_to_public_key from tests.utils import generate_block, gen_vote pytestmark = [pytest.mark.execute] @@ -28,7 +29,7 @@ def test_upsert_validator_valid_election_vote(b_mock, valid_upsert_validator_ele public_key0 = input0.owners_before[0] key0 = ed25519_node_keys[public_key0] - election_pub_key = ValidatorElection.to_public_key(valid_upsert_validator_election.id) + election_pub_key = election_id_to_public_key(valid_upsert_validator_election.id) vote = Vote.generate([input0], [([election_pub_key], votes)], election_id=valid_upsert_validator_election.id).sign( [key0.private_key] @@ -46,7 +47,7 @@ def test_upsert_validator_valid_non_election_vote(b_mock, valid_upsert_validator public_key0 = input0.owners_before[0] key0 = ed25519_node_keys[public_key0] - election_pub_key = ValidatorElection.to_public_key(valid_upsert_validator_election.id) + election_pub_key = election_id_to_public_key(valid_upsert_validator_election.id) # Ensure that threshold conditions are now allowed with pytest.raises(ValidationError): @@ -76,7 +77,7 @@ def test_upsert_validator_delegate_election_vote(b_mock, valid_upsert_validator_ assert b_mock.validate_transaction(delegate_vote) b_mock.store_bulk_transactions([delegate_vote]) - election_pub_key = ValidatorElection.to_public_key(valid_upsert_validator_election.id) + election_pub_key = election_id_to_public_key(valid_upsert_validator_election.id) alice_votes = delegate_vote.to_inputs()[0] alice_casted_vote = Vote.generate( @@ -102,7 +103,7 @@ def test_upsert_validator_invalid_election_vote(b_mock, valid_upsert_validator_e public_key0 = input0.owners_before[0] key0 = ed25519_node_keys[public_key0] - election_pub_key = ValidatorElection.to_public_key(valid_upsert_validator_election.id) + election_pub_key = election_id_to_public_key(valid_upsert_validator_election.id) vote = Vote.generate( [input0], [([election_pub_key], votes + 1)], election_id=valid_upsert_validator_election.id @@ -133,7 +134,7 @@ def test_valid_election_votes_received(b_mock, valid_upsert_validator_election, b_mock.store_bulk_transactions([delegate_vote]) assert valid_upsert_validator_election.get_commited_votes(b_mock) == 0 - election_public_key = ValidatorElection.to_public_key(valid_upsert_validator_election.id) + election_public_key = election_id_to_public_key(valid_upsert_validator_election.id) alice_votes = delegate_vote.to_inputs()[0] key0_votes = delegate_vote.to_inputs()[1] diff --git a/tests/utils.py b/tests/utils.py index ef70906..e99c022 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -16,6 +16,7 @@ from planetmint.transactions.common import crypto from planetmint.transactions.common.transaction_mode_types import BROADCAST_TX_COMMIT from planetmint.transactions.types.assets.create import Create from planetmint.transactions.types.elections.election import Election, Vote +from planetmint.transactions.types.elections.validator_utils import election_id_to_public_key from planetmint.tendermint_utils import key_to_base64 @@ -73,7 +74,7 @@ def to_inputs(election, i, ed25519_node_keys): def gen_vote(election, i, ed25519_node_keys): (input_i, votes_i, key_i) = to_inputs(election, i, ed25519_node_keys) - election_pub_key = Election.to_public_key(election.id) + election_pub_key = election_id_to_public_key(election.id) return Vote.generate([input_i], [([election_pub_key], votes_i)], election_id=election.id).sign([key_i.private_key]) @@ -123,7 +124,7 @@ def generate_election(b, cls, public_key, private_key, asset_data, voter_keys): election = cls.generate([public_key], voters, asset_data, None).sign([private_key]) votes = [ - Vote.generate([election.to_inputs()[i]], [([Election.to_public_key(election.id)], power)], election.id) + Vote.generate([election.to_inputs()[i]], [([election_id_to_public_key(election.id)], power)], election.id) for i, (_, power) in enumerate(voters) ] for key, v in zip(voter_keys, votes):