80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
|
# standard imports
|
||
|
import logging
|
||
|
import datetime
|
||
|
|
||
|
# third-party imports
|
||
|
from cic_cache.db.models.base import SessionBase
|
||
|
|
||
|
logg = logging.getLogger()
|
||
|
|
||
|
|
||
|
def list_transactions_mined(
|
||
|
session,
|
||
|
offset,
|
||
|
limit,
|
||
|
):
|
||
|
"""Executes db query to return all confirmed transactions according to the specified offset and limit.
|
||
|
|
||
|
:param offset: Offset in data set to return transactions from
|
||
|
:type offset: int
|
||
|
:param limit: Max number of transactions to retrieve
|
||
|
:type limit: int
|
||
|
:result: Result set
|
||
|
:rtype: SQLAlchemy.ResultProxy
|
||
|
"""
|
||
|
s = "SELECT block_number, tx_index FROM tx ORDER BY block_number DESC, tx_index DESC LIMIT {} OFFSET {}".format(limit, offset)
|
||
|
r = session.execute(s)
|
||
|
return r
|
||
|
|
||
|
|
||
|
def list_transactions_account_mined(
|
||
|
session,
|
||
|
address,
|
||
|
offset,
|
||
|
limit,
|
||
|
):
|
||
|
"""Same as list_transactions_mined(...), but only retrieves transaction where the specified account address is sender or recipient.
|
||
|
|
||
|
:param address: Address to retrieve transactions for.
|
||
|
:type address: str, 0x-hex
|
||
|
:param offset: Offset in data set to return transactions from
|
||
|
:type offset: int
|
||
|
:param limit: Max number of transactions to retrieve
|
||
|
:type limit: int
|
||
|
:result: Result set
|
||
|
:rtype: SQLAlchemy.ResultProxy
|
||
|
"""
|
||
|
s = "SELECT block_number, tx_index FROM tx WHERE sender = '{}' OR recipient = '{}' ORDER BY block_number DESC, tx_index DESC LIMIT {} OFFSET {}".format(address, address, limit, offset)
|
||
|
r = session.execute(s)
|
||
|
return r
|
||
|
|
||
|
|
||
|
def add_transaction(
|
||
|
session, tx_hash,
|
||
|
block_number,
|
||
|
tx_index,
|
||
|
sender,
|
||
|
receiver,
|
||
|
source_token,
|
||
|
destination_token,
|
||
|
from_value,
|
||
|
to_value,
|
||
|
success,
|
||
|
timestamp,
|
||
|
):
|
||
|
date_block = datetime.datetime.fromtimestamp(timestamp)
|
||
|
s = "INSERT INTO tx (tx_hash, block_number, tx_index, sender, recipient, source_token, destination_token, from_value, to_value, success, date_block) VALUES ('{}', {}, {}, '{}', '{}', '{}', '{}', {}, {}, {}, '{}')".format(
|
||
|
tx_hash,
|
||
|
block_number,
|
||
|
tx_index,
|
||
|
sender,
|
||
|
receiver,
|
||
|
source_token,
|
||
|
destination_token,
|
||
|
from_value,
|
||
|
to_value,
|
||
|
success,
|
||
|
date_block,
|
||
|
)
|
||
|
session.execute(s)
|