From a414f0ed5b79f0947ec5db2eb8d9b45a9fb0397f Mon Sep 17 00:00:00 2001 From: nolash Date: Wed, 3 Feb 2021 21:57:26 +0100 Subject: [PATCH] Add get block eth websocket --- .../evm/__pycache__/response.cpython-38.pyc | Bin 953 -> 975 bytes .../evm/__pycache__/websocket.cpython-38.pyc | Bin 1262 -> 1825 bytes cic_syncer/client/evm/response.py | 8 +++++-- cic_syncer/client/evm/websocket.py | 22 ++++++++++++++++++ cic_syncer/driver.py | 21 ++++------------- cic_syncer/runnable/tracker.py | 5 ++-- 6 files changed, 34 insertions(+), 22 deletions(-) diff --git a/cic_syncer/client/evm/__pycache__/response.cpython-38.pyc b/cic_syncer/client/evm/__pycache__/response.cpython-38.pyc index 7a8de2bb744e14c76acfa72151c7b7e57ca99798..081320736a4f57ddef5678524d49e1af98caa685 100644 GIT binary patch delta 378 zcmYjNJxc>Y5Z#&E+q=YEM6^(%eXg;x6$B9rA%!Bs37*OAqIcd$*xNvafQ9~nu$3VA zGsMz9V1JdZzd;apQ#mki-aO`udG|iO;5-Q0#Mr{^UH{C3orgV>aKa%ck&T!`fe``` zm^p%ElshjNxyOW4?miLjK4Qc;oRN@y+c|>}nwFBovd)J}gxGXOd6nG7<)j!1*|cti zikC`atN$CC!Zn2*yOJ63(PuuDRtvp` zW_49YYe|~K^?jKLxtrvvD3!ElM(tZMja3z=rD|M0DaN(*jlOJ_EBXW1^{dnE+8_Ja Jp%myZV}B*vSAGBh delta 339 zcmW+wy-LJD5T2QAempLyAc!6|B4QfBQju#c?5+_(V-b_=qB-*;n>{!o-T4CNK8lrZ zU}r1A7w{?0T?fA5n{VcunJ@pt53j>;04Bz(-TUulxOa1C3Jx4gs4zwZPTVOlrc2slz66nxmRHPimI+)@PEUfNwFb8lFdHuQ+?Q>JNB5AUz$W_k@C92+k5GqwlN;13j zDULkP5b5d|D;(%gyhB$XP=p(LLfr6oI>IgeL)DpmBQR*KBcQ+wn6%m?V)15Pezw6vu7fozF>=w2dO#(f}=Og+ifJNNk9q6(Av~1PChK5=d+=p_dEtIZ|6L zibN_Qv4yM*cOwG>6CZ>9SXf!QgBW-(1;l`@`|J5VpZ(s??>Lv1N{@=gJc04OxcDS- zMx`o!Fj}u(Ba#M|XGtcl!0tGnLy08P4tU4)TuKy4L`uBeZ6Y1XkBH<$=H*Ah9eQc> zX{{i|5%IXpJtVdK=<6|^9)G5IJ68^%T0sAFP^l3at6@7i)XaWMKXo0t^SfZTOZ4-%$ZZyXpE zWmZe=YkX9F8f6isigE@dvxBbhXO2{jo}ck&UEO(Vw1wfbDCba+yj}vSi4){B)XT8+ ztgyAO&tr52Wff$g*U&8dl_FSK1)pt_DkN2Jher8IUxY}6w-8#O6~-u|obsQXmua5P zz!W&y;f0%z@9nBa1RRvv4%#X-8~;0Rr{-p2ykcMG*bVy1_`Y3j;q?)s6-+q77G;h7 zP@BqJEW9212<5YH-5ZT{_1HiS8|2uHm+;S$a Xce=6{s2dcVQ3>Rv2Ehunz=ZV+2SU&j delta 272 zcmZ3;_l}b%l6Mwv8W?n73Aj? frxq~-xlxl3vWZQ8&ZfZ!@;L`1P%9G;BM%DzQ~5Yh diff --git a/cic_syncer/client/evm/response.py b/cic_syncer/client/evm/response.py index 7e87340..0d4e72c 100644 --- a/cic_syncer/client/evm/response.py +++ b/cic_syncer/client/evm/response.py @@ -1,7 +1,11 @@ +import json + from cic_syncer.client import translate + translations = { - 'block_number': 'hex_to_int', + 'block_number': translate.hex_to_int, + 'get_block': json.dumps, } @@ -10,7 +14,7 @@ class EVMResponse: def __init__(self, item, response_object): self.response_object = response_object self.item = item - self.fn = getattr(translate, translations[self.item]) + self.fn = translations[self.item] def get_error(self): diff --git a/cic_syncer/client/evm/websocket.py b/cic_syncer/client/evm/websocket.py index 11d389d..5b81282 100644 --- a/cic_syncer/client/evm/websocket.py +++ b/cic_syncer/client/evm/websocket.py @@ -1,3 +1,4 @@ +import logging import uuid import json @@ -6,6 +7,7 @@ import websocket from .response import EVMResponse from cic_syncer.error import RequestError +logg = logging.getLogger() class EVMWebsocketClient: @@ -35,3 +37,23 @@ class EVMWebsocketClient: raise RequestError(err) return res.get_result() + + + def get_block_by_integer(self, n): + req_id = str(uuid.uuid4()) + nhx = '0x' + n.to_bytes(8, 'big').hex() + req = { + 'jsonrpc': '2.0', + 'method': 'eth_getBlockByNumber', + 'id': str(req_id), + 'params': [nhx, False], + } + self.conn.send(json.dumps(req)) + r = self.conn.recv() + res = EVMResponse('get_block', json.loads(r)) + err = res.get_error() + if err != None: + raise RequestError(err) + + return res.get_result() + diff --git a/cic_syncer/driver.py b/cic_syncer/driver.py index 97e76c1..6e5fb88 100644 --- a/cic_syncer/driver.py +++ b/cic_syncer/driver.py @@ -3,9 +3,6 @@ import uuid import logging import time -# third-party imports -import websockets - logg = logging.getLogger() @@ -36,10 +33,8 @@ class MinedSyncer(Syncer): super(MinedSyncer, self).__init__(backend) - def loop(self, interval): + def loop(self, interval, getter): while self.running and Syncer.running_global: - getter = self.backend.connect() - logg.debug('loop execute') e = self.get(getter) time.sleep(interval) @@ -53,17 +48,9 @@ class HeadSyncer(MinedSyncer): def get(self, getter): (block_number, tx_number) = self.backend.get() block_hash = [] - try: - uu = uuid.uuid4() - req = { - 'jsonrpc': '2.0', - 'method': 'eth_getBlock', - 'id': str(uu), - 'param': [block_number], - } - logg.debug(req) - except Exception as e: - logg.error(e) + uu = uuid.uuid4() + res = getter.get_block_by_integer(block_number) + logg.debug(res) return block_hash diff --git a/cic_syncer/runnable/tracker.py b/cic_syncer/runnable/tracker.py index 1ca57f1..e842647 100644 --- a/cic_syncer/runnable/tracker.py +++ b/cic_syncer/runnable/tracker.py @@ -97,9 +97,7 @@ chain = args.i def main(): - block_offset = c.block_number() - logg.debug('block offset {}'.format(block_offset)) syncer_backend = SyncerBackend.live(chain, block_offset+1) syncer = HeadSyncer(syncer_backend) @@ -113,7 +111,8 @@ def main(): syncer.filter.append(task_pair) try: - syncer.loop(int(config.get('SYNCER_LOOP_INTERVAL'))) + logg.debug('block offset {} {}'.format(block_offset, c)) + syncer.loop(int(config.get('SYNCER_LOOP_INTERVAL')), c) except LoopDone as e: sys.stderr.write("sync '{}' done at block {}\n".format(args.mode, e))