From c910a2f09fecf5f046185dbb5da1fd638595de94 Mon Sep 17 00:00:00 2001 From: "Kotsias, Panagiotis-Christos" Date: Wed, 28 Oct 2020 13:04:10 +0000 Subject: [PATCH 01/64] Build and dist --- build/lib/configs/stable.json | 156 ++++++++ build/lib/etherscan/__init__.py | 3 +- build/lib/etherscan/enums/actions_enum.py | 28 +- build/lib/etherscan/modules/pro.py | 391 +++++++++++++++++++ dist/etherscan-python-1.0.3.tar.gz | Bin 10143 -> 0 bytes dist/etherscan-python-2.0.0.tar.gz | Bin 0 -> 11710 bytes dist/etherscan_python-1.0.3-py3-none-any.whl | Bin 13001 -> 0 bytes dist/etherscan_python-2.0.0-py3-none-any.whl | Bin 0 -> 14613 bytes 8 files changed, 574 insertions(+), 4 deletions(-) create mode 100644 build/lib/etherscan/modules/pro.py delete mode 100644 dist/etherscan-python-1.0.3.tar.gz create mode 100644 dist/etherscan-python-2.0.0.tar.gz delete mode 100644 dist/etherscan_python-1.0.3-py3-none-any.whl create mode 100644 dist/etherscan_python-2.0.0-py3-none-any.whl diff --git a/build/lib/configs/stable.json b/build/lib/configs/stable.json index 0eb8ef1..272ed0b 100644 --- a/build/lib/configs/stable.json +++ b/build/lib/configs/stable.json @@ -306,5 +306,161 @@ "page": 1, "offset": 100 } + }, + "get_hist_eth_balance_for_address_by_block_no": { + "module": "pro", + "kwargs": { + "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", + "block_no": "8000000" + } + }, + "get_daily_average_block_size": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_block_time": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_uncle_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "block_no": "8000000" + } + }, + "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", + "block_no": "8000000" + } + }, + "get_token_info_by_contract_address": { + "module": "pro", + "kwargs": { + "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" + } + }, + "get_daily_average_gas_limit": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_total_gas_used": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_average_gas_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_network_tx_fee": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_new_address_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_network_utilization": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_hash_rate": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_tx_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_difficulty": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_daily_market_cap": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } } } \ No newline at end of file diff --git a/build/lib/etherscan/__init__.py b/build/lib/etherscan/__init__.py index d73dff9..7b527d3 100644 --- a/build/lib/etherscan/__init__.py +++ b/build/lib/etherscan/__init__.py @@ -1,9 +1,10 @@ +from .etherscan import Etherscan from .modules.accounts import Accounts as accounts from .modules.blocks import Blocks as blocks from .modules.contracts import Contracts as contracts from .modules.gastracker import GasTracker as gastracker +from .modules.pro import Pro as pro from .modules.proxy import Proxy as proxy from .modules.stats import Stats as stats from .modules.tokens import Tokens as tokens from .modules.transactions import Transactions as transactions -from .etherscan import Etherscan diff --git a/build/lib/etherscan/enums/actions_enum.py b/build/lib/etherscan/enums/actions_enum.py index 2ca5d53..20c81cb 100644 --- a/build/lib/etherscan/enums/actions_enum.py +++ b/build/lib/etherscan/enums/actions_enum.py @@ -7,15 +7,35 @@ class ActionsEnum: BALANCE_MULTI: str = "balancemulti" BALANCE: str = "balance" CHAIN_SIZE: str = "chainsize" + DAILY_AVG_BLOCK_SIZE: str = "dailyavgblocksize" + DAILY_AVG_BLOCK_TIME: str = "dailyavgblocktime" + DAILY_AVG_GAS_LIMIT: str = "dailyavggaslimit" + DAILY_AVG_GAS_PRICE: str = "dailyavggasprice" + DAILY_AVG_HASH_RATE: str = "dailyavghashrate" + DAILY_AVG_NET_DIFFICULTY: str = "dailyavgnetdifficulty" + DAILY_BLK_COUNT: str = "dailyblkcount" + DAILY_BLOCK_REWARDS: str = "dailyblockrewards" + DAILY_GAS_USED: str = "dailygasused" + DAILY_NET_UTILIZATION: str = "dailynetutilization" + DAILY_NEW_ADDRESS: str = "dailynewaddress" + DAILY_TX: str = "dailytx" + DAILY_TXN_FEE: str = "dailytxnfee" + DAILY_UNCLE_BLK_COUNT: str = "dailyuncleblkcount" ETH_BLOCK_NUMBER: str = "eth_blockNumber" ETH_CALL: str = "eth_call" + ETH_DAILY_MARKET_CAP: str = "ethdailymarketcap" + ETH_DAILY_PRICE: str = "ethdailyprice" ETH_ESTIMATE_GAS: str = "eth_estimateGas" ETH_GAS_PRICE: str = "eth_gasPrice" ETH_GET_BLOCK_BY_NUMBER: str = "eth_getBlockByNumber" - ETH_GET_BLOCK_TRANSACTION_COUNT_BY_NUMBER: str = "eth_getBlockTransactionCountByNumber" - ETH_GET_TRANSACTION_BY_BLOCK_NUMBER_AND_INDEX: str = "eth_getTransactionByBlockNumberAndIndex" + ETH_GET_BLOCK_TRANSACTION_COUNT_BY_NUMBER: str = ( + "eth_getBlockTransactionCountByNumber" + ) ETH_GET_CODE: str = "eth_getCode" ETH_GET_STORAGE_AT: str = "eth_getStorageAt" + ETH_GET_TRANSACTION_BY_BLOCK_NUMBER_AND_INDEX: str = ( + "eth_getTransactionByBlockNumberAndIndex" + ) ETH_GET_TRANSACTION_BY_HASH: str = "eth_getTransactionByHash" ETH_GET_TRANSACTION_COUNT: str = "eth_getTransactionCount" ETH_GET_TRANSACTION_RECEIPT: str = "eth_getTransactionReceipt" @@ -32,10 +52,12 @@ class ActionsEnum: GET_SOURCE_CODE: str = "getsourcecode" GET_STATUS: str = "getstatus" GET_TX_RECEIPT_STATUS: str = "gettxreceiptstatus" + TOKEN_BALANCE_HISTORY: str = "tokenbalancehistory" TOKEN_BALANCE: str = "tokenbalance" + TOKEN_INFO: str = "tokeninfo" + TOKEN_SUPPLY_HISTORY: str = "tokensupplyhistory" TOKEN_SUPPLY: str = "tokensupply" TOKENNFTTX: str = "tokennfttx" TOKENTX: str = "tokentx" TXLIST_INTERNAL: str = "txlistinternal" TXLIST: str = "txlist" - diff --git a/build/lib/etherscan/modules/pro.py b/build/lib/etherscan/modules/pro.py new file mode 100644 index 0000000..7ac0876 --- /dev/null +++ b/build/lib/etherscan/modules/pro.py @@ -0,0 +1,391 @@ +from functools import reduce +from typing import List + +from etherscan.enums.actions_enum import ActionsEnum as actions +from etherscan.enums.fields_enum import FieldsEnum as fields +from etherscan.enums.modules_enum import ModulesEnum as modules +from etherscan.enums.tags_enum import TagsEnum as tags + + +class Pro: + @staticmethod + def get_hist_eth_balance_for_address_by_block_no( + address: str, block_no: int + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.ACCOUNT}" + f"{fields.ACTION}" + f"{actions.BALANCE_HISTORY}" + f"{fields.ADDRESS}" + f"{address}" + f"{fields.BLOCKNO}" + f"{block_no}" + ) + return url + + @staticmethod + def get_daily_average_block_size( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_AVG_BLOCK_SIZE}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_daily_block_count_and_rewards( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_BLK_COUNT}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_daily_block_rewards( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_BLOCK_REWARDS}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_daily_average_block_time( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_AVG_BLOCK_TIME}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_daily_uncle_block_count_and_rewards( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_UNCLE_BLK_COUNT}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_hist_erc20_token_total_supply_by_contract_address_and_block_no( + contract_address: str, block_no: int + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.TOKEN_SUPPLY_HISTORY}" + f"{fields.CONTRACT_ADDRESS}" + f"{contract_address}" + f"{fields.BLOCKNO}" + f"{block_no}" + ) + return url + + @staticmethod + def get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no( + contract_address: str, address: str, block_no: int + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.ACCOUNT}" + f"{fields.ACTION}" + f"{actions.TOKEN_BALANCE_HISTORY}" + f"{fields.CONTRACT_ADDRESS}" + f"{contract_address}" + f"{fields.ADDRESS}" + f"{address}" + f"{fields.BLOCKNO}" + f"{block_no}" + ) + return url + + @staticmethod + def get_token_info_by_contract_address(contract_address: str) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.TOKEN}" + f"{fields.ACTION}" + f"{actions.TOKEN_INFO}" + f"{fields.CONTRACT_ADDRESS}" + f"{contract_address}" + ) + return url + + @staticmethod + def get_daily_average_gas_limit( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_AVG_GAS_LIMIT}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_eth_daily_total_gas_used( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_GAS_USED}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_eth_daily_average_gas_price( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_AVG_GAS_PRICE}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_eth_daily_network_tx_fee( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_TXN_FEE}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_daily_new_address_count( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_NEW_ADDRESS}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_daily_network_utilization( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_NET_UTILIZATION}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_daily_average_network_hash_rate( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_AVG_HASH_RATE}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_daily_tx_count( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_TX}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_daily_average_network_difficulty( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.DAILY_AVG_NET_DIFFICULTY}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_eth_hist_daily_market_cap( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.ETH_DAILY_MARKET_CAP}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url + + @staticmethod + def get_eth_hist_price( + start_date: int, + end_date: int, + sort: str, + ) -> str: + url = ( + f"{fields.MODULE}" + f"{modules.STATS}" + f"{fields.ACTION}" + f"{actions.ETH_DAILY_PRICE}" + f"{fields.START_DATE}" + f"{str(start_date)}" + f"{fields.END_DATE}" + f"{str(end_date)}" + f"{fields.SORT}" + f"{sort}" + ) + return url diff --git a/dist/etherscan-python-1.0.3.tar.gz b/dist/etherscan-python-1.0.3.tar.gz deleted file mode 100644 index 38798f9f85a048417024ac8ec861635b3a69d6b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10143 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 KfwY5+^nU=w|E|{n diff --git a/dist/etherscan-python-2.0.0.tar.gz b/dist/etherscan-python-2.0.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..6bc6bfeab36e0ca493364fe60331463d921ebf15 GIT binary patch literal 11710 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 UmOboY&s%x^A0A6eIsga)0D#(RBLDyZ literal 0 HcmV?d00001 diff --git a/dist/etherscan_python-1.0.3-py3-none-any.whl b/dist/etherscan_python-1.0.3-py3-none-any.whl deleted file mode 100644 index 3784ba68e0083506d5d84e66a8b165fd057644b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13001 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 B#m@i$ diff --git a/dist/etherscan_python-2.0.0-py3-none-any.whl b/dist/etherscan_python-2.0.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a7543f4ab630c0507e269aef9cecfb07845008cf GIT binary patch literal 14613 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 Date: Wed, 28 Oct 2020 14:09:52 +0100 Subject: [PATCH 02/64] Added PRO endpoints --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index edd4118..1085af2 100644 --- a/README.md +++ b/README.md @@ -179,6 +179,8 @@ bash run_tests.sh YOUR_API_KEY This will regenerate the logs under `logs/` with the most recent results and the timestamp of the execution. +The tests also include the PRO endpoints so if your key is not PRO, the correspondings tests are expected to fail. + ## Usage In `python`, create a client with your personal [Etherscan.io](https://etherscan.io/) API key: From 6a0f95afdccc4e1bd2aa6e90d47130b49d16b483 Mon Sep 17 00:00:00 2001 From: The Codacy Badger Date: Wed, 28 Oct 2020 13:46:58 +0000 Subject: [PATCH 03/64] Add Codacy badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1085af2..b32ba05 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # etherscan-python +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) [![Build Status](https://travis-ci.com/pcko1/etherscan-python.svg?branch=master)](https://travis-ci.com/pcko1/etherscan-python) [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) From 4a62cb85e6304ace8a1fc26f7a06c19a8d90edb5 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 28 Oct 2020 14:50:08 +0100 Subject: [PATCH 04/64] Added codacy badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b32ba05..7b1efb1 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # etherscan-python -[![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) [![Build Status](https://travis-ci.com/pcko1/etherscan-python.svg?branch=master)](https://travis-ci.com/pcko1/etherscan-python) [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) From 89415042b666f6667f7073031e628cfec22e10d1 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 28 Oct 2020 15:34:35 +0100 Subject: [PATCH 05/64] Added PyPI badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7b1efb1..5776f0c 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,12 @@ [![Build Status](https://travis-ci.com/pcko1/etherscan-python.svg?branch=master)](https://travis-ci.com/pcko1/etherscan-python) [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) +[![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) + A minimal, yet complete, python API for [Etherscan.io](https://etherscan.io/). Available on [PyPI](https://pypi.org/project/etherscan-python/). All FREE and PRO endpoints are provided. From 4be0debb4310aa59263ef93bb84bc1ae65a1ea56 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 28 Oct 2020 15:37:43 +0100 Subject: [PATCH 06/64] Added PyPI badge --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5776f0c..fd2cb1c 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) [![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) -[![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) +[![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) + [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) From 5782cc86b26d7e65f57cf4dd0b5ffd59918b624e Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 28 Oct 2020 15:43:48 +0100 Subject: [PATCH 07/64] Updated DOI --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fd2cb1c..1bf30d5 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ [![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) - [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) @@ -239,7 +238,7 @@ For problems regarding installing or using the package please open an [issue](ht ## Cite -Kotsias, P. C., A Python API for Etherscan.io. *https://github.com/pcko1/etherscan-python (2020)*. doi:10.5281/zenodo.4088586 +Kotsias, P. C., A Python API for Etherscan.io. *https://github.com/pcko1/etherscan-python (2020)*. doi:10.5281/zenodo.4147166 or in ```bibtex```: @@ -251,7 +250,7 @@ or in ```bibtex```: publisher = {GitHub}, journal = {GitHub repository}, url = {https://github.com/pcko1/etherscan-python}, - doi = {10.5281/zenodo.4088586} + doi = {10.5281/zenodo.4147166} } ``` From 8dcd34ba52392b3675ba7c9795a2acf0738cd0ab Mon Sep 17 00:00:00 2001 From: pcko1 Date: Thu, 5 Nov 2020 14:55:22 +0100 Subject: [PATCH 08/64] Re-building --- build/lib/configs/__init__.py | 0 build/lib/configs/stable.json | 466 ------------------- build/lib/etherscan/__init__.py | 10 - build/lib/etherscan/enums/__init__.py | 0 build/lib/etherscan/enums/actions_enum.py | 63 --- build/lib/etherscan/enums/fields_enum.py | 35 -- build/lib/etherscan/enums/modules_enum.py | 14 - build/lib/etherscan/enums/tags_enum.py | 7 - build/lib/etherscan/etherscan.py | 37 -- build/lib/etherscan/modules/__init__.py | 0 build/lib/etherscan/modules/accounts.py | 330 ------------- build/lib/etherscan/modules/blocks.py | 44 -- build/lib/etherscan/modules/contracts.py | 29 -- build/lib/etherscan/modules/gastracker.py | 29 -- build/lib/etherscan/modules/pro.py | 391 ---------------- build/lib/etherscan/modules/proxy.py | 187 -------- build/lib/etherscan/modules/stats.py | 47 -- build/lib/etherscan/modules/tokens.py | 36 -- build/lib/etherscan/modules/transactions.py | 29 -- build/lib/etherscan/utils/__init__.py | 0 build/lib/etherscan/utils/conversions.py | 13 - build/lib/etherscan/utils/parsing.py | 18 - configs/__init__.py | 0 configs/stable.json | 466 ------------------- dist/etherscan-python-2.0.0.tar.gz | Bin 11710 -> 0 bytes dist/etherscan_python-2.0.0-py3-none-any.whl | Bin 14613 -> 0 bytes 26 files changed, 2251 deletions(-) delete mode 100644 build/lib/configs/__init__.py delete mode 100644 build/lib/configs/stable.json delete mode 100644 build/lib/etherscan/__init__.py delete mode 100644 build/lib/etherscan/enums/__init__.py delete mode 100644 build/lib/etherscan/enums/actions_enum.py delete mode 100644 build/lib/etherscan/enums/fields_enum.py delete mode 100644 build/lib/etherscan/enums/modules_enum.py delete mode 100644 build/lib/etherscan/enums/tags_enum.py delete mode 100644 build/lib/etherscan/etherscan.py delete mode 100644 build/lib/etherscan/modules/__init__.py delete mode 100644 build/lib/etherscan/modules/accounts.py delete mode 100644 build/lib/etherscan/modules/blocks.py delete mode 100644 build/lib/etherscan/modules/contracts.py delete mode 100644 build/lib/etherscan/modules/gastracker.py delete mode 100644 build/lib/etherscan/modules/pro.py delete mode 100644 build/lib/etherscan/modules/proxy.py delete mode 100644 build/lib/etherscan/modules/stats.py delete mode 100644 build/lib/etherscan/modules/tokens.py delete mode 100644 build/lib/etherscan/modules/transactions.py delete mode 100644 build/lib/etherscan/utils/__init__.py delete mode 100644 build/lib/etherscan/utils/conversions.py delete mode 100644 build/lib/etherscan/utils/parsing.py delete mode 100644 configs/__init__.py delete mode 100644 configs/stable.json delete mode 100644 dist/etherscan-python-2.0.0.tar.gz delete mode 100644 dist/etherscan_python-2.0.0-py3-none-any.whl diff --git a/build/lib/configs/__init__.py b/build/lib/configs/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/build/lib/configs/stable.json b/build/lib/configs/stable.json deleted file mode 100644 index 272ed0b..0000000 --- a/build/lib/configs/stable.json +++ /dev/null @@ -1,466 +0,0 @@ -{ - "get_proxy_block_number": { - "module": "proxy", - "kwargs": {} - }, - "get_proxy_block_by_number": { - "module": "proxy", - "kwargs": { - "tag": "0x10d4f" - } - }, - "get_proxy_uncle_by_block_number_and_index": { - "module": "proxy", - "kwargs": { - "tag": "0x210A9B", - "index": "0x0" - } - }, - "get_proxy_block_transaction_count_by_number": { - "module": "proxy", - "kwargs": { - "tag": "0x10FB78" - } - }, - "get_proxy_transaction_by_hash": { - "module": "proxy", - "kwargs": { - "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" - } - }, - "get_proxy_transaction_by_block_number_and_index": { - "module": "proxy", - "kwargs": { - "tag": "0x10d4f", - "index": "0x0" - } - }, - "get_proxy_transaction_count": { - "module": "proxy", - "kwargs": { - "address": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2" - } - }, - "get_proxy_transaction_receipt": { - "module": "proxy", - "kwargs": { - "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" - } - }, - "get_proxy_call": { - "module": "proxy", - "kwargs": { - "to": "0xAEEF46DB4855E25702F8237E8f403FddcaF931C0", - "data": "0x70a08231000000000000000000000000e16359506c028e51f16be38986ec5746251e9724" - } - }, - "get_proxy_code_at": { - "module": "proxy", - "kwargs": { - "address": "0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c" - } - }, - "get_proxy_storage_position_at": { - "module": "proxy", - "kwargs": { - "position": "0x0", - "address": "0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd" - } - }, - "get_proxy_gas_price": { - "module": "proxy", - "kwargs": {} - }, - "get_proxy_est_gas": { - "module": "proxy", - "kwargs": { - "data": "0x4e71d92d", - "to": "0xf0160428a8552ac9bb7e050d90eeade4ddd52843", - "value": "0xff22", - "gas_price": "0x51da038cc", - "gas": "0x5f5e0ff" - } - }, - "get_est_confirmation_time": { - "module": "gastracker", - "kwargs": { - "gas_price": "2000000000" - } - }, - "get_gas_oracle": { - "module": "gastracker", - "kwargs": {} - }, - "get_block_reward_by_block_number": { - "module": "blocks", - "kwargs": { - "block_no": "2165403" - } - }, - "get_est_block_countdown_time_by_block_number": { - "module": "blocks", - "kwargs": { - "block_no": "99999999" - } - }, - "get_block_number_by_timestamp": { - "module": "blocks", - "kwargs": { - "timestamp": "1578638524", - "closest": "before" - } - }, - "get_total_eth_supply": { - "module": "stats", - "kwargs": {} - }, - "get_eth_last_price": { - "module": "stats", - "kwargs": {} - }, - "get_eth_nodes_size": { - "module": "stats", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "client_type": "geth", - "sync_mode": "default", - "sort": "asc" - } - }, - "get_total_supply_by_contract_address": { - "module": "tokens", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055" - } - }, - "get_acc_balance_by_token_and_contract_address": { - "module": "tokens", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761" - } - }, - "get_contract_abi": { - "module": "contracts", - "kwargs": { - "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" - } - }, - "get_contract_source_code": { - "module": "contracts", - "kwargs": { - "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" - } - }, - "get_contract_execution_status": { - "module": "transactions", - "kwargs": { - "txhash": "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a" - } - }, - "get_tx_receipt_status": { - "module": "transactions", - "kwargs": { - "txhash": "0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76" - } - }, - "get_eth_balance": { - "module": "accounts", - "kwargs": { - "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a" - } - }, - "get_eth_balance_multiple": { - "module": "accounts", - "kwargs": { - "addresses": [ - "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", - "0x63a9975ba31b0b9626b34300f7f627147df1f526", - "0x198ef1ec325a96cc354c7266a038be8b5c558f67" - ] - } - }, - "get_normal_txs_by_address": { - "module": "accounts", - "kwargs": { - "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", - "startblock": 0, - "endblock": 99999999, - "sort": "asc" - } - }, - "get_normal_txs_by_address_paginated": { - "module": "accounts", - "kwargs": { - "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", - "startblock": 0, - "endblock": 99999999, - "page": 1, - "offset": 10, - "sort": "asc" - } - }, - "get_internal_txs_by_address": { - "module": "accounts", - "kwargs": { - "address": "0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3", - "startblock": 0, - "endblock": 2702578, - "sort": "asc" - } - }, - "get_internal_txs_by_address_paginated": { - "module": "accounts", - "kwargs": { - "address": "0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3", - "startblock": 0, - "endblock": 2702578, - "page": 1, - "offset": 10, - "sort": "asc" - } - }, - "get_internal_txs_by_txhash": { - "module": "accounts", - "kwargs": { - "txhash": "0x40eb908387324f2b575b4879cd9d7188f69c8fc9d87c901b9e2daaea4b442170" - } - }, - "get_internal_txs_by_block_range_paginated": { - "module": "accounts", - "kwargs": { - "startblock": 0, - "endblock": 2702578, - "page": 1, - "offset": 10, - "sort": "asc" - } - }, - "get_erc20_token_transfer_events_by_address": { - "module": "accounts", - "kwargs": { - "address": "0x4e83362442b8d1bec281594cea3050c8eb01311c", - "startblock": 0, - "endblock": 999999999, - "sort": "asc" - } - }, - "get_erc20_token_transfer_events_by_contract_address_paginated": { - "module": "accounts", - "kwargs": { - "contract_address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", - "page": 1, - "offset": 100, - "sort": "asc" - } - }, - "get_erc20_token_transfer_events_by_address_and_contract_paginated": { - "module": "accounts", - "kwargs": { - "contract_address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", - "address": "0x4e83362442b8d1bec281594cea3050c8eb01311c", - "page": 1, - "offset": 100, - "sort": "asc" - } - }, - "get_erc721_token_transfer_events_by_address": { - "module": "accounts", - "kwargs": { - "address": "0x6975be450864c02b4613023c2152ee0743572325", - "startblock": 0, - "endblock": 999999999, - "sort": "asc" - } - }, - "get_erc721_token_transfer_events_by_contract_address_paginated": { - "module": "accounts", - "kwargs": { - "contract_address": "0x06012c8cf97bead5deae237070f9587f8e7a266d", - "page": 1, - "offset": 100, - "sort": "asc" - } - }, - "get_erc721_token_transfer_events_by_address_and_contract_paginated": { - "module": "accounts", - "kwargs": { - "contract_address": "0x06012c8cf97bead5deae237070f9587f8e7a266d", - "address": "0x6975be450864c02b4613023c2152ee0743572325", - "page": 1, - "offset": 100, - "sort": "asc" - } - }, - "get_mined_blocks_by_address": { - "module": "accounts", - "kwargs": { - "address": "0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b" - } - }, - "get_mined_blocks_by_address_paginated": { - "module": "accounts", - "kwargs": { - "address": "0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b", - "page": 1, - "offset": 100 - } - }, - "get_hist_eth_balance_for_address_by_block_no": { - "module": "pro", - "kwargs": { - "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", - "block_no": "8000000" - } - }, - "get_daily_average_block_size": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_block_time": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_uncle_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "block_no": "8000000" - } - }, - "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", - "block_no": "8000000" - } - }, - "get_token_info_by_contract_address": { - "module": "pro", - "kwargs": { - "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" - } - }, - "get_daily_average_gas_limit": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_total_gas_used": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_average_gas_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_network_tx_fee": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_new_address_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_network_utilization": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_hash_rate": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_tx_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_difficulty": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_daily_market_cap": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - } -} \ No newline at end of file diff --git a/build/lib/etherscan/__init__.py b/build/lib/etherscan/__init__.py deleted file mode 100644 index 7b527d3..0000000 --- a/build/lib/etherscan/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -from .etherscan import Etherscan -from .modules.accounts import Accounts as accounts -from .modules.blocks import Blocks as blocks -from .modules.contracts import Contracts as contracts -from .modules.gastracker import GasTracker as gastracker -from .modules.pro import Pro as pro -from .modules.proxy import Proxy as proxy -from .modules.stats import Stats as stats -from .modules.tokens import Tokens as tokens -from .modules.transactions import Transactions as transactions diff --git a/build/lib/etherscan/enums/__init__.py b/build/lib/etherscan/enums/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/build/lib/etherscan/enums/actions_enum.py b/build/lib/etherscan/enums/actions_enum.py deleted file mode 100644 index 20c81cb..0000000 --- a/build/lib/etherscan/enums/actions_enum.py +++ /dev/null @@ -1,63 +0,0 @@ -from dataclasses import dataclass - - -@dataclass(frozen=True) -class ActionsEnum: - BALANCE_HISTORY: str = "balancehistory" - BALANCE_MULTI: str = "balancemulti" - BALANCE: str = "balance" - CHAIN_SIZE: str = "chainsize" - DAILY_AVG_BLOCK_SIZE: str = "dailyavgblocksize" - DAILY_AVG_BLOCK_TIME: str = "dailyavgblocktime" - DAILY_AVG_GAS_LIMIT: str = "dailyavggaslimit" - DAILY_AVG_GAS_PRICE: str = "dailyavggasprice" - DAILY_AVG_HASH_RATE: str = "dailyavghashrate" - DAILY_AVG_NET_DIFFICULTY: str = "dailyavgnetdifficulty" - DAILY_BLK_COUNT: str = "dailyblkcount" - DAILY_BLOCK_REWARDS: str = "dailyblockrewards" - DAILY_GAS_USED: str = "dailygasused" - DAILY_NET_UTILIZATION: str = "dailynetutilization" - DAILY_NEW_ADDRESS: str = "dailynewaddress" - DAILY_TX: str = "dailytx" - DAILY_TXN_FEE: str = "dailytxnfee" - DAILY_UNCLE_BLK_COUNT: str = "dailyuncleblkcount" - ETH_BLOCK_NUMBER: str = "eth_blockNumber" - ETH_CALL: str = "eth_call" - ETH_DAILY_MARKET_CAP: str = "ethdailymarketcap" - ETH_DAILY_PRICE: str = "ethdailyprice" - ETH_ESTIMATE_GAS: str = "eth_estimateGas" - ETH_GAS_PRICE: str = "eth_gasPrice" - ETH_GET_BLOCK_BY_NUMBER: str = "eth_getBlockByNumber" - ETH_GET_BLOCK_TRANSACTION_COUNT_BY_NUMBER: str = ( - "eth_getBlockTransactionCountByNumber" - ) - ETH_GET_CODE: str = "eth_getCode" - ETH_GET_STORAGE_AT: str = "eth_getStorageAt" - ETH_GET_TRANSACTION_BY_BLOCK_NUMBER_AND_INDEX: str = ( - "eth_getTransactionByBlockNumberAndIndex" - ) - ETH_GET_TRANSACTION_BY_HASH: str = "eth_getTransactionByHash" - ETH_GET_TRANSACTION_COUNT: str = "eth_getTransactionCount" - ETH_GET_TRANSACTION_RECEIPT: str = "eth_getTransactionReceipt" - ETH_GET_UNCLE_BY_BLOCK_NUMBER_AND_INDEX: str = "eth_getUncleByBlockNumberAndIndex" - ETH_PRICE: str = "ethprice" - ETH_SUPPLY: str = "ethsupply" - GAS_ESTIMATE: str = "gasestimate" - GAS_ORACLE: str = "gasoracle" - GET_ABI: str = "getabi" - GET_BLOCK_COUNTDOWN: str = "getblockcountdown" - GET_BLOCK_NUMBER_BY_TIME: str = "getblocknobytime" - GET_BLOCK_REWARD: str = "getblockreward" - GET_MINED_BLOCKS: str = "getminedblocks" - GET_SOURCE_CODE: str = "getsourcecode" - GET_STATUS: str = "getstatus" - GET_TX_RECEIPT_STATUS: str = "gettxreceiptstatus" - TOKEN_BALANCE_HISTORY: str = "tokenbalancehistory" - TOKEN_BALANCE: str = "tokenbalance" - TOKEN_INFO: str = "tokeninfo" - TOKEN_SUPPLY_HISTORY: str = "tokensupplyhistory" - TOKEN_SUPPLY: str = "tokensupply" - TOKENNFTTX: str = "tokennfttx" - TOKENTX: str = "tokentx" - TXLIST_INTERNAL: str = "txlistinternal" - TXLIST: str = "txlist" diff --git a/build/lib/etherscan/enums/fields_enum.py b/build/lib/etherscan/enums/fields_enum.py deleted file mode 100644 index a85fb77..0000000 --- a/build/lib/etherscan/enums/fields_enum.py +++ /dev/null @@ -1,35 +0,0 @@ -from dataclasses import dataclass - - -@dataclass(frozen=True) -class FieldsEnum: - ACTION: str = "&action=" - ADDRESS: str = "&address=" - API_KEY: str = "&apikey=" - BLOCK_TYPE: str = "&blocktype=" - BLOCKNO: str = "&blockno=" - BOOLEAN: str = "&boolean=" - CLIENT_TYPE: str = "&clienttype=" - CLOSEST: str = "&closest=" - CONTRACT_ADDRESS: str = "&contractaddress=" - DATA: str = "&data=" - END_BLOCK: str = "&endblock=" - END_DATE: str = "&enddate=" - GAS_PRICE: str = "&gasPrice=" - GAS: str = "&gas=" - HEX: str = "&hex=" - INDEX: str = "&index=" - MODULE: str = "module=" - OFFSET: str = "&offset=" - PAGE: str = "&page=" - POSITION: str = "&position=" - PREFIX: str = "https://api.etherscan.io/api?" - SORT: str = "&sort=" - START_BLOCK: str = "&startblock=" - START_DATE: str = "&startdate=" - SYNC_MODE: str = "&syncmode=" - TAG: str = "&tag=" - TIMESTAMP: str = "×tamp=" - TO: str = "&to=" - TXHASH: str = "&txhash=" - VALUE: str = "&value=" diff --git a/build/lib/etherscan/enums/modules_enum.py b/build/lib/etherscan/enums/modules_enum.py deleted file mode 100644 index e02e11c..0000000 --- a/build/lib/etherscan/enums/modules_enum.py +++ /dev/null @@ -1,14 +0,0 @@ -from dataclasses import dataclass - - -@dataclass(frozen=True) -class ModulesEnum: - ACCOUNT: str = "account" - BLOCK: str = "block" - CONTRACT: str = "contract" - GASTRACKER: str = "gastracker" - PROXY: str = "proxy" - STATS: str = "stats" - TOKEN: str = "token" - TRANSACTION: str = "transaction" - diff --git a/build/lib/etherscan/enums/tags_enum.py b/build/lib/etherscan/enums/tags_enum.py deleted file mode 100644 index 03520fb..0000000 --- a/build/lib/etherscan/enums/tags_enum.py +++ /dev/null @@ -1,7 +0,0 @@ -from dataclasses import dataclass - - -@dataclass(frozen=True) -class TagsEnum: - ACCOUNT: str = "account" - LATEST: str = "latest" diff --git a/build/lib/etherscan/etherscan.py b/build/lib/etherscan/etherscan.py deleted file mode 100644 index 0b8b8f6..0000000 --- a/build/lib/etherscan/etherscan.py +++ /dev/null @@ -1,37 +0,0 @@ -import json - -import requests - -import etherscan -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.utils.parsing import ResponseParser as parser - - -class Etherscan: - @staticmethod - def __load_config(config_path: str) -> dict: - with open(config_path, "r") as f: - return json.load(f) - - @staticmethod - def __run(func, api_key): - def wrapper(*args, **kwargs): - url = ( - f"{fields.PREFIX}" - f"{func(*args, **kwargs)}" - f"{fields.API_KEY}" - f"{api_key}" - ) - r = requests.get(url) - return parser.parse(r) - - return wrapper - - @classmethod - def from_config(cls, config_path: str, api_key: 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)) - return cls diff --git a/build/lib/etherscan/modules/__init__.py b/build/lib/etherscan/modules/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/build/lib/etherscan/modules/accounts.py b/build/lib/etherscan/modules/accounts.py deleted file mode 100644 index 831b90d..0000000 --- a/build/lib/etherscan/modules/accounts.py +++ /dev/null @@ -1,330 +0,0 @@ -from functools import reduce -from typing import List - -from etherscan.enums.actions_enum import ActionsEnum as actions -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.enums.modules_enum import ModulesEnum as modules -from etherscan.enums.tags_enum import TagsEnum as tags - - -class Accounts: - @staticmethod - def get_eth_balance(address: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.BALANCE}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.TAG}" - f"{tags.LATEST}" - ) - return url - # r = requests.get(url) - # return conversions.to_ticker_unit(parser.get_result(r)) - - @staticmethod - def get_eth_balance_multiple(addresses: List[str]) -> str: - # NOTE: Max 20 wallets at a time - address_list = reduce(lambda w1, w2: str(w1) + "," + str(w2), addresses) - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.BALANCE_MULTI}" - f"{fields.ADDRESS}" - f"{address_list}" - f"{fields.TAG}" - f"{tags.LATEST}" - ) - return url - # r = requests.get(url) - # return [conversions.to_ticker_unit(r["balance"]) for r in parser.get_result(r)] - - @staticmethod - def get_normal_txs_by_address( - address: str, startblock: int, endblock: int, sort: str, - ) -> str: - # NOTE: Returns the last 10k events - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TXLIST}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.START_BLOCK}" - f"{str(startblock)}" - f"{fields.END_BLOCK}" - f"{str(endblock)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_normal_txs_by_address_paginated( - address: str, page: int, offset: int, startblock: int, endblock: int, sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TXLIST}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.START_BLOCK}" - f"{str(startblock)}" - f"{fields.END_BLOCK}" - f"{str(endblock)}" - f"{fields.SORT}" - f"{sort}" - f"{fields.PAGE}" - f"{str(page)}" - f"{fields.OFFSET}" - f"{str(offset)}" - ) - return url - - @staticmethod - def get_internal_txs_by_address( - address: str, startblock: int, endblock: int, sort: str, - ) -> str: - # NOTE: Returns the last 10k events - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TXLIST_INTERNAL}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.START_BLOCK}" - f"{str(startblock)}" - f"{fields.END_BLOCK}" - f"{str(endblock)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_internal_txs_by_address_paginated( - address: str, page: int, offset: int, startblock: int, endblock: int, sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TXLIST_INTERNAL}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.START_BLOCK}" - f"{str(startblock)}" - f"{fields.END_BLOCK}" - f"{str(endblock)}" - f"{fields.SORT}" - f"{sort}" - f"{fields.PAGE}" - f"{str(page)}" - f"{fields.OFFSET}" - f"{str(offset)}" - ) - return url - - @staticmethod - def get_internal_txs_by_txhash(txhash: str) -> str: - # NOTE: Returns the last 10k events - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TXLIST_INTERNAL}" - f"{fields.TXHASH}" - f"{txhash}" - ) - return url - - @staticmethod - def get_internal_txs_by_block_range_paginated( - startblock: int, endblock: int, page: int, offset: int, sort: str, - ) -> str: - # NOTE: Returns the last 10k events - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TXLIST_INTERNAL}" - f"{fields.START_BLOCK}" - f"{str(startblock)}" - f"{fields.END_BLOCK}" - f"{str(endblock)}" - f"{fields.SORT}" - f"{sort}" - f"{fields.PAGE}" - f"{str(page)}" - f"{fields.OFFSET}" - f"{str(offset)}" - ) - return url - - @staticmethod - def get_erc20_token_transfer_events_by_address( - address: str, startblock: int, endblock: int, sort: str, - ) -> str: - # NOTE: Returns the last 10k events - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TOKENTX}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.START_BLOCK}" - f"{str(startblock)}" - f"{fields.END_BLOCK}" - f"{str(endblock)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_erc20_token_transfer_events_by_contract_address_paginated( - contract_address: str, page: int, offset: int, sort: str - ) -> str: - - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TOKENTX}" - f"{fields.CONTRACT_ADDRESS}" - f"{contract_address}" - f"{fields.SORT}" - f"{sort}" - f"{fields.PAGE}" - f"{str(page)}" - f"{fields.OFFSET}" - f"{str(offset)}" - ) - return url - - @staticmethod - def get_erc20_token_transfer_events_by_address_and_contract_paginated( - contract_address: str, address: str, page: int, offset: int, sort: str - ) -> str: - - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TOKENTX}" - f"{fields.CONTRACT_ADDRESS}" - f"{contract_address}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.SORT}" - f"{sort}" - f"{fields.PAGE}" - f"{str(page)}" - f"{fields.OFFSET}" - f"{str(offset)}" - ) - return url - - @staticmethod - def get_erc721_token_transfer_events_by_address( - address: str, startblock: int, endblock: int, sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TOKENNFTTX}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.START_BLOCK}" - f"{str(startblock)}" - f"{fields.END_BLOCK}" - f"{str(endblock)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_erc721_token_transfer_events_by_contract_address_paginated( - contract_address: str, page: int, offset: int, sort: str - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TOKENNFTTX}" - f"{fields.CONTRACT_ADDRESS}" - f"{contract_address}" - f"{fields.SORT}" - f"{sort}" - f"{fields.PAGE}" - f"{str(page)}" - f"{fields.OFFSET}" - f"{str(offset)}" - ) - return url - - @staticmethod - def get_erc721_token_transfer_events_by_address_and_contract_paginated( - contract_address: str, address: str, page: int, offset: int, sort: str - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TOKENNFTTX}" - f"{fields.CONTRACT_ADDRESS}" - f"{contract_address}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.SORT}" - f"{sort}" - f"{fields.PAGE}" - f"{str(page)}" - f"{fields.OFFSET}" - f"{str(offset)}" - ) - return url - - @staticmethod - def get_mined_blocks_by_address(address: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.GET_MINED_BLOCKS}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.BLOCK_TYPE}" - f"blocks" - ) - return url - - @staticmethod - def get_mined_blocks_by_address_paginated( - address: str, page: int, offset: int - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.GET_MINED_BLOCKS}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.BLOCK_TYPE}" - f"blocks" - f"{fields.PAGE}" - f"{str(page)}" - f"{fields.OFFSET}" - f"{str(offset)}" - ) - return url diff --git a/build/lib/etherscan/modules/blocks.py b/build/lib/etherscan/modules/blocks.py deleted file mode 100644 index c74b6e1..0000000 --- a/build/lib/etherscan/modules/blocks.py +++ /dev/null @@ -1,44 +0,0 @@ -from etherscan.enums.actions_enum import ActionsEnum as actions -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.enums.modules_enum import ModulesEnum as modules - - -class Blocks: - @staticmethod - def get_block_reward_by_block_number(block_no: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.BLOCK}" - f"{fields.ACTION}" - f"{actions.GET_BLOCK_REWARD}" - f"{fields.BLOCKNO}" - f"{block_no}" - ) - return url - - @staticmethod - def get_est_block_countdown_time_by_block_number(block_no: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.BLOCK}" - f"{fields.ACTION}" - f"{actions.GET_BLOCK_COUNTDOWN}" - f"{fields.BLOCKNO}" - f"{block_no}" - ) - return url - - @staticmethod - def get_block_number_by_timestamp(timestamp: int, closest: str) -> str: - # NOTE: Supports UNIX timestamps in seconds - url = ( - f"{fields.MODULE}" - f"{modules.BLOCK}" - f"{fields.ACTION}" - f"{actions.GET_BLOCK_NUMBER_BY_TIME}" - f"{fields.TIMESTAMP}" - f"{timestamp}" - f"{fields.CLOSEST}" - f"{closest}" - ) - return url diff --git a/build/lib/etherscan/modules/contracts.py b/build/lib/etherscan/modules/contracts.py deleted file mode 100644 index 6e8b85a..0000000 --- a/build/lib/etherscan/modules/contracts.py +++ /dev/null @@ -1,29 +0,0 @@ -from etherscan.enums.actions_enum import ActionsEnum as actions -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.enums.modules_enum import ModulesEnum as modules - - -class Contracts: - @staticmethod - def get_contract_abi(address: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.CONTRACT}" - f"{fields.ACTION}" - f"{actions.GET_ABI}" - f"{fields.ADDRESS}" - f"{address}" - ) - return url - - @staticmethod - def get_contract_source_code(address: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.CONTRACT}" - f"{fields.ACTION}" - f"{actions.GET_SOURCE_CODE}" - f"{fields.ADDRESS}" - f"{address}" - ) - return url diff --git a/build/lib/etherscan/modules/gastracker.py b/build/lib/etherscan/modules/gastracker.py deleted file mode 100644 index 191a8c3..0000000 --- a/build/lib/etherscan/modules/gastracker.py +++ /dev/null @@ -1,29 +0,0 @@ -from etherscan.enums.actions_enum import ActionsEnum as actions -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.enums.modules_enum import ModulesEnum as modules - - -class GasTracker: - @staticmethod - def get_est_confirmation_time(gas_price: int) -> str: - # NOTE: gas_price in wei, result in seconds - url = ( - f"{fields.MODULE}" - f"{modules.GASTRACKER}" - f"{fields.ACTION}" - f"{actions.GAS_ESTIMATE}" - f"{fields.GAS_PRICE}" - f"{gas_price}" - ) - return url - - @staticmethod - def get_gas_oracle() -> str: - # NOTE: gas_price in wei, result in seconds - url = ( - f"{fields.MODULE}" - f"{modules.GASTRACKER}" - f"{fields.ACTION}" - f"{actions.GAS_ORACLE}" - ) - return url diff --git a/build/lib/etherscan/modules/pro.py b/build/lib/etherscan/modules/pro.py deleted file mode 100644 index 7ac0876..0000000 --- a/build/lib/etherscan/modules/pro.py +++ /dev/null @@ -1,391 +0,0 @@ -from functools import reduce -from typing import List - -from etherscan.enums.actions_enum import ActionsEnum as actions -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.enums.modules_enum import ModulesEnum as modules -from etherscan.enums.tags_enum import TagsEnum as tags - - -class Pro: - @staticmethod - def get_hist_eth_balance_for_address_by_block_no( - address: str, block_no: int - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.BALANCE_HISTORY}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.BLOCKNO}" - f"{block_no}" - ) - return url - - @staticmethod - def get_daily_average_block_size( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_AVG_BLOCK_SIZE}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_daily_block_count_and_rewards( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_BLK_COUNT}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_daily_block_rewards( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_BLOCK_REWARDS}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_daily_average_block_time( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_AVG_BLOCK_TIME}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_daily_uncle_block_count_and_rewards( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_UNCLE_BLK_COUNT}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_hist_erc20_token_total_supply_by_contract_address_and_block_no( - contract_address: str, block_no: int - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.TOKEN_SUPPLY_HISTORY}" - f"{fields.CONTRACT_ADDRESS}" - f"{contract_address}" - f"{fields.BLOCKNO}" - f"{block_no}" - ) - return url - - @staticmethod - def get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no( - contract_address: str, address: str, block_no: int - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TOKEN_BALANCE_HISTORY}" - f"{fields.CONTRACT_ADDRESS}" - f"{contract_address}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.BLOCKNO}" - f"{block_no}" - ) - return url - - @staticmethod - def get_token_info_by_contract_address(contract_address: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.TOKEN}" - f"{fields.ACTION}" - f"{actions.TOKEN_INFO}" - f"{fields.CONTRACT_ADDRESS}" - f"{contract_address}" - ) - return url - - @staticmethod - def get_daily_average_gas_limit( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_AVG_GAS_LIMIT}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_eth_daily_total_gas_used( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_GAS_USED}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_eth_daily_average_gas_price( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_AVG_GAS_PRICE}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_eth_daily_network_tx_fee( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_TXN_FEE}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_daily_new_address_count( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_NEW_ADDRESS}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_daily_network_utilization( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_NET_UTILIZATION}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_daily_average_network_hash_rate( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_AVG_HASH_RATE}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_daily_tx_count( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_TX}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_daily_average_network_difficulty( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.DAILY_AVG_NET_DIFFICULTY}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_eth_hist_daily_market_cap( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.ETH_DAILY_MARKET_CAP}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url - - @staticmethod - def get_eth_hist_price( - start_date: int, - end_date: int, - sort: str, - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.ETH_DAILY_PRICE}" - f"{fields.START_DATE}" - f"{str(start_date)}" - f"{fields.END_DATE}" - f"{str(end_date)}" - f"{fields.SORT}" - f"{sort}" - ) - return url diff --git a/build/lib/etherscan/modules/proxy.py b/build/lib/etherscan/modules/proxy.py deleted file mode 100644 index 3c5ffac..0000000 --- a/build/lib/etherscan/modules/proxy.py +++ /dev/null @@ -1,187 +0,0 @@ -from etherscan.enums.actions_enum import ActionsEnum as actions -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.enums.modules_enum import ModulesEnum as modules -from etherscan.enums.tags_enum import TagsEnum as tags - - -class Proxy: - @staticmethod - def get_proxy_block_number() -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_BLOCK_NUMBER}" - ) - return url - - @staticmethod - def get_proxy_block_by_number(tag: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GET_BLOCK_BY_NUMBER}" - f"{fields.TAG}" - f"{tag}" - f"{fields.BOOLEAN}" - f"true" - ) - return url - - @staticmethod - def get_proxy_uncle_by_block_number_and_index(tag: str, index: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GET_UNCLE_BY_BLOCK_NUMBER_AND_INDEX}" - f"{fields.TAG}" - f"{tag}" - f"{fields.INDEX}" - f"{index}" - ) - return url - - @staticmethod - def get_proxy_block_transaction_count_by_number(tag: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GET_BLOCK_TRANSACTION_COUNT_BY_NUMBER}" - f"{fields.TAG}" - f"{tag}" - ) - return url - - @staticmethod - def get_proxy_transaction_by_hash(txhash: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GET_TRANSACTION_BY_HASH}" - f"{fields.TXHASH}" - f"{txhash}" - ) - return url - - @staticmethod - def get_proxy_transaction_by_block_number_and_index(tag: str, index: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GET_TRANSACTION_BY_BLOCK_NUMBER_AND_INDEX}" - f"{fields.TAG}" - f"{tag}" - f"{fields.INDEX}" - f"{index}" - ) - return url - - @staticmethod - def get_proxy_transaction_count(address: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GET_TRANSACTION_COUNT}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.TAG}" - f"{tags.LATEST}" - ) - return url - - @staticmethod - def get_proxy_transaction_receipt(txhash: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GET_TRANSACTION_RECEIPT}" - f"{fields.TXHASH}" - f"{txhash}" - ) - return url - - @staticmethod - def get_proxy_call(to: str, data: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_CALL}" - f"{fields.TO}" - f"{to}" - f"{fields.DATA}" - f"{data}" - f"{fields.TAG}" - f"{tags.LATEST}" - ) - return url - - @staticmethod - def get_proxy_code_at(address: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GET_CODE}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.TAG}" - f"{tags.LATEST}" - ) - return url - - @staticmethod - def get_proxy_storage_position_at(position: str, address: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GET_STORAGE_AT}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.POSITION}" - f"{position}" - f"{fields.TAG}" - f"{tags.LATEST}" - ) - return url - - @staticmethod - def get_proxy_gas_price() -> str: - # NOTE: Results are in WEI - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_GAS_PRICE}" - ) - return url - - @staticmethod - def get_proxy_est_gas( - to: str, data: str, value: str, gas_price: str, gas: str - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.PROXY}" - f"{fields.ACTION}" - f"{actions.ETH_ESTIMATE_GAS}" - f"{fields.DATA}" - f"{data}" - f"{fields.TO}" - f"{to}" - f"{fields.VALUE}" - f"{value}" - f"{fields.GAS_PRICE}" - f"{gas_price}" - f"{fields.GAS}" - f"{gas}" - ) - return url diff --git a/build/lib/etherscan/modules/stats.py b/build/lib/etherscan/modules/stats.py deleted file mode 100644 index 816f46c..0000000 --- a/build/lib/etherscan/modules/stats.py +++ /dev/null @@ -1,47 +0,0 @@ -from etherscan.enums.actions_enum import ActionsEnum as actions -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.enums.modules_enum import ModulesEnum as modules - - -class Stats: - @staticmethod - def get_total_eth_supply() -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.ETH_SUPPLY}" - ) - return url - - @staticmethod - def get_eth_last_price() -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.ETH_PRICE}" - ) - return url - - @staticmethod - def get_eth_nodes_size( - start_date: str, end_date: str, client_type: str, sync_mode: str, sort: str - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.CHAIN_SIZE}" - f"{fields.START_DATE}" - f"{start_date}" - f"{fields.END_DATE}" - f"{end_date}" - f"{fields.CLIENT_TYPE}" - f"{client_type}" - f"{fields.SYNC_MODE}" - f"{sync_mode}" - f"{fields.SORT}" - f"{sort}" - ) - return url diff --git a/build/lib/etherscan/modules/tokens.py b/build/lib/etherscan/modules/tokens.py deleted file mode 100644 index 1c90745..0000000 --- a/build/lib/etherscan/modules/tokens.py +++ /dev/null @@ -1,36 +0,0 @@ -from etherscan.enums.actions_enum import ActionsEnum as actions -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.enums.modules_enum import ModulesEnum as modules -from etherscan.enums.tags_enum import TagsEnum as tags - - -class Tokens: - @staticmethod - def get_total_supply_by_contract_address(contract_address: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.STATS}" - f"{fields.ACTION}" - f"{actions.TOKEN_SUPPLY}" - f"{fields.CONTRACT_ADDRESS}" - f"{contract_address}" - ) - return url - - @staticmethod - def get_acc_balance_by_token_and_contract_address( - contract_address: str, address: str - ) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.ACCOUNT}" - f"{fields.ACTION}" - f"{actions.TOKEN_BALANCE}" - f"{fields.CONTRACT_ADDRESS}" - f"{contract_address}" - f"{fields.ADDRESS}" - f"{address}" - f"{fields.TAG}" - f"{tags.LATEST}" - ) - return url diff --git a/build/lib/etherscan/modules/transactions.py b/build/lib/etherscan/modules/transactions.py deleted file mode 100644 index 693089b..0000000 --- a/build/lib/etherscan/modules/transactions.py +++ /dev/null @@ -1,29 +0,0 @@ -from etherscan.enums.actions_enum import ActionsEnum as actions -from etherscan.enums.fields_enum import FieldsEnum as fields -from etherscan.enums.modules_enum import ModulesEnum as modules - - -class Transactions: - @staticmethod - def get_contract_execution_status(txhash: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.TRANSACTION}" - f"{fields.ACTION}" - f"{actions.GET_STATUS}" - f"{fields.TXHASH}" - f"{txhash}" - ) - return url - - @staticmethod - def get_tx_receipt_status(txhash: str) -> str: - url = ( - f"{fields.MODULE}" - f"{modules.TRANSACTION}" - f"{fields.ACTION}" - f"{actions.GET_TX_RECEIPT_STATUS}" - f"{fields.TXHASH}" - f"{txhash}" - ) - return url diff --git a/build/lib/etherscan/utils/__init__.py b/build/lib/etherscan/utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/build/lib/etherscan/utils/conversions.py b/build/lib/etherscan/utils/conversions.py deleted file mode 100644 index 26fd503..0000000 --- a/build/lib/etherscan/utils/conversions.py +++ /dev/null @@ -1,13 +0,0 @@ -from decimal import Decimal - - -class Conversions: - @staticmethod - def to_ticker_unit(val: int, decimals: int = 18) -> Decimal: - factor = Decimal("10") ** Decimal("-{}".format(decimals)) - return Decimal(val) * factor - - @staticmethod - def to_smallest_unit(val: int, decimals: int = 18) -> Decimal: - factor = Decimal("10") ** Decimal("+{}".format(decimals)) - return Decimal(val) * factor diff --git a/build/lib/etherscan/utils/parsing.py b/build/lib/etherscan/utils/parsing.py deleted file mode 100644 index 3166fe2..0000000 --- a/build/lib/etherscan/utils/parsing.py +++ /dev/null @@ -1,18 +0,0 @@ -import requests - - -class ResponseParser: - @staticmethod - def parse(response: requests.Response): - content = response.json() - result = content["result"] - if "status" in content.keys(): - status = bool(int(content["status"])) - message = content["message"] - assert status, f"{result} -- {message}" - else: - # GETH or Parity proxy msg format - # TODO: see if we need those values - jsonrpc = content["jsonrpc"] - cid = int(content["id"]) - return result diff --git a/configs/__init__.py b/configs/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/configs/stable.json b/configs/stable.json deleted file mode 100644 index 272ed0b..0000000 --- a/configs/stable.json +++ /dev/null @@ -1,466 +0,0 @@ -{ - "get_proxy_block_number": { - "module": "proxy", - "kwargs": {} - }, - "get_proxy_block_by_number": { - "module": "proxy", - "kwargs": { - "tag": "0x10d4f" - } - }, - "get_proxy_uncle_by_block_number_and_index": { - "module": "proxy", - "kwargs": { - "tag": "0x210A9B", - "index": "0x0" - } - }, - "get_proxy_block_transaction_count_by_number": { - "module": "proxy", - "kwargs": { - "tag": "0x10FB78" - } - }, - "get_proxy_transaction_by_hash": { - "module": "proxy", - "kwargs": { - "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" - } - }, - "get_proxy_transaction_by_block_number_and_index": { - "module": "proxy", - "kwargs": { - "tag": "0x10d4f", - "index": "0x0" - } - }, - "get_proxy_transaction_count": { - "module": "proxy", - "kwargs": { - "address": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2" - } - }, - "get_proxy_transaction_receipt": { - "module": "proxy", - "kwargs": { - "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" - } - }, - "get_proxy_call": { - "module": "proxy", - "kwargs": { - "to": "0xAEEF46DB4855E25702F8237E8f403FddcaF931C0", - "data": "0x70a08231000000000000000000000000e16359506c028e51f16be38986ec5746251e9724" - } - }, - "get_proxy_code_at": { - "module": "proxy", - "kwargs": { - "address": "0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c" - } - }, - "get_proxy_storage_position_at": { - "module": "proxy", - "kwargs": { - "position": "0x0", - "address": "0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd" - } - }, - "get_proxy_gas_price": { - "module": "proxy", - "kwargs": {} - }, - "get_proxy_est_gas": { - "module": "proxy", - "kwargs": { - "data": "0x4e71d92d", - "to": "0xf0160428a8552ac9bb7e050d90eeade4ddd52843", - "value": "0xff22", - "gas_price": "0x51da038cc", - "gas": "0x5f5e0ff" - } - }, - "get_est_confirmation_time": { - "module": "gastracker", - "kwargs": { - "gas_price": "2000000000" - } - }, - "get_gas_oracle": { - "module": "gastracker", - "kwargs": {} - }, - "get_block_reward_by_block_number": { - "module": "blocks", - "kwargs": { - "block_no": "2165403" - } - }, - "get_est_block_countdown_time_by_block_number": { - "module": "blocks", - "kwargs": { - "block_no": "99999999" - } - }, - "get_block_number_by_timestamp": { - "module": "blocks", - "kwargs": { - "timestamp": "1578638524", - "closest": "before" - } - }, - "get_total_eth_supply": { - "module": "stats", - "kwargs": {} - }, - "get_eth_last_price": { - "module": "stats", - "kwargs": {} - }, - "get_eth_nodes_size": { - "module": "stats", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "client_type": "geth", - "sync_mode": "default", - "sort": "asc" - } - }, - "get_total_supply_by_contract_address": { - "module": "tokens", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055" - } - }, - "get_acc_balance_by_token_and_contract_address": { - "module": "tokens", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761" - } - }, - "get_contract_abi": { - "module": "contracts", - "kwargs": { - "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" - } - }, - "get_contract_source_code": { - "module": "contracts", - "kwargs": { - "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" - } - }, - "get_contract_execution_status": { - "module": "transactions", - "kwargs": { - "txhash": "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a" - } - }, - "get_tx_receipt_status": { - "module": "transactions", - "kwargs": { - "txhash": "0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76" - } - }, - "get_eth_balance": { - "module": "accounts", - "kwargs": { - "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a" - } - }, - "get_eth_balance_multiple": { - "module": "accounts", - "kwargs": { - "addresses": [ - "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", - "0x63a9975ba31b0b9626b34300f7f627147df1f526", - "0x198ef1ec325a96cc354c7266a038be8b5c558f67" - ] - } - }, - "get_normal_txs_by_address": { - "module": "accounts", - "kwargs": { - "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", - "startblock": 0, - "endblock": 99999999, - "sort": "asc" - } - }, - "get_normal_txs_by_address_paginated": { - "module": "accounts", - "kwargs": { - "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", - "startblock": 0, - "endblock": 99999999, - "page": 1, - "offset": 10, - "sort": "asc" - } - }, - "get_internal_txs_by_address": { - "module": "accounts", - "kwargs": { - "address": "0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3", - "startblock": 0, - "endblock": 2702578, - "sort": "asc" - } - }, - "get_internal_txs_by_address_paginated": { - "module": "accounts", - "kwargs": { - "address": "0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3", - "startblock": 0, - "endblock": 2702578, - "page": 1, - "offset": 10, - "sort": "asc" - } - }, - "get_internal_txs_by_txhash": { - "module": "accounts", - "kwargs": { - "txhash": "0x40eb908387324f2b575b4879cd9d7188f69c8fc9d87c901b9e2daaea4b442170" - } - }, - "get_internal_txs_by_block_range_paginated": { - "module": "accounts", - "kwargs": { - "startblock": 0, - "endblock": 2702578, - "page": 1, - "offset": 10, - "sort": "asc" - } - }, - "get_erc20_token_transfer_events_by_address": { - "module": "accounts", - "kwargs": { - "address": "0x4e83362442b8d1bec281594cea3050c8eb01311c", - "startblock": 0, - "endblock": 999999999, - "sort": "asc" - } - }, - "get_erc20_token_transfer_events_by_contract_address_paginated": { - "module": "accounts", - "kwargs": { - "contract_address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", - "page": 1, - "offset": 100, - "sort": "asc" - } - }, - "get_erc20_token_transfer_events_by_address_and_contract_paginated": { - "module": "accounts", - "kwargs": { - "contract_address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", - "address": "0x4e83362442b8d1bec281594cea3050c8eb01311c", - "page": 1, - "offset": 100, - "sort": "asc" - } - }, - "get_erc721_token_transfer_events_by_address": { - "module": "accounts", - "kwargs": { - "address": "0x6975be450864c02b4613023c2152ee0743572325", - "startblock": 0, - "endblock": 999999999, - "sort": "asc" - } - }, - "get_erc721_token_transfer_events_by_contract_address_paginated": { - "module": "accounts", - "kwargs": { - "contract_address": "0x06012c8cf97bead5deae237070f9587f8e7a266d", - "page": 1, - "offset": 100, - "sort": "asc" - } - }, - "get_erc721_token_transfer_events_by_address_and_contract_paginated": { - "module": "accounts", - "kwargs": { - "contract_address": "0x06012c8cf97bead5deae237070f9587f8e7a266d", - "address": "0x6975be450864c02b4613023c2152ee0743572325", - "page": 1, - "offset": 100, - "sort": "asc" - } - }, - "get_mined_blocks_by_address": { - "module": "accounts", - "kwargs": { - "address": "0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b" - } - }, - "get_mined_blocks_by_address_paginated": { - "module": "accounts", - "kwargs": { - "address": "0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b", - "page": 1, - "offset": 100 - } - }, - "get_hist_eth_balance_for_address_by_block_no": { - "module": "pro", - "kwargs": { - "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", - "block_no": "8000000" - } - }, - "get_daily_average_block_size": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_block_time": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_uncle_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "block_no": "8000000" - } - }, - "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", - "block_no": "8000000" - } - }, - "get_token_info_by_contract_address": { - "module": "pro", - "kwargs": { - "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" - } - }, - "get_daily_average_gas_limit": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_total_gas_used": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_average_gas_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_network_tx_fee": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_new_address_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_network_utilization": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_hash_rate": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_tx_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_difficulty": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_daily_market_cap": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - } -} \ No newline at end of file diff --git a/dist/etherscan-python-2.0.0.tar.gz b/dist/etherscan-python-2.0.0.tar.gz deleted file mode 100644 index 6bc6bfeab36e0ca493364fe60331463d921ebf15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11710 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 UmOboY&s%x^A0A6eIsga)0D#(RBLDyZ diff --git a/dist/etherscan_python-2.0.0-py3-none-any.whl b/dist/etherscan_python-2.0.0-py3-none-any.whl deleted file mode 100644 index a7543f4ab630c0507e269aef9cecfb07845008cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14613 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 Date: Thu, 5 Nov 2020 14:55:45 +0100 Subject: [PATCH 09/64] Added configs to manifest --- MANIFEST.in | 1 + setup.py | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 MANIFEST.in diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..39d0704 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include etherscan/configs/stable.json \ No newline at end of file diff --git a/setup.py b/setup.py index 7617e16..abd27e2 100644 --- a/setup.py +++ b/setup.py @@ -13,9 +13,8 @@ "etherscan.enums", "etherscan.modules", "etherscan.utils", - "configs", ], install_requires=["requests", "coverage"], - package_data={"configs": ["*"]}, + include_package_data=True, zip_safe=False, ) From ebebb9ee93ba6fa83bfc5491d84fb2f22d45dec8 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Thu, 5 Nov 2020 14:55:55 +0100 Subject: [PATCH 10/64] Moved configs --- etherscan/configs/stable.json | 466 ++++++++++++++++++++++++++++++++++ 1 file changed, 466 insertions(+) create mode 100644 etherscan/configs/stable.json diff --git a/etherscan/configs/stable.json b/etherscan/configs/stable.json new file mode 100644 index 0000000..272ed0b --- /dev/null +++ b/etherscan/configs/stable.json @@ -0,0 +1,466 @@ +{ + "get_proxy_block_number": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_block_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10d4f" + } + }, + "get_proxy_uncle_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x210A9B", + "index": "0x0" + } + }, + "get_proxy_block_transaction_count_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10FB78" + } + }, + "get_proxy_transaction_by_hash": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_transaction_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x10d4f", + "index": "0x0" + } + }, + "get_proxy_transaction_count": { + "module": "proxy", + "kwargs": { + "address": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2" + } + }, + "get_proxy_transaction_receipt": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_call": { + "module": "proxy", + "kwargs": { + "to": "0xAEEF46DB4855E25702F8237E8f403FddcaF931C0", + "data": "0x70a08231000000000000000000000000e16359506c028e51f16be38986ec5746251e9724" + } + }, + "get_proxy_code_at": { + "module": "proxy", + "kwargs": { + "address": "0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c" + } + }, + "get_proxy_storage_position_at": { + "module": "proxy", + "kwargs": { + "position": "0x0", + "address": "0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd" + } + }, + "get_proxy_gas_price": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_est_gas": { + "module": "proxy", + "kwargs": { + "data": "0x4e71d92d", + "to": "0xf0160428a8552ac9bb7e050d90eeade4ddd52843", + "value": "0xff22", + "gas_price": "0x51da038cc", + "gas": "0x5f5e0ff" + } + }, + "get_est_confirmation_time": { + "module": "gastracker", + "kwargs": { + "gas_price": "2000000000" + } + }, + "get_gas_oracle": { + "module": "gastracker", + "kwargs": {} + }, + "get_block_reward_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "2165403" + } + }, + "get_est_block_countdown_time_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "99999999" + } + }, + "get_block_number_by_timestamp": { + "module": "blocks", + "kwargs": { + "timestamp": "1578638524", + "closest": "before" + } + }, + "get_total_eth_supply": { + "module": "stats", + "kwargs": {} + }, + "get_eth_last_price": { + "module": "stats", + "kwargs": {} + }, + "get_eth_nodes_size": { + "module": "stats", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "client_type": "geth", + "sync_mode": "default", + "sort": "asc" + } + }, + "get_total_supply_by_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055" + } + }, + "get_acc_balance_by_token_and_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761" + } + }, + "get_contract_abi": { + "module": "contracts", + "kwargs": { + "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" + } + }, + "get_contract_source_code": { + "module": "contracts", + "kwargs": { + "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" + } + }, + "get_contract_execution_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a" + } + }, + "get_tx_receipt_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76" + } + }, + "get_eth_balance": { + "module": "accounts", + "kwargs": { + "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a" + } + }, + "get_eth_balance_multiple": { + "module": "accounts", + "kwargs": { + "addresses": [ + "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", + "0x63a9975ba31b0b9626b34300f7f627147df1f526", + "0x198ef1ec325a96cc354c7266a038be8b5c558f67" + ] + } + }, + "get_normal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", + "startblock": 0, + "endblock": 99999999, + "sort": "asc" + } + }, + "get_normal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", + "startblock": 0, + "endblock": 99999999, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3", + "startblock": 0, + "endblock": 2702578, + "sort": "asc" + } + }, + "get_internal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3", + "startblock": 0, + "endblock": 2702578, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_txhash": { + "module": "accounts", + "kwargs": { + "txhash": "0x40eb908387324f2b575b4879cd9d7188f69c8fc9d87c901b9e2daaea4b442170" + } + }, + "get_internal_txs_by_block_range_paginated": { + "module": "accounts", + "kwargs": { + "startblock": 0, + "endblock": 2702578, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x4e83362442b8d1bec281594cea3050c8eb01311c", + "startblock": 0, + "endblock": 999999999, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", + "address": "0x4e83362442b8d1bec281594cea3050c8eb01311c", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x6975be450864c02b4613023c2152ee0743572325", + "startblock": 0, + "endblock": 999999999, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x06012c8cf97bead5deae237070f9587f8e7a266d", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x06012c8cf97bead5deae237070f9587f8e7a266d", + "address": "0x6975be450864c02b4613023c2152ee0743572325", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_mined_blocks_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b" + } + }, + "get_mined_blocks_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b", + "page": 1, + "offset": 100 + } + }, + "get_hist_eth_balance_for_address_by_block_no": { + "module": "pro", + "kwargs": { + "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", + "block_no": "8000000" + } + }, + "get_daily_average_block_size": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_block_time": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_uncle_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "block_no": "8000000" + } + }, + "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", + "block_no": "8000000" + } + }, + "get_token_info_by_contract_address": { + "module": "pro", + "kwargs": { + "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" + } + }, + "get_daily_average_gas_limit": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_total_gas_used": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_average_gas_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_network_tx_fee": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_new_address_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_network_utilization": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_hash_rate": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_tx_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_difficulty": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_daily_market_cap": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + } +} \ No newline at end of file From 671d0c97ced39e40c29ec3a40c1489cdee0eb400 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Thu, 5 Nov 2020 14:56:48 +0100 Subject: [PATCH 11/64] Updated version to 2.0.1 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index abd27e2..32c7797 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="etherscan-python", - version="2.0.0", + version="2.0.1", description="A minimal, yet complete, python API for etherscan.io.", url="https://github.com/pcko1/etherscan-python", author="Panagiotis-Christos Kotsias", From 4e8dc2fd1e240edfd0af2604937cd5382e61e8b4 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Sat, 7 Nov 2020 18:50:39 +0100 Subject: [PATCH 12/64] Added __init__.py for importlib.resources --- etherscan/configs/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 etherscan/configs/__init__.py diff --git a/etherscan/configs/__init__.py b/etherscan/configs/__init__.py new file mode 100644 index 0000000..e69de29 From e994fb3628a36fd2a9369f8b77fcc7e0639edaa6 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Sat, 7 Nov 2020 19:18:45 +0100 Subject: [PATCH 13/64] Added stable config fname --- etherscan/enums/configs_enum.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 etherscan/enums/configs_enum.py diff --git a/etherscan/enums/configs_enum.py b/etherscan/enums/configs_enum.py new file mode 100644 index 0000000..5851fba --- /dev/null +++ b/etherscan/enums/configs_enum.py @@ -0,0 +1,6 @@ +from dataclasses import dataclass + + +@dataclass(frozen=True) +class ConfigsEnum: + STABLE: str = "stable.json" \ No newline at end of file From a3e29029ad3c42fd559b0d1c63c33735c8259673 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Sat, 7 Nov 2020 19:21:44 +0100 Subject: [PATCH 14/64] Removed config paths --- etherscan/enums/configs_enum.py | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 etherscan/enums/configs_enum.py diff --git a/etherscan/enums/configs_enum.py b/etherscan/enums/configs_enum.py deleted file mode 100644 index 5851fba..0000000 --- a/etherscan/enums/configs_enum.py +++ /dev/null @@ -1,6 +0,0 @@ -from dataclasses import dataclass - - -@dataclass(frozen=True) -class ConfigsEnum: - STABLE: str = "stable.json" \ No newline at end of file From 695cc55e4059e9b41a9cff12d92935ed331fce5d Mon Sep 17 00:00:00 2001 From: pcko1 Date: Sat, 7 Nov 2020 19:28:24 +0100 Subject: [PATCH 15/64] Simplified initialization --- etherscan/etherscan.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/etherscan/etherscan.py b/etherscan/etherscan.py index 0b8b8f6..34d9d5b 100644 --- a/etherscan/etherscan.py +++ b/etherscan/etherscan.py @@ -1,20 +1,27 @@ import json +from importlib import resources import requests import etherscan +from etherscan import configs from etherscan.enums.fields_enum import FieldsEnum as fields from etherscan.utils.parsing import ResponseParser as parser class Etherscan: + def __new__(cls, api_key: str): + with resources.path(configs, "stable.json") as path: + config_path = str(path) + return cls.from_config(api_key=api_key, config_path=config_path) + @staticmethod def __load_config(config_path: str) -> dict: with open(config_path, "r") as f: return json.load(f) @staticmethod - def __run(func, api_key): + def __run(func, api_key: str): def wrapper(*args, **kwargs): url = ( f"{fields.PREFIX}" @@ -28,7 +35,7 @@ def wrapper(*args, **kwargs): return wrapper @classmethod - def from_config(cls, config_path: str, api_key: str): + def from_config(cls, api_key: str, config_path: str): config = cls.__load_config(config_path) for func, v in config.items(): if not func.startswith("_"): # disabled if _ From bb6c42d07dd20ed9886765fc4f96aba3e6d44fbd Mon Sep 17 00:00:00 2001 From: pcko1 Date: Sat, 7 Nov 2020 19:28:44 +0100 Subject: [PATCH 16/64] Removed config_path from kwargs --- test/test_modules.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/test_modules.py b/test/test_modules.py index 6221cf8..7ec2004 100644 --- a/test/test_modules.py +++ b/test/test_modules.py @@ -1,11 +1,12 @@ import json from datetime import datetime + import os from unittest import TestCase from etherscan.etherscan import Etherscan -CONFIG_PATH = "configs/stable.json" +CONFIG_PATH = "etherscan/configs/stable.json" API_KEY = os.environ["API_KEY"] # Encrypted env var by Travis @@ -25,7 +26,7 @@ class Case(TestCase): def test_methods(self): print(f"\nMODULE: {self._MODULE}") config = load(CONFIG_PATH) - etherscan = Etherscan.from_config(CONFIG_PATH, API_KEY) + etherscan = Etherscan(API_KEY) for fun, v in config.items(): if not fun.startswith("_"): # disabled if _ if v["module"] == self._MODULE: From 6bbe8172cee5fc5e6510732dbac3ff385560106b Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sat, 7 Nov 2020 19:36:44 +0100 Subject: [PATCH 17/64] Simplified client initialization --- README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index 1bf30d5..7d106ec 100644 --- a/README.md +++ b/README.md @@ -190,11 +190,7 @@ In `python`, create a client with your personal [Etherscan.io](https://etherscan ``` python from etherscan import Etherscan - -api_key = YOUR_API_KEY # use quotation marks because it is a Python string -config_path = "configs/stable.json" - -eth = Etherscan.from_config(config_path, api_key) +eth = Etherscan(YOUR_API_KEY) # key in quotation marks ``` Then you can call all available methods, e.g.: From a69145b4f2b461433fb914323cc18a28543b3104 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sat, 7 Nov 2020 19:51:07 +0100 Subject: [PATCH 18/64] Updated DOI --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7d106ec..2fea392 100644 --- a/README.md +++ b/README.md @@ -234,7 +234,7 @@ For problems regarding installing or using the package please open an [issue](ht ## Cite -Kotsias, P. C., A Python API for Etherscan.io. *https://github.com/pcko1/etherscan-python (2020)*. doi:10.5281/zenodo.4147166 +Kotsias, P. C., A Python API for Etherscan.io. *https://github.com/pcko1/etherscan-python (2020)*. doi:10.5281/zenodo.4256826 or in ```bibtex```: @@ -246,7 +246,7 @@ or in ```bibtex```: publisher = {GitHub}, journal = {GitHub repository}, url = {https://github.com/pcko1/etherscan-python}, - doi = {10.5281/zenodo.4147166} + doi = {10.5281/zenodo.4256826} } ``` From defd81a1bfdd2e2c334c32c76e9f764cfce7f90d Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sat, 7 Nov 2020 20:25:46 +0100 Subject: [PATCH 19/64] Updated description --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2fea392..02f6919 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,12 @@ [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) -A minimal, yet complete, python API for [Etherscan.io](https://etherscan.io/). Available on [PyPI](https://pypi.org/project/etherscan-python/). +A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). All standard and pro endpoints are provided. -All FREE and PRO endpoints are provided. +Available on [PyPI](https://pypi.org/project/etherscan-python/) and powered by [Etherscan.io APIs](https://etherscan.io/apis). + +Feel free to leave a :star: or [cite](#cite) us :scroll: if you found this package useful. -Powered by [Etherscan.io APIs](https://etherscan.io/apis). ___ From 48329c62f923fab9134a77886b97da8d01423030 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sat, 7 Nov 2020 20:29:17 +0100 Subject: [PATCH 20/64] Updated description --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 02f6919..9e72bba 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). All standard and pro endpoints are provided. -Available on [PyPI](https://pypi.org/project/etherscan-python/) and powered by [Etherscan.io APIs](https://etherscan.io/apis). +Available on [PyPI](https://pypi.org/project/etherscan-python/) and powered by [Etherscan.io APIs](https://etherscan.io/apis#misc). -Feel free to leave a :star: or [cite](#cite) us :scroll: if you found this package useful. +Feel free to leave a :star: or [cite](#cite) :scroll: the package if you found it useful. ___ From 53261ef8cecfc2a11481c43948f63345cebd502b Mon Sep 17 00:00:00 2001 From: pcko1 Date: Sat, 7 Nov 2020 20:52:57 +0100 Subject: [PATCH 21/64] Removed coverage from env --- env.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/env.yml b/env.yml index 91d443f..d450033 100644 --- a/env.yml +++ b/env.yml @@ -26,9 +26,6 @@ dependencies: - zlib=1.2.11=h516909a_1009 - pip: - chardet==3.0.4 - - coverage==5.3 - idna==2.10 - requests==2.24.0 - urllib3==1.25.10 -prefix: /projects/mai/kjmv588/miniconda3/envs/etherscan-python - From b2ba5a882e4285638ee90bff6a6e45a943cc1fa4 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sat, 7 Nov 2020 20:54:54 +0100 Subject: [PATCH 22/64] Removed coverage dependency --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 32c7797..5a022e2 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ "etherscan.modules", "etherscan.utils", ], - install_requires=["requests", "coverage"], + install_requires=["requests"], include_package_data=True, zip_safe=False, ) From 316538636000b5d2d544dfdbe5d5b0ea1393ce9c Mon Sep 17 00:00:00 2001 From: pcko1 Date: Sat, 7 Nov 2020 21:08:29 +0100 Subject: [PATCH 23/64] Added coverage to dependencies --- env.yml | 1 + setup.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/env.yml b/env.yml index d450033..fb66517 100644 --- a/env.yml +++ b/env.yml @@ -26,6 +26,7 @@ dependencies: - zlib=1.2.11=h516909a_1009 - pip: - chardet==3.0.4 + - coverage==5.3 - idna==2.10 - requests==2.24.0 - urllib3==1.25.10 diff --git a/setup.py b/setup.py index 5a022e2..32c7797 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ "etherscan.modules", "etherscan.utils", ], - install_requires=["requests"], + install_requires=["requests", "coverage"], include_package_data=True, zip_safe=False, ) From 88ec2101e9f0da4e5066d91cdee0c4c3106c3190 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sun, 8 Nov 2020 00:48:26 +0100 Subject: [PATCH 24/64] Fixed example --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9e72bba..63da7e8 100644 --- a/README.md +++ b/README.md @@ -190,7 +190,7 @@ The tests also include the PRO endpoints so if your key is not PRO, the correspo In `python`, create a client with your personal [Etherscan.io](https://etherscan.io/) API key: ``` python -from etherscan import Etherscan +from etherscan.etherscan import Etherscan eth = Etherscan(YOUR_API_KEY) # key in quotation marks ``` From 1004af4ed9da6de73ebb12da5080432912c18133 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sun, 8 Nov 2020 12:12:14 +0100 Subject: [PATCH 25/64] Updated description --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 63da7e8..124dbc9 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). All standard and pro endpoints are provided. -Available on [PyPI](https://pypi.org/project/etherscan-python/) and powered by [Etherscan.io APIs](https://etherscan.io/apis#misc). +Available on [PyPI](https://pypi.org/project/etherscan-python/). Powered by [Etherscan.io APIs](https://etherscan.io/apis#misc). -Feel free to leave a :star: or [cite](#cite) :scroll: the package if you found it useful. +*Feel free to leave a :star: or [cite](#cite) :scroll: the package if you found it useful.* ___ From 2726a556ff8ab5a6a44fd4e2929888abf67472e2 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Fri, 13 Nov 2020 10:03:17 +0100 Subject: [PATCH 26/64] Updated description --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 124dbc9..26aa122 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,6 @@ A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). A Available on [PyPI](https://pypi.org/project/etherscan-python/). Powered by [Etherscan.io APIs](https://etherscan.io/apis#misc). -*Feel free to leave a :star: or [cite](#cite) :scroll: the package if you found it useful.* ___ From 419ca67e885433afff7fb40efeceb9b391ef5e7e Mon Sep 17 00:00:00 2001 From: pcko1 Date: Fri, 4 Dec 2020 16:13:36 +0100 Subject: [PATCH 27/64] Added etherscan.configs package --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 32c7797..1aa46df 100644 --- a/setup.py +++ b/setup.py @@ -10,6 +10,7 @@ license="MIT", packages=[ "etherscan", + "etherscan.configs", "etherscan.enums", "etherscan.modules", "etherscan.utils", From f8344664bf7e040a93191051119dcc3b67dfcc42 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Fri, 4 Dec 2020 16:18:50 +0100 Subject: [PATCH 28/64] Updated version to 2.0.2 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1aa46df..9cd3086 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="etherscan-python", - version="2.0.1", + version="2.0.2", description="A minimal, yet complete, python API for etherscan.io.", url="https://github.com/pcko1/etherscan-python", author="Panagiotis-Christos Kotsias", From 8096ec6638e09baecb504f7d2872a48c61263e28 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Fri, 4 Dec 2020 22:26:22 +0100 Subject: [PATCH 29/64] Updated DOI for v2.0.2 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 26aa122..47ce9a1 100644 --- a/README.md +++ b/README.md @@ -189,7 +189,7 @@ The tests also include the PRO endpoints so if your key is not PRO, the correspo In `python`, create a client with your personal [Etherscan.io](https://etherscan.io/) API key: ``` python -from etherscan.etherscan import Etherscan +from etherscan import Etherscan eth = Etherscan(YOUR_API_KEY) # key in quotation marks ``` @@ -234,7 +234,7 @@ For problems regarding installing or using the package please open an [issue](ht ## Cite -Kotsias, P. C., A Python API for Etherscan.io. *https://github.com/pcko1/etherscan-python (2020)*. doi:10.5281/zenodo.4256826 +Kotsias, P. C., A Python API for Etherscan.io. *https://github.com/pcko1/etherscan-python (2020)*. doi:10.5281/zenodo.4306855 or in ```bibtex```: @@ -246,7 +246,7 @@ or in ```bibtex```: publisher = {GitHub}, journal = {GitHub repository}, url = {https://github.com/pcko1/etherscan-python}, - doi = {10.5281/zenodo.4256826} + doi = {10.5281/zenodo.4306855} } ``` From 9b9723bcb4a92c4a3e2ff599e1c82401892821b7 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sun, 14 Feb 2021 22:50:45 +0100 Subject: [PATCH 30/64] Added FUNDING.yml --- .github/FUNDING.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..11aea7a --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['0xA87258F829Fb6b5622d60896dC010cdF57e1DCE6'] From f8ad87ee8e3670beb534cf0d41e9ccc5b3efa5c2 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sun, 14 Feb 2021 22:57:45 +0100 Subject: [PATCH 31/64] Updated README --- README.md | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 47ce9a1..d030cbc 100644 --- a/README.md +++ b/README.md @@ -148,25 +148,14 @@ Before proceeding, you should register an account on [Etherscan.io](https://ethe If you wish to have access to the PRO endpoints, you should obtain elevated privileges via Etherscan's subscription service. -Assuming [conda](https://docs.conda.io/en/latest/miniconda.html) is already installed on your system, first create the environment: - ``` bash -conda env create -f env.yml -``` - -Activate the environment: - -``` bash -conda activate etherscan-python -``` - -Then, install the package: +Install from source: ``` bash -pip install . +pip install git+https://github.com/pcko1/etherscan-python.git ``` -Alternatively, you can install it from [PyPI](https://pypi.org/project/etherscan-python/): +Alternatively, install from [PyPI](https://pypi.org/project/etherscan-python/): ```bash pip install etherscan-python From 9da66c19123ee7c7bafb31bf9a000755ad452b50 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sun, 14 Feb 2021 22:58:23 +0100 Subject: [PATCH 32/64] Updated README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index d030cbc..4ae1a5d 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,6 @@ Before proceeding, you should register an account on [Etherscan.io](https://ethe If you wish to have access to the PRO endpoints, you should obtain elevated privileges via Etherscan's subscription service. -``` bash Install from source: ``` bash From 67b4e2e27d207bdd0b823b6450d1f9a3948be6bf Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 17 Feb 2021 00:32:31 +0100 Subject: [PATCH 33/64] Added maintainability badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4ae1a5d..73e1d21 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![Build Status](https://travis-ci.com/pcko1/etherscan-python.svg?branch=master)](https://travis-ci.com/pcko1/etherscan-python) [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) +[![Maintainability](https://api.codeclimate.com/v1/badges/94c15c6d8b1ec869a7fd/maintainability)](https://codeclimate.com/github/pcko1/etherscan-python/maintainability) [![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) From 1482954f9b7d9b023628b746d1a1ccd6e3240156 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Fri, 19 Feb 2021 14:06:26 +0100 Subject: [PATCH 34/64] Updated FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 11aea7a..bb12031 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username -custom: ['0xA87258F829Fb6b5622d60896dC010cdF57e1DCE6'] +custom: ['0xD9D6E8C16686536E3C81124639e975AdF2468197'] From bfee4f37cfbd900d35ccfc8f3cb8835216b80349 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Fri, 19 Feb 2021 15:34:41 +0100 Subject: [PATCH 35/64] Refactored workflows --- .github/workflows/build.yml | 33 +++++++++++++++++++++++++++++++++ .travis.yml | 11 +---------- setup.py | 2 +- 3 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..cf1dcff --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,33 @@ +name: build + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.8] + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install git+https://github.com/pcko1/etherscan-python.git coverage flake8 + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with unittest + run: | + export API_KEY=${{ secrets.ETHERSCAN_API_KEY }} + bash run_tests.sh API_KEY + bash <(curl -s https://codecov.io/bash) \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index e17a763..e0cae0b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,8 @@ language: python python: - '3.8' -before_install: -- wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh -- bash miniconda.sh -b -p $HOME/miniconda -- source "$HOME/miniconda/etc/profile.d/conda.sh" -- export PATH=/home/travis/miniconda/bin:$PATH -- conda update -q conda -y -- conda info -a install: -- conda env create -f env.yml -- conda activate etherscan-python -- pip install . +- pip install git+https://github.com/pcko1/etherscan-python.git coverage script: - coverage run -m unittest discover && coverage report -m - bash <(curl -s https://codecov.io/bash) diff --git a/setup.py b/setup.py index 9cd3086..e7751de 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ "etherscan.modules", "etherscan.utils", ], - install_requires=["requests", "coverage"], + install_requires=["requests"], include_package_data=True, zip_safe=False, ) From 17236e351f4257ab79f72c6985b67bb211f370af Mon Sep 17 00:00:00 2001 From: pcko1 Date: Fri, 19 Feb 2021 15:39:50 +0100 Subject: [PATCH 36/64] Changed key --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cf1dcff..16d15ec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,6 +28,6 @@ jobs: flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with unittest run: | - export API_KEY=${{ secrets.ETHERSCAN_API_KEY }} + export API_KEY=${{ secrets.ETHERSCAN_API_KEY2 }} bash run_tests.sh API_KEY bash <(curl -s https://codecov.io/bash) \ No newline at end of file From 24e1427aeccf11102f22930cda02e1d817e6da19 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Fri, 19 Feb 2021 15:41:37 +0100 Subject: [PATCH 37/64] Changed API key --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 16d15ec..7de20c5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,6 +28,6 @@ jobs: flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with unittest run: | - export API_KEY=${{ secrets.ETHERSCAN_API_KEY2 }} + export API_KEY=$secrets.ETHERSCAN_API_KEY2 bash run_tests.sh API_KEY bash <(curl -s https://codecov.io/bash) \ No newline at end of file From ca6ac5c0d1c32e1835a20e96d1c6416cec062068 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Fri, 19 Feb 2021 15:50:05 +0100 Subject: [PATCH 38/64] Added API key --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7de20c5..c6f1752 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,8 @@ jobs: # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with unittest + env: + API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} run: | - export API_KEY=$secrets.ETHERSCAN_API_KEY2 bash run_tests.sh API_KEY bash <(curl -s https://codecov.io/bash) \ No newline at end of file From 2bb8a314cf622eb57b018199535867e6fd1086f0 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Fri, 19 Feb 2021 15:51:12 +0100 Subject: [PATCH 39/64] Added API key --- .github/workflows/build.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c6f1752..3bb4e73 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,8 +27,6 @@ jobs: # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with unittest - env: - API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} run: | - bash run_tests.sh API_KEY + bash run_tests.sh ${{ secrets.ETHERSCAN_API_KEY }} bash <(curl -s https://codecov.io/bash) \ No newline at end of file From c17095ccc9e9e86f8df4e2de269294f375129880 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Fri, 19 Feb 2021 15:53:33 +0100 Subject: [PATCH 40/64] Removed conda --- env.yml | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 env.yml diff --git a/env.yml b/env.yml deleted file mode 100644 index fb66517..0000000 --- a/env.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: etherscan-python -channels: - - conda-forge - - defaults -dependencies: - - _libgcc_mutex=0.1=conda_forge - - _openmp_mutex=4.5=1_gnu - - ca-certificates=2020.6.20=hecda079_0 - - certifi=2020.6.20=py38h32f6830_0 - - ld_impl_linux-64=2.35=h769bd43_9 - - libffi=3.2.1=he1b5a44_1007 - - libgcc-ng=9.3.0=h24d8f2e_16 - - libgomp=9.3.0=h24d8f2e_16 - - libstdcxx-ng=9.3.0=hdf63c60_16 - - ncurses=6.2=he1b5a44_1 - - openssl=1.1.1h=h516909a_0 - - pip=20.2.3=py_0 - - python=3.8.5=h1103e12_9_cpython - - python_abi=3.8=1_cp38 - - readline=8.0=he28a2e2_2 - - setuptools=49.6.0=py38h32f6830_1 - - sqlite=3.33.0=h4cf870e_0 - - tk=8.6.10=hed695b0_0 - - wheel=0.35.1=pyh9f0ad1d_0 - - xz=5.2.5=h516909a_1 - - zlib=1.2.11=h516909a_1009 - - pip: - - chardet==3.0.4 - - coverage==5.3 - - idna==2.10 - - requests==2.24.0 - - urllib3==1.25.10 From f831fdb773303dc340eeb38f9716bff847703187 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Fri, 19 Feb 2021 15:56:24 +0100 Subject: [PATCH 41/64] Updated README --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 73e1d21..0d560a1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # etherscan-python -[![Build Status](https://travis-ci.com/pcko1/etherscan-python.svg?branch=master)](https://travis-ci.com/pcko1/etherscan-python) +[![Build Status](https://travis-ci.com/pcko1/etherscan-python.svg?branch=master)](https://travis-ci.com/pcko1/etherscan-python) +[![Build Status](https://github.com/pcko1/etherscan-python/workflows/build/badge.svg)](https://github.com/pcko1/etherscan-python) [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) [![Maintainability](https://api.codeclimate.com/v1/badges/94c15c6d8b1ec869a7fd/maintainability)](https://codeclimate.com/github/pcko1/etherscan-python/maintainability) From 9dbad7d1afe74975ffcd80d851e3cbed02c826e6 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Fri, 19 Feb 2021 16:02:16 +0100 Subject: [PATCH 42/64] Updated badges --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0d560a1..4dd3b4b 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) [![Maintainability](https://api.codeclimate.com/v1/badges/94c15c6d8b1ec869a7fd/maintainability)](https://codeclimate.com/github/pcko1/etherscan-python/maintainability) +[![CodeFactor](https://www.codefactor.io/repository/github/pcko1/etherscan-python/badge)](https://www.codefactor.io/repository/github/pcko1/etherscan-python) [![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) From 03c684a05aeab05bf2573c9715ddcf7184234eef Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Fri, 19 Feb 2021 16:14:34 +0100 Subject: [PATCH 43/64] Updated badges --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4dd3b4b..786ece5 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) [![Maintainability](https://api.codeclimate.com/v1/badges/94c15c6d8b1ec869a7fd/maintainability)](https://codeclimate.com/github/pcko1/etherscan-python/maintainability) +[![](https://img.shields.io/codeclimate/tech-debt/pcko1/etherscan-python)](https://codeclimate.com/github/pcko1/etherscan-python) [![CodeFactor](https://www.codefactor.io/repository/github/pcko1/etherscan-python/badge)](https://www.codefactor.io/repository/github/pcko1/etherscan-python) + [![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) From 87cb1514f001052ebede78e12c156e4b8fb2ee4b Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Fri, 19 Feb 2021 16:37:17 +0100 Subject: [PATCH 44/64] Updated badges --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 786ece5..069e2c8 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ [![Build Status](https://github.com/pcko1/etherscan-python/workflows/build/badge.svg)](https://github.com/pcko1/etherscan-python) [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) -[![Maintainability](https://api.codeclimate.com/v1/badges/94c15c6d8b1ec869a7fd/maintainability)](https://codeclimate.com/github/pcko1/etherscan-python/maintainability) [![](https://img.shields.io/codeclimate/tech-debt/pcko1/etherscan-python)](https://codeclimate.com/github/pcko1/etherscan-python) +[![Maintainability](https://api.codeclimate.com/v1/badges/94c15c6d8b1ec869a7fd/maintainability)](https://codeclimate.com/github/pcko1/etherscan-python/maintainability) [![CodeFactor](https://www.codefactor.io/repository/github/pcko1/etherscan-python/badge)](https://www.codefactor.io/repository/github/pcko1/etherscan-python) [![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) From d7b156e2024c1f3d3e6868aaf1b2d046deb81dd4 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Fri, 26 Feb 2021 13:47:12 +0100 Subject: [PATCH 45/64] Added download count --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 069e2c8..2745e42 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ [![CodeFactor](https://www.codefactor.io/repository/github/pcko1/etherscan-python/badge)](https://www.codefactor.io/repository/github/pcko1/etherscan-python) [![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) +![PyPI - Downloads](https://img.shields.io/pypi/dm/etherscan-python) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) From ccee24427e327aee25b30fe4e6db73b3d7ddd403 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sat, 27 Feb 2021 21:38:33 +0100 Subject: [PATCH 46/64] Removed download count --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 2745e42..069e2c8 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ [![CodeFactor](https://www.codefactor.io/repository/github/pcko1/etherscan-python/badge)](https://www.codefactor.io/repository/github/pcko1/etherscan-python) [![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) -![PyPI - Downloads](https://img.shields.io/pypi/dm/etherscan-python) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) From 2be84401af3f20ff0154f5324270be40c38bf91d Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Thu, 4 Mar 2021 12:52:26 +0100 Subject: [PATCH 47/64] Updated citation info --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 069e2c8..5dc6b62 100644 --- a/README.md +++ b/README.md @@ -227,17 +227,16 @@ For problems regarding installing or using the package please open an [issue](ht ## Cite -Kotsias, P. C., A Python API for Etherscan.io. *https://github.com/pcko1/etherscan-python (2020)*. doi:10.5281/zenodo.4306855 +Kotsias, P. C., pcko1/etherscan-python. *https://github.com/pcko1/etherscan-python (2020)*. doi:10.5281/zenodo.4306855 or in ```bibtex```: ```bibtex @misc{Kotsias2020, author = {Kotsias, P.C.}, - title = {A Python API for Etherscan.io}, + title = {pcko1/etherscan-python}, year = {2020}, - publisher = {GitHub}, - journal = {GitHub repository}, + publisher = {Zenodo}, url = {https://github.com/pcko1/etherscan-python}, doi = {10.5281/zenodo.4306855} } From 61abdba248a6991bc6041fe5ff2528bb18ed001b Mon Sep 17 00:00:00 2001 From: litneet64 Date: Mon, 8 Mar 2021 02:34:30 -0300 Subject: [PATCH 48/64] Added support for testnets --- etherscan/enums/fields_enum.py | 2 +- etherscan/etherscan.py | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/etherscan/enums/fields_enum.py b/etherscan/enums/fields_enum.py index a85fb77..b0bcc4d 100644 --- a/etherscan/enums/fields_enum.py +++ b/etherscan/enums/fields_enum.py @@ -23,7 +23,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/api?" SORT: str = "&sort=" START_BLOCK: str = "&startblock=" START_DATE: str = "&startdate=" diff --git a/etherscan/etherscan.py b/etherscan/etherscan.py index 34d9d5b..a8e9b50 100644 --- a/etherscan/etherscan.py +++ b/etherscan/etherscan.py @@ -10,10 +10,10 @@ class Etherscan: - def __new__(cls, api_key: str): - with resources.path(configs, "stable.json") as path: + def __new__(cls, api_key: str, net: str = "MAIN"): + 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) + return cls.from_config(api_key=api_key, config_path=config_path, net=net) @staticmethod def __load_config(config_path: str) -> dict: @@ -21,24 +21,24 @@ def __load_config(config_path: str) -> dict: return json.load(f) @staticmethod - def __run(func, api_key: str): + def __run(func, api_key: str, net: str): def wrapper(*args, **kwargs): url = ( - f"{fields.PREFIX}" + f"{fields.PREFIX.format(net.lower()).replace('-main','')}" f"{func(*args, **kwargs)}" f"{fields.API_KEY}" f"{api_key}" ) - r = requests.get(url) + r = requests.get(url, headers={'User-Agent':''}) return parser.parse(r) return wrapper @classmethod - def from_config(cls, api_key: str, config_path: str): + def from_config(cls, api_key: str, config_path: str, net: 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)) + setattr(cls, func, cls.__run(attr, api_key, net)) return cls From 8e6380d6a5f91e16ef7bf88477e184cf82b40388 Mon Sep 17 00:00:00 2001 From: litneet64 Date: Mon, 8 Mar 2021 02:38:18 -0300 Subject: [PATCH 49/64] Added testnets on module tests --- test/test_modules.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/test/test_modules.py b/test/test_modules.py index 7ec2004..65e669b 100644 --- a/test/test_modules.py +++ b/test/test_modules.py @@ -6,7 +6,7 @@ from etherscan.etherscan import Etherscan -CONFIG_PATH = "etherscan/configs/stable.json" +CONFIG_PATH = "etherscan/configs/{}-stable.json" API_KEY = os.environ["API_KEY"] # Encrypted env var by Travis @@ -22,18 +22,20 @@ def dump(data, fname): class Case(TestCase): _MODULE = "" + _NETS = ["MAIN", "GOERLI", "KOVAN", "RINKEBY", "ROPSTEN"] - def test_methods(self): - print(f"\nMODULE: {self._MODULE}") - config = load(CONFIG_PATH) - etherscan = Etherscan(API_KEY) + def methods(self, net): + print(f"\nNET: {net}") + print(f"MODULE: {self._MODULE}") + config = load(CONFIG_PATH.format(net)) + etherscan = Etherscan(API_KEY, net) for fun, v in config.items(): if not fun.startswith("_"): # disabled if _ if v["module"] == self._MODULE: res = getattr(etherscan, fun)(**v["kwargs"]) print(f"METHOD: {fun}, RTYPE: {type(res)}") # Create log files (will update existing ones) - fname = f"logs/standard/{fun}.json" + fname = f"logs/standard/{net}-{fun}.json" log = { "method": fun, "module": v["module"], @@ -43,6 +45,10 @@ def test_methods(self): } dump(log, fname) + def test_net_methods(self): + for net in self._NETS: + self.methods(net) + class TestAccounts(Case): _MODULE = "accounts" From 7530eca9b1b8ec78695a5586730d4322f92fdfff Mon Sep 17 00:00:00 2001 From: litneet64 Date: Mon, 8 Mar 2021 03:14:16 -0300 Subject: [PATCH 50/64] Added test cases for testnets --- MANIFEST.in | 6 +- etherscan/configs/GOERLI-stable.json | 466 ++++++++++++++++++ etherscan/configs/KOVAN-stable.json | 466 ++++++++++++++++++ .../configs/{stable.json => MAIN-stable.json} | 0 etherscan/configs/RINKEBY-stable.json | 466 ++++++++++++++++++ etherscan/configs/ROPSTEN-stable.json | 466 ++++++++++++++++++ 6 files changed, 1869 insertions(+), 1 deletion(-) create mode 100644 etherscan/configs/GOERLI-stable.json create mode 100644 etherscan/configs/KOVAN-stable.json rename etherscan/configs/{stable.json => MAIN-stable.json} (100%) create mode 100644 etherscan/configs/RINKEBY-stable.json create mode 100644 etherscan/configs/ROPSTEN-stable.json diff --git a/MANIFEST.in b/MANIFEST.in index 39d0704..952e599 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1,5 @@ -include etherscan/configs/stable.json \ No newline at end of file +include etherscan/configs/MAIN-stable.json +include etherscan/configs/GOERLI-stable.json +include etherscan/configs/KOVAN-stable.json +include etherscan/configs/RINKEBY-stable.json +include etherscan/configs/ROPSTEN-stable.json diff --git a/etherscan/configs/GOERLI-stable.json b/etherscan/configs/GOERLI-stable.json new file mode 100644 index 0000000..ba9da4d --- /dev/null +++ b/etherscan/configs/GOERLI-stable.json @@ -0,0 +1,466 @@ +{ + "get_proxy_block_number": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_block_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10d4f" + } + }, + "_get_proxy_uncle_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x210A9B", + "index": "0x0" + } + }, + "get_proxy_block_transaction_count_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10FB78" + } + }, + "get_proxy_transaction_by_hash": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_transaction_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x210A9B", + "index": "0x0" + } + }, + "get_proxy_transaction_count": { + "module": "proxy", + "kwargs": { + "address": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2" + } + }, + "get_proxy_transaction_receipt": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_call": { + "module": "proxy", + "kwargs": { + "to": "0xAEEF46DB4855E25702F8237E8f403FddcaF931C0", + "data": "0x70a08231000000000000000000000000e16359506c028e51f16be38986ec5746251e9724" + } + }, + "get_proxy_code_at": { + "module": "proxy", + "kwargs": { + "address": "0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c" + } + }, + "get_proxy_storage_position_at": { + "module": "proxy", + "kwargs": { + "position": "0x0", + "address": "0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd" + } + }, + "get_proxy_gas_price": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_est_gas": { + "module": "proxy", + "kwargs": { + "data": "0x4e71d92d", + "to": "0xf0160428a8552ac9bb7e050d90eeade4ddd52843", + "value": "0xff22", + "gas_price": "0x51da038cc", + "gas": "0x5f5e0ff" + } + }, + "get_est_confirmation_time": { + "module": "gastracker", + "kwargs": { + "gas_price": "2000000000" + } + }, + "get_gas_oracle": { + "module": "gastracker", + "kwargs": {} + }, + "get_block_reward_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "2165403" + } + }, + "get_est_block_countdown_time_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "99999999" + } + }, + "get_block_number_by_timestamp": { + "module": "blocks", + "kwargs": { + "timestamp": "1578638524", + "closest": "before" + } + }, + "get_total_eth_supply": { + "module": "stats", + "kwargs": {} + }, + "get_eth_last_price": { + "module": "stats", + "kwargs": {} + }, + "_get_eth_nodes_size": { + "module": "stats", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "client_type": "geth", + "sync_mode": "default", + "sort": "asc" + } + }, + "get_total_supply_by_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055" + } + }, + "get_acc_balance_by_token_and_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761" + } + }, + "get_contract_abi": { + "module": "contracts", + "kwargs": { + "address": "0x748D03fb181A158bea396489eA6589E7dCfBA495" + } + }, + "get_contract_source_code": { + "module": "contracts", + "kwargs": { + "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" + } + }, + "get_contract_execution_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a" + } + }, + "get_tx_receipt_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76" + } + }, + "get_eth_balance": { + "module": "accounts", + "kwargs": { + "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a" + } + }, + "get_eth_balance_multiple": { + "module": "accounts", + "kwargs": { + "addresses": [ + "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", + "0x63a9975ba31b0b9626b34300f7f627147df1f526", + "0x198ef1ec325a96cc354c7266a038be8b5c558f67" + ] + } + }, + "get_normal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0xff6872f2c89ac60fbc1fc977a9724555b9796154", + "startblock": 0, + "endblock": 99999999, + "sort": "asc" + } + }, + "get_normal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0xff6872f2c89ac60fbc1fc977a9724555b9796154", + "startblock": 0, + "endblock": 99999999, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x126c5b0b637340569ee98c768e97992ea2fa426d", + "startblock": 4397831, + "endblock": 4397831, + "sort": "asc" + } + }, + "get_internal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0x126c5b0b637340569ee98c768e97992ea2fa426d", + "startblock": 4397831, + "endblock": 4397831, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_txhash": { + "module": "accounts", + "kwargs": { + "txhash": "0x1b71be923f0dcb1f4a196d340d868ff0b35f494e7f3f6575b81812b0824696bb" + } + }, + "get_internal_txs_by_block_range_paginated": { + "module": "accounts", + "kwargs": { + "startblock": 0, + "endblock": 2702578, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x9fc8720759bf397bdc13ae08760a7aea7ebbdf56", + "startblock": 0, + "endblock": 999999999, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x2ac3c1d3e24b45c6c310534bc2dd84b5ed576335", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x2ac3c1d3e24b45c6c310534bc2dd84b5ed576335", + "address": "0x9fc8720759bf397bdc13ae08760a7aea7ebbdf56", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x3b2f32d32faabd8d94df36afb956bd4d34bf905c", + "startblock": 0, + "endblock": 999999999, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0xe5975e7dc3dfbb4cbede646b8af7cf292b46693e", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0xe5975e7dc3dfbb4cbede646b8af7cf292b46693e", + "address": "0x3b2f32d32faabd8d94df36afb956bd4d34bf905c", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_mined_blocks_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x0000000000000000000000000000000000000000" + } + }, + "get_mined_blocks_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0x0000000000000000000000000000000000000000", + "page": 1, + "offset": 100 + } + }, + "get_hist_eth_balance_for_address_by_block_no": { + "module": "pro", + "kwargs": { + "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", + "block_no": "8000000" + } + }, + "get_daily_average_block_size": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_block_time": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_uncle_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "block_no": "8000000" + } + }, + "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", + "block_no": "8000000" + } + }, + "get_token_info_by_contract_address": { + "module": "pro", + "kwargs": { + "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" + } + }, + "get_daily_average_gas_limit": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_total_gas_used": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_average_gas_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_network_tx_fee": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_new_address_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_network_utilization": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_hash_rate": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_tx_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_difficulty": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_daily_market_cap": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + } +} diff --git a/etherscan/configs/KOVAN-stable.json b/etherscan/configs/KOVAN-stable.json new file mode 100644 index 0000000..dff391d --- /dev/null +++ b/etherscan/configs/KOVAN-stable.json @@ -0,0 +1,466 @@ +{ + "get_proxy_block_number": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_block_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10d4f" + } + }, + "get_proxy_uncle_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x4d50e2", + "index": "0x0" + } + }, + "get_proxy_block_transaction_count_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10FB78" + } + }, + "get_proxy_transaction_by_hash": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_transaction_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x43195c", + "index": "0x0" + } + }, + "get_proxy_transaction_count": { + "module": "proxy", + "kwargs": { + "address": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2" + } + }, + "get_proxy_transaction_receipt": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_call": { + "module": "proxy", + "kwargs": { + "to": "0xAEEF46DB4855E25702F8237E8f403FddcaF931C0", + "data": "0x70a08231000000000000000000000000e16359506c028e51f16be38986ec5746251e9724" + } + }, + "get_proxy_code_at": { + "module": "proxy", + "kwargs": { + "address": "0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c" + } + }, + "get_proxy_storage_position_at": { + "module": "proxy", + "kwargs": { + "position": "0x0", + "address": "0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd" + } + }, + "get_proxy_gas_price": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_est_gas": { + "module": "proxy", + "kwargs": { + "data": "0x4e71d92d", + "to": "0xf0160428a8552ac9bb7e050d90eeade4ddd52843", + "value": "0xff22", + "gas_price": "0x51da038cc", + "gas": "0x5f5e0ff" + } + }, + "get_est_confirmation_time": { + "module": "gastracker", + "kwargs": { + "gas_price": "2000000000" + } + }, + "get_gas_oracle": { + "module": "gastracker", + "kwargs": {} + }, + "get_block_reward_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "2165403" + } + }, + "get_est_block_countdown_time_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "99999999" + } + }, + "get_block_number_by_timestamp": { + "module": "blocks", + "kwargs": { + "timestamp": "1578638524", + "closest": "before" + } + }, + "get_total_eth_supply": { + "module": "stats", + "kwargs": {} + }, + "get_eth_last_price": { + "module": "stats", + "kwargs": {} + }, + "_get_eth_nodes_size": { + "module": "stats", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "client_type": "geth", + "sync_mode": "default", + "sort": "asc" + } + }, + "get_total_supply_by_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055" + } + }, + "get_acc_balance_by_token_and_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761" + } + }, + "get_contract_abi": { + "module": "contracts", + "kwargs": { + "address": "0xe309239955502Bb812807e8C29B98C3441775d35" + } + }, + "get_contract_source_code": { + "module": "contracts", + "kwargs": { + "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" + } + }, + "get_contract_execution_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a" + } + }, + "get_tx_receipt_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76" + } + }, + "get_eth_balance": { + "module": "accounts", + "kwargs": { + "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a" + } + }, + "get_eth_balance_multiple": { + "module": "accounts", + "kwargs": { + "addresses": [ + "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", + "0x63a9975ba31b0b9626b34300f7f627147df1f526", + "0x198ef1ec325a96cc354c7266a038be8b5c558f67" + ] + } + }, + "get_normal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0xc1918c20650920aa664235bc6cbd8b8728fbe931", + "startblock": 0, + "endblock": 99999999, + "sort": "asc" + } + }, + "get_normal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0xc1918c20650920aa664235bc6cbd8b8728fbe931", + "startblock": 0, + "endblock": 99999999, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0xaaad7966ebe0663b8c9c6f683fb9c3e66e03467f", + "startblock": 23799593, + "endblock": 23799593, + "sort": "asc" + } + }, + "get_internal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0xaaad7966ebe0663b8c9c6f683fb9c3e66e03467f", + "startblock": 23799593, + "endblock": 23799593, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_txhash": { + "module": "accounts", + "kwargs": { + "txhash": "0xad550ebc0f2473e3b5af8d1d30b093749cb2835bf21ed340e976b1ec25276b04" + } + }, + "get_internal_txs_by_block_range_paginated": { + "module": "accounts", + "kwargs": { + "startblock": 0, + "endblock": 2702578, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0xa991b15e414ddfa78b0df1f7af6b3cf2023c738d", + "startblock": 0, + "endblock": 999999999, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x8fe80f7ca77daa68b059f8b3e29e1c5d962f01e7", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x8fe80f7ca77daa68b059f8b3e29e1c5d962f01e7", + "address": "0xa991b15e414ddfa78b0df1f7af6b3cf2023c738d", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x57e05dba059a8ff2777408e9e1f3c517c20fc719", + "startblock": 0, + "endblock": 999999999, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x953067757ec1b3a859f80ae15269f95430e72e69", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x953067757ec1b3a859f80ae15269f95430e72e69", + "address": "0x57e05dba059a8ff2777408e9e1f3c517c20fc719", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_mined_blocks_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x0000000000000000000000000000000000000000" + } + }, + "get_mined_blocks_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0x0000000000000000000000000000000000000000", + "page": 1, + "offset": 100 + } + }, + "get_hist_eth_balance_for_address_by_block_no": { + "module": "pro", + "kwargs": { + "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", + "block_no": "8000000" + } + }, + "get_daily_average_block_size": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_block_time": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_uncle_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "block_no": "8000000" + } + }, + "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", + "block_no": "8000000" + } + }, + "get_token_info_by_contract_address": { + "module": "pro", + "kwargs": { + "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" + } + }, + "get_daily_average_gas_limit": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_total_gas_used": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_average_gas_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_network_tx_fee": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_new_address_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_network_utilization": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_hash_rate": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_tx_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_difficulty": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_daily_market_cap": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + } +} diff --git a/etherscan/configs/stable.json b/etherscan/configs/MAIN-stable.json similarity index 100% rename from etherscan/configs/stable.json rename to etherscan/configs/MAIN-stable.json diff --git a/etherscan/configs/RINKEBY-stable.json b/etherscan/configs/RINKEBY-stable.json new file mode 100644 index 0000000..f288c3b --- /dev/null +++ b/etherscan/configs/RINKEBY-stable.json @@ -0,0 +1,466 @@ +{ + "get_proxy_block_number": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_block_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10d4f" + } + }, + "_get_proxy_uncle_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x210A9B", + "index": "0x0" + } + }, + "get_proxy_block_transaction_count_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10FB78" + } + }, + "get_proxy_transaction_by_hash": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_transaction_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x43195c", + "index": "0x0" + } + }, + "get_proxy_transaction_count": { + "module": "proxy", + "kwargs": { + "address": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2" + } + }, + "get_proxy_transaction_receipt": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_call": { + "module": "proxy", + "kwargs": { + "to": "0xAEEF46DB4855E25702F8237E8f403FddcaF931C0", + "data": "0x70a08231000000000000000000000000e16359506c028e51f16be38986ec5746251e9724" + } + }, + "get_proxy_code_at": { + "module": "proxy", + "kwargs": { + "address": "0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c" + } + }, + "get_proxy_storage_position_at": { + "module": "proxy", + "kwargs": { + "position": "0x0", + "address": "0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd" + } + }, + "get_proxy_gas_price": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_est_gas": { + "module": "proxy", + "kwargs": { + "data": "0x4e71d92d", + "to": "0xf0160428a8552ac9bb7e050d90eeade4ddd52843", + "value": "0xff22", + "gas_price": "0x51da038cc", + "gas": "0x5f5e0ff" + } + }, + "get_est_confirmation_time": { + "module": "gastracker", + "kwargs": { + "gas_price": "2000000000" + } + }, + "get_gas_oracle": { + "module": "gastracker", + "kwargs": {} + }, + "get_block_reward_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "2165403" + } + }, + "get_est_block_countdown_time_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "99999999" + } + }, + "get_block_number_by_timestamp": { + "module": "blocks", + "kwargs": { + "timestamp": "1578638524", + "closest": "before" + } + }, + "get_total_eth_supply": { + "module": "stats", + "kwargs": {} + }, + "get_eth_last_price": { + "module": "stats", + "kwargs": {} + }, + "_get_eth_nodes_size": { + "module": "stats", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "client_type": "geth", + "sync_mode": "default", + "sort": "asc" + } + }, + "get_total_supply_by_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055" + } + }, + "get_acc_balance_by_token_and_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761" + } + }, + "get_contract_abi": { + "module": "contracts", + "kwargs": { + "address": "0x79a856049A390336E221d54e2bAB9e629989187f" + } + }, + "get_contract_source_code": { + "module": "contracts", + "kwargs": { + "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" + } + }, + "get_contract_execution_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a" + } + }, + "get_tx_receipt_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76" + } + }, + "get_eth_balance": { + "module": "accounts", + "kwargs": { + "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a" + } + }, + "get_eth_balance_multiple": { + "module": "accounts", + "kwargs": { + "addresses": [ + "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", + "0x63a9975ba31b0b9626b34300f7f627147df1f526", + "0x198ef1ec325a96cc354c7266a038be8b5c558f67" + ] + } + }, + "get_normal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x0cb510e2f16c36ce039ee3164330d5f00ecf9eac", + "startblock": 0, + "endblock": 99999999, + "sort": "asc" + } + }, + "get_normal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0x0cb510e2f16c36ce039ee3164330d5f00ecf9eac", + "startblock": 0, + "endblock": 99999999, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0xd16a6772163463c731e37ef42c98eee95f15a496", + "startblock": 8191436, + "endblock": 8191436, + "sort": "asc" + } + }, + "get_internal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0xd16a6772163463c731e37ef42c98eee95f15a496", + "startblock": 8191436, + "endblock": 8191436, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_txhash": { + "module": "accounts", + "kwargs": { + "txhash": "0x55f288d70fbdcb4506a792d7cb3f5085132c5480fd06492e39a67bcb12119fe1" + } + }, + "get_internal_txs_by_block_range_paginated": { + "module": "accounts", + "kwargs": { + "startblock": 0, + "endblock": 2702578, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x18045cdf3f619e32ff4b11df689059b4d0358d11", + "startblock": 0, + "endblock": 999999999, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0xdf82c9014f127243ce1305dfe54151647d74b27a", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0xdf82c9014f127243ce1305dfe54151647d74b27a", + "address": "0x18045cdf3f619e32ff4b11df689059b4d0358d11", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x0d4444a2473b2832700c693b81bc551e10e5c913", + "startblock": 0, + "endblock": 999999999, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0xd2ae28b5cb629d9018b91acb855e35cd75f5be80", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0xd2ae28b5cb629d9018b91acb855e35cd75f5be80", + "address": "0x0d4444a2473b2832700c693b81bc551e10e5c913", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_mined_blocks_by_address": { + "module": "accounts", + "kwargs": { + "address": "0xd6ae8250b8348c94847280928c79fb3b63ca453e" + } + }, + "get_mined_blocks_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0xd6ae8250b8348c94847280928c79fb3b63ca453e", + "page": 1, + "offset": 100 + } + }, + "get_hist_eth_balance_for_address_by_block_no": { + "module": "pro", + "kwargs": { + "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", + "block_no": "8000000" + } + }, + "get_daily_average_block_size": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_block_time": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_uncle_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "block_no": "8000000" + } + }, + "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", + "block_no": "8000000" + } + }, + "get_token_info_by_contract_address": { + "module": "pro", + "kwargs": { + "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" + } + }, + "get_daily_average_gas_limit": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_total_gas_used": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_average_gas_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_network_tx_fee": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_new_address_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_network_utilization": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_hash_rate": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_tx_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_difficulty": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_daily_market_cap": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + } +} diff --git a/etherscan/configs/ROPSTEN-stable.json b/etherscan/configs/ROPSTEN-stable.json new file mode 100644 index 0000000..84448f2 --- /dev/null +++ b/etherscan/configs/ROPSTEN-stable.json @@ -0,0 +1,466 @@ +{ + "get_proxy_block_number": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_block_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10d4f" + } + }, + "get_proxy_uncle_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x956df5", + "index": "0x0" + } + }, + "get_proxy_block_transaction_count_by_number": { + "module": "proxy", + "kwargs": { + "tag": "0x10FB78" + } + }, + "get_proxy_transaction_by_hash": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_transaction_by_block_number_and_index": { + "module": "proxy", + "kwargs": { + "tag": "0x43195c", + "index": "0x0" + } + }, + "get_proxy_transaction_count": { + "module": "proxy", + "kwargs": { + "address": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2" + } + }, + "get_proxy_transaction_receipt": { + "module": "proxy", + "kwargs": { + "txhash": "0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1" + } + }, + "get_proxy_call": { + "module": "proxy", + "kwargs": { + "to": "0xAEEF46DB4855E25702F8237E8f403FddcaF931C0", + "data": "0x70a08231000000000000000000000000e16359506c028e51f16be38986ec5746251e9724" + } + }, + "get_proxy_code_at": { + "module": "proxy", + "kwargs": { + "address": "0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c" + } + }, + "get_proxy_storage_position_at": { + "module": "proxy", + "kwargs": { + "position": "0x0", + "address": "0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd" + } + }, + "get_proxy_gas_price": { + "module": "proxy", + "kwargs": {} + }, + "get_proxy_est_gas": { + "module": "proxy", + "kwargs": { + "data": "0x4e71d92d", + "to": "0xf0160428a8552ac9bb7e050d90eeade4ddd52843", + "value": "0xff22", + "gas_price": "0x51da038cc", + "gas": "0x5f5e0ff" + } + }, + "get_est_confirmation_time": { + "module": "gastracker", + "kwargs": { + "gas_price": "2000000000" + } + }, + "get_gas_oracle": { + "module": "gastracker", + "kwargs": {} + }, + "get_block_reward_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "2165403" + } + }, + "get_est_block_countdown_time_by_block_number": { + "module": "blocks", + "kwargs": { + "block_no": "99999999" + } + }, + "get_block_number_by_timestamp": { + "module": "blocks", + "kwargs": { + "timestamp": "1578638524", + "closest": "before" + } + }, + "get_total_eth_supply": { + "module": "stats", + "kwargs": {} + }, + "get_eth_last_price": { + "module": "stats", + "kwargs": {} + }, + "_get_eth_nodes_size": { + "module": "stats", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "client_type": "geth", + "sync_mode": "default", + "sort": "asc" + } + }, + "get_total_supply_by_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055" + } + }, + "get_acc_balance_by_token_and_contract_address": { + "module": "tokens", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761" + } + }, + "get_contract_abi": { + "module": "contracts", + "kwargs": { + "address": "0x036af46B35c5Fe11c1C48bC0301e325738F44c4a" + } + }, + "get_contract_source_code": { + "module": "contracts", + "kwargs": { + "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413" + } + }, + "get_contract_execution_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a" + } + }, + "get_tx_receipt_status": { + "module": "transactions", + "kwargs": { + "txhash": "0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76" + } + }, + "get_eth_balance": { + "module": "accounts", + "kwargs": { + "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a" + } + }, + "get_eth_balance_multiple": { + "module": "accounts", + "kwargs": { + "addresses": [ + "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", + "0x63a9975ba31b0b9626b34300f7f627147df1f526", + "0x198ef1ec325a96cc354c7266a038be8b5c558f67" + ] + } + }, + "get_normal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x687422eea2cb73b5d3e242ba5456b782919afc85", + "startblock": 0, + "endblock": 99999999, + "sort": "asc" + } + }, + "get_normal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0x687422eea2cb73b5d3e242ba5456b782919afc85", + "startblock": 0, + "endblock": 99999999, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_address": { + "module": "accounts", + "kwargs": { + "address": "0xf2b4e81ba39f5215db2e05b2f66f482bb8e87fd2", + "startblock": 9793067, + "endblock": 9793067, + "sort": "asc" + } + }, + "get_internal_txs_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0xf2b4e81ba39f5215db2e05b2f66f482bb8e87fd2", + "startblock": 9793067, + "endblock": 9793067, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_internal_txs_by_txhash": { + "module": "accounts", + "kwargs": { + "txhash": "0xbfb7fd401294dd5bfbcc88842670892182bf119069ad866ac2c5e4d8511cd032" + } + }, + "get_internal_txs_by_block_range_paginated": { + "module": "accounts", + "kwargs": { + "startblock": 0, + "endblock": 2702578, + "page": 1, + "offset": 10, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x3ebe6781be6d436cb7999cfce8b52e40819721cb", + "startblock": 0, + "endblock": 999999999, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x8707a5bf4c2842d46b31a405ba41b858c0f876c4", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc20_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x8707a5bf4c2842d46b31a405ba41b858c0f876c4", + "address": "0x3ebe6781be6d436cb7999cfce8b52e40819721cb", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x07d48bdba7975f0daf73bd5b85a2e3ff87ffb24e", + "startblock": 9792696, + "endblock": 9792696, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_contract_address_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x130116e22f3e42ab82abde6d940ef4ef14b77c86", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_erc721_token_transfer_events_by_address_and_contract_paginated": { + "module": "accounts", + "kwargs": { + "contract_address": "0x130116e22f3e42ab82abde6d940ef4ef14b77c86", + "address": "0x07d48bdba7975f0daf73bd5b85a2e3ff87ffb24e", + "page": 1, + "offset": 100, + "sort": "asc" + } + }, + "get_mined_blocks_by_address": { + "module": "accounts", + "kwargs": { + "address": "0x635b4764d1939dfacd3a8014726159abc277becc" + } + }, + "get_mined_blocks_by_address_paginated": { + "module": "accounts", + "kwargs": { + "address": "0x635b4764d1939dfacd3a8014726159abc277becc", + "page": 1, + "offset": 100 + } + }, + "get_hist_eth_balance_for_address_by_block_no": { + "module": "pro", + "kwargs": { + "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", + "block_no": "8000000" + } + }, + "get_daily_average_block_size": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_block_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_block_time": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_uncle_block_count_and_rewards": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "block_no": "8000000" + } + }, + "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { + "module": "pro", + "kwargs": { + "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", + "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", + "block_no": "8000000" + } + }, + "get_token_info_by_contract_address": { + "module": "pro", + "kwargs": { + "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" + } + }, + "get_daily_average_gas_limit": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_total_gas_used": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_average_gas_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_daily_network_tx_fee": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_new_address_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_network_utilization": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_hash_rate": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_tx_count": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_daily_average_network_difficulty": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_daily_market_cap": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + }, + "get_eth_hist_price": { + "module": "pro", + "kwargs": { + "start_date": "2019-02-01", + "end_date": "2019-02-28", + "sort": "asc" + } + } +} From 87be4c62064f01fe42a8ae2021fbc2fad44d688c Mon Sep 17 00:00:00 2001 From: litneet64 Date: Mon, 8 Mar 2021 03:55:33 -0300 Subject: [PATCH 51/64] Added testnet example in Usage --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5dc6b62..16d5d18 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) -A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). All standard and pro endpoints are provided. +A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). All standard and pro endpoints are provided. Görli, Kovan, Rinkeby and Ropsten endpoints are supported. Available on [PyPI](https://pypi.org/project/etherscan-python/). Powered by [Etherscan.io APIs](https://etherscan.io/apis#misc). @@ -193,6 +193,10 @@ eth.get_eth_balance(address="0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a") > '40891631566070000000000' ``` +You can also choose one of the other testnets: +``` python +eth = Etherscan(YOUR_API_KEY, net="ropsten") # net name is case-insensitive, default is main +``` ## Examples From 799f92eeb3bac7e386f2dc821eb731e92e9c3794 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Tue, 16 Mar 2021 19:41:35 +0100 Subject: [PATCH 52/64] Updated badges --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5dc6b62..3c8b034 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ [![CodeFactor](https://www.codefactor.io/repository/github/pcko1/etherscan-python/badge)](https://www.codefactor.io/repository/github/pcko1/etherscan-python) [![PyPI](https://badge.fury.io/py/etherscan-python.svg)](https://badge.fury.io/py/etherscan-python) +![PyPI - Downloads](https://img.shields.io/pypi/dm/etherscan-python) ![GitHub](https://img.shields.io/github/license/pcko1/etherscan-python) [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-385/) [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) From cc4b735a9e349042673f1e81161f2a4db2e5590f Mon Sep 17 00:00:00 2001 From: pcko1 Date: Wed, 31 Mar 2021 13:09:02 +0200 Subject: [PATCH 53/64] Removed pro config from testnets --- etherscan/configs/GOERLI-stable.json | 158 +------------------------- etherscan/configs/KOVAN-stable.json | 158 +------------------------- etherscan/configs/RINKEBY-stable.json | 158 +------------------------- etherscan/configs/ROPSTEN-stable.json | 158 +------------------------- etherscan/etherscan.py | 2 +- 5 files changed, 5 insertions(+), 629 deletions(-) diff --git a/etherscan/configs/GOERLI-stable.json b/etherscan/configs/GOERLI-stable.json index ba9da4d..4dbe408 100644 --- a/etherscan/configs/GOERLI-stable.json +++ b/etherscan/configs/GOERLI-stable.json @@ -306,161 +306,5 @@ "page": 1, "offset": 100 } - }, - "get_hist_eth_balance_for_address_by_block_no": { - "module": "pro", - "kwargs": { - "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", - "block_no": "8000000" - } - }, - "get_daily_average_block_size": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_block_time": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_uncle_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "block_no": "8000000" - } - }, - "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", - "block_no": "8000000" - } - }, - "get_token_info_by_contract_address": { - "module": "pro", - "kwargs": { - "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" - } - }, - "get_daily_average_gas_limit": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_total_gas_used": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_average_gas_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_network_tx_fee": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_new_address_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_network_utilization": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_hash_rate": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_tx_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_difficulty": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_daily_market_cap": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } } -} +} \ No newline at end of file diff --git a/etherscan/configs/KOVAN-stable.json b/etherscan/configs/KOVAN-stable.json index dff391d..a8ac91f 100644 --- a/etherscan/configs/KOVAN-stable.json +++ b/etherscan/configs/KOVAN-stable.json @@ -306,161 +306,5 @@ "page": 1, "offset": 100 } - }, - "get_hist_eth_balance_for_address_by_block_no": { - "module": "pro", - "kwargs": { - "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", - "block_no": "8000000" - } - }, - "get_daily_average_block_size": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_block_time": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_uncle_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "block_no": "8000000" - } - }, - "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", - "block_no": "8000000" - } - }, - "get_token_info_by_contract_address": { - "module": "pro", - "kwargs": { - "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" - } - }, - "get_daily_average_gas_limit": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_total_gas_used": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_average_gas_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_network_tx_fee": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_new_address_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_network_utilization": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_hash_rate": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_tx_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_difficulty": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_daily_market_cap": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } } -} +} \ No newline at end of file diff --git a/etherscan/configs/RINKEBY-stable.json b/etherscan/configs/RINKEBY-stable.json index f288c3b..3ca8296 100644 --- a/etherscan/configs/RINKEBY-stable.json +++ b/etherscan/configs/RINKEBY-stable.json @@ -306,161 +306,5 @@ "page": 1, "offset": 100 } - }, - "get_hist_eth_balance_for_address_by_block_no": { - "module": "pro", - "kwargs": { - "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", - "block_no": "8000000" - } - }, - "get_daily_average_block_size": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_block_time": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_uncle_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "block_no": "8000000" - } - }, - "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", - "block_no": "8000000" - } - }, - "get_token_info_by_contract_address": { - "module": "pro", - "kwargs": { - "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" - } - }, - "get_daily_average_gas_limit": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_total_gas_used": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_average_gas_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_network_tx_fee": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_new_address_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_network_utilization": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_hash_rate": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_tx_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_difficulty": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_daily_market_cap": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } } -} +} \ No newline at end of file diff --git a/etherscan/configs/ROPSTEN-stable.json b/etherscan/configs/ROPSTEN-stable.json index 84448f2..012856e 100644 --- a/etherscan/configs/ROPSTEN-stable.json +++ b/etherscan/configs/ROPSTEN-stable.json @@ -306,161 +306,5 @@ "page": 1, "offset": 100 } - }, - "get_hist_eth_balance_for_address_by_block_no": { - "module": "pro", - "kwargs": { - "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", - "block_no": "8000000" - } - }, - "get_daily_average_block_size": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_block_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_block_time": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_uncle_block_count_and_rewards": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_hist_erc20_token_total_supply_by_contract_address_and_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "block_no": "8000000" - } - }, - "get_hist_erc20_token_account_balance_for_token_contract_address_by_block_no": { - "module": "pro", - "kwargs": { - "contract_address": "0x57d90b64a1a57749b0f932f1a3395792e12e7055", - "address": "0xe04f27eb70e025b78871a2ad7eabe85e61212761", - "block_no": "8000000" - } - }, - "get_token_info_by_contract_address": { - "module": "pro", - "kwargs": { - "contract_address": "0x0e3a2a1f2146d86a604adc220b4967a898d7fe07" - } - }, - "get_daily_average_gas_limit": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_total_gas_used": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_average_gas_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_daily_network_tx_fee": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_new_address_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_network_utilization": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_hash_rate": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_tx_count": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_daily_average_network_difficulty": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_daily_market_cap": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } - }, - "get_eth_hist_price": { - "module": "pro", - "kwargs": { - "start_date": "2019-02-01", - "end_date": "2019-02-28", - "sort": "asc" - } } -} +} \ No newline at end of file diff --git a/etherscan/etherscan.py b/etherscan/etherscan.py index a8e9b50..5749aa8 100644 --- a/etherscan/etherscan.py +++ b/etherscan/etherscan.py @@ -29,7 +29,7 @@ def wrapper(*args, **kwargs): f"{fields.API_KEY}" f"{api_key}" ) - r = requests.get(url, headers={'User-Agent':''}) + r = requests.get(url, headers={"User-Agent": ""}) return parser.parse(r) return wrapper From d6f1977ce3c8325cf6a63c26d8fbdb3e7dfe85d7 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 31 Mar 2021 13:17:41 +0200 Subject: [PATCH 54/64] Updated README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 554da74..0bffc64 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) -A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). All standard and pro endpoints are provided. Görli, Kovan, Rinkeby and Ropsten endpoints are supported. +A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). All standard and pro endpoints are provided and Görli, Kovan, Rinkeby and Ropsten testnets are also supported. Available on [PyPI](https://pypi.org/project/etherscan-python/). Powered by [Etherscan.io APIs](https://etherscan.io/apis#misc). From b85f89af9f56303dedd327c28efc26d17ac179ac Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 31 Mar 2021 13:18:11 +0200 Subject: [PATCH 55/64] Updated README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0bffc64..de352d1 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,9 @@ [![DOI](https://zenodo.org/badge/298646404.svg)](https://zenodo.org/badge/latestdoi/298646404) -A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). All standard and pro endpoints are provided and Görli, Kovan, Rinkeby and Ropsten testnets are also supported. +A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). + +All standard and pro endpoints are provided and Görli, Kovan, Rinkeby and Ropsten testnets are also supported. Available on [PyPI](https://pypi.org/project/etherscan-python/). Powered by [Etherscan.io APIs](https://etherscan.io/apis#misc). From 94ee6e2d48470a8bd0dfbe6509676d3706245f61 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 31 Mar 2021 13:19:34 +0200 Subject: [PATCH 56/64] Updated version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e7751de..9a4410a 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="etherscan-python", - version="2.0.2", + version="2.1.0", description="A minimal, yet complete, python API for etherscan.io.", url="https://github.com/pcko1/etherscan-python", author="Panagiotis-Christos Kotsias", From 4cef04277588204245fa27a64298de2c13dad914 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 31 Mar 2021 13:48:09 +0200 Subject: [PATCH 57/64] Updated README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index de352d1..731341e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # etherscan-python -[![Build Status](https://travis-ci.com/pcko1/etherscan-python.svg?branch=master)](https://travis-ci.com/pcko1/etherscan-python) [![Build Status](https://github.com/pcko1/etherscan-python/workflows/build/badge.svg)](https://github.com/pcko1/etherscan-python) [![codecov](https://codecov.io/gh/pcko1/etherscan-python/branch/master/graph/badge.svg)](https://codecov.io/gh/pcko1/etherscan-python) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/6db2e36886ee46f58720c6131ef58dd6)](https://app.codacy.com/gh/pcko1/etherscan-python?utm_source=github.com&utm_medium=referral&utm_content=pcko1/etherscan-python&utm_campaign=Badge_Grade) From c3262d8d85690498e7ad3659161bcc208f8ad186 Mon Sep 17 00:00:00 2001 From: pcko1 Date: Wed, 31 Mar 2021 13:49:11 +0200 Subject: [PATCH 58/64] Removed Travis --- .travis.yml | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e0cae0b..0000000 --- a/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: python -python: -- '3.8' -install: -- pip install git+https://github.com/pcko1/etherscan-python.git coverage -script: -- coverage run -m unittest discover && coverage report -m -- bash <(curl -s https://codecov.io/bash) -env: - global: - - secure: ozKF63ysgAWWsr5R47T/B+u94L6pq89onaSfmqnmzmup8gS6WVnAE5yviuM3y9Il3BihXbxw5VUBx5lIwLg6MV4fCubxcNH+4qVjxGe1kxsjoT4wW8luJkkWGbvT+afGWaWU8AGWLTgqjYZrfkgTPxmNC/ulwoAHJra297ZvoGZEAcAZ/Y2vQ4u9JP2H3C3AJMhIdH/fuPf7DwKCvU4ufAhszJNbosSsaAxSndrecgHeQCxz+4RhX+a8XqIMTjys+DahSc4b5NRc/xJ/D1KMoNgtzj0yKldkcXhL1ykKW7S541ATKOrZLUqL924tlNdtm/IOvQ1Xy8xoR47rg+xAanj5SjiW0dsI+BIw94D4mIKVpKSB4wa3/ZxRKyw5fG5NUEFT/kdqp9vVz3n+x8nSNxV9x7yS0N/2fyACT2j+75aQhXvXI55WTleX9znsLRXFuTb0g0p7s3G/Bk+GS1gfJGdp/mRzdF80A0aMI5L+CY9e2G8VerQt93Is9w7+Ny3+XA4kSt+s0w/TzUSvv9y/BobSC2ZBiLltEaLups9VW5lCaWSgQLCr42rtHgMrduwzyagDGUlKUp5F8+Q1dMn0IpHEsjzwAl5SNuw8EoT9amBbWcR4d/Q+eqQ0JiHTbR2pwNs8bjYjIq4cXlze2BgYOZGStB1oMlfH9XSA7SrH7ns= From 7bf3e633b62ae791e3c034385fd4a8d9b7cfbf98 Mon Sep 17 00:00:00 2001 From: EggPool <33421807+EggPool@users.noreply.github.com> Date: Fri, 9 Apr 2021 16:14:05 +0200 Subject: [PATCH 59/64] Fallback to backport Auto fallback to use the backport for pre 3.7 pythons. --- etherscan/etherscan.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/etherscan/etherscan.py b/etherscan/etherscan.py index 5749aa8..9238a1c 100644 --- a/etherscan/etherscan.py +++ b/etherscan/etherscan.py @@ -1,5 +1,8 @@ import json -from importlib import resources +try: + from importlib import resources +except ImportError: + import importlib_resources as resources import requests From 575a1e7d9e258bdf594e794c2ecbdf0948de6271 Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Sun, 11 Apr 2021 13:55:20 +0200 Subject: [PATCH 60/64] Fixed for 100% codecov --- etherscan/etherscan.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/etherscan/etherscan.py b/etherscan/etherscan.py index 9238a1c..5749aa8 100644 --- a/etherscan/etherscan.py +++ b/etherscan/etherscan.py @@ -1,8 +1,5 @@ import json -try: - from importlib import resources -except ImportError: - import importlib_resources as resources +from importlib import resources import requests From 3dd94721804bbcbc8d13f0e38405e2ffa41c781d Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Thu, 15 Apr 2021 09:22:57 +0200 Subject: [PATCH 61/64] Added delay because of rate-limit --- test/test_modules.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/test_modules.py b/test/test_modules.py index 65e669b..632211d 100644 --- a/test/test_modules.py +++ b/test/test_modules.py @@ -1,5 +1,6 @@ import json from datetime import datetime +import time import os from unittest import TestCase @@ -44,6 +45,7 @@ def methods(self, net): "res": res, } dump(log, fname) + time.sleep(0.1) def test_net_methods(self): for net in self._NETS: From 584cd1b2014a51dcb05ed0c5c965b4d04d3544ac Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 21 Apr 2021 23:55:21 +0200 Subject: [PATCH 62/64] =?UTF-8?q?Removed=20G=C3=B6rli=20testnet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/test_modules.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_modules.py b/test/test_modules.py index 632211d..bf10567 100644 --- a/test/test_modules.py +++ b/test/test_modules.py @@ -23,7 +23,7 @@ def dump(data, fname): class Case(TestCase): _MODULE = "" - _NETS = ["MAIN", "GOERLI", "KOVAN", "RINKEBY", "ROPSTEN"] + _NETS = ["MAIN", "KOVAN", "RINKEBY", "ROPSTEN"] def methods(self, net): print(f"\nNET: {net}") From 06b76428efcaa4d7d147ae612cbe86429e0c719f Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Wed, 21 Apr 2021 23:58:00 +0200 Subject: [PATCH 63/64] Updated README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 731341e..3a415f6 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ A minimal, yet complete, Python API for [Etherscan.io](https://etherscan.io/). -All standard and pro endpoints are provided and Görli, Kovan, Rinkeby and Ropsten testnets are also supported. +All standard and pro endpoints are provided. Kovan, Rinkeby and Ropsten testnets are also supported. Available on [PyPI](https://pypi.org/project/etherscan-python/). Powered by [Etherscan.io APIs](https://etherscan.io/apis#misc). From e059d7c91071d8999b8aaf90edb9bf7c488a110d Mon Sep 17 00:00:00 2001 From: Panagiotis Kotsias Date: Thu, 22 Apr 2021 00:02:26 +0200 Subject: [PATCH 64/64] Added time.sleep to avoid rate limits in unittests --- test/test_modules.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_modules.py b/test/test_modules.py index bf10567..8ad9f9b 100644 --- a/test/test_modules.py +++ b/test/test_modules.py @@ -45,7 +45,7 @@ def methods(self, net): "res": res, } dump(log, fname) - time.sleep(0.1) + time.sleep(0.5) def test_net_methods(self): for net in self._NETS: