ethereum.arrow_glacier.utils.addressethereum.gray_glacier.utils.address
Hardfork Utility Functions For Addresses ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. contents:: Table of Contents :backlinks: none :local:
Introduction
Address specific functions used in this arrow_glacier version ofAddress specific functions used in this gray_glacier version of
specification.
to_address
Convert a Uint or U256 value to a valid address (20 bytes).
Parameters
data : The string to be converted to bytes.
Returns
address : Address
The obtained address.
def to_address(data: Union[Uint, U256]) -> Address:
28 | """ |
---|---|
29 | Convert a Uint or U256 value to a valid address (20 bytes). |
30 |
|
31 | Parameters |
32 | ---------- |
33 | data : |
34 | The string to be converted to bytes. |
35 |
|
36 | Returns |
37 | ------- |
38 | address : `Address` |
39 | The obtained address. |
40 | """ |
41 | return Address(data.to_be_bytes32()[-20:]) |
compute_contract_address
Computes address of the new account that needs to be created.
Parameters
address : The address of the account that wants to create the new account. nonce : The transaction count of the account that wants to create the new account.
Returns
address: Address
The computed address of the new account.
def compute_contract_address(address: Address, nonce: Uint) -> Address:
45 | """ |
---|---|
46 | Computes address of the new account that needs to be created. |
47 |
|
48 | Parameters |
49 | ---------- |
50 | address : |
51 | The address of the account that wants to create the new account. |
52 | nonce : |
53 | The transaction count of the account that wants to create the new |
54 | account. |
55 |
|
56 | Returns |
57 | ------- |
58 | address: `Address` |
59 | The computed address of the new account. |
60 | """ |
61 | computed_address = keccak256(rlp.encode([address, nonce])) |
62 | canonical_address = computed_address[-20:] |
63 | padded_address = left_pad_zero_bytes(canonical_address, 20) |
64 | return Address(padded_address) |
compute_create2_contract_address
Computes address of the new account that needs to be created, which is based on the sender address, salt and the call data as well.
Parameters
address : The address of the account that wants to create the new account. salt : Address generation salt. call_data : The code of the new account which is to be created.
Returns
address:
The computed address of the new account.ethereum.arrow_glacier.fork_types.Addressethereum.gray_glacier.fork_types.Address
def compute_create2_contract_address(address: Address, salt: Bytes32, call_data: bytearray) -> Address:
70 | """ |
---|---|
71 | Computes address of the new account that needs to be created, which is |
72 | based on the sender address, salt and the call data as well. |
73 |
|
74 | Parameters |
75 | ---------- |
76 | address : |
77 | The address of the account that wants to create the new account. |
78 | salt : |
79 | Address generation salt. |
80 | call_data : |
81 | The code of the new account which is to be created. |
82 |
|
83 | Returns |
84 | ------- |
85 | address: `ethereum.arrow_glacier.fork_types.Address` |
85 | address: `ethereum.gray_glacier.fork_types.Address` |
86 | The computed address of the new account. |
87 | """ |
88 | preimage = b"\xff" + address + salt + keccak256(call_data) |
89 | computed_address = keccak256(preimage) |
90 | canonical_address = computed_address[-20:] |
91 | padded_address = left_pad_zero_bytes(canonical_address, 20) |
92 | |
93 | return Address(padded_address) |