eth-monitor/eth_monitor/importers/etherscan.py

58 lines
1.5 KiB
Python

# standard imports
import urllib.request
import json
# external imports
from hexathon import add_0x
from chainlib.eth.block import (
block_by_hash,
Block,
)
from chainlib.eth.tx import (
Tx,
receipt,
)
class Importer:
def __init__(self, rpc, api_key, filters=[], block_callback=None):
self.api_key = api_key
self.filters = filters
self.rpc = rpc
self.block_callback = block_callback
def get(self, address):
#f = open('sample_import.json', 'r')
#o = json.load(f)
#f.close()
o = self.get_api(address)
for v in o['result']:
o = block_by_hash(v['blockHash'])
r = self.rpc.do(o)
block = Block(r)
if self.block_callback != None:
self.block_callback(None, block)
tx_src = block.txs[int(v['transactionIndex'])]
o = receipt(tx_src['hash'])
r = self.rpc.do(o)
tx = Tx.from_src(tx_src, block=block, rcpt=r)
for fltr in self.filters:
fltr.filter(self.rpc, block, tx)
def get_api(self, address):
a = add_0x(address)
req = urllib.request.Request(url='https://api.etherscan.io/api?module=account&action=txlist&address={}&tag=latest&api_key={}'.format(a, self.api_key))
req.add_header('Content-Length', 0)
req.add_header('Accept', 'application/json')
r = urllib.request.urlopen(req)
return json.load(r)