Advertisement
Guest User

etherscan_auto.py

a guest
Jan 7th, 2021
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.33 KB | None | 0 0
  1. import json
  2. import requests
  3. import time
  4. from ecdsa import SigningKey, SECP256k1
  5. import sha3
  6.  
  7. '''
  8. RUN
  9. pip install ecdsa
  10. AND
  11. pip install sha3
  12. BEFORE YOU RUN THE SCRIPT THE FIRST TIME
  13. LIMITS: 20 keys per request, 5 requests per second
  14. made by @subvert (tg), i'd be grateful if you sent me a tiny bit of your booty after you got rich
  15. '''
  16.  
  17. ETHERSCAN_API = '' # insert your API KEY from etherscan.io here
  18.  
  19.  
  20. def main():
  21.     wallets = []
  22.    
  23.     while len(wallets) < 21:
  24.         wallet = {}
  25.         wallet['private_key'], wallet['public_key'], wallet['address'] = generate_address()
  26.         wallets.append(wallet)
  27.    
  28.     addresses_to_check = ','.join(wallet['address'] for wallet in wallets)
  29.    
  30.     for result in check_balance(addresses_to_check):
  31.         print(*result)
  32.  
  33. def generate_address():
  34.     keccak = sha3.keccak_256()
  35.     private_key = SigningKey.generate(curve=SECP256k1)
  36.     public_key = private_key.get_verifying_key().to_string()
  37.     keccak.update(public_key)
  38.     address = keccak.hexdigest()[24:]
  39.     return private_key.to_string().hex(), public_key.hex(), checksum_encode(address)
  40.  
  41. def checksum_encode(addr_str): # hex str
  42.     keccak = sha3.keccak_256()
  43.     out = ''
  44.     addr = addr_str.lower().replace('0x', '')
  45.     keccak.update(addr.encode('ascii'))
  46.     hash_addr = keccak.hexdigest()
  47.     for i, c in enumerate(addr):
  48.         if int(hash_addr[i], 16) >= 8:
  49.             out += c.upper()
  50.         else:
  51.             out += c
  52.     return '0x' + out
  53.  
  54. def check_balance(addresses): # str commaseparated
  55.     params = {'module': 'account',
  56.               'action': 'balancemulti',
  57.               'address': addresses,
  58.               'apikey': ETHERSCAN_API
  59.             }
  60.    
  61.     while True:
  62.         r = requests.get('https://api.etherscan.io/api', params=params)
  63.         response = json.loads(r.text)
  64.        
  65.         if response['status']:
  66.             for address in response['result']:
  67.                 if address['balance'] != '0':
  68.                     yield address['account'], address['balance']
  69.                
  70.                 else: #optional
  71.                     yield address['account'], address['balance']
  72.            
  73.             break
  74.        
  75.         else:
  76.             print(f'ERROR: {response["result"]}')
  77.  
  78. if __name__ == '__main__':
  79.     while True:
  80.         main()
  81.         time.sleep(0.22)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement