query_balance_and_nonce.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # -*- coding: utf-8 -*-
  2. from web3 import Web3
  3. import time
  4. # 设置 RPC URL
  5. rpc_url = 'https://testnet.dplabs-internal.com'
  6. # 初始化 web3.py 提供器
  7. w3 = Web3(Web3.HTTPProvider(rpc_url))
  8. # 检查是否连接成功
  9. def check_connection():
  10. try:
  11. network_id = w3.eth.chain_id
  12. print(f"已成功连接到链节点,网络ID为: {network_id}。正在查询钱包余额...")
  13. return True
  14. except Exception as e:
  15. print("无法连接到链节点,请检查 URL 是否正确")
  16. return False
  17. # 钱包地址列表
  18. wallet_addresses = [
  19. '0x801990bd7f37ea4be3ed1853f70dd697e1365bd8',
  20. '0xe50B77Cd771243b8Ae1d6ce33b4E13ECC5Fa28a6',
  21. '0x9ea2ECAD4090E32916e03b77d7C75CbF6C8E0A55',
  22. '0xE8A4b0C04300154DC9B1D0e565Ba70F996614690',
  23. '0x1b623c5d70c93b437d93c305bf2cfa389095f636',
  24. '0x06D25c3e0E1F753ac0486a3f8aaD7259149656cB',
  25. '0x15cFEE34Ca4541CAc9a1c4B6F6aB47A65877E240',
  26. '0x7aBF0dA8Ac07B6dE7206e467988455E1AD0b60B5',
  27. '0xF736f45d4663a8D8DfF7EFA55b1Cf6Fe38D026c8',
  28. '0x83173eECf3a6d9ABB79682568e16c2eAd361620e',
  29. '0xa401b85B4849Fc7610Bd180cc937859C78528F47',
  30. '0x10A43E7Fe77E2D84adBeC26cF0bFc6f403841266',
  31. '0x70D5EE1DfddD3726f0D71F4CD5a8Ef43aC651a75'
  32. ]
  33. def query_balances(wallet_num, wallet_address):
  34. retry_count = 0
  35. max_retries = 3
  36. delay = 2 # 延迟时间,单位为秒
  37. result_message = ""
  38. result_balance = -1
  39. # 转换为校验和地址
  40. try:
  41. checksum_address = w3.to_checksum_address(wallet_address)
  42. except Exception as e:
  43. print(f"钱包 {wallet_address} 地址格式无效: {str(e)}")
  44. return wallet_num
  45. while retry_count < max_retries:
  46. try:
  47. # 查询余额
  48. balance = w3.eth.get_balance(checksum_address)
  49. # 将余额从 Wei 转换为 Ether
  50. balance_eth = w3.from_wei(balance, 'ether')
  51. result_message = f"Wallet {wallet_num}: {checksum_address}\nbalance: {balance_eth} Token"
  52. result_balance = balance_eth
  53. print(result_message)
  54. wallet_num += 1
  55. break
  56. except Exception as e:
  57. print(f"查询钱包 {checksum_address} {wallet_num} 余额时发生错误: {str(e)}")
  58. retry_count += 1
  59. print(f"正在重试...(第 {retry_count} 次)")
  60. time.sleep(delay)
  61. if retry_count == max_retries:
  62. result_message = f"钱包 {checksum_address} 查询余额失败,已达到最大重试次数。"
  63. print(result_message)
  64. return wallet_num
  65. def query_nonce(wallet_num, wallet_address):
  66. try:
  67. checksum_address = w3.to_checksum_address(wallet_address)
  68. except Exception as e:
  69. print(f"钱包 {wallet_address} 地址格式无效: {str(e)}")
  70. return
  71. try:
  72. nonce_latest = w3.eth.get_transaction_count(checksum_address, "latest")
  73. nonce_pending = w3.eth.get_transaction_count(checksum_address, "pending")
  74. print(f'pending nonce: {nonce_pending} ; latest nonce: {nonce_latest}')
  75. except Exception as e:
  76. print(f"查询钱包 {checksum_address} {wallet_num} nonce时发生错误: {str(e)}")
  77. def main():
  78. if not check_connection():
  79. return
  80. wallet_num = 0
  81. for wallet_address in wallet_addresses:
  82. wallet_num = query_balances(wallet_num, wallet_address)
  83. query_nonce(wallet_num - 1, wallet_address)
  84. print('------------')
  85. if __name__ == "__main__":
  86. main()