cfx_account#
- class cfx_account.account.Account[source]#
- create(extra_entropy: str = '', network_id: int | None = None) cfx_account.signers.local.LocalAccount[source]#
Creates a new private key, and returns it as a
LocalAccount.- Parameters:
extra_entropy (str) – Add extra randomness to the randomness provided by your OS, defaults to ‘’
network_id (Optional[int]) – the network id of the generated account, which determines the address encoding, defaults to None
- Return LocalAccount:
an object with private key and convenience methods
- Examples:
>>> from cfx_account import Account >>> acct = Account.create() >>> acct.address :rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`cfx\_account.signers.local.LocalAccount\`` '0x187EE3Cb948fFb5a34417344f7fA01c638aa2F96' >>> Account.create(network_id=1029).address 'cfx:aapapvutg83zauuexwdrgjp4v6xm3dkbm2vevh1rub'
- create_with_mnemonic(passphrase: str = '', num_words: int = 12, language: str = 'english', account_path: str = "m/44'/503'/0'/0/0", network_id: int | None = None) Tuple[cfx_account.signers.local.LocalAccount, str][source]#
Create mnemonic and derive an account using parameters
- Parameters:
passphrase (str) – Extra passphrase to encrypt the seed phrase, defaults to “”
num_words (int) – Number of words to use with seed phrase. Default is 12 words. Must be one of [12, 15, 18, 21, 24].
language (str) – Language to use for BIP39 mnemonic seed phrase, defaults to “english”
account_path (str) – Specify an alternate HD path for deriving the seed using BIP32 HD wallet key derivation, defaults to CONFLUX_DEFAULT_PATH(m/44’/503’/0’/0/0)
network_id (Optional[int]) – the network id of returned account, defaults to None
- Return Tuple[LocalAccount, str]:
a LocalAccount object and related mnemonic
- Return type:
typing.Tuple[cfx_account.signers.local.LocalAccount,str]
- static decrypt(keyfile_json: Dict[str, Any] | str | cfx_account.types.KeyfileDict, password: str) hexbytes.main.HexBytes[source]#
Decrypts a keyfile and returns the secret key.
- Parameters:
keyfile_json (Union[Dict[str,Any],str,KeyfileDict]) – encrypted keyfile
password (str) – the password that was used to encrypt the key
- Return HexBytes:
the hex private key
- Return type:
- classmethod encrypt(private_key: bytes | str | eth_keys.datatypes.PrivateKey, password: str, kdf: Literal['scrypt', 'pbkdf2'] | None = None, iterations: int | None = None) cfx_account.types.KeyfileDict[source]#
Creates a dictionary with an encrypted version of your private key. To import this keyfile into Ethereum clients like geth and parity: encode this dictionary with
json.dumps()and save it to disk where your client keeps key files.- Parameters:
private_key (hex str, bytes, int or
eth_keys.datatypes.PrivateKey) – The raw private keypassword (str) – The password which you will need to unlock the account in your client
kdf (str) – The key derivation function to use when encrypting your private key
iterations (int) – The work factor for the key derivation function
- Returns:
The data to use in your encrypted file
- Return type:
dict
If kdf is not set, the default key derivation function falls back to the environment variable
ETH_ACCOUNT_KDF. If that is not set, then ‘scrypt’ will be used as the default.>>> from pprint import pprint >>> encrypted = Account.encrypt( ... 0xb25c7db31feed9122727bf0939dc769a96564b2de4c4726d035b36ecf1e5b364, ... 'password' ... ) >>> pprint(encrypted) {'address': '5ce9454909639D2D17A3F753ce7d93fa0b9aB12E', 'crypto': {'cipher': 'aes-128-ctr', 'cipherparams': {'iv': '...'}, 'ciphertext': '...', 'kdf': 'scrypt', 'kdfparams': {'dklen': 32, 'n': 262144, 'p': 1, 'r': 8, 'salt': '...'}, 'mac': '...'}, 'id': '...', 'version': 3} >>> with open('my-keyfile', 'w') as f: ... f.write(json.dumps(encrypted))
- from_key(private_key: bytes | str | eth_keys.datatypes.PrivateKey, network_id: int | None = None) cfx_account.signers.local.LocalAccount[source]#
returns a LocalAccount object
- Parameters:
private_key (str) – the raw private key
network_id (Optional[int]) – target network of the account, defaults to None
- Return LocalAccount:
object with methods for signing and encrypting
>>> acct = Account.from_key( ... 0xb25c7db31feed9122727bf0939dc769a96564b2de4c4726d035b36ecf1e5b364) >>> acct.address :rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`cfx\_account.signers.local.LocalAccount\`` '0x1ce9454909639d2d17a3f753ce7d93fa0b9ab12e' >>> acct.key HexBytes('0xb25c7db31feed9122727bf0939dc769a96564b2de4c4726d035b36ecf1e5b364')
# These methods are also available: sign_message(), sign_transaction(), encrypt() # They correspond to the same-named methods in Account.* # but without the private key argument
- from_mnemonic(mnemonic: str, passphrase: str = '', account_path: str = "m/44'/503'/0'/0/0", network_id: int | None = None) cfx_account.signers.local.LocalAccount[source]#
Generate an account from a mnemonic.
- Parameters:
mnemonic (str) – space-separated list of BIP39 mnemonic seed words
passphrase (str) – Optional passphrase used to encrypt the mnemonic, defaults to “”
account_path (str) – pecify an alternate HD path for deriving the seed using BIP32 HD wallet key derivation, defaults to CONFLUX_DEFAULT_PATH(m/44’/503’/0’/0/0)
network_id (Optional[int]) – the network id of returned account, defaults to None
- Return LocalAccount:
a LocalAccount object
- Examples:
>>> from cfx_account import Account :rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`cfx\_account.signers.local.LocalAccount\`` >>> acct = Account.from_mnemonic('faint also eye industry survey unhappy boil public lemon myself cube sense', network_id=1) >>> acct.address 'cfxtest:aargrnff46pmuy2g1mmrntctkhr5mzamh6nmg361n0'
- recover_message(signable_message: eth_account.messages.SignableMessage, vrs: Tuple[cfx_account.account.VRS, cfx_account.account.VRS, cfx_account.account.VRS] | None = None, signature: bytes | None = None) eth_typing.evm.ChecksumAddress[source]#
Get the address of the account that signed the given message. Must specify exactly one of vrs or signature. Refer to
sign_message()for usage examples.- Parameters:
signable_message (SignableMessage) – an encoded message generated by encode_defunct or encode_structured_data
vrs (Optional[Tuple[VRS,VRS,VRS]]) – the three pieces generated by an elliptic curve signature, defaults to None
signature (Optional[bytes]) – signature bytes concatenated as r+s+v, defaults to None
- Return ChecksumAddress:
the checksum address of the account that signed the given message
- Return type:
typing.NewType(ChecksumAddress,typing.NewType(HexAddress,typing.NewType(HexStr,str)))
- recover_transaction(serialized_transaction: bytes | eth_typing.encoding.HexStr | str) eth_typing.evm.ChecksumAddress[source]#
Get the address of the account that signed this transaction.
- Parameters:
serialized_transaction (Union[bytes,HexStr,str]) – the complete signed transaction
- Return ChecksumAddress:
address of signer, hex-encoded & checksummed
- Example:
- Return type:
typing.NewType(ChecksumAddress,typing.NewType(HexAddress,typing.NewType(HexStr,str)))
>>> raw_transaction = '0xf86a8086d55698372431831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a009ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9ca0440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428' # noqa: E501 >>> Account.recover_transaction(raw_transaction) '0x1c7536e3605d9c16a7a3d7b1898e529396a65c23'
- sign_message(signable_message: eth_account.messages.SignableMessage, private_key: bytes | eth_typing.encoding.HexStr | int | eth_keys.datatypes.PrivateKey) eth_account.datastructures.SignedMessage[source]#
Sign the provided encoded message. The message is encoded according to CIP-23
- Parameters:
signable_message (SignableMessage) – an encoded message generated by encode_defunct or encode_structured_data
private_key (Union[bytes,HexStr,int,keys.PrivateKey]) – the private key used to sign message
- Return SignedMessage:
a signed message object
- Examples:
>>> from from cfx_account import Account >>> from cfx_account.messages import encode_structured_data, encode_defunct >>> encoded_message = encode_defunct(text=message) >>> acct = Account.create() >>> signed = acct.sign_message(encoded_message) :rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`eth\_account.datastructures.SignedMessage\`` >>> signed.signature '0xd72ea2020802d6dfce0d49fc1d92a16b43baa58fc152d6f437d852a014e0c5740b3563375b0b844a835be4f1521b4ae2a691048622f70026e0470acc5351043a01' >>> assert acct.hex_address == Account.recover_message(encoded_message, signature=signed.signature)
>>> # https://github.com/Conflux-Chain/CIPs/blob/master/CIPs/cip-23.md#typed-data >>> typed_data = { "types": { "CIP23Domain": [ ... ] }, ... } >>> encoded_data = encode_structured_data(typed_data) >>> signed = acct.sign_message(encoded_data) >>> signed.signature '0xd7fb6dca3b084ae3a9bf1ea3527de7a9bc2bd40e0c38d3faf9da214f1d5637ab2944a8a993dc59365c1e74e18a1589b358e3fb81bd03892d159f221e8ac765c701' >>> assert acct.hex_address == Account.recover_message(encoded_data, signature=signed.signature)
- sign_transaction(transaction_dict: cfx_utils.types.LegacyTxDict | cfx_utils.types.TypedTxDict | cfx_utils.types.CIP1559TxDict | Dict[str, Any], private_key: bytes | str | eth_keys.datatypes.PrivateKey, blobs: Any | None = None) eth_account.datastructures.SignedTransaction[source]#
Sign a transaction using a local private key. Produces signature details and the hex-encoded transaction suitable for broadcast using
w3.cfx.send_raw_transaction().Refer to Interact with a Contract to see how to sign for a contract method using build_transaction
- Parameters:
transaction_dict (TxParam) – the transaction with keys: nonce, chainId, to, data, value, storageLimit, epochHeight, gas, and gasPrice.
private_key (Union[bytes,str,PrivateKey]) – private_key to be used for signing
- Raises:
TypeError – transaction_dict is not a dict-like object
ValueError – transaction’s from field does not match private_key
- Return SignedTransaction:
an attribute dict contains various details about the signature - most importantly the fields: v, r, and s
>>> transaction = { # Note that the address must be in Base32 format or native bytes: 'to': 'cfxtest:aak7fsws4u4yf38fk870218p1h3gxut3ku00u1k1da', 'nonce': 1, 'value': 1, 'gas': 100, 'gasPrice': 1, 'storageLimit': 100, 'epochHeight': 100, 'chainId': 1 } >>> key = '0xcc7939276283a32f60d2fad7d16cac972300308fe99ec98d0e63765d02e24863' >>> signed = Account.sign_transaction(transaction, key) {'hash': HexBytes('0x692a0ea530a264f4e80ce39f393233e90638ef929c8706802e15299fd0b042b9'), 'r': 74715349327018893060702835194036838027583623083228589573427622179540208747230, 'raw_transaction': HexBytes('0xf861dd0101649413d2ba4ed43542e7c54fbb6c5fccb9f269c1f94c016464018080a0a52f639cbed11262a7b88d0a37aef909aa7dc2c36c40689a3d52b8bd1d9482dea054f3bdeb654f73704db4cbc12451fb4c9830ef62b0f24de1a40e4b6fe10f57b2'), # noqa: E501 :rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`eth\_account.datastructures.SignedTransaction\`` 's': 38424933894051759888751352802050752143518665905311311986258635963723328477106, 'v': 0} >>> w3.cfx.sendRawTransaction(signed.raw_transaction)
-
w3: Web3 |
None= None#
- class cfx_account.signers.local.LocalAccount(key: Any, account: Account | Type[Account], network_id: int | None = None)[source]#
Initialize a new account with the given private key.
- Parameters:
key (eth_keys.PrivateKey) – to prefill in private key execution
account (Account) – the key-unaware management API
- property address: Base32Address | ChecksumAddress#
Returns the address of the account.
- Return Union[Base32Address,ChecksumAddress]:
Returns a Base32Address if network id is not None, else ChecksumAddress
- property base32_address: Base32Address#
Returns the address of the account in base32 format. Raises ValueError if network id is not set.
- Return Base32Address:
the address in base32 format
- encrypt(password: str, kdf: Literal['scrypt', 'pbkdf2'] | None = None, iterations: int | None = None) cfx_account.types.KeyfileDict[source]#
This uses the same structure as in
encrypt(), but without a private key argument.- Return type:
cfx_account.types.KeyfileDict
- get_base32_address(specific_network_id: int) cfx_address.address.Base32Address[source]#
Returns the Base32Address of the account in specific network without changing the account network id
- Parameters:
specific_network_id (int) – the network id of the target network
- Return Base32Address:
- Return type:
- property hex_address: ChecksumAddress#
Returns the hex address of the account.
- Return ChecksumAddress:
the hex address in checksum format
- property key: bytes#
Get the private key.
- property network_id: int | None#
The network id of the account, which determines its address. Can be set using a positive int or None
- Return Union[int, None]:
the network id of the account, 1029 for mainnet and 1 for testnet
- Examples:
>>> from cfx_account import Account >>> acct = Account.create() >>> assert acct.network_id is None >>> acct.address '0x1261D876E5C589Bc26248c53C68b71c2d28470e9' >>> acct.network_id = 1 >>> acct.address 'cfxtest:aakgd0d061c2xtbgewgfhvynshbrfbdu7e55kdxfxx'
- sign_message(signable_message: eth_account.messages.SignableMessage) eth_account.datastructures.SignedMessage[source]#
This uses the same structure as in
sign_message(), but without a private key argument.- Return type:
eth_account.datastructures.SignedMessage
- sign_transaction(transaction_dict: cfx_utils.types.LegacyTxDict | cfx_utils.types.TypedTxDict | cfx_utils.types.CIP1559TxDict | Dict[str, Any]) eth_account.datastructures.SignedTransaction[source]#
This uses the same structure as in
sign_transaction(), but without a private key argument.- Return type:
eth_account.datastructures.SignedTransaction