ethereum.paris.utils.address

Hardfork Utility Functions For Addresses ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. contents:: Table of Contents :backlinks: none :local:

Introduction

Address specific functions used in this paris 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:
26
    """
27
    Convert a Uint or U256 value to a valid address (20 bytes).
28
29
    Parameters
30
    ----------
31
    data :
32
        The string to be converted to bytes.
33
34
    Returns
35
    -------
36
    address : `Address`
37
        The obtained address.
38
    """
39
    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:
43
    """
44
    Computes address of the new account that needs to be created.
45
46
    Parameters
47
    ----------
48
    address :
49
        The address of the account that wants to create the new account.
50
    nonce :
51
        The transaction count of the account that wants to create the new
52
        account.
53
54
    Returns
55
    -------
56
    address: `Address`
57
        The computed address of the new account.
58
    """
59
    computed_address = keccak256(rlp.encode([address, nonce]))
60
    canonical_address = computed_address[-20:]
61
    padded_address = left_pad_zero_bytes(canonical_address, 20)
62
    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: ethereum.paris.fork_types.Address The computed address of the new account.

def compute_create2_contract_address(address: Address, ​​salt: Bytes32, ​​call_data: bytearray) -> Address:
68
    """
69
    Computes address of the new account that needs to be created, which is
70
    based on the sender address, salt and the call data as well.
71
72
    Parameters
73
    ----------
74
    address :
75
        The address of the account that wants to create the new account.
76
    salt :
77
        Address generation salt.
78
    call_data :
79
        The code of the new account which is to be created.
80
81
    Returns
82
    -------
83
    address: `ethereum.paris.fork_types.Address`
84
        The computed address of the new account.
85
    """
86
    preimage = b"\xff" + address + salt + keccak256(call_data)
87
    computed_address = keccak256(preimage)
88
    canonical_address = computed_address[-20:]
89
    padded_address = left_pad_zero_bytes(canonical_address, 20)
90
91
    return Address(padded_address)