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 expectsignature
: the transaction signatureis_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 signaturesignature
: signature of the messageis_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 agentpassword
: 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 signedis_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 callableargs
: positional argumentsraise_on_try
: whether the method will raise or log on errorkwargs
: 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 errorkwargs
: 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 fundsgas
: 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 numbersequence
: Sequencetx_fee_denom
: Denomination of tx_fee, identical with denom param when Noneraise_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 txdenom
: the denomination of tx fee and amountgas
: the gas used.memo
: memo to include in tx.chain_id
: the chain ID of the transaction.account_number
: Account numbersequence
: Sequencetx_fee_denom
: Denomination of tx_fee, identical with denom param when Noneraise_on_try
: whether the method will raise or log on errorkwargs
: 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 sendercontract_address
: Address of contractmsg
: Paramaters to be passed to smart contractfunds
: Funds to be sent to smart contractdenom
: 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 senderto_address
: Address of recipientamount
: amount of coins to be sentdenom
: 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 signerspub_keys
: Public keys of signersmsgs
: Messages to be included in transactiongas
: 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 feetx_fee_denom
: Denomination of tx_fee, identical with denom param when Noneraise_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 transactionraise_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 usemethod_name
: the contract method to callmethod_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 usemethod_name
: the contract method to callmethod_args
: the contract parameterstx_args
: the transaction parametersraise_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 contracttx_hash
: the transaction hashtarget_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