013_get_dalao_balance.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # https://docs.alchemy.com/reference/eth-getbalance
  2. # https://docs.alchemy.com/reference/alchemy-gettokenbalances
  3. from base_class import BaseVariableFunction
  4. from base_class import *
  5. from base_library import BaseLibrary
  6. old_print = print
  7. def timestamped_print(*args, **kwargs):
  8. old_print(datetime.datetime.utcnow().replace(
  9. microsecond=0), *args, **kwargs)
  10. print = timestamped_print
  11. baseclass = BaseVariableFunction(__file__)
  12. print('\n'*5)
  13. print(f"{'{:<6}'.format('ENTER')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")
  14. url_0 = "https://eth-mainnet.g.alchemy.com/v2/WLI0ohbUlvbsJVmoIvB1wTSwUA8qP5qS"
  15. url_1 = "https://eth-mainnet.g.alchemy.com/v2/ck1dtOx8tHkjAH2PX2FwTGN2T2gDaGtV"
  16. url_2 = "https://eth-mainnet.g.alchemy.com/v2/pxF-cEkEE1JxzxgotGyww5ra5w1IvAkJ"
  17. arr_rpc = [
  18. url_0,
  19. url_1,
  20. url_2,
  21. url_0,
  22. url_1,
  23. url_2,
  24. url_0,
  25. url_1,
  26. url_2,
  27. ]
  28. url = "https://eth-mainnet.g.alchemy.com/v2/WLI0ohbUlvbsJVmoIvB1wTSwUA8qP5qS"
  29. getBalance_eth_payload = {
  30. "id": 1,
  31. "jsonrpc": "2.0",
  32. "params": ["", "latest"],
  33. "method": "eth_getBalance"
  34. }
  35. headers = {
  36. "accept": "application/json",
  37. "content-type": "application/json"
  38. }
  39. df = pd.read_csv( baseclass.dalao_merge_path / f"ori_merge.csv", dtype=object)
  40. df= df.astype({
  41. "eth":float
  42. })
  43. df_not_getbalance =df[ df["eth"]==-1]
  44. arr_str_dalaoaddress = df_not_getbalance['dalaoaddress'].tolist()
  45. len_arr_str_dalaoaddress= len(arr_str_dalaoaddress)
  46. arr_payload = [ {
  47. "id": 1,
  48. "jsonrpc": "2.0",
  49. "params": [str_dalaoaddress, "latest"],
  50. "method": "eth_getBalance"
  51. } for str_dalaoaddress in arr_str_dalaoaddress
  52. ]
  53. # getBalance_eth_payload
  54. async def get_one_eth_balance(str_dalaoaddress ,payload,url ):
  55. global df
  56. req_response = requests.post(url, json=payload, headers=headers)
  57. if req_response.status_code != 200:
  58. return
  59. response = json.loads(
  60. req_response.text)
  61. eth_value = int(response["result"], 16)/10**18
  62. eth_value= round(eth_value , 3)
  63. df.loc[ df["dalaoaddress"] ==str_dalaoaddress , "eth"] = eth_value
  64. print(f"str_dalaoaddress= {str_dalaoaddress} eth_value= {eth_value}")
  65. return
  66. async def get_eth_balance():
  67. global arr_payload
  68. global arr_str_dalaoaddress
  69. global asyncio_len
  70. for str_dalaoaddress_idx in range(0, len(arr_str_dalaoaddress) , asyncio_len):
  71. cur_arr_str_dalaoaddress = []
  72. cur_arr_payload = []
  73. for idx_dalao in range(0 ,asyncio_len ):
  74. if str_dalaoaddress_idx + idx_dalao >= len(arr_str_dalaoaddress):
  75. continue
  76. temp_str_dalaoaddress = arr_str_dalaoaddress[str_dalaoaddress_idx + idx_dalao ]
  77. temp_payload = arr_payload[str_dalaoaddress_idx + idx_dalao ]
  78. cur_arr_str_dalaoaddress.append( temp_str_dalaoaddress )
  79. cur_arr_payload.append( temp_payload )
  80. tasks_for_wait = [asyncio.create_task(get_one_eth_balance(
  81. cur_arr_str_dalaoaddress[idx] , cur_arr_payload[idx] ,arr_rpc[idx]) ) for idx in range(0, len(cur_arr_str_dalaoaddress))]
  82. done, pending = await asyncio.wait(tasks_for_wait, timeout=30)
  83. if str_dalaoaddress_idx%10==0 or str_dalaoaddress_idx%10==1 :
  84. df.to_csv( baseclass.dalao_merge_path / f"ori_merge.csv", index=False)
  85. if str_dalaoaddress_idx%50==0 or str_dalaoaddress_idx%50==1 or str_dalaoaddress_idx%50==2 :
  86. print(f" {str_dalaoaddress_idx}/{len_arr_str_dalaoaddress}")
  87. df.to_csv( baseclass.dalao_merge_path / f"ori_merge.csv", index=False)
  88. return
  89. async def main():
  90. await get_eth_balance()
  91. asyncio_len =5
  92. asyncio.run(main())
  93. print(f"{'{:<6}'.format('END')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")