diff --git a/planetmint/lib.py b/planetmint/lib.py index e031edd..4ce3649 100644 --- a/planetmint/lib.py +++ b/planetmint/lib.py @@ -684,7 +684,7 @@ class Planetmint(object): current_validators = self.get_validators_dict() # NOTE: change more than 1/3 of the current power is not allowed - if transaction.assets[0]["data"]["power"] >= (1 / 3) * sum(current_validators.values()): + if Transaction.get_asset_array( transaction )[0]["data"]["power"] >= (1 / 3) * sum(current_validators.values()): raise InvalidPowerChange("`power` change must be less than 1/3 of total power") def get_election_status(self, transaction): @@ -740,7 +740,7 @@ class Planetmint(object): return recipients def show_election_status(self, transaction): - data = transaction.assets[0]["data"] + data = transaction.get_assets()[0]["data"] if "public_key" in data.keys(): data["public_key"] = public_key_to_base64(data["public_key"]["value"]) response = "" @@ -821,8 +821,7 @@ class Planetmint(object): for tx in txns: if not isinstance(tx, Vote): continue - - election_id = tx.assets[0]["id"] + election_id = Transaction.read_out_asset_id(tx) if election_id not in elections: elections[election_id] = [] elections[election_id].append(tx) @@ -956,7 +955,7 @@ class Planetmint(object): if election.operation == CHAIN_MIGRATION_ELECTION: self.migrate_abci_chain() if election.operation == VALIDATOR_ELECTION: - validator_updates = [election.assets[0]["data"]] + validator_updates = [election.get_assets()[0]["data"]] curr_validator_set = self.get_validators(new_height) updated_validator_set = new_validator_set(curr_validator_set, validator_updates) @@ -964,7 +963,7 @@ class Planetmint(object): # TODO change to `new_height + 2` when upgrading to Tendermint 0.24.0. self.store_validator_set(new_height + 1, updated_validator_set) - return encode_validator(election.assets[0]["data"]) + return encode_validator(election.get_assets()[0]["data"]) Block = namedtuple("Block", ("app_hash", "height", "transactions")) diff --git a/tests/validation/test_transaction_structure.py b/tests/validation/test_transaction_structure.py index ed6eae3..cf16c89 100644 --- a/tests/validation/test_transaction_structure.py +++ b/tests/validation/test_transaction_structure.py @@ -259,3 +259,9 @@ def test_validate_version(b, create_tx, alice): create_tx._id = None create_tx.sign([alice.private_key]) validate_raises(create_tx) + + +def test_upgrade_issue_validation(b): + tx_dict = {"inputs": [{"owners_before": ["HY2gviZVW1fvsshx21kRCcGUJFBKQwf37xA959cTNFzP"], "fulfills": None, "fulfillment": "pGSAIPWt56ud3H3z0qf6hPKcMsJtOSc_goPAo3AXkH8T4mzAgUBuGTrhGQQ0oePAgxC_9pHNWzHiykddAuhMSnSDoatPExkDp2nAmq8D6pvc3ECqMUUj04GBEq2aROmAylDBKrgG"}], "outputs": [{"public_keys": ["6G8TmxcbRgYuQviBg9Us5h4B8D94fNJ4kbMMKRwmY5sy"], "condition": {"details": {"type": "ed25519-sha-256", "public_key": "6G8TmxcbRgYuQviBg9Us5h4B8D94fNJ4kbMMKRwmY5sy"}, "uri": "ni:///sha-256;jf_gG_7GnA7bTzelkz_Du2kMHzw7OS20TVNHD8XZSq4?fpt=ed25519-sha-256&cost=131072"}, "amount": "10"}, {"public_keys": ["CwHvbpvaWQu9wBuVVLRsc2rxUcGM7j1tR3RsVPWtgbXj"], "condition": {"details": {"type": "ed25519-sha-256", "public_key": "CwHvbpvaWQu9wBuVVLRsc2rxUcGM7j1tR3RsVPWtgbXj"}, "uri": "ni:///sha-256;4VrA0c8Pvb4DA7Bvrx7or0JBKExRCfWyKSFiLYxpr7A?fpt=ed25519-sha-256&cost=131072"}, "amount": "10"}, {"public_keys": ["HY2gviZVW1fvsshx21kRCcGUJFBKQwf37xA959cTNFzP"], "condition": {"details": {"type": "ed25519-sha-256", "public_key": "HY2gviZVW1fvsshx21kRCcGUJFBKQwf37xA959cTNFzP"}, "uri": "ni:///sha-256;-uhNj2-VQAytXDoz0z2n9PHUbJrzME4syF1EJCQ9cKw?fpt=ed25519-sha-256&cost=131072"}, "amount": "10"}, {"public_keys": ["2mxYGVViSHfTFJNydAKQQZaz8HAUjUSCDobPCF2q1hjk"], "condition": {"details": {"type": "ed25519-sha-256", "public_key": "2mxYGVViSHfTFJNydAKQQZaz8HAUjUSCDobPCF2q1hjk"}, "uri": "ni:///sha-256;fTF2N2feWDvfEeMoTXss5KlWkYwnP4g2jUWKF2cmFRI?fpt=ed25519-sha-256&cost=131072"}, "amount": "10"}, {"public_keys": ["Dxy87xVCbGueayzmzo1csFFp47mhsvCYqX7dJJSTZmvB"], "condition": {"details": {"type": "ed25519-sha-256", "public_key": "Dxy87xVCbGueayzmzo1csFFp47mhsvCYqX7dJJSTZmvB"}, "uri": "ni:///sha-256;Ga2y8alLY9f1tQ-Jvly68UZZ7csLLWbL7v7240_-uvo?fpt=ed25519-sha-256&cost=131072"}, "amount": "10"}], "operation": "VALIDATOR_ELECTION", "metadata": None, "asset": {"data": {"public_key": {"value": "EEE57EEEE18BCC60B951C0672B09D70F52B20AC8C8DE9A191F956BB09083BF96", "type": "ed25519-base16"}, "power": 10, "node_id": "a4ee5afed56efbfbc0d08c1d030b1d0291451c59", "seed": "99430bfa-26e7-422d-a816-37166a05818c"}}, "version": "2.0", "id": "d2a58e4bb788e6594b4e8570b881b8b9859be34881fd4cba40b49481b0af2e98"} + tx = Transaction.from_dict(tx_dict, False) + print(tx)