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 zcma)@by!u~*6>NCyOc({kr0sXmhNt(ySuwPrMtVkySqbLy5-xx=boc-yw7*neinQ4 z$NW8OjxpDmqo$-NC>RP55D)|qi=BiN;0F-Mk3WD58F1^Eo9P=FSkq`|7?~N_XlPJd zID!I6{xd{GS5->&saaU%H4qRC~ibxRN$_jrx$qnJVJZ0yEXs#4Lj+f7Wdlwt(!}VGC5m|Tg`_1 z=l%6o+#VbjQSvpI5t)xvMT**OQ%v`7WR2uyA#ukRlq{~}+tgsQ!>+uhd#*v>TH3(M zQgxT+7bz9T%h{9ZEw3ooxnCTc8g-S8yRqvv_04p<38JLYBM5+vCWsDOfKqBAkXuQn zksKE90CQ19AcblPyo>fU(Bs(_)M;sc5*TyLxpRBJ3<-gk^J>X%hd-O6giv=MA1FBR z4#i6-39{FVuMYzwvD-4@ZHOYJ1n?D;K&WI~o=1_Orn~E%Ro?KP%1-rnf@;0ZQAne< z`r?FUQL@g|_($X=MMmz|TdG4I6Pied_pciw7mf7^kl`4|mce31KYB~4==tn^Es=cf zQ-nOaZW7)vpEXVXS!_b9cia0qfCCdcj3o#Ei#X-U>q$FX&>LozX;ZrT9^s7HsyVtd zOQaI~CKB9t_qvL4U^0g0kwXbWVD~f9l?hXB)i>jl8vNb#!BDkoZL^S3W+{AMb_Rm0 z5$%qh5-q!8EVxQZ@a_>P-;YEY1n45fN>6r@H6-4_4ic3T8{jixFM-J9?LsEl(4B-R zUg-rDu_>)NS?Z|mWF~fLZkHx}DvUtOLP5mMuRfY-ha)`0LY8^B<{fC!zB?GPn|p)o z;K)Z4Wj7Iy8-M&()&)1nowT<%hZF@tX*o@jxx7g+N0_Bi*;*l$C|Co zdQ-;(A5>KgvZrEl(^AReY(?Ms)zHqtN^l<>zzx2!(=a%;svu3zjTon10gFJt&mj`A z@_NE|y?l?lGi5i6=H8~CSTjAnVnZKv6f0`|OoHtGzI6f`DbQhoX1R71icou&ol0Pg zSSWe)x*&)igx-c|xSX=7WVP|lCG4?o98N4dd1D=?uO%+Sib=GRJ5pT{ZaFL7Y4=;# z@8vNWUQ+GcDn%}u3!;%Ma;9Y^=>6czxmPG60hVYPKICv6bU+vhbExg9rTqP}XlUMg z{XTHBEJNH}l@P$G0$t$fvtsAbuo;qKkku!gcvEn3ODedTk_S~+VbF=3S+?)pgC3(% zg;!tQ1b!^L)eUp%otz!=tHu@NY=RTJ4X|WEN#OvApPF5hoa9Y3PPRG_%ZB!(Ka3`+ ze3Jm84G$-2P#rVs4M#w#mtDs)CdG$ zY?O=EZ$1&P?H&5ndnER9BxmZeXfUcuE12TMVv(2=`3ffRD4q%$`MyP#oCv;*{=nIO zAl7f1zuFGk9gbwDmKm(xA zs}RW9Q6Z5O7+MXLWEaK03#mQqQifqtP_V1r^T@^&A^UI8cYHDeGg!4}KNJZ+Crb*; zA@`6Eq%Ly6;|Mvm4T&W;PNLU%B8)?sG)0wQ&Q)*COEZuynE>DL^XJe#sbmwjvon2P zmfTy`reQYdE6mJiH7Q)vGMw0h7Jr>xyzhf&y$&H{z}(?Q8^fwAlu^*%A^`3M*T#1} zigJ<}=LSvZ?*An{`T-JZo*E`d>)WufK@J`P5`!MaPI34E$q;tV8(g(84i-%It&S`q zAc&yBq;MNwfgK021_h!y9yVEQelT1yD_bk(^Vg`7R0%8xH+qzhz zzFUh$0eA(pg8rVC1CDG&r&y`#?)b-|XfCC~c}g{7)GEO1L^6>gY4O6wsez&fS*dxM zLMBUHv#>q*yc+Y9O(a1Sk*k1Lxp{K=4Auht0)$Hz13n>M#-9DfQHxLn zl5HQQ;esBRzI4J^Mt;@4X2K&(&G&*dO3d-jw~HGkMGIihy{Wju>>fNswaBGV<8!~r z>|~hjh3@nF6et?Y{FM2Hz7Q(zjW)B_enP-dZ#N++vbyI%X3C+VOCOmFPf!_ulQa3S z?FHrF?qqculK#YWUm8+`Q082(!#9?zH>}X{Yyx>w6~)?kb5I_bEVVQ$E8h1JWkQ9YQv?Vmo2wkcX}j)v?@OW$TAp=&)|xizj~AkWCRay^pih3uq{ z0gE%}h}|z!hLwrPM4%*H;|z9=Hz9UAJH#62)QIb8p1&dZ9yT$JzJPdyA;3PZ_fZ_V z6nwu{8J>Mp1AHE;>D2aOoD)X3nJ3#gW-WcH|I4S4QlPK-qk0N4J!|Fn^4sKJN>^-P z8``Rq8Mg`*AQMzC3r(M;zZCR01PoOsKU%FnA-78o34XOU#JPVhp76N5DUzYCK>f7U z_YC}VFIJOLl>z}@PtONz+ta{6K&XIkJsU$kD{CDsvtKuGy>Md?I|?%M0moDax>@-Td6q->>h{SLiVdg7K9-^ zGGUoeclNtPRk~p2>M;X2qwwy>yu+#FQ#uA}(ud{Uu&P5~VLN3i!%-=wTD8HbKc~j7 zr7HDmO+c{*FfDvAARx5gruNSy0nUl5%#hgy?Y0EFW(*e@h4PZoAE|bIAT2K^SuS0Op3-K^ zm0Pf;gjM6PUE$L`G;X5`4nAqsudr2NxSd{!y$!hS-bLx*%-JXz2D`6kV&BK3prhq93XXsOo(oql}imr}icm&y81#))saKt91XV=wT)C z-&|14-xY0UYx-YZ(Rp=MsgJK(WTioYfV7~1fN=jXR7=Ok$lT0YLk|D~EEeCm39C$6 z6u(nfs62%wg|EY-CLZ~T+7@^w#^wnS75Y#e_*yCtmzZ2ckc~sByAPiv;GS8u)~08g zGlF)BVxtCF%ED~3dfW7?7RnC8aUXKO>u-`6DPJ=mJ|}sro+%5FE*=;$&4s__@o-Hj zk>tsAcwmSxOngq^JTesKAB9sbY-C|qJYt1~v>GU+Lak$t$3S~RN zPY(pjut@e?8ybdw_q?DFJvfB?bkRz2__)>TmvMz1x;evF1tyG^$w+`a@G+LCtiCa4 zzPmr&EEBcQZ!el%9#2V+4o{}XbC8#JhR+j!0Hj(GPh-ycVD*AWb&n@3r zF0xQQ<}JkHI<7$JWvNwY--2x7Sz4+U`?*f$M&xFHbWCb*&%G*88Gu4Qn*0O_HGzpo z+R0QFZH`KF_u=@_a7g_<0vMeblES%gaHiIzh=229%zdSTWv$0Je|MVFj6?-)r?agw zzxw+ohlt|QoUZ*v?=!jfY5YTI|E14;Ns-sw7|OB|LsqIdlZxKAO6Vi6F_Dj>^9?UL zWF^8&dzm)CKVZ#&p`CcjD4AR-tQFrYiwJzI_PK{XT8Z`4<_ShF6d{zO!&%`Js-`cS#KyjA z`wLc_MoY&sE#@k#v3=wIh8JZ(bVF}AS@B0#uG_rSI&;*XpR%~r<^$DIUkOc)5HBZr zn1uJ8voU?_(oo(WG;Gso)XA>qwmBir3jH$m5&7Pt9n)MOm2KtB(v;a;;}XxQgLn=; z)U6ZcD$jyw4{1M2>1L6ibN6f zGb;!h0?bWqjpXk2yrl>D(Z-4v9Uf37(q_Eg*jak*GU__z@cP5Ko;k_AtSS=PUd?8+ zX@!F54W0^t@kw3mZLMqc-``}Cvk>YsfXTiFyplM7cpdeP^h|XBc^mbjxXrU@QG8Ax zp{Bb&-%PH)<8M;8K$7)Bv@6>6QMK@rD~~)bPI|gJB&=`NZ8&SKSaV=-&hoF{3H!ia zCqJ(Um&Ig;!!LDtc)0hl`n8RRDv>1!cR~-PEc>fU@QkG*U&XUz=X+^N?L)EV5Zu-j5!FclZ*>PpQ${4f;(;V_rAvA8=0?pz_K3Q@Qp% zAP49`PF8D9z~Qf>*t)=*R3}--1OV1I$B$yZQ zMag>938Y@=aL8GoT-MnULGpI%R$$#6LSimpRxg%_%VNEjp%ORH(jwq$by-cd?BCa@(&1o6gAWX$H_co|{`Pw&HDt)2emKt((o*I03R*e)< zi~hhwBr~^cUS40WhOsz(ENicFc$Sd3SZJD@rN>vr8aJ=0-Q0RhbT z4Z)OLEtFGnO^}H(;XaqE(;-t~1JN4pZ5aerTY{#EP5{=K^8*k}8?uf`V%$FJ#_=PM z&YpfT=NYzYW3SY1lijET7Jd#Ziqj|=p2oMp3N%(+V)oKnk=?*i*m)wm?}$A*h^EeOlYhWFVs_7H(qBg)VOfz6OhLxlvH9u1ca$_&zD zItZU|2y#6^;5`EUeSy!h7;ozVX6*yGvHq~YZL|#jnX)Lw;Fz3{Fr~2As4yk91eJXM zFjYSdIX8r*r6o%{%UdJ=n834 zYBK3^IY|*QiBXyn3MmlLduG4-SMRp1kVK_}J*8hL1@J`wBy+HTd%XXs<5#cn*R;+L zjlzo;S$_e%xWPm~Kz|;rrK4kRYi45&*h!C*)IKf!*hwEKimjpz)xcX4eX5PVfaMz^ zPrnU>#2+G*z+|*!T~gwn`u=d_65~eLu8iSJj80WC=8TknahsCesUro^oWM#D1OoSH zfkX$4VX5Ok&BjP}Lc)Q)ORtt5tjx;Y9YA}cxk$(W=ZO5VGn`cLfbzqKNje!=Ex7m5 z+AVw0?P@XUguD%`jHGD(k(jS_rB+1ytQ_^Fi_snGN&T$w6bc8FOLoB$tQ!bPf(q9C z8S%nTRW&z0ez`<%7zhw$qa_3xK(q-46~oTdn$z>S;B5z=>ew?s_&8JaP9OLds(PV; zwfX+kreP$_)n$S4c{)C?YKI}zZmG3;y^uTi!(zFPO3{=Ob&{aKT=^n6djC~lpQ|-3 zsYL{Jp)5q`)C>#ip#Gf4uIBf!s|AgafCMSjsD*JH&G&2}k0Frg&15=714gcH9H=aa zPejp4#Ugw{xq4z4K?O9`koqaKIsE5oTU>@>bH-z1cu+aL>0ni|NQq)K=%sqZ=JGO) zuPHH;{4@Mdxr}keED;d!@6drjH~e+=6B>9uFJp_PP1&g0H%fv#E;E30OMKp%I%Rl& z%2>@G8ryEp`Oto(e|hW$c}3k+Ud1FW%uwrJbST)aJ$D5Y+1TA4oM3YxBiX$)BGWt( z;LFUl8J4x=9Mi+2B0$vf1)q}^xsH1~1bzpc9~9wWG~G(6TY9RSnb4S@J#F~| zxUtN>Gt{=N1rIXYB^g>b6{zUjh>$P+7tDw(lF1+n+?TxwR3g+NQ(hKDLu4R>GAb(hgLtfiFO8WPYD>55@frktueWnmXU*7L9#vt%dR!;XtnVY z2~-Xflq=Z9>7}#9&2ZunLsfqEo4wyT@us`WvHfOuYz=KuC80TkTD7&)eiv>^XJ2Og~Sc<(Xyg3 zh(Wdt>C)Ccb9Hc}Sx#6PrFFyX5&Cz#RdMKdYXY#;1mHkGzq{Cf8wPC?a~WsxGL_AH^M8R~eO(;+cK6>^7&b(uHZi9D8 z`d;x|GnlARgu}VT@iPm}ySVIq9LNA7j~h?4C_NH{L=fKUW)wZnMK_W!beD zdUoQQ5Y*y6LVSR8*fC$8dCZpLg_=M(_4~+``y?SL2boJ!JqjkIhfc78DnqtLUwj_* zeTl{ZySoZ3FxZI5eo8a2XesL_&OOcX+D`(t^j-F=NvKvxg_ zB~IlvkT9gdRrG_3Jwk8Cu*Sv$bQoGkzhkeY_hCP5nqP?9V6?V*;B1XkK(geR+UAGf zmBb6|Y6b#O65YSNr@xg1NY2|>0b-gTdK!^zk?5jDSbajtlQ`zW$v_H-z>p1Ol8zdU zte`<4tB4#+L^zdDZ9>iA*8bW~b?xfTp`ckWPVS8__Q@{F#gqRTT9N7X}dD7#DHOv>XpyYl6dR9V@BMpXi@e zAG5b~h2@V9-j5uJ^1~$5i&r#dZ>dLC2i*GK}2k9(pMJ$>c$;2$V*3fZR zLrI(vNpbRhcGr@tprK#Y<>$DVj77Tv|6O|a2BcNQ0O_d%r1!f+^0)L1w5)$f&sfh2 zAifnT?jPc7-a{?2G9u~+CGZRo$tN)MmbMO~G?1a(tUqVn^tktIXA2PjabCxiHh3%&}6|$JB*(=C`3Qy2Qr~!E%`%s3U2cXzk zsQA|sGZR9dko}{j>$`CMuV^$B$|)4%+WV~;Zn+#`Ulo{_m_w$P4cW|I=K88AhP9OG zpRo{z*Y$KAT3^@PvcnB*iZ>eQHM$KBib|9V%~8_W#czG1U(Fo6rd-Q4(U+n<%Z`7q zF-F^4&M8oIrZ;|_dqI}PDRJUj{g8?l|NOPm_adP;7FOl}+3qB$m?zVsc&uGejHf9V1n05~EHXf4a}yzWR;jB~qKj$Ais~lY?pHr^ zVDe59j>~_x1I5YQUdG$|SUZNF>sZ*sk9N-XDM4UTPNG4;Qr5=-L6k_NOsF=W5l+h` z10{imP7i<3kC{T6i4UK|u{YyUF8NSIUl>taS#R10b<)|tXve~%$N2<+79 zQ*5zanOM>ji}DdGD1JVBjukD252UtO@`MY+c=wgBWw&rbkffum2mzKc^zeo>AtV%C zGcV*I56o5y4+=jD{j1a2Z`1=_&IvmtIq}WpJ3=}sX+||}*^wdfOnHkBW6~cM9Z(o1 zIErH&AeSVqs1)p`}od6w;A+a^R1F)2jP^I5j%v?iH3cL`u zO;a9UidZ|Wc#Kgds1$y2ZQ??Kvj?hfkPL4>w$`Zlf~8T|={EKD_Z76|=9njP;K+67 zzznwIngrh`2AJscO6Vx(T!?v6JMEs^FE9&bc5g}7QNPjByoZZ)zzD)c2vyA6PyZPI z?M`kD^V?H96?&t&+J5T-PSNXr`wxy1ldUG_?P=Fe(dcTXUd|0OV`^O$_pKX6)G2yOnHk&KIs#oU_?&B}g9jMh&zHWBQqR>IYM> zW8kd;5Gt70Pn3@}qfbB-P&1outR`e5!0WvWMZTxcOi^U3W!S@E5Rd7pXR?S9l%vV= z55n(mbY!Rsnj;I2!!V<4U?R-T3(*2Pe6oG)@7ZG6XMAzE`qCEJ*~NDbDSg$kvyfam zET)Z4qVCwrhg;vdH!do~_^hO75Z)!4W3pps)PAKO#EQTdV~>{#PvS!8TYExDJ`9dmeF7pjZS0g6MugEkWH*&pj73qZYGP1N za=SSJadP6q#4LT?T;D|h9CDemOwxI3eE+EgT z*-pnOB=mY^T+_WV&(%0nrRA4j2;4^erJ%1k+ zEsG+&8KGBjw9tj%Fn$IN$+Vn|OWN@XTF zm{7x8>(sv&y14}xJN645p;UJP0(${B2Wir~q+EZOHe%h#?Gaz3cbKpG;gt=>jD)tl zkLFy?B0P)v>AyeIYVbr6@(v8{BO(g34vu=%uD}eIcy_;C5yxmRlp=Yqg~hH6(4O>1 z)UMYbvA@**3^BmGAnl?_Fe>N|;-(xQ&V6(D;Ca|V*7*%p|EBY*cJGRxuw%1PKtpgJK8 z%J$&ugEsWX{waATH6K*#L{R#8vKUHWMh#h`6zKGz#%Z@O*l3=2=)m&w(r*x|mAA81 zy{UUB{BFIZB&g4B1P=C@v@ocN3RqgQ=SpU`)PnXL6ZVw7hqndB*fr;pYn}Z>or?%V zc?^L$3b+N5Qr;E4Q&T|Y6f;=ALp97&9xqY0{05TSH(#QCJ|%xx_91wM{619`*M8>q z4UDFp^YR2Y#Fn^~^YWX0L5sjjwWQK(1D2{S2`L$h4f4yA%YD}BQVdx#zkN`RiFFaWt7{on%geuzBv2*++`IVNyKmRnGHmtYxd130}#7NiEXU znP6mu6Q0B`QQeW=!RVxz$rpV+EEJ09HdLd~s#h%TvRSV^$u_{Qni95FG1~9F5=bG6 z*`z|`lRgQlF~d#}nytGf#gLEwb200mHnAix#F|D(wVxVdK5|EYcau>6u8pF!vlTJ|Ws zNZ4&SxeWKU>*Vs4mmyYp`Xw5nn*s@u6-l3N%*0}pW7C|zszy0ptm>?i8nZ$vdfQ5W zg{eMOB_?DN_=v;0XydFCxr;~vLWm`fl3BVh2Wo0d?asj^XiKPyZl8Njl~NRs_;C=~ z7lA-!14~cdFrFz1iFG=Q*E96!m9-3Z1Qd$v>+MOyYS4II_{rCh@T#Z1^K+duG6&-l zUsre?vXn^8Rh&Nc<#EKkb?wGmuzIR?rQ#6e>@%7OF+G<{9Gll}X(S{HSJ{f8a3;f` zQ5vn?5r?i#-rIS!!isk7BFRe!zm)fP*pBbg8lw_2yuJ;G>$P){84l`M!d*Lg5fuYu z_fNX)_f>6cV`TDQ3r|0iWhvRX3P0+u`2aoqp6UK;C?Ha^0~BI^6rTVJs0nL<17tsa zZrFTh3V?&Y`jLA^tg{!Aiu3Uyzw0~paxRzJvn-Ci5utDslF%#-#Zn8iI;-H zw<*&0q4!&rw879O!W$v0)Xry!>3oXC|%?tqZQ;Y2Q5lr!&-UY=v3lk>62l#XY zgVkjgewg+aX6hlT@U{o#lY35Ow9L$Q#%g&}W+1-AGPZtJB&aPCm2JX+cofNM0I5+! za>)aWeAl!vca7TuZsj(|&^u4m5bHeST*l6y8SitHB;DE2m zZ&7Vi5M{ifk}tE{=OKqVEi-J+{&07hCv(7C00u|TkO0D5hD8`IKI!Po$?n7>rIvUBw>XJj^_Al1c-cVJF zL!GqU2_Qszfb}H(^@Y{2aI`TrH=}w_O$+$w8d=*=8JX#u(})T4@=M6@t4Vj5WzizE zJWvR**B~9pv!9Fr=T$&qyqPo!gJbTX@OpP-GTpZJCaQKRmH>Zj*x7tF8Ku&5xyBAA zu3|cUmBjw*yX89gZ;zLcV6ksTI_|!LG~Z*SK!(WKu{I*4-~tb|q#m7M!$rTzI!2oR zH0!m-yOg}Ii5!44d<#eN5ghDRjls-j3mB%Fw9n%GwGi?nhx)LtWj!demw75T$5$6; zjzzj8At&b#^FTKhbruS12=?$*LIxx4%MjBKh8;aUtLg8=n7RjQx+6U>mo}Cs;Bb#S zuvf%A*R5Z9;_tI$fG*N|W}Pmlwc6F%vYx&|zXxL#oNlu2*3Q_((&yoDyM^?^e&q)P zcazrQX8K`l{D1_CVU++%w&C*o?MfiDiF=wrOf`M(1;#@0?NV(dIYaAB*E)@E$(7Dt zztru3qBm95h5OObj?*S$_@eq&8ob4Q<3S0k6Fp3MRb9Iz`WEB!e4-EsA6qj$Xv!nQ z;gk6V;*|o(=Nc0xRp=`iFEvuWGNl?7Gr}XG7p$d;fqJg%-sL@atwyf{gJ03_bkZr-(_+qiA%P|=?F9Cg z2(HJNrWsi*p6NPb-|gXnP6KsLkuQ&EM{rFNG6Xlkt$spV)&362fEC&pm}b*i!Nd|N zYcdr=Y39brm?7LnXO`qnQf-aBz!MHE7}m+J(J;)f?Wq>iso2Vp#CEQ`;gCzLRgd-Q zD@vJ}V}|7CE4PRId&r#CJt{WarjwH#nVU-v>)gyT<7!`31#;={=lE`trMRS5rm_df zzl&*1BhXzHAf6vL@&6(w1tETZG3YTN@sSBwQ7ZD$;jt=d+G+ZAt4|}MR3elEG?mgq zA_J7vfi$lRq{eB->6vEer?;U7$7m+5C}&|wsYFHw#44pp$;icbpoGQhq)GD`W=Dp` zL}$c@i?%mGeyI-qP~#Zdx$lq0UnIay{l7e)jk$$}iJqOF3AK%bjp*o@=#UuAt_anD z5EZ$E#PHTje*Fzar~|;nO+f$w0Ww5Cdy)Q|nUm({{Ups-GCeSvq=*8v?wSUUysI?< zEr}3AK~IVamB{^S!>e=Z!~W=+-nmMwdiFd}@F~nq3TBPCvTj!$9%&NDtByG{0YA2G zvU{4Sg+Kv?%1TY& zRcjZc(X*-4fis*p$Rxf=wCI`bCV}K*YPWH2$mTP{1Z!f9j%y$#kUSyyjx;rgVOB>( zEe`N2rV8^f(U8NMrjJnyZk9z6p=U+ws;~$F@k|~;U#~3%Gi{8qaOkUP1R?dV#^JA< zY=UgYcrxt77D_Fsh+`ZQ@*~3JBq)@=IpiE~(CDD`;$MR4xG6)Q_T~L@aBU+L^|X-7 z6lmAuk{g>Og*akiif34pwd7+fOu+m^JW(xVc1BXWvKeYOIz77pxvh)arH5rS6s5Sv z7Qz*~49(Kp2(>`0eAw6j$z-K>i|TG$nzUuYKoTT%v40TMH|*e*HGIk@0cx@njl3n5 z{<>N2D;~{T5;VUBlBve&G4b~x6E{k!+OI1)#5Zi`(9shd;A%se=BVWBNSI0yLL3;~ z3GYbY54~Zs^06_Qn%FsdKS7J6;WUoUK^uI{1x@aklbSZhK4cb}#g10-$)Y<7 zb!w@Ry82w}VH>mq#5X-fqbVA9lb3bHr-RLR5O<1&hg_BFf1T-4_LOIRPdkU|`^2hN zR!kkC#BiD!+&ntwSO@y{Kpp$rdcSoXX6$E#rqbS-A|?ZfU^??@O03o*xyiP2QR_Ap zE*nVaWP|17ZgMfG6|2Sv3Hp3C>rmK_>h+Tm!ag}`sj_o*H0lV)8#?%QI9-F}eXGlg z&Fv~2pEf9^$odzCyf{)^%co-8b7P!oIQG!3J=BpQSV|ErSZvz+!g6y3Is_1o*6FSU z1M?d9s*pii_(@}O)*=q|Ze%`8Raqs~)xWwDW5f1$Lzh(sbbIB8^;$4zC2!72QgwS3JWI;v7u(A%d51)pFfC zY`OBT`e=*>d5e`Y{ljx48m311!>dAONZJ?n2+!lIIsE)2(TvzJAOfS)r>Rv3h@BB* zDMV!(*Yd57KV4pTls~3veBItmalvFvP8#TTPAwYSmOymC0)ojXit6<~0sqK-R zDZFG}Sc&>6?sjA8DbZJzy3EBg&N(m7%(ij68Yz$)BB$7vYs5c>H1@DG6Xxmxh^zVz z+x!9-QL)$w=B@@N%%_i1U`Ncq-%gRdUiZ5!iZgeS1R6PEZvQ*5j_({EB*B^YUxG`O z$Qeka?CXjZ&T$qDS}N`W5u}IqrN(x4CME-|n^rY$Pc7%|I;aw(mK1J%aJeN25RCDF ziKZ>)Ew+$*TMCkU>MKmG_QwoP9AX`r#z>Glz6*lq*3S%Md%4_UN{Rx5pn(4OlMnz4 z_J3Eo=Z~*HoQwDs@TYSTe+>r$D)*%S1@Ox$iC+PKYUcb2XagL#_^0df*CPI}h(9$= z{zN1JtnyF9KfeIp`>%{Y_2d0ycmvw({uxR0qp9w{(tK5Z`3cX9WPNYYsWuPyMT`4f201X zB)ACF^Ci?jP?`GoL;Y6!`xW-5y4Ft^B_QtoH|(z}*RPZx z3-o0s{wJj!pv*r~{x2{8lJhbX`jZoY_b1NZdC`}gmpQwi9Abh$asJ8Ry#&3?H~j=v zz565R_w3V4+>haZuks&Rm%p!a&qu;vasSG}yac_>!Tbb$Ao@4x_l(R-*2`SSPZlP? zmH(-{mzj@WIe!ZEe{ysIF7ZE{|K<_@C-8qseHnoLq!N<<57fWIv6tAF0n1OUD8>JP z{lD<#U(6Rl#!u$q|HAw& 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: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy