diff --git a/planetmint/backend/query.py b/planetmint/backend/query.py index c2856d8..d68014f 100644 --- a/planetmint/backend/query.py +++ b/planetmint/backend/query.py @@ -70,20 +70,6 @@ def store_transaction(connection, transaction): raise NotImplementedError -@singledispatch -def store_governance_transactions(connection, transactions): - """Store the list of governance transactions.""" - - raise NotImplementedError - - -@singledispatch -def store_governance_transaction(connection, transaction): - """Store a single governance transaction.""" - - raise NotImplementedError - - @singledispatch def get_transaction_by_id(connection, transaction_id): """Get the transaction by transaction id.""" diff --git a/planetmint/backend/tarantool/query.py b/planetmint/backend/tarantool/query.py index 0f22d86..bcb7895 100644 --- a/planetmint/backend/tarantool/query.py +++ b/planetmint/backend/tarantool/query.py @@ -113,9 +113,9 @@ def store_transaction_outputs(connection, output: Output, index: int) -> str: @register_query(TarantoolDBConnection) -def store_transactions(connection, signed_transactions: list): +def store_transactions(connection, signed_transactions: list, table = TARANT_TABLE_TRANSACTION): for transaction in signed_transactions: - store_transaction(connection, transaction) + store_transaction(connection, transaction, table) [ store_transaction_outputs(connection, Output.outputs_dict(output, transaction["id"]), index) for index, output in enumerate(transaction[TARANT_TABLE_OUTPUT]) @@ -123,7 +123,7 @@ def store_transactions(connection, signed_transactions: list): @register_query(TarantoolDBConnection) -def store_transaction(connection, transaction): +def store_transaction(connection, transaction, table = TARANT_TABLE_TRANSACTION): scripts = None if TARANT_TABLE_SCRIPT in transaction: scripts = transaction[TARANT_TABLE_SCRIPT] @@ -137,7 +137,7 @@ def store_transaction(connection, transaction): scripts, ) try: - connection.run(connection.space(TARANT_TABLE_TRANSACTION).insert(tx), only_data=False) + connection.run(connection.space(table).insert(tx), only_data=False) except Exception as e: logger.info(f"Could not insert transactions: {e}") if e.args[0] == 3 and e.args[1].startswith('Duplicate key exists in'): @@ -146,39 +146,6 @@ def store_transaction(connection, transaction): raise OperationDataInsertionError() -@register_query(TarantoolDBConnection) -def store_governance_transactions(connection, signed_transactions: list): - for transaction in signed_transactions: - store_governance_transaction(connection, transaction) - [ - store_transaction_outputs(connection, Output.outputs_dict(output, transaction["id"]), index) - for index, output in enumerate(transaction[TARANT_TABLE_OUTPUT]) - ] - - -@register_query(TarantoolDBConnection) -def store_governance_transaction(connection, transaction): - scripts = None - if TARANT_TABLE_SCRIPT in transaction: - scripts = transaction[TARANT_TABLE_SCRIPT] - tx = ( - transaction["id"], - transaction["operation"], - transaction["version"], - transaction["metadata"], - transaction["assets"], - transaction["inputs"], - scripts, - ) - try: - connection.run(connection.space(TARANT_TABLE_GOVERNANCE).insert(tx), only_data=False) - except Exception as e: - if e.args[0] == 3 and e.args[1].startswith('Duplicate key exists in'): - raise CriticalDoubleSpend() - else: - raise OperationDataInsertionError() - - @register_query(TarantoolDBConnection) def get_transaction_by_id(connection, transaction_id, table=TARANT_TABLE_TRANSACTION): txs = connection.run(connection.space(table).select(transaction_id, index=TARANT_ID_SEARCH)) diff --git a/planetmint/lib.py b/planetmint/lib.py index 956fd86..0a8aa99 100644 --- a/planetmint/lib.py +++ b/planetmint/lib.py @@ -163,8 +163,8 @@ class Planetmint(object): else: txns.append(transaction) - backend.query.store_transactions(self.connection, txns) - backend.query.store_governance_transactions(self.connection, gov_txns) + backend.query.store_transactions(self.connection, txns, TARANT_TABLE_TRANSACTION) + backend.query.store_transactions(self.connection, gov_txns, TARANT_TABLE_GOVERNANCE) def delete_transactions(self, txs): return backend.query.delete_transactions(self.connection, txs) diff --git a/tests/tendermint/test_lib.py b/tests/tendermint/test_lib.py index a0e1b98..cb1e89a 100644 --- a/tests/tendermint/test_lib.py +++ b/tests/tendermint/test_lib.py @@ -170,69 +170,29 @@ def test_update_utxoset(b, signed_create_tx, signed_transfer_tx, db_conn): @pytest.mark.bdb -def test_store_transaction(mocker, b, signed_create_tx, signed_transfer_tx, db_context): - from planetmint.backend.tarantool.connection import TarantoolDBConnection - +def test_store_transaction(mocker, b, signed_create_tx, signed_transfer_tx): mocked_store_transaction = mocker.patch("planetmint.backend.query.store_transactions") b.store_bulk_transactions([signed_create_tx]) - if not isinstance(b.connection, TarantoolDBConnection): - mongo_client = MongoClient(host=db_context.host, port=db_context.port) - utxoset = mongo_client[db_context.name]["utxos"] - assert utxoset.count_documents({}) == 1 - utxo = utxoset.find_one() - assert utxo["transaction_id"] == signed_create_tx.id - assert utxo["output_index"] == 0 - - mocked_store_transaction.assert_called_once_with( + mocked_store_transaction.assert_any_call( b.connection, [signed_create_tx.to_dict()], + "transactions" ) mocked_store_transaction.reset_mock() b.store_bulk_transactions([signed_transfer_tx]) - if not isinstance(b.connection, TarantoolDBConnection): - assert utxoset.count_documents({}) == 1 - utxo = utxoset.find_one() - assert utxo["transaction_id"] == signed_transfer_tx.id - assert utxo["output_index"] == 0 - if not isinstance(b.connection, TarantoolDBConnection): - mocked_store_transaction.assert_called_once_with( - b.connection, - [signed_transfer_tx.to_dict()], - ) @pytest.mark.bdb -def test_store_bulk_transaction(mocker, b, signed_create_tx, signed_transfer_tx, db_context): - from planetmint.backend.tarantool.connection import TarantoolDBConnection - +def test_store_bulk_transaction(mocker, b, signed_create_tx, signed_transfer_tx): mocked_store_transactions = mocker.patch("planetmint.backend.query.store_transactions") b.store_bulk_transactions((signed_create_tx,)) - if not isinstance(b.connection, TarantoolDBConnection): - mongo_client = MongoClient(host=db_context.host, port=db_context.port) - utxoset = mongo_client[db_context.name]["utxos"] - assert utxoset.count_documents({}) == 1 - utxo = utxoset.find_one() - assert utxo["transaction_id"] == signed_create_tx.id - assert utxo["output_index"] == 0 - - mocked_store_transactions.assert_called_once_with( + mocked_store_transactions.assert_any_call( b.connection, [signed_create_tx.to_dict()], + "transactions" ) - mocked_store_transactions.reset_mock() b.store_bulk_transactions((signed_transfer_tx,)) - if not isinstance(b.connection, TarantoolDBConnection): - assert utxoset.count_documents({}) == 1 - utxo = utxoset.find_one() - assert utxo["transaction_id"] == signed_transfer_tx.id - assert utxo["output_index"] == 0 - - if not isinstance(b.connection, TarantoolDBConnection): - mocked_store_transactions.assert_called_once_with( - b.connection, - [signed_transfer_tx.to_dict()], - ) @pytest.mark.bdb