Use hexathon, block string representation
This commit is contained in:
parent
8c67758b10
commit
88df1418b0
Binary file not shown.
Binary file not shown.
@ -46,3 +46,7 @@ class EVMBlock(Block):
|
||||
|
||||
def number(self):
|
||||
return translate.hex_to_int(self.obj['number'])
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return str('block {} {}'.format(self.number(), self.hash))
|
||||
|
@ -1,12 +1,15 @@
|
||||
# standard imports
|
||||
import logging
|
||||
import uuid
|
||||
import json
|
||||
|
||||
# third-party imports
|
||||
import websocket
|
||||
from hexathon import add_0x
|
||||
|
||||
# local imports
|
||||
from .response import EVMResponse
|
||||
from cic_syncer.error import RequestError
|
||||
from cic_syncer.client.translate import with_0x
|
||||
from cic_syncer.client.evm.response import EVMBlock
|
||||
|
||||
logg = logging.getLogger()
|
||||
@ -66,7 +69,7 @@ class EVMWebsocketClient:
|
||||
|
||||
def get_block_by_hash(self, hx_in):
|
||||
req_id = str(uuid.uuid4())
|
||||
hx = with_0x(hx_in)
|
||||
hx = add_0x(hx_in)
|
||||
req ={
|
||||
'jsonrpc': '2.0',
|
||||
'method': 'eth_getBlockByHash',
|
||||
|
@ -1,27 +1,10 @@
|
||||
import re
|
||||
|
||||
re_hex = r'^[0-9a-fA-Z]+$'
|
||||
def is_hex(hx):
|
||||
m = re.match(re_hex, hx)
|
||||
if m == None:
|
||||
raise ValueError('not valid hex {}'.format(hx))
|
||||
|
||||
return hx
|
||||
|
||||
|
||||
def strip_0x(hx):
|
||||
if len(hx) >= 2 and hx[:2] == '0x':
|
||||
hx = hx[2:]
|
||||
return is_hex(hx)
|
||||
|
||||
|
||||
def with_0x(hx):
|
||||
if len(hx) >= 2 and hx[:2] == '0x':
|
||||
hx = hx[2:]
|
||||
return '0x' + is_hex(hx)
|
||||
# third-party imports
|
||||
from hexathon import strip_0x
|
||||
|
||||
|
||||
def hex_to_int(hx, endianness='big'):
|
||||
hx = strip_0x(hx)
|
||||
if len(hx) % 2 == 1:
|
||||
hx = '0' + hx
|
||||
b = bytes.fromhex(hx)
|
||||
return int.from_bytes(b, endianness)
|
||||
|
@ -36,8 +36,10 @@ class MinedSyncer(Syncer):
|
||||
|
||||
def loop(self, interval, getter):
|
||||
while self.running and Syncer.running_global:
|
||||
while True:
|
||||
block_hash = self.get(getter)
|
||||
if block_hash != None:
|
||||
if block_hash == None:
|
||||
break
|
||||
self.process(getter, block_hash)
|
||||
time.sleep(interval)
|
||||
|
||||
@ -49,18 +51,18 @@ class HeadSyncer(MinedSyncer):
|
||||
|
||||
|
||||
def process(self, getter, block):
|
||||
logg.debug('process block {}'.format(block))
|
||||
logg.debug('process {}'.format(block))
|
||||
block = getter.get_block_by_hash(block.hash)
|
||||
i = 0
|
||||
tx = None
|
||||
while True:
|
||||
try:
|
||||
self.filter[0].handle(getter, block, None)
|
||||
#self.filter[0].handle(getter, block, None)
|
||||
tx = block.tx(i)
|
||||
logg.debug('tx {}'.format(tx))
|
||||
self.backend.set(block.number(), i)
|
||||
for f in self.filter:
|
||||
f(getter, block, tx)
|
||||
f.handle(getter, block, tx)
|
||||
except IndexError as e:
|
||||
self.backend.set(block.number() + 1, 0)
|
||||
break
|
||||
@ -75,4 +77,3 @@ class HeadSyncer(MinedSyncer):
|
||||
logg.debug('get {}'.format(res))
|
||||
|
||||
return res
|
||||
|
||||
|
@ -104,13 +104,14 @@ def tx_filter(w3, tx, rcpt, chain_spec):
|
||||
re_websocket = re.compile('^wss?://')
|
||||
re_http = re.compile('^https?://')
|
||||
c = EVMWebsocketClient(config.get('ETH_PROVIDER'))
|
||||
chain = args.i
|
||||
chain = config.get('CIC_CHAIN_SPEC')
|
||||
|
||||
|
||||
def main():
|
||||
block_offset = c.block_number()
|
||||
|
||||
syncer_backend = SyncerBackend.live(chain, block_offset+1)
|
||||
#syncer_backend = SyncerBackend.live(chain, block_offset+1)
|
||||
syncer_backend = SyncerBackend.live(chain, 0)
|
||||
syncer = HeadSyncer(syncer_backend, handler)
|
||||
|
||||
for cb in config.get('TASKS_SYNCER_CALLBACKS', '').split(','):
|
||||
|
@ -6,3 +6,4 @@ eth-tester==0.5.0b3
|
||||
web3==5.12.2
|
||||
confini==0.3.6b2
|
||||
semver==2.13.0
|
||||
hexathon==0.0.1a2
|
||||
|
Loading…
Reference in New Issue
Block a user