aea.crypto.base
Abstract module wrapping the public and private key cryptography and ledger api.
Crypto Objects
class Crypto(Generic[EntityClass], ABC)
Base class for a crypto object.
__
init__
| __init__(private_key_path: Optional[str] = None, **kwargs)
Initialize the crypto object.
The actual behaivour of this constructor is determined by the abstract methods 'generate_private_key()' and 'load_private_key_from_path(). Either way, the entity object will be accessible as a property.
Arguments:
private_key_path
: the path to the private key. If None, the key will be generated by 'generate_private_key()'. If not None, the path will be processed by 'load_private_key_from_path()'.kwargs
: keyword arguments.
generate_
private_
key
| @classmethod
| @abstractmethod
| generate_private_key(cls) -> EntityClass
Generate a private key.
Returns:
the entity object. Implementation dependent.
load_
private_
key_
from_
path
| @classmethod
| @abstractmethod
| load_private_key_from_path(cls, file_name: str) -> EntityClass
Load a private key in hex format from a file.
Arguments:
file_name
: the path to the hex file.
Returns:
the entity object.
entity
| @property
| entity() -> EntityClass
Return an entity object.
Returns:
an entity object
private_
key
| @property
| @abstractmethod
| private_key() -> str
Return a private key.
Returns:
a private key string
public_
key
| @property
| @abstractmethod
| public_key() -> str
Return a public key.
Returns:
a public key string
address
| @property
| @abstractmethod
| address() -> str
Return the address.
Returns:
an address string
sign_
message
| @abstractmethod
| 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
| @abstractmethod
| sign_transaction(transaction: JSONLike) -> JSONLike
Sign a transaction in dict form.
Arguments:
transaction
: the transaction to be signed
Returns:
signed transaction
dump
| @abstractmethod
| dump(fp: BinaryIO) -> None
Serialize crypto object as binary stream to fp
(a .write()
-supporting file-like object).
Arguments:
fp
: the output file pointer. Must be set in binary mode (mode='wb')
Returns:
None
Helper Objects
class Helper(ABC)
Interface for helper class usable as Mixin for LedgerApi or as standalone class.
is_
transaction_
settled
| @staticmethod
| @abstractmethod
| is_transaction_settled(tx_receipt: JSONLike) -> bool
Check whether a transaction is settled or not.
Arguments:
tx_digest
: the digest associated to the transaction.
Returns:
True if the transaction has been settled, False o/w.
is_
transaction_
valid
| @staticmethod
| @abstractmethod
| 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
| @abstractmethod
| generate_tx_nonce(seller: Address, client: Address) -> str
Generate a unique hash to distinguish txs 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
| @abstractmethod
| 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
| @abstractmethod
| 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
| @abstractmethod
| 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
| @abstractmethod
| 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
| @abstractmethod
| is_valid_address(cls, address: Address) -> bool
Check if the address is valid.
Arguments:
address
: the address to validate
load_
contract_
interface
| @classmethod
| @abstractmethod
| 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
LedgerApi Objects
class LedgerApi(Helper, ABC)
Interface for ledger APIs.
api
| @property
| @abstractmethod
| api() -> Any
Get the underlying API object.
This can be used for low-level operations with the concrete ledger APIs. If there is no such object, return None.
get_
balance
| @abstractmethod
| get_balance(address: Address) -> Optional[int]
Get the balance of a given account.
This usually takes the form of a web request to be waited synchronously.
Arguments:
address
: the address.
Returns:
the balance.
get_
state
| @abstractmethod
| get_state(callable_name: str, *args, **kwargs) -> Optional[JSONLike]
Call a specified function on the underlying ledger API.
This usually takes the form of a web request to be waited synchronously.
Arguments:
callable_name
: the name of the API function to be called.args
: the positional arguments for the API function.kwargs
: the keyword arguments for the API function.
Returns:
the ledger API response.
get_
transfer_
transaction
| @abstractmethod
| get_transfer_transaction(sender_address: Address, destination_address: Address, amount: int, tx_fee: int, tx_nonce: str, **kwargs, ,) -> 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
Returns:
the transfer transaction
send_
signed_
transaction
| @abstractmethod
| send_signed_transaction(tx_signed: JSONLike) -> Optional[str]
Send a signed transaction and wait for confirmation.
Use keyword arguments for the specifying the signed transaction payload.
Arguments:
tx_signed
: the signed transaction
get_
transaction_
receipt
| @abstractmethod
| get_transaction_receipt(tx_digest: str) -> Optional[JSONLike]
Get the transaction receipt for a transaction digest.
Arguments:
tx_digest
: the digest associated to the transaction.
Returns:
the tx receipt, if present
get_
transaction
| @abstractmethod
| get_transaction(tx_digest: str) -> Optional[JSONLike]
Get the transaction for a transaction digest.
Arguments:
tx_digest
: the digest associated to the transaction.
Returns:
the tx, if present
get_
contract_
instance
| @abstractmethod
| 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
get_
deploy_
transaction
| @abstractmethod
| get_deploy_transaction(contract_interface: Dict[str, str], deployer_address: Address, **kwargs, ,) -> Optional[JSONLike]
Get the transaction to deploy the smart contract.
Arguments:
contract_interface
: the contract interface.deployer_address
: The address that will deploy the contract. :returns tx: the transaction dictionary.
update_
with_
gas_
estimate
| @abstractmethod
| update_with_gas_estimate(transaction: JSONLike) -> JSONLike
Attempts to update the transaction with a gas estimate
Arguments:
transaction
: the transaction
Returns:
the updated transaction
FaucetApi Objects
class FaucetApi(ABC)
Interface for testnet faucet APIs.
get_
wealth
| @abstractmethod
| 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
Returns:
None