eth-monitor/eth_monitor/runnable/sync.py

109 lines
3.0 KiB
Python
Raw Normal View History

2021-06-26 14:04:34 +02:00
# standard imports
import sys
import signal
import argparse
import confini
import logging
import os
2022-01-30 20:44:03 +01:00
import importlib
import uuid
2022-03-31 19:32:25 +02:00
import datetime
2021-06-26 14:04:34 +02:00
# external imports
import chainlib.cli
import chainsyncer.cli
2021-06-26 14:04:34 +02:00
from chainlib.chain import ChainSpec
from chainlib.eth.connection import EthHTTPConnection
from chainlib.eth.block import block_latest
from hexathon import (
strip_0x,
add_0x,
)
2022-04-20 19:42:11 +02:00
#from chainsyncer.store.fs import SyncFsStore
from chainsyncer.driver.chain_interface import ChainInterfaceDriver
from chainsyncer.error import SyncDone
2021-06-26 14:04:34 +02:00
# local imports
2022-05-10 16:21:49 +02:00
from eth_monitor.callback import (
pre_callback,
post_callback,
)
from eth_monitor.settings import EthMonitorSettings
import eth_monitor.cli
2021-06-26 14:04:34 +02:00
2022-04-02 13:29:12 +02:00
logging.STATETRACE = 5
2021-06-26 14:04:34 +02:00
logging.basicConfig(level=logging.WARNING)
logg = logging.getLogger()
script_dir = os.path.realpath(os.path.dirname(__file__))
config_dir = os.path.join(script_dir, '..', 'data', 'config')
arg_flags = chainlib.cli.argflag_std_base | chainlib.cli.Flag.CHAIN_SPEC | chainlib.cli.Flag.PROVIDER
argparser = chainlib.cli.ArgumentParser(arg_flags)
eth_monitor.cli.process_flags(argparser, 0)
2022-04-20 19:42:11 +02:00
argparser.add_argument('--list-backends', dest='list_backends', action='store_true', help='List built-in store backends')
argparser.add_argument('-vvv', action='store_true', help='Be incredibly verbose')
sync_flags = chainsyncer.cli.SyncFlag.RANGE | chainsyncer.cli.SyncFlag.HEAD
chainsyncer.cli.process_flags(argparser, sync_flags)
2021-06-26 14:04:34 +02:00
args = argparser.parse_args(sys.argv[1:])
2022-04-20 19:42:11 +02:00
if args.list_backends:
for v in [
'fs',
'rocksdb',
2022-04-26 10:32:56 +02:00
'mem',
2022-04-20 19:42:11 +02:00
]:
print(v)
sys.exit(0)
logging.getLogger('chainlib.connection').setLevel(logging.WARNING)
logging.getLogger('chainlib.eth.tx').setLevel(logging.WARNING)
logging.getLogger('chainlib.eth.src').setLevel(logging.WARNING)
if args.vvv:
2022-04-02 13:29:12 +02:00
logg.setLevel(logging.STATETRACE)
else:
if args.vv:
logg.setLevel(logging.DEBUG)
elif args.v:
logg.setLevel(logging.INFO)
2021-06-26 14:04:34 +02:00
base_config_dir = [
chainsyncer.cli.config_dir,
config_dir,
]
config = chainlib.cli.Config.from_args(args, arg_flags, base_config_dir=base_config_dir)
config = chainsyncer.cli.process_config(config, args, sync_flags)
config = eth_monitor.cli.process_config(config, args, 0)
2021-06-26 14:04:34 +02:00
settings = EthMonitorSettings()
settings.process(config)
logg.debug('loaded settings:\n{}'.format(settings))
2021-06-26 14:04:34 +02:00
2022-01-30 15:43:53 +01:00
2022-01-30 20:44:03 +01:00
def main():
logg.info('session is {}'.format(settings.get('SESSION_ID')))
2022-05-10 16:21:49 +02:00
drv = ChainInterfaceDriver(
settings.get('SYNC_STORE'),
settings.get('SYNCER_INTERFACE'),
offset=settings.get('SYNCER_OFFSET'),
target=settings.get('SYNCER_LIMIT'),
pre_callback=pre_callback,
post_callback=post_callback,
block_callback=settings.get('BLOCK_HANDLER').filter,
2022-05-10 16:21:49 +02:00
)
2022-02-27 15:21:09 +01:00
try:
r = drv.run(settings.get('RPC'))
except SyncDone as e:
sys.stderr.write("sync {} done at block {}\n".format(drv, e))
2021-06-26 14:04:34 +02:00
2022-01-30 20:44:03 +01:00
if __name__ == '__main__':
main()