Skip to content

plugins.aea-ledger-cosmos.aea_ledger_cosmos.cosmos

Cosmos module wrapping the public and private key cryptography and ledger api.

lazy_load

def lazy_load()

Temporary solution because of protos mismatch.

DataEncrypt Objects

class DataEncrypt()

Class to encrypt/decrypt data strings with password provided.

encrypt

@classmethod
def encrypt(cls, data: bytes, password: str) -> bytes

Encrypt data with password.

bytes_encode

@staticmethod
def bytes_encode(data: bytes) -> str

Encode bytes to ascii friendly string.

bytes_decode

@staticmethod
def bytes_decode(data: str) -> bytes

Decode ascii friendly string to bytes.

decrypt

@classmethod
def decrypt(cls, encrypted_data: bytes, password: str) -> bytes

Decrypt data with password provided.

CosmosHelper Objects

class CosmosHelper(Helper)

Helper class usable as Mixin for CosmosApi or as standalone class.

is_transaction_settled

@staticmethod
def is_transaction_settled(tx_receipt: JSONLike) -> bool

Check whether a transaction is settled or not.

Arguments:

  • tx_receipt: the receipt of the transaction.

Returns:

True if the transaction has been settled, False o/w.

get_code_id

@classmethod
def get_code_id(cls, tx_receipt: JSONLike) -> Optional[int]

Retrieve the code_id from a transaction receipt.

Arguments:

  • tx_receipt: the receipt of the transaction.

Returns:

the code id, if present

get_event_attributes

@staticmethod
def get_event_attributes(tx_receipt: JSONLike) -> Dict

Retrieve events attributes from tx receipt.

Arguments:

  • tx_receipt: the receipt of the transaction.

Returns:

dict

get_contract_address

@classmethod
def get_contract_address(cls, tx_receipt: JSONLike) -> Optional[str]

Retrieve the contract_address from a transaction receipt.

Arguments:

  • tx_receipt: the receipt of the transaction.

Returns:

the contract address, if present

is_transaction_valid

@staticmethod
def is_transaction_valid(tx: JSONLike, seller: Address, client: Address,
                         tx_nonce: str, amount: int) -> bool

Check whether a transaction is valid or not.

Arguments:

  • tx: the transaction.
  • seller: the address of the seller.
  • client: the address of the client.
  • tx_nonce: the transaction nonce.
  • amount: the amount we expect to get from the transaction.

Returns:

True if the random_message is equals to tx['input']

generate_tx_nonce

@staticmethod
def generate_tx_nonce(seller: Address, client: Address) -> str

Generate a unique hash to distinguish transactions with the same terms.

Arguments:

  • seller: the address of the seller.
  • client: the address of the client.

Returns:

return the hash in hex.

get_address_from_public_key

@classmethod
def get_address_from_public_key(cls, public_key: str) -> str

Get the address from the public key.

Arguments:

  • public_key: the public key

Returns:

str

recover_message

@classmethod
def recover_message(cls,
                    message: bytes,
                    signature: str,
                    is_deprecated_mode: bool = False) -> Tuple[Address, ...]

Recover the addresses from the hash.

Arguments:

  • message: the message we expect
  • signature: the transaction signature
  • is_deprecated_mode: if the deprecated signing was used

Returns:

the recovered addresses

recover_public_keys_from_message

@classmethod
def recover_public_keys_from_message(
        cls,
        message: bytes,
        signature: str,
        is_deprecated_mode: bool = False) -> Tuple[str, ...]

Get the public key used to produce the signature of the message

Arguments:

  • message: raw bytes used to produce signature
  • signature: signature of the message
  • is_deprecated_mode: if the deprecated signing was used

Returns:

the recovered public keys

get_hash

@staticmethod
def get_hash(message: bytes) -> str

Get the hash of a message.

Arguments:

  • message: the message to be hashed.

Returns:

the hash of the message.

is_valid_address

@classmethod
def is_valid_address(cls, address: Address) -> bool

Check if the address is valid.

Arguments:

  • address: the address to validate

Returns:

whether address is valid or not

load_contract_interface

@classmethod
def load_contract_interface(cls, file_path: Path) -> Dict[str, str]

Load contract interface.

Arguments:

  • file_path: the file path to the interface

Returns:

the interface

CosmosCrypto Objects

class CosmosCrypto(Crypto[SigningKey])

Class wrapping the Account Generation from Ethereum ledger.

__init__

def __init__(private_key_path: Optional[str] = None,
             password: Optional[str] = None,
             extra_entropy: Union[str, bytes, int] = "") -> None

Instantiate an ethereum crypto object.

Arguments:

  • private_key_path: the private key path of the agent
  • password: the password to encrypt/decrypt the private key.
  • extra_entropy: add extra randomness to whatever randomness your OS can provide

private_key

@property
def private_key() -> str

Return a private key.

Returns:

a private key string

public_key

@property
def public_key() -> str

Return a public key in hex format.

Returns:

a public key string in hex format

address

@property
def address() -> str

Return the address for the key pair.

Returns:

a display_address str

load_private_key_from_path

@classmethod
def load_private_key_from_path(cls,
                               file_name: str,
                               password: Optional[str] = None) -> SigningKey

Load a private key in hex format from a file.

Arguments:

  • file_name: the path to the hex file.
  • password: the password to encrypt/decrypt the private key.

Returns:

the Entity.

sign_message

def sign_message(message: bytes, is_deprecated_mode: bool = False) -> str

Sign a message in bytes string form.

Arguments:

  • message: the message to be signed
  • is_deprecated_mode: if the deprecated signing is used

Returns:

signature of the message in string form

sign_transaction

def sign_transaction(transaction: JSONLike) -> JSONLike

Sign a transaction in bytes string form.

Arguments:

  • transaction: the transaction to be signed

Returns:

signed transaction

generate_private_key

@classmethod
def generate_private_key(cls,
                         extra_entropy: Union[str, bytes,
                                              int] = "") -> SigningKey

Generate a key pair for cosmos network.

encrypt

def encrypt(password: str) -> str

Encrypt the private key and return in json.

Arguments:

  • password: the password to decrypt.

Returns:

json string containing encrypted private key.

decrypt

@classmethod
def decrypt(cls, keyfile_json: str, password: str) -> str

Decrypt the private key and return in raw form.

Arguments:

  • keyfile_json: json string containing encrypted private key.
  • password: the password to decrypt.

Returns:

the raw private key.

_CosmosApi Objects

class _CosmosApi(LedgerApi)

Class to interact with the Cosmos SDK via a HTTP APIs.

__init__

def __init__(**kwargs: Any) -> None

Initialize the Cosmos ledger APIs.

api

@property
def api() -> Any

Get the underlying API object.

get_balance

def get_balance(address: Address, raise_on_try: bool = False) -> Optional[int]

Get the balance of a given account.

get_state

def get_state(callable_name: str,
              *args: Any,
              raise_on_try: bool = False,
              **kwargs: Any) -> Optional[JSONLike]

Call a specified function on the ledger API.

Based on the cosmos REST API specification, which takes a path (strings separated by '/'). The convention here is to define the root of the path (txs, blocks, etc.) as the callable_name and the rest of the path as args.

Arguments:

  • callable_name: name of the callable
  • args: positional arguments
  • raise_on_try: whether the method will raise or log on error
  • kwargs: keyword arguments

Returns:

the transaction dictionary

get_deploy_transaction

def get_deploy_transaction(contract_interface: Dict[str, str],
                           deployer_address: Address,
                           raise_on_try: bool = False,
                           **kwargs: Any) -> Optional[JSONLike]

Get the transaction to deploy the smart contract.

Dispatches to _get_storage_transaction and _get_init_transaction based on kwargs.

Arguments:

  • contract_interface: the contract interface.
  • deployer_address: The address that will deploy the contract.
  • raise_on_try: whether the method will raise or log on error
  • kwargs: keyword arguments.

Returns:

the transaction dictionary.

get_handle_transaction

def get_handle_transaction(sender_address: Address,
                           contract_address: Address,
                           handle_msg: Any,
                           amount: int,
                           tx_fee: int,
                           denom: Optional[str] = None,
                           gas: int = DEFAULT_GAS_AMOUNT,
                           memo: str = "",
                           chain_id: Optional[str] = None,
                           account_number: Optional[int] = None,
                           sequence: Optional[int] = None,
                           tx_fee_denom: Optional[str] = None,
                           raise_on_try: bool = False) -> Optional[JSONLike]

Create a CosmWasm HandleMsg transaction.

Arguments:

  • sender_address: the sender address of the message initiator.
  • contract_address: the address of the smart contract.
  • handle_msg: HandleMsg in JSON format.
  • amount: Funds amount sent with transaction.
  • tx_fee: the tx fee accepted.
  • denom: the name of the denomination of the contract funds
  • gas: Maximum amount of gas to be used on executing command.
  • memo: any string comment.
  • chain_id: the Chain ID of the CosmWasm transaction. Default is 1 (i.e. mainnet).
  • account_number: Account number
  • sequence: Sequence
  • tx_fee_denom: Denomination of tx_fee, identical with denom param when None
  • raise_on_try: whether the method will raise or log on error

Returns:

the unsigned CosmWasm HandleMsg

execute_contract_query

def execute_contract_query(contract_address: Address,
                           query_msg: JSONLike,
                           raise_on_try: bool = False) -> Optional[JSONLike]

Execute a CosmWasm QueryMsg. QueryMsg doesn't require signing.

Arguments:

  • contract_address: the address of the smart contract.
  • query_msg: QueryMsg in JSON format.
  • raise_on_try: whether the method will raise or log on error

Returns:

the message receipt

get_transfer_transaction

def get_transfer_transaction(sender_address: Address,
                             destination_address: Address,
                             amount: int,
                             tx_fee: int,
                             tx_nonce: str,
                             denom: Optional[str] = None,
                             gas: int = DEFAULT_GAS_AMOUNT,
                             memo: str = "",
                             chain_id: Optional[str] = None,
                             account_number: Optional[int] = None,
                             sequence: Optional[int] = None,
                             tx_fee_denom: Optional[str] = None,
                             raise_on_try: bool = False,
                             **kwargs: Any) -> Optional[JSONLike]

Submit a transfer transaction to the ledger.

Arguments:

  • sender_address: the sender address of the payer.
  • destination_address: the destination address of the payee.
  • amount: the amount of wealth to be transferred.
  • tx_fee: the transaction fee.
  • tx_nonce: verifies the authenticity of the tx
  • denom: the denomination of tx fee and amount
  • gas: the gas used.
  • memo: memo to include in tx.
  • chain_id: the chain ID of the transaction.
  • account_number: Account number
  • sequence: Sequence
  • tx_fee_denom: Denomination of tx_fee, identical with denom param when None
  • raise_on_try: whether the method will raise or log on error
  • kwargs: keyword arguments.

Returns:

the transfer transaction

get_packed_exec_msg

def get_packed_exec_msg(sender_address: Address,
                        contract_address: str,
                        msg: JSONLike,
                        funds: int = 0,
                        denom: Optional[str] = None) -> ProtoAny

Create and pack MsgExecuteContract

Arguments:

  • sender_address: Address of sender
  • contract_address: Address of contract
  • msg: Paramaters to be passed to smart contract
  • funds: Funds to be sent to smart contract
  • denom: the denomination of funds

Returns:

Packed MsgExecuteContract

get_packed_send_msg

def get_packed_send_msg(from_address: Address,
                        to_address: Address,
                        amount: int,
                        denom: Optional[str] = None) -> ProtoAny

Generate and pack MsgSend

Arguments:

  • from_address: Address of sender
  • to_address: Address of recipient
  • amount: amount of coins to be sent
  • denom: the denomination of and amount

Returns:

packer ProtoAny type message

get_multi_transaction

def get_multi_transaction(from_addresses: List[str],
                          pub_keys: Optional[List[bytes]],
                          msgs: List[ProtoAny],
                          gas: int,
                          tx_fee: int = 0,
                          memo: str = "",
                          chain_id: Optional[str] = None,
                          denom: Optional[str] = None,
                          tx_fee_denom: Optional[str] = None,
                          raise_on_try: bool = False) -> JSONLike

Generate transaction with multiple messages

Arguments:

  • from_addresses: Addresses of signers
  • pub_keys: Public keys of signers
  • msgs: Messages to be included in transaction
  • gas: the gas used.
  • tx_fee: the transaction fee.
  • memo: memo to include in tx.
  • chain_id: the chain ID of the transaction.
  • denom: the denomination of tx fee
  • tx_fee_denom: Denomination of tx_fee, identical with denom param when None
  • raise_on_try: whether the method will raise or log on error

Raises:

  • RuntimeError: if number of pubkeys is not equal to number of from_addresses

Returns:

the transaction

send_signed_transaction

def send_signed_transaction(tx_signed: JSONLike,
                            raise_on_try: bool = False) -> Optional[str]

Send a signed transaction and wait for confirmation.

Arguments:

  • tx_signed: the signed transaction
  • raise_on_try: whether the method will raise or log on error

Returns:

tx_digest, if present

get_transaction_receipt

def get_transaction_receipt(tx_digest: str,
                            raise_on_try: bool = False) -> Optional[JSONLike]

Get the transaction receipt for a transaction digest.

Arguments:

  • tx_digest: the digest associated to the transaction.
  • raise_on_try: whether the method will raise or log on error

Returns:

the tx receipt, if present

get_transaction

def get_transaction(tx_digest: str,
                    raise_on_try: bool = False) -> Optional[JSONLike]

Get the transaction for a transaction digest.

Arguments:

  • tx_digest: the digest associated to the transaction.
  • raise_on_try: whether the method will raise or log on error

Returns:

the tx, if present

get_contract_instance

def get_contract_instance(contract_interface: Dict[str, str],
                          contract_address: Optional[str] = None) -> Any

Get the instance of a contract.

Arguments:

  • contract_interface: the contract interface.
  • contract_address: the contract address.

Returns:

the contract instance

update_with_gas_estimate

def update_with_gas_estimate(transaction: JSONLike) -> JSONLike

Attempts to update the transaction with a gas estimate

Arguments:

  • transaction: the transaction

contract_method_call

def contract_method_call(contract_instance: Any, method_name: str,
                         **method_args: Any) -> Optional[JSONLike]

Call a contract's method

Arguments:

  • contract_instance: the contract to use
  • method_name: the contract method to call
  • method_args: the contract call parameters

build_transaction

def build_transaction(contract_instance: Any,
                      method_name: str,
                      method_args: Optional[Dict],
                      tx_args: Optional[Dict],
                      raise_on_try: bool = False) -> Optional[JSONLike]

Prepare a transaction

Arguments:

  • contract_instance: the contract to use
  • method_name: the contract method to call
  • method_args: the contract parameters
  • tx_args: the transaction parameters
  • raise_on_try: whether the method will raise or log on error

get_transaction_transfer_logs

def get_transaction_transfer_logs(
        contract_instance: Any,
        tx_hash: str,
        target_address: Optional[str] = None) -> Optional[JSONLike]

Get all transfer events derived from a transaction.

Arguments:

  • contract_instance: the contract
  • tx_hash: the transaction hash
  • target_address: optional address to filter tranfer events to just those that affect it

send_signed_transactions

def send_signed_transactions(signed_transactions: List[JSONLike],
                             raise_on_try: bool = False,
                             **kwargs: Any) -> Optional[List[str]]

Atomically send multiple of transactions.

This operation is not supported for cosmos.

Arguments:

  • signed_transactions: the raw signed transactions to bundle together and send.
  • raise_on_try: whether the method will raise or log on error.
  • kwargs: the keyword arguments.

filter_event

def filter_event(event: Any, match_single: Dict[str, Any],
                 match_any: Dict[str, Any], to_block: int, from_block: int,
                 batch_size: int, max_retries: int, reduce_factor: float,
                 timeout: int) -> Optional[JSONLike]

Filter an event using batching to avoid RPC timeouts.

Arguments:

  • event: the event to filter for.
  • match_single: the filter parameters with value checking against the event abi. It allows for defining a single match value.
  • match_any: the filter parameters with value checking against the event abi. It allows for defining multiple match values.
  • to_block: the block to which to filter.
  • from_block: the block from which to start filtering.
  • batch_size: the blocks' batch size of the filtering.
  • max_retries: the maximum number of retries.
  • reduce_factor: the percentage by which the batch size is reduced in case of a timeout.
  • timeout: a timeout in seconds to interrupt the operation in case the RPC request hangs.

CosmosApi Objects

class CosmosApi(_CosmosApi, CosmosHelper)

Class to interact with the Cosmos SDK via a HTTP APIs.

CosmosFaucetApi Objects

class CosmosFaucetApi(FaucetApi)

Cosmos testnet faucet API.

FAUCET_STATUS_PENDING

noqa: F841

FAUCET_STATUS_PROCESSING

noqa: F841

FAUCET_STATUS_COMPLETED

noqa: F841

FAUCET_STATUS_FAILED

noqa: F841

__init__

def __init__(poll_interval: Optional[float] = None,
             final_wait_interval: Optional[float] = None)

Initialize CosmosFaucetApi.

get_wealth

def get_wealth(address: Address, url: Optional[str] = None) -> None

Get wealth from the faucet for the provided address.

Arguments:

  • address: the address.
  • url: the url

Raises:

  • RuntimeError: of explicit faucet failures