changed script queries

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
Lorenz Herzberger 2022-11-17 17:54:22 +01:00
parent 18e6cf2335
commit 198bcf46b8
No known key found for this signature in database
GPG Key ID: FA5EE906EB55316A
6 changed files with 44 additions and 25 deletions

View File

@ -1,4 +1,10 @@
# Copyright © 2020 Interplanetary Database Association e.V.,
# Planetmint and IPDB software contributors.
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
# Code is Apache-2.0 and docs are CC-BY-4.0
from .asset import Asset from .asset import Asset
from .fulfills import Fulfills from .fulfills import Fulfills
from .input import Input from .input import Input
from .metadata import MetaData from .metadata import MetaData
from .script import Script

View File

@ -0,0 +1,19 @@
# Copyright © 2020 Interplanetary Database Association e.V.,
# Planetmint and IPDB software contributors.
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
# Code is Apache-2.0 and docs are CC-BY-4.0
from __future__ import annotations
from dataclasses import dataclass
from typing import Optional
@dataclass
class Script:
id: str = ""
script: Optional[str] = None
@staticmethod
def from_tuple(script_tuple: tuple) -> Script:
return Script(script_tuple[0], script_tuple[1])

View File

@ -7,7 +7,7 @@
from functools import singledispatch from functools import singledispatch
from planetmint.backend.exceptions import OperationError from planetmint.backend.exceptions import OperationError
from planetmint.backend.interfaces import Asset, Block, MetaData, Input from planetmint.backend.interfaces import Asset, Block, MetaData, Input, Script
@singledispatch @singledispatch
def store_asset(connection, asset: dict) -> Asset: def store_asset(connection, asset: dict) -> Asset:
@ -461,3 +461,8 @@ def store_transaction_inputs(connection, inputs: list[Input]):
def _group_transaction_by_ids(txids: list, connection): def _group_transaction_by_ids(txids: list, connection):
"""Returns the transactions object (JSON TYPE), from list of ids.""" """Returns the transactions object (JSON TYPE), from list of ids."""
raise NotImplementedError raise NotImplementedError
@singledispatch
def get_script_by_tx_id(connection, tx_id: str) -> Script:
"""Retrieve script for a transaction by its id"""
raise NotImplementedError

View File

@ -14,7 +14,7 @@ from planetmint.backend.tarantool.const import TARANT_TABLE_META_DATA, TARANT_TA
TARANT_TABLE_TRANSACTION, TARANT_TABLE_INPUT, TARANT_TABLE_OUTPUT, TARANT_TABLE_SCRIPT, TARANT_TX_ID_SEARCH, \ TARANT_TABLE_TRANSACTION, TARANT_TABLE_INPUT, TARANT_TABLE_OUTPUT, TARANT_TABLE_SCRIPT, TARANT_TX_ID_SEARCH, \
TARANT_ID_SEARCH TARANT_ID_SEARCH
from planetmint.backend.utils import module_dispatch_registrar from planetmint.backend.utils import module_dispatch_registrar
from planetmint.backend.models import Asset, MetaData, Input, Fulfills from planetmint.backend.models import Asset, MetaData, Input, Script
from planetmint.backend.tarantool.connection import TarantoolDBConnection from planetmint.backend.tarantool.connection import TarantoolDBConnection
from planetmint.backend.tarantool.transaction.tools import TransactionCompose, TransactionDecompose from planetmint.backend.tarantool.transaction.tools import TransactionCompose, TransactionDecompose
@ -35,20 +35,21 @@ def _group_transaction_by_ids(connection, txids: list):
_txassets = connection.run(connection.space(TARANT_TABLE_ASSETS).select(txid, index=TARANT_TX_ID_SEARCH)) _txassets = connection.run(connection.space(TARANT_TABLE_ASSETS).select(txid, index=TARANT_TX_ID_SEARCH))
_txassets = get_assets(connection, [txid]) _txassets = get_assets(connection, [txid])
_txmeta = get_metadata_by_tx_id(connection, txid) _txmeta = get_metadata_by_tx_id(connection, txid)
_txscript = connection.run(connection.space(TARANT_TABLE_SCRIPT).select(txid, index=TARANT_TX_ID_SEARCH)) _txscript = get_script_by_tx_id(connection, txid)
_txoutputs = sorted(_txoutputs, key=itemgetter(8), reverse=False) _txoutputs = sorted(_txoutputs, key=itemgetter(8), reverse=False)
result_map = { result_map = {
TARANT_TABLE_TRANSACTION: _txobject, TARANT_TABLE_TRANSACTION: _txobject,
TARANT_TABLE_OUTPUT: _txoutputs, TARANT_TABLE_OUTPUT: _txoutputs,
TARANT_TABLE_KEYS: _txkeys, TARANT_TABLE_KEYS: _txkeys,
TARANT_TABLE_SCRIPT: _txscript,
} }
tx_compose = TransactionCompose(db_results=result_map) tx_compose = TransactionCompose(db_results=result_map)
_transaction = tx_compose.convert_to_dict() _transaction = tx_compose.convert_to_dict()
_transaction[TARANT_TABLE_INPUT] = [input.to_input_dict() for input in _txinputs] _transaction[TARANT_TABLE_INPUT] = [input.to_input_dict() for input in _txinputs]
_transaction["assets"] = [asset.data for asset in _txassets] _transaction["assets"] = [asset.data for asset in _txassets]
_transaction["metadata"] = _txmeta.metadata _transaction["metadata"] = _txmeta.metadata
if _txscript.script:
_transaction[TARANT_TABLE_SCRIPT] = _txscript.script
_transactions.append(_transaction) _transactions.append(_transaction)
return _transactions return _transactions
@ -97,8 +98,8 @@ def store_transactions(connection, signed_transactions: list):
assets.append(Asset(id, transaction["id"], asset)) assets.append(Asset(id, transaction["id"], asset))
store_assets(connection, assets) store_assets(connection, assets)
if txtuples[TARANT_TABLE_SCRIPT] is not None: if TARANT_TABLE_SCRIPT in transaction:
connection.run(connection.space(TARANT_TABLE_SCRIPT).insert(txtuples["script"]), only_data=False) connection.run(connection.space(TARANT_TABLE_SCRIPT).insert((transaction["id"], transaction[TARANT_TABLE_SCRIPT])), only_data=False)
@register_query(TarantoolDBConnection) @register_query(TarantoolDBConnection)
@ -496,3 +497,8 @@ def get_latest_abci_chain(connection):
return None return None
_chain = sorted(_all_chains, key=itemgetter(0), reverse=True)[0] _chain = sorted(_all_chains, key=itemgetter(0), reverse=True)[0]
return {"height": _chain[0], "is_synced": _chain[1], "chain_id": _chain[2]} return {"height": _chain[0], "is_synced": _chain[1], "chain_id": _chain[2]}
@register_query(TarantoolDBConnection)
def get_script_by_tx_id(connection, tx_id: str) -> Script:
script = connection.run(connection.space(TARANT_TABLE_SCRIPT).select(tx_id, index=TARANT_TX_ID_SEARCH))
return Script.from_tuple(script[0]) if len(script) < 0 else Script(tx_id)

View File

@ -102,18 +102,11 @@ class TransactionDecompose:
_map = self.get_map() _map = self.get_map()
return (self._transaction["id"], self._transaction["operation"], self._transaction["version"], _map) return (self._transaction["id"], self._transaction["operation"], self._transaction["version"], _map)
def __prepare_script(self):
try:
return (self._transaction["id"], self._transaction[TARANT_TABLE_SCRIPT])
except KeyError:
return None
def convert_to_tuple(self): def convert_to_tuple(self):
self._tuple_transaction[TARANT_TABLE_TRANSACTION] = self.__prepare_transaction() self._tuple_transaction[TARANT_TABLE_TRANSACTION] = self.__prepare_transaction()
keys, outputs = self.__prepare_outputs() keys, outputs = self.__prepare_outputs()
self._tuple_transaction[TARANT_TABLE_OUTPUT] = outputs self._tuple_transaction[TARANT_TABLE_OUTPUT] = outputs
self._tuple_transaction[TARANT_TABLE_KEYS] = keys self._tuple_transaction[TARANT_TABLE_KEYS] = keys
self._tuple_transaction[TARANT_TABLE_SCRIPT] = self.__prepare_script()
return self._tuple_transaction return self._tuple_transaction
@ -151,18 +144,10 @@ class TransactionCompose:
_outputs.append(_out) _outputs.append(_out)
return _outputs return _outputs
def _get_script(self):
if self.db_results[TARANT_TABLE_SCRIPT]:
return self.db_results[TARANT_TABLE_SCRIPT][0][1]
else:
return None
def convert_to_dict(self): def convert_to_dict(self):
transaction = {k: None for k in list(self._map.keys())} transaction = {k: None for k in list(self._map.keys())}
transaction["id"] = self._get_transaction_id() transaction["id"] = self._get_transaction_id()
transaction["version"] = self._get_transaction_version() transaction["version"] = self._get_transaction_version()
transaction["operation"] = self._get_transaction_operation() transaction["operation"] = self._get_transaction_operation()
transaction[TARANT_TABLE_OUTPUT] = self._get_outputs() transaction[TARANT_TABLE_OUTPUT] = self._get_outputs()
if self._get_script():
transaction[TARANT_TABLE_SCRIPT] = self._get_script()
return transaction return transaction

View File

@ -12,12 +12,10 @@ from collections import namedtuple
from uuid import uuid4 from uuid import uuid4
from planetmint.backend.connection import Connection from planetmint.backend.connection import Connection
import rapidjson
from hashlib import sha3_256 from hashlib import sha3_256
import json import json
import rapidjson import rapidjson
import requests import requests
import planetmint
from collections import namedtuple, OrderedDict from collections import namedtuple, OrderedDict
from uuid import uuid4 from uuid import uuid4