Ethereum module wrapping the public and private key cryptography and ledger api.
def get_gas_price_strategy(
gas_price_strategy: Optional[str] = None,
api_key: Optional[str] = None) -> Callable[[Web3, TxParams], Wei]
Get the gas price strategy.
class SignedTransactionTranslator()
Translator for SignedTransaction.
@staticmethod
def to_dict(
signed_transaction: SignedTransaction) -> Dict[str, Union[str, int]]
Write SignedTransaction to dict.
@staticmethod
def from_dict(signed_transaction_dict: JSONLike) -> SignedTransaction
Get SignedTransaction from dict.
class AttributeDictTranslator()
Translator for AttributeDict.
@classmethod
def to_dict(cls, attr_dict: Union[AttributeDict, TxReceipt,
TxData]) -> JSONLike
Simplify to dict.
@classmethod
def from_dict(cls, di: JSONLike) -> AttributeDict
Get back attribute dict.
class EthereumCrypto(Crypto[Account])
Class wrapping the Account Generation from Ethereum ledger.
def __init__(private_key_path: Optional[str] = None,
password: Optional[str] = None) -> 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.
@property
def private_key() -> str
Return a private key.
Returns:
a private key string
@property
def public_key() -> str
Return a public key in hex format.
Returns:
a public key string in hex format
@property
def address() -> str
Return the address for the key pair.
Returns:
a display_address str
@classmethod
def load_private_key_from_path(cls,
file_name: str,
password: Optional[str] = None) -> Account
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.
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
def sign_transaction(transaction: JSONLike) -> JSONLike
Sign a transaction in bytes string form.
Arguments:
transaction
: the transaction to be signed
Returns:
signed transaction
@classmethod
def generate_private_key(cls) -> Account
Generate a key pair for ethereum network.
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.
@classmethod
def decrypt(cls, keyfile_json: str, password: str) -> str
Decrypt the private key and return in raw form.
Arguments:
keyfile_json
: json str containing encrypted private key.password
: the password to decrypt.
Returns:
the raw private key.
class EthereumHelper(Helper)
Helper class usable as Mixin for EthereumApi or as standalone class.
@staticmethod
def is_transaction_settled(tx_receipt: JSONLike) -> bool
Check whether a transaction is settled or not.
Arguments:
tx_receipt
: the receipt associated to the transaction.
Returns:
True if the transaction has been settled, False o/w.
@staticmethod
def get_contract_address(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
@staticmethod
def is_transaction_valid(tx: dict, 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']
@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.
@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
@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
@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
@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.
@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
class EthereumApi(LedgerApi, EthereumHelper)
Class to interact with the Ethereum Web3 APIs.
def __init__(**kwargs: Any)
Initialize the Ethereum ledger APIs.
Arguments:
kwargs
: keyword arguments
@property
def api() -> Web3
Get the underlying API object.
def get_balance(address: Address) -> Optional[int]
Get the balance of a given account.
def get_state(callable_name: str, *args: Any,
**kwargs: Any) -> Optional[JSONLike]
Call a specified function on the ledger API.
def get_transfer_transaction(sender_address: Address,
destination_address: Address,
amount: int,
tx_fee: int,
tx_nonce: str,
chain_id: Optional[int] = None,
gas_price: Optional[str] = None,
gas_price_strategy: Optional[str] = None,
**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 (in Wei).tx_fee
: the transaction fee (gas) to be used (in Wei).tx_nonce
: verifies the authenticity of the tx.chain_id
: the Chain ID of the Ethereum transaction.gas_price
: the gas price (in Wei)gas_price_strategy
: the gas price strategy to be used.kwargs
: keyword arguments
Returns:
the transfer transaction
def update_with_gas_estimate(transaction: JSONLike) -> JSONLike
Attempts to update the transaction with a gas estimate
Arguments:
transaction
: the transaction
Returns:
the updated transaction
def send_signed_transaction(tx_signed: JSONLike) -> Optional[str]
Send a signed transaction and wait for confirmation.
Arguments:
tx_signed
: the signed transaction
Returns:
tx_digest, if present
def 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
def 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
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
def get_deploy_transaction(contract_interface: Dict[str, str],
deployer_address: Address,
value: int = 0,
gas: int = 0,
gas_price: Optional[str] = None,
gas_price_strategy: Optional[str] = None,
**kwargs: Any) -> 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.value
: value to send to contract (in Wei)gas
: the gas to be used (in Wei)gas_price
: the gas price (in Wei)gas_price_strategy
: the gas price strategy to be used.kwargs
: keyword arguments
Returns:
the transaction dictionary.
@classmethod
def is_valid_address(cls, address: Address) -> bool
Check if the address is valid.
Arguments:
address
: the address to validate
Returns:
whether the address is valid
class EthereumFaucetApi(FaucetApi)
Ethereum testnet faucet API.
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
class LruLockWrapper()
Wrapper for LRU with threading.Lock.
def __init__(lru: LRU) -> None
Init wrapper.
def __getitem__(*args: Any, **kwargs: Any) -> Any
Get item
def __setitem__(*args: Any, **kwargs: Any) -> Any
Set item.
def __contains__(*args: Any, **kwargs: Any) -> Any
Contain item.
def __delitem__(*args: Any, **kwargs: Any) -> Any
Del item.
def set_wrapper_for_web3py_session_cache() -> None
Wrap web3py session cache with threading.Lock.