cfx_address.address module
- class cfx_address.address.Base32AddressMeta
Bases:
type
This is the metaclass of Base32Address to add a setter to class variable
Base32Address.default_network_id
- property default_network_id: int | None
Refer to
Base32Address.default_network_id
for the document
- class cfx_address.address.Base32Address(address: ~cfx_address.address.Base32Address | ~eth_typing.evm.HexAddress | str, network_id: int | None = <object object>, verbose: bool | None = None, *, _from_trust: bool = False, _ignore_invalid_type: bool = False)
Bases:
str
This class can be used to create Base32Address instances and provides useful class methods to deal with base32 format addresses.
Base32Address
inherits from str, so the Base32Address can be trivially used as strings- Examples:
>>> address = Base32Address("0x1ecde7223747601823f7535d7968ba98b4881e09", network_id=1) >>> address 'cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4' >>> [ ... address.address_type, ... address.network_id, ... address.hex_address, ... address.verbose_address, ... address.abbr, ... address.mapped_evm_space_address, ... ] ['user', 1, '0x1ECdE7223747601823f7535d7968Ba98b4881E09', 'CFXTEST:TYPE.USER:AATP533CG7D0AGBD87KZ48NJ1MPNKCA8BE1RZ695J4', 'cfxtest:aat...95j4', '0x349f086998cF4a0C5a00b853a0E93239D81A97f6']
- Parameters:
address (Union[Base32Address,HexAddress,str]) – a base32-or-hex format address
network_id (Optional[int]) – target network_id of the address, defaults to
default_network_id
. Can be None if first argument is a base32 address, which means don’t change network idverbose (Optional[bool]) – whether the return value will be encoded in verbose mode, defaults to None (will be viewed as None)
_from_trust (bool) – whether the value is a verified Base32Address, if true, network_id and verbose option should be None, and the verification and encoding process will be skipped. Not recommended to set unless preformance is critical. Defaults to False
_ignore_invalid_type (bool) – whether the address type is validated, defaults to False
- Raises:
InvalidAddress – address is neither base32 address nor hex address
InvalidNetworkId – network_id argument is not a positive integer or is None when address argument is a hex address
- Return Base32Address:
an encoded base32 object, which can be trivially used as python str, specially, if from_trusted_source is true, the input value will be directly used as the encoded value
- Examples:
>>> address = Base32Address("0x1ecde7223747601823f7535d7968ba98b4881e09", network_id=1) >>> address 'cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4' >>> address_ = Base32Address(address, network_id=1029, verbose=True) >>> address_ 'CFX:TYPE.USER:AATP533CG7D0AGBD87KZ48NJ1MPNKCA8BE7GGP3VPU' >>> isinstance(address_, str) True
- default_network_id: ClassVar[int | None] = None
- Default network id of Base32Address.
Base32Address()
,encode()
, andzero_address()
will use this variable if network_id parameter is not specified.For most cases, it is recommended not to directly set this variable but useget_base32_address_factory()
to setBase32Address.default_network_id
The setter is implemented in the metaclasscfx_address.address.Base32AddressMeta
- Parameters:
new_default (Union[None,int]) – new default network id, could be None or positive int
- Raises:
InvalidNetworkId – the new_default value is not a positive integer
- Examples:
>>> Base32Address.zero_address() Traceback (most recent call last): ... cfx_utils.exceptions.InvalidNetworkId: Expected network_id to be a positive integer. Receives None of type <class 'NoneType'> >>> from cfx_address.address import get_base32_address_factory >>> base32_address_factory = get_base32_address_factory(default_network_id=1) >>> base32_address_factory.zero_address() 'cfxtest:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6f0vrcsw' >>> base32_address_factory.default_network_id = 1029 >>> base32_address_factory.zero_address() 'cfx:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0sfbnjm2' >>> base32_address_factory.default_network_id = 2.5 Traceback (most recent call last): ... cfx_utils.exceptions.InvalidNetworkId: Expected network_id to be a positive integer. Receives 2.5 of type <class 'float'>
- __eq__(_address: object) bool
invoked when a base32 address is compared to another object (or Base32Address typed object),
- Parameters:
_address (str) – value compared to, which is supposed to be encoded in Base32 format (else return false)
- Return bool:
True if self and _address are of same hex_address and network_id
- Examples:
>>> address = Base32Address("cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4") >>> assert address == "CFXTEST:TYPE.USER:AATP533CG7D0AGBD87KZ48NJ1MPNKCA8BE1RZ695J4" >>> assert "CFXTEST:TYPE.USER:AATP533CG7D0AGBD87KZ48NJ1MPNKCA8BE1RZ695J4" == address >>> assert "cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4" == address
- classmethod from_public_key(public_key: str | bytes, network_id: int = <object object>, verbose: bool = False) Base32Address
create a Base32Address from public key
- Parameters:
public_key (Union[str,bytes]) – str or bytes representation of public key
network_id (int) – network id of the return Base32Address, defaults to class variable
default_network_id
verbose (bool) – whether the address will be represented in verbose mode, defaults to False
- Return Base32Address:
Base32 representation of the address
>>> Base32Address.from_public_key("0xdacdaeba8e391e7649d3ac4b5329ca0e202d38facd928d88b5f729b89a497e43cc4ad3816fcfdb241497b3b43862afb4c899bc284bf60feca4ee66ff868d1feb", 1) 'cfxtest:aamw4kj6g41pgedw1efjnsm59fbz0b9r1awbp8k2p2'
- property network_id: int
- Return int:
network_id of the address
- Examples:
>>> address = Base32Address("cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4") >>> address.network_id 1
- property hex_address: ChecksumAddress
- Return ChecksumAddress:
hex address of the address, will be encoded in ethereum checksum format
>>> address = Base32Address("cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4") >>> address.hex_address '0x1ECdE7223747601823f7535d7968Ba98b4881E09'
- property address_type: Literal['null', 'builtin', 'user', 'contract', 'invalid']
- Return Literal[“null”, “builtin”, “user”, “contract”, “invalid”]:
address type of an address.
- Examples:
>>> address = Base32Address("cfx:aatp533cg7d0agbd87kz48nj1mpnkca8be7ggp3vpu") >>> address.address_type 'user'
- property eth_checksum_address: ChecksumAddress
- Return ChecksumAddress:
alias for
hex_address
. This API will be deprecated in a future version
>>> address = Base32Address("cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4") >>> address.eth_checksum_address '0x1ECdE7223747601823f7535d7968Ba98b4881E09'
- property verbose_address: Base32Address
- Return Base32Address:
self presented in verbose mode
>>> address = Base32Address("cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4") >>> address.verbose_address 'CFXTEST:TYPE.USER:AATP533CG7D0AGBD87KZ48NJ1MPNKCA8BE1RZ695J4'
- property abbr: str
- Return str:
abbreviation of the address, as mentioned in https://forum.conflux.fun/t/voting-results-for-new-address-abbreviation-standard/7131
- Examples:
>>> Base32Address("cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4").abbr 'cfxtest:aat...95j4' >>> Base32Address("cfx:aatp533cg7d0agbd87kz48nj1mpnkca8be7ggp3vpu").abbr 'cfx:aat...7ggp3vpu'
- property compressed_abbr: str
- Return str:
compressed abbreviation of the address, as mentioned in https://forum.conflux.fun/t/voting-results-for-new-address-abbreviation-standard/7131
- Examples:
>>> address = Base32Address("cfx:aatp533cg7d0agbd87kz48nj1mpnkca8be7ggp3vpu") >>> address.abbr 'cfx:aat...7ggp3vpu' >>> address.compressed_abbr 'cfx:aat...3vpu'
- property mapped_evm_space_address: ChecksumAddress
- Return ChecksumAddress:
the address of mapped account for EVM space as defined in https://github.com/Conflux-Chain/CIPs/blob/master/CIPs/cip-90.md#mapped-account
>>> address = Base32Address("cfx:aatp533cg7d0agbd87kz48nj1mpnkca8be7ggp3vpu") >>> address.mapped_evm_space_address '0x349f086998cF4a0C5a00b853a0E93239D81A97f6'
- classmethod encode_base32(hex_address: str, network_id: int = <object object>, verbose: bool = False, *, _ignore_invalid_type: bool = False) Base32Address
Encode hex address to base32 address
- Parameters:
hex_address (str) – hex address begins with 0x
network_id (int) – address network id, e.g., 1 for testnet and 1029 for mainnet, defaults to class variable
default_network_id
verbose (bool) – whether the address will be presented in verbose mode, defaults to False
_ignore_invalid_type (bool) – whether the address type is validated, defaults to False
- Return Base32Address:
an encoded base32 object, which can be trivially used as python str
- Examples:
>>> Base32Address.encode_base32("0x1ecde7223747601823f7535d7968ba98b4881e09", 1) 'cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4' >>> Base32Address.encode_base32("0x1ecde7223747601823f7535d7968ba98b4881e09", 1029, verbose=True) 'CFX:TYPE.USER:AATP533CG7D0AGBD87KZ48NJ1MPNKCA8BE7GGP3VPU'
- classmethod decode(base32_address: str) Base32AddressParts
Decode a base32 address string and get its hex_address, address_type, and network_id
- Parameters:
base32_address (str) – address encoded in base32 format
- Raises:
InvalidBase32Address – the parameter is not a valid CIP-37 address
- Return Base32AddressParts:
a dict object with field “hex_address”, “address_type” and “network_id”
- Examples:
>>> Base32Address.decode("cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4") {'network_id': 1, 'hex_address': '0x1ECdE7223747601823f7535d7968Ba98b4881E09', 'address_type': 'user'}
- classmethod is_valid_base32(value: Any) bool
Whether a value is a valid string-typed base32 address
- Return bool:
True if valid, else False
- classmethod validate(value: Any) Literal[True]
Validate if a value is a valid string-typed base32_address, raises an exception if not
- Parameters:
value (str) – value to validate
- Raises:
InvalidBase32Address – raises an exception if the address is not a valid base32 address
- Return Literal[True]:
returns True only if address is valid
- classmethod equals(address1: str, address2: str) bool
- Check if two addresses share same hex_address and network_idIt will throw an error if any param is not in CIP-37 format while
__eq__()
doesn’t- Parameters:
address1 (str) – base32 address to compare
address2 (str) – base32 address to compare
- Raises:
InvalidBase32Address – either address is not a valid base32 address
- Return bool:
whether two addresses share same hex_address and network_id
- classmethod zero_address(network_id: int = <object object>, verbose: bool = False) Base32Address
Get zero address of the target network.
- Parameters:
network_id (int) – target network_id, defaults to Base32Address.default_network_id
verbose (bool) – whether the zero address is presented in verbose mode, defaults to False
- Return Base32Address:
base32 format zero address of the target network
- Examples:
>>> Base32Address.zero_address(network_id=1) 'cfxtest:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6f0vrcsw'
- classmethod shorten_base32_address(base32_address: str, compressed: bool = False) str
Returns the abbreviation of the address
- Parameters:
base32_address (str) – address to shorten
compressed (bool) – whether the abbreviation will be presented in compressed form, which only affects mainnet addresses, defaults to False
- Raises:
InvalidBase32Address – raised if address is invalid
- Return str:
the abbreviation string
>>> Base32Address.shorten_base32_address("cfx:aatp533cg7d0agbd87kz48nj1mpnkca8be7ggp3vpu") 'cfx:aat...7ggp3vpu' >>> Base32Address.shorten_base32_address("cfx:aatp533cg7d0agbd87kz48nj1mpnkca8be7ggp3vpu", compressed=True) 'cfx:aat...3vpu'
- classmethod calculate_mapped_evm_space_address(base32_address: str) ChecksumAddress
Calculate the address of mapped account for EVM space as defined in https://github.com/Conflux-Chain/CIPs/blob/master/CIPs/cip-90.md#mapped-account
- Raises:
InvalidBase32Address – raised when address is not a valid base32 address
- Examples:
>>> Base32Address.calculate_mapped_evm_space_address("CFXTEST:TYPE.USER:AATP533CG7D0AGBD87KZ48NJ1MPNKCA8BE1RZ695J4") '0x349f086998cF4a0C5a00b853a0E93239D81A97f6'
- cfx_address.address.get_base32_address_factory(default_network_id: int) Type[Base32Address]
Generate a new
Base32Address
class object with default_network_id so the class variable will not influence the globaldefault_network_id
setting>>> base32_address_factory = get_base32_address_factory(default_network_id=1) >>> base32_address_factory.zero_address() 'cfxtest:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6f0vrcsw'
- Parameters:
default_network_id (int) – default network
- Return Type[Base32Address]:
a Class object of Base32Address with default_network_id