From 97513aca6a33d0dc1d6a8b60d49fb8e1cb5d59f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Eckel?= Date: Tue, 10 Jan 2023 13:21:36 +0100 Subject: [PATCH] added proper input conversion of the test cases and a proper input validation and object converion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jürgen Eckel --- planetmint/lib.py | 11 +++++++++-- tests/db/test_planetmint_api.py | 11 ++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/planetmint/lib.py b/planetmint/lib.py index c1d0f7d..fdad057 100644 --- a/planetmint/lib.py +++ b/planetmint/lib.py @@ -36,6 +36,7 @@ from transactions.common.exceptions import ( ) from transactions.common.transaction import VALIDATOR_ELECTION, CHAIN_MIGRATION_ELECTION from transactions.common.transaction_mode_types import BROADCAST_TX_COMMIT, BROADCAST_TX_ASYNC, BROADCAST_TX_SYNC +from transactions.common.output import Output as TransactionOutput from transactions.types.elections.election import Election from transactions.types.elections.validator_utils import election_id_to_public_key @@ -414,8 +415,14 @@ class Planetmint(object): asset_id = tx.get_asset_id(input_txs) if asset_id != tx.assets[0]["id"]: raise AssetIdMismatch(("The asset id of the input does not" " match the asset id of the" " transaction")) - - if not tx.inputs_valid(input_conditions): + + # convert planetmint.Output objects to transactions.common.Output objects + input_conditions_dict = Output.list_to_dict(input_conditions) + input_conditions_converted = [] + for input_cond in input_conditions_dict: + input_conditions_converted.append(TransactionOutput.from_dict( input_cond )) + + if not tx.inputs_valid(input_conditions_converted): raise InvalidSignature("Transaction signature is invalid.") input_amount = sum([input_condition.amount for input_condition in input_conditions]) diff --git a/tests/db/test_planetmint_api.py b/tests/db/test_planetmint_api.py index c3eeb6e..e50ca4d 100644 --- a/tests/db/test_planetmint_api.py +++ b/tests/db/test_planetmint_api.py @@ -7,6 +7,7 @@ import random import pytest from unittest.mock import patch +from planetmint.backend.models import Input from transactions.types.assets.create import Create from transactions.types.assets.transfer import Transfer from ipld import marshal, multihash @@ -110,10 +111,10 @@ class TestBigchainApi(object): before = tx.to_dict() after = tx_from_db.to_dict() - assert before["assets"][0] == after["transaction"]["assets"][0] - before.pop("asset", None) - after["transaction"].pop("asset", None) - assert before == after["transaction"] + assert before["assets"][0] == after["assets"][0] + before.pop("assets", None) + after.pop("assets", None) + assert before == after class TestTransactionValidation(object): @@ -159,7 +160,7 @@ class TestMultipleInputs(object): tx_link = b.fastquery.get_outputs_by_public_key(user_pk).pop() input_tx = b.get_transaction(tx_link.txid) - inputs = input_tx.to_inputs() + inputs = Input.list_to_dict(input_tx.inputs) tx = Transfer.generate(inputs, [([user2_pk], 1)], asset_ids=[input_tx.id]) tx = tx.sign([user_sk])