diff --git a/.gitignore b/.gitignore index a7f9bdb..ce5c88d 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ # coverage *coverage* +logs/ # VSCode .vscode/* diff --git a/etherscan/enums/fields_enum.py b/etherscan/enums/fields_enum.py index b0bcc4d..d4442c2 100644 --- a/etherscan/enums/fields_enum.py +++ b/etherscan/enums/fields_enum.py @@ -9,6 +9,7 @@ class FieldsEnum: BLOCK_TYPE: str = "&blocktype=" BLOCKNO: str = "&blockno=" BOOLEAN: str = "&boolean=" + CHAIN_ID: str = "&chainid=" CLIENT_TYPE: str = "&clienttype=" CLOSEST: str = "&closest=" CONTRACT_ADDRESS: str = "&contractaddress=" @@ -23,7 +24,7 @@ class FieldsEnum: OFFSET: str = "&offset=" PAGE: str = "&page=" POSITION: str = "&position=" - PREFIX: str = "https://api-{}.etherscan.io/api?" + PREFIX: str = "https://api-{}.etherscan.io/v2/api?" SORT: str = "&sort=" START_BLOCK: str = "&startblock=" START_DATE: str = "&startdate=" diff --git a/etherscan/etherscan.py b/etherscan/etherscan.py index 5749aa8..35df73c 100644 --- a/etherscan/etherscan.py +++ b/etherscan/etherscan.py @@ -10,10 +10,12 @@ class Etherscan: - def __new__(cls, api_key: str, net: str = "MAIN"): + def __new__(cls, api_key: str, net: str = "MAIN", chain_id: str = "1"): with resources.path(configs, f"{net.upper()}-stable.json") as path: config_path = str(path) - return cls.from_config(api_key=api_key, config_path=config_path, net=net) + return cls.from_config( + api_key=api_key, chain_id=chain_id, config_path=config_path, net=net + ) @staticmethod def __load_config(config_path: str) -> dict: @@ -21,11 +23,13 @@ def __load_config(config_path: str) -> dict: return json.load(f) @staticmethod - def __run(func, api_key: str, net: str): + def __run(func, api_key: str, net: str, chain_id: str): def wrapper(*args, **kwargs): url = ( f"{fields.PREFIX.format(net.lower()).replace('-main','')}" f"{func(*args, **kwargs)}" + f"{fields.CHAIN_ID}" + f"{chain_id}" f"{fields.API_KEY}" f"{api_key}" ) @@ -35,10 +39,10 @@ def wrapper(*args, **kwargs): return wrapper @classmethod - def from_config(cls, api_key: str, config_path: str, net: str): + def from_config(cls, api_key: str, config_path: str, net: str, chain_id: str): config = cls.__load_config(config_path) for func, v in config.items(): if not func.startswith("_"): # disabled if _ attr = getattr(getattr(etherscan, v["module"]), func) - setattr(cls, func, cls.__run(attr, api_key, net)) + setattr(cls, func, cls.__run(attr, api_key, net, chain_id)) return cls