safe_eth.eth.account_abstraction package

Submodules

safe_eth.eth.account_abstraction.bundler_client module

class safe_eth.eth.account_abstraction.bundler_client.BundlerClient(url: str, retry_count: int = 0)

Bases: object

Account Abstraction client for EIP4337 bundlers

get_chain_id()
get_user_operation_and_receipt(user_operation_hash: HexStr) Tuple[UserOperation | UserOperationV07, UserOperationReceipt] | None

Get UserOperation and UserOperationReceipt in the same request using a batch query. NOTE: Batch requests are not supported by Pimlico

Parameters:

user_operation_hash

Returns:

Tuple with UserOperation and UserOperationReceipt, or None if not found

Raises:
get_user_operation_by_hash(user_operation_hash: HexStr) UserOperation | UserOperationV07 | None

https://docs.alchemy.com/reference/eth-getuseroperationbyhash

Parameters:

user_operation_hash

Returns:

UserOperation or None if not found

Raises:
get_user_operation_receipt(user_operation_hash: HexStr) UserOperationReceipt | None

https://docs.alchemy.com/reference/eth-getuseroperationreceipt

Parameters:

user_operation_hash

Returns:

UserOperationReceipt or None if not found

Raises:
supported_entry_points() List[ChecksumAddress]

https://docs.alchemy.com/reference/eth-supportedentrypoints

Returns:

List of supported entrypoints

Raises:

safe_eth.eth.account_abstraction.constants module

safe_eth.eth.account_abstraction.exceptions module

exception safe_eth.eth.account_abstraction.exceptions.BundlerClientConnectionException

Bases: BundlerClientException, OSError

exception safe_eth.eth.account_abstraction.exceptions.BundlerClientException

Bases: ValueError

exception safe_eth.eth.account_abstraction.exceptions.BundlerClientResponseException

Bases: BundlerClientException

safe_eth.eth.account_abstraction.user_operation module

class safe_eth.eth.account_abstraction.user_operation.UserOperation(user_operation_hash: bytes, sender: ChecksumAddress, nonce: int, init_code: bytes, call_data: bytes, call_gas_limit: int, verification_gas_limit: int, pre_verification_gas: int, max_fee_per_gas: int, max_priority_fee_per_gas: int, paymaster_and_data: bytes, signature: bytes, entry_point: ChecksumAddress, metadata: UserOperationMetadata | None = None)

Bases: object

EIP4337 UserOperation for Entrypoint v0.6

https://github.com/eth-infinitism/account-abstraction/blob/v0.6.0/contracts/interfaces/UserOperation.sol

calculate_user_operation_hash(chain_id: int) bytes
call_data: bytes
call_gas_limit: int
entry_point: ChecksumAddress
classmethod from_bundler_response(user_operation_hash: HexStr | bytes, user_operation_response: Dict[str, Any]) UserOperation | UserOperationV07
init_code: bytes
max_fee_per_gas: int
max_priority_fee_per_gas: int
metadata: UserOperationMetadata | None = None
nonce: int
property paymaster: ChecksumAddress | None
paymaster_and_data: bytes
property paymaster_data: bytes | None
pre_verification_gas: int
sender: ChecksumAddress
signature: bytes
user_operation_hash: bytes
verification_gas_limit: int
class safe_eth.eth.account_abstraction.user_operation.UserOperationMetadata(transaction_hash: bytes, block_hash: bytes, block_number: int)

Bases: object

block_hash: bytes
block_number: int
transaction_hash: bytes
class safe_eth.eth.account_abstraction.user_operation.UserOperationV07(user_operation_hash: bytes, sender: ChecksumAddress, nonce: int, call_data: bytes, call_gas_limit: int, verification_gas_limit: int, pre_verification_gas: int, max_priority_fee_per_gas: int, max_fee_per_gas: int, signature: bytes, entry_point: ChecksumAddress, factory: ChecksumAddress | None = None, factory_data: bytes | None = None, paymaster_verification_gas_limit: int | None = None, paymaster_post_op_gas_limit: int | None = None, paymaster: bytes | None = None, paymaster_data: bytes | None = None, metadata: UserOperationMetadata | None = None)

Bases: object

EIP4337 UserOperation for Entrypoint v0.7

https://github.com/eth-infinitism/account-abstraction/blob/v0.7.0/contracts/interfaces/PackedUserOperation.sol

property account_gas_limits: bytes

:return:Account Gas Limits is a bytes32 in Solidity, first bytes16 verification_gas_limit and then call_gas_limit

calculate_user_operation_hash(chain_id: int) bytes
call_data: bytes
call_gas_limit: int
entry_point: ChecksumAddress
factory: ChecksumAddress | None = None
factory_data: bytes | None = None
property gas_fees: bytes
Returns:

Gas Fees is a bytes32 in Solidity, first bytes16 verification_gas_limit and then call_gas_limit

property init_code: bytes
Returns:

0.7 init_code bytes: factory address + factory_data.

max_fee_per_gas: int
max_priority_fee_per_gas: int
metadata: UserOperationMetadata | None = None
nonce: int
paymaster: bytes | None = None
property paymaster_and_data: bytes
paymaster_data: bytes | None = None
paymaster_post_op_gas_limit: int | None = None
paymaster_verification_gas_limit: int | None = None
pre_verification_gas: int
sender: ChecksumAddress
signature: bytes
user_operation_hash: bytes
verification_gas_limit: int

safe_eth.eth.account_abstraction.user_operation_receipt module

class safe_eth.eth.account_abstraction.user_operation_receipt.UserOperationReceipt(user_operation_hash: bytes, entry_point: eth_typing.evm.ChecksumAddress, sender: eth_typing.evm.ChecksumAddress, nonce: int, paymaster: eth_typing.evm.ChecksumAddress | None, actual_gas_cost: int, actual_gas_used: int, success: bool, reason: str | None, logs: List[web3.types.LogReceipt])

Bases: object

actual_gas_cost: int
actual_gas_used: int
entry_point: ChecksumAddress
classmethod from_bundler_response(user_operation_receipt_response: Dict[str, Any]) UserOperationReceipt
get_deployed_account() ChecksumAddress | None
Returns:

Deployed account in case a new account was deployed

get_deposit() int
Returns:

Deposited value on the entrypoint for running the UserOperationReceipt

get_module_address() ChecksumAddress | None

Use Safe’s ExecutionFromModuleSuccess event to get the 4337 module address

Returns:

If using a Safe, the 4337 module address used, None otherwise

logs: List[LogReceipt]
nonce: int
paymaster: ChecksumAddress | None
reason: str | None
sender: ChecksumAddress
success: bool
user_operation_hash: bytes

Module contents

Account abstraction utils