File: network.py

package info (click to toggle)
python-eth-utils 5.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,140 kB
  • sloc: python: 5,985; makefile: 238
file content (84 lines) | stat: -rw-r--r-- 2,096 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from dataclasses import (
    dataclass,
)
import json
import os
from typing import (
    List,
)

from eth_typing import (
    ChainId,
)

from eth_utils import (
    ValidationError,
)


@dataclass
class Network:
    chain_id: int
    name: str
    shortName: str
    symbol: ChainId


def initialize_network_objects() -> List[Network]:
    networks_obj = []

    networks_json_path = os.path.abspath(
        os.path.join(os.path.dirname(__file__), "__json")
    )
    with open(
        os.path.join(networks_json_path, "eth_networks.json"),
        encoding="UTF-8",
    ) as open_file:
        network_data = json.load(open_file)

    for entry in network_data:
        try:
            network = Network(
                chain_id=entry["chainId"],
                name=entry["name"],
                shortName=entry["shortName"],
                symbol=ChainId(entry["chainId"]),
            )
            networks_obj.append(network)
        except ValueError:
            # Chain does not have a valid ChainId, network files in eth-utils and
            # eth-typing should to be updated. Run `python update_networks.py` in the
            # project root.
            pass

    return networks_obj


networks = initialize_network_objects()

networks_by_id = {network.chain_id: network for network in networks}
network_names_by_id = {network.chain_id: network.name for network in networks}
network_short_names_by_id = {
    network.chain_id: network.shortName for network in networks
}


def network_from_chain_id(chain_id: int) -> Network:
    try:
        return networks_by_id[chain_id]
    except KeyError:
        raise ValidationError(f"chain_id is not recognized: {chain_id}")


def name_from_chain_id(chain_id: int) -> str:
    try:
        return network_names_by_id[chain_id]
    except KeyError:
        raise ValidationError(f"chain_id is not recognized: {chain_id}")


def short_name_from_chain_id(chain_id: int) -> str:
    try:
        return network_short_names_by_id[chain_id]
    except KeyError:
        raise ValidationError(f"chain_id is not recognized: {chain_id}")