mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
431 lines
9.9 KiB
Python
431 lines
9.9 KiB
Python
# Copyright © 2024 Atlantic Algorithms Ltd.,
|
|
# CoreChainDB and Atlantic Algorithms Ltd. 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
|
|
|
|
"""Query interfaces for backends."""
|
|
|
|
from functools import singledispatch
|
|
|
|
from corechaindb.backend.exceptions import OperationError
|
|
|
|
|
|
@singledispatch
|
|
def store_asset(connection, asset):
|
|
"""Write an asset to the asset table.
|
|
|
|
Args:
|
|
asset (dict): the asset.
|
|
|
|
Returns:
|
|
The result of the operation.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_assets(connection, assets):
|
|
"""Write a list of assets to the assets table.
|
|
|
|
Args:
|
|
assets (list): a list of assets to write.
|
|
|
|
Returns:
|
|
The database response.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_metadatas(connection, metadata):
|
|
"""Write a list of metadata to metadata table.
|
|
|
|
Args:
|
|
metadata (list): list of metadata.
|
|
|
|
Returns:
|
|
The result of the operation.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_transactions(connection, signed_transactions):
|
|
"""Store the list of transactions."""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_transaction(connection, transaction_id):
|
|
"""Get a transaction from the transactions table.
|
|
|
|
Args:
|
|
transaction_id (str): the id of the transaction.
|
|
|
|
Returns:
|
|
The result of the operation.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_transactions(connection, transaction_ids):
|
|
"""Get transactions from the transactions table.
|
|
|
|
Args:
|
|
transaction_ids (list): list of transaction ids to fetch
|
|
|
|
Returns:
|
|
The result of the operation.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_asset(connection, asset_id):
|
|
"""Get a transaction from the transactions table.
|
|
|
|
Args:
|
|
asset_id (str): the id of the asset
|
|
|
|
Returns:
|
|
The result of the operation.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_spent(connection, transaction_id, condition_id):
|
|
"""Check if a `txid` was already used as an input.
|
|
|
|
A transaction can be used as an input for another transaction. Bigchain
|
|
needs to make sure that a given `txid` is only used once.
|
|
|
|
Args:
|
|
transaction_id (str): The id of the transaction.
|
|
condition_id (int): The index of the condition in the respective
|
|
transaction.
|
|
|
|
Returns:
|
|
The transaction that used the `txid` as an input else `None`
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_spending_transactions(connection, inputs):
|
|
"""Return transactions which spend given inputs
|
|
|
|
Args:
|
|
inputs (list): list of {txid, output}
|
|
|
|
Returns:
|
|
Iterator of (block_ids, transaction) for transactions that
|
|
spend given inputs.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_owned_ids(connection, owner):
|
|
"""Retrieve a list of `txids` that can we used has inputs.
|
|
|
|
Args:
|
|
owner (str): base58 encoded public key.
|
|
|
|
Returns:
|
|
Iterator of (block_id, transaction) for transactions
|
|
that list given owner in conditions.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_block(connection, block_id):
|
|
"""Get a block from the bigchain table.
|
|
|
|
Args:
|
|
block_id (str): block id of the block to get
|
|
|
|
Returns:
|
|
block (dict): the block or `None`
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_block_with_transaction(connection, txid):
|
|
"""Get a block containing transaction id `txid`
|
|
|
|
Args:
|
|
txid (str): id of transaction to be searched.
|
|
|
|
Returns:
|
|
block_id (int): the block id or `None`
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_metadata(connection, transaction_ids):
|
|
"""Get a list of metadata from the metadata table.
|
|
|
|
Args:
|
|
transaction_ids (list): a list of ids for the metadata to be retrieved from
|
|
the database.
|
|
|
|
Returns:
|
|
metadata (list): the list of returned metadata.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_assets(connection, asset_ids):
|
|
"""Get a list of assets from the assets table.
|
|
Args:
|
|
asset_ids (list): a list of ids for the assets to be retrieved from
|
|
the database.
|
|
Returns:
|
|
assets (list): the list of returned assets.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_txids_filtered(connection, asset_id, operation=None):
|
|
"""Return all transactions for a particular asset id and optional operation.
|
|
|
|
Args:
|
|
asset_id (str): ID of transaction that defined the asset
|
|
operation (str) (optional): Operation to filter on
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def text_search(conn, search, *, language='english', case_sensitive=False,
|
|
diacritic_sensitive=False, text_score=False, limit=0, table=None):
|
|
"""Return all the assets that match the text search.
|
|
|
|
The results are sorted by text score.
|
|
For more information about the behavior of text search on MongoDB see
|
|
https://docs.mongodb.com/manual/reference/operator/query/text/#behavior
|
|
|
|
Args:
|
|
search (str): Text search string to query the text index
|
|
language (str, optional): The language for the search and the rules for
|
|
stemmer and tokenizer. If the language is ``None`` text search uses
|
|
simple tokenization and no stemming.
|
|
case_sensitive (bool, optional): Enable or disable case sensitive
|
|
search.
|
|
diacritic_sensitive (bool, optional): Enable or disable case sensitive
|
|
diacritic search.
|
|
text_score (bool, optional): If ``True`` returns the text score with
|
|
each document.
|
|
limit (int, optional): Limit the number of returned documents.
|
|
|
|
Returns:
|
|
:obj:`list` of :obj:`dict`: a list of assets
|
|
|
|
Raises:
|
|
OperationError: If the backend does not support text search
|
|
"""
|
|
|
|
raise OperationError('This query is only supported when running '
|
|
'BigchainDB with MongoDB as the backend.')
|
|
|
|
|
|
@singledispatch
|
|
def get_latest_block(conn):
|
|
"""Get the latest commited block i.e. block with largest height"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_block(conn, block):
|
|
"""Write a new block to the `blocks` table
|
|
|
|
Args:
|
|
block (dict): block with current height and block hash.
|
|
|
|
Returns:
|
|
The result of the operation.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_unspent_outputs(connection, unspent_outputs):
|
|
"""Store unspent outputs in ``utxo_set`` table."""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def delete_unspent_outputs(connection, unspent_outputs):
|
|
"""Delete unspent outputs in ``utxo_set`` table."""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def delete_transactions(conn, txn_ids):
|
|
"""Delete transactions from database
|
|
|
|
Args:
|
|
txn_ids (list): list of transaction ids
|
|
|
|
Returns:
|
|
The result of the operation.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_unspent_outputs(connection, *, query=None):
|
|
"""Retrieves unspent outputs.
|
|
|
|
Args:
|
|
query (dict): An optional parameter to filter the result set.
|
|
Defaults to ``None``, which means that all UTXO records
|
|
will be returned.
|
|
|
|
Returns:
|
|
Generator yielding unspent outputs (UTXO set) according to the
|
|
given query.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_pre_commit_state(connection, state):
|
|
"""Store pre-commit state.
|
|
|
|
Args:
|
|
state (dict): pre-commit state.
|
|
|
|
Returns:
|
|
The result of the operation.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_pre_commit_state(connection):
|
|
"""Get pre-commit state.
|
|
|
|
Returns:
|
|
Document representing the pre-commit state.
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_validator_set(conn, validator_update):
|
|
"""Store updated validator set"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def delete_validator_set(conn, height):
|
|
"""Delete the validator set at the given height."""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_election(conn, election_id, height, is_concluded):
|
|
"""Store election record"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_elections(conn, elections):
|
|
"""Store election records in bulk"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def delete_elections(conn, height):
|
|
"""Delete all election records at the given height"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_validator_set(conn, height):
|
|
"""Get validator set for a given `height`, if `height` is not specified
|
|
then return the latest validator set
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_election(conn, election_id):
|
|
"""Return the election record
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_asset_tokens_for_public_key(connection, asset_id, public_key):
|
|
"""Retrieve a list of tokens of type `asset_id` that are owned by the `public_key`.
|
|
Args:
|
|
asset_id (str): Id of the token.
|
|
public_key (str): base58 encoded public key
|
|
Returns:
|
|
Iterator of transaction that list given owner in conditions.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def store_abci_chain(conn, height, chain_id, is_synced=True):
|
|
"""Create or update an ABCI chain at the given height.
|
|
Usually invoked in the beginning of the ABCI communications (height=0)
|
|
or when ABCI client (like Tendermint) is migrated (any height).
|
|
|
|
Args:
|
|
is_synced: True if the chain is known by both ABCI client and server
|
|
"""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def delete_abci_chain(conn, height):
|
|
"""Delete the ABCI chain at the given height."""
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
@singledispatch
|
|
def get_latest_abci_chain(conn):
|
|
"""Returns the ABCI chain stored at the biggest height, if any,
|
|
None otherwise.
|
|
"""
|
|
raise NotImplementedError
|