moved election_id_to_public_key to validator_utils

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
Lorenz Herzberger 2022-09-29 17:09:23 +02:00
parent 20b9a08f7f
commit 2fd0ac0755
No known key found for this signature in database
GPG Key ID: FA5EE906EB55316A
5 changed files with 19 additions and 15 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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()

View File

@ -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]

View File

@ -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):