| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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}")
|