• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

safe-global / safe-cli / 9698327897

27 Jun 2024 02:20PM UTC coverage: 88.505%. Remained the same
9698327897

Pull #428

github

web-flow
Merge 50dd01ae7 into e829cd6e3
Pull Request #428: Add typer dependence

819 of 938 branches covered (87.31%)

Branch coverage included in aggregate %.

2815 of 3168 relevant lines covered (88.86%)

3.55 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

79.17
/src/safe_cli/safe_addresses.py
1
"""
2
Get the correct addresses for the contracts by testing the deployment addresses using the RPC
3
Currently using Safe v1.4.1 when available, and 1.3.0 as fallback as they are compatible
4
https://github.com/gnosis/safe-deployments/tree/main/src/assets/v1.4.1
5
https://github.com/gnosis/safe-deployments/tree/main/src/assets/v1.3.0
6
"""
7

8
from typing import Sequence
4✔
9

10
from eth_typing import ChecksumAddress
4✔
11

12
from gnosis.eth import EthereumClient
4✔
13

14

15
def _get_valid_contract(
4✔
16
    ethereum_client: EthereumClient, addresses: Sequence[ChecksumAddress]
17
) -> ChecksumAddress:
18
    """
19
    :param ethereum_client:
20
    :param addresses:
21
    :return: First valid contract from the list of addresses provided found in blockchain
22
    """
23

24
    for address in addresses:
4✔
25
        if ethereum_client.is_contract(address):
4✔
26
            return address
4✔
27
    raise ValueError(f"Network {ethereum_client.get_network().name} is not supported")
4✔
28

29

30
def get_safe_contract_address(ethereum_client: EthereumClient) -> ChecksumAddress:
4✔
31
    return _get_valid_contract(
×
32
        ethereum_client,
33
        [
34
            "0x41675C099F32341bf84BFc5382aF534df5C7461a",  # v1.4.1
35
            "0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552",  # v1.3.0
36
            "0x69f4D1788e39c87893C980c06EdF4b7f686e2938",  # v1.3.0
37
        ],
38
    )
39

40

41
def get_safe_l2_contract_address(ethereum_client: EthereumClient) -> ChecksumAddress:
4✔
42
    return _get_valid_contract(
4✔
43
        ethereum_client,
44
        [
45
            "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",  # v1.4.1
46
            "0x3E5c63644E683549055b9Be8653de26E0B4CD36E",  # v1.3.0
47
            "0xfb1bffC9d739B8D520DaF37dF666da4C687191EA",  # v1.3.0
48
            "0x1727c2c531cf966f902E5927b98490fDFb3b2b70",  # v1.3.0 zkSync
49
        ],
50
    )
51

52

53
def get_default_fallback_handler_address(
4✔
54
    ethereum_client: EthereumClient,
55
) -> ChecksumAddress:
56
    return _get_valid_contract(
×
57
        ethereum_client,
58
        [
59
            "0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99",  # v1.4.1
60
            "0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4",  # v1.3.0
61
            "0x017062a1dE2FE6b99BE3d9d37841FeD19F573804",  # v1.3.0
62
            "0x2f870a80647BbC554F3a0EBD093f11B4d2a7492A",  # v1.3.0 zkSync
63
        ],
64
    )
65

66

67
def get_proxy_factory_address(ethereum_client: EthereumClient) -> ChecksumAddress:
4✔
68
    return _get_valid_contract(
×
69
        ethereum_client,
70
        [
71
            "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",  # v1.4.1
72
            "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2",  # v1.3.0
73
            "0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC",  # v1.3.0
74
            "0xDAec33641865E4651fB43181C6DB6f7232Ee91c2",  # v1.3.0 zkSync
75
        ],
76
    )
77

78

79
def get_last_multisend_address(ethereum_client: EthereumClient) -> ChecksumAddress:
4✔
80
    return _get_valid_contract(
×
81
        ethereum_client,
82
        [
83
            "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",  # v1.4.1
84
            "0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761",  # v1.3.0
85
            "0x998739BFdAAdde7C933B942a68053933098f9EDa",  # v1.3.0
86
            "0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912",  # v1.3.0 zkSync
87
        ],
88
    )
89

90

91
def get_last_multisend_call_only_address(
4✔
92
    ethereum_client: EthereumClient,
93
) -> ChecksumAddress:
94
    return _get_valid_contract(
×
95
        ethereum_client,
96
        [
97
            "0x40A2aCCbd92BCA938b02010E17A5b8929b49130D",  # v1.4.1
98
            "0x40A2aCCbd92BCA938b02010E17A5b8929b49130D",  # v1.3.0
99
            "0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B",  # v1.3.0
100
            "0xf220D3b4DFb23C4ade8C88E526C1353AbAcbC38F",  # v1.3.0 zkSync
101
        ],
102
    )
103

104

105
def get_last_sign_message_lib_address(
4✔
106
    ethereum_client: EthereumClient,
107
) -> ChecksumAddress:
108
    return _get_valid_contract(
4✔
109
        ethereum_client,
110
        [
111
            "0xd53cd0aB83D845Ac265BE939c57F53AD838012c9",  # v1.4.1
112
            "0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2",  # v1.3.0
113
            "0x98FFBBF51bb33A056B08ddf711f289936AafF717",  # v1.3.0
114
            "0x357147caf9C0cCa67DfA0CF5369318d8193c8407",  # v1.3.0 zkSync
115
        ],
116
    )
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc