From ee5981e53a2933b0f4db3350bfb2f1256e6bcd85 Mon Sep 17 00:00:00 2001 From: nolash Date: Wed, 2 Jun 2021 21:51:40 +0200 Subject: [PATCH] Add submitter script --- config/config.ini | 3 ++ requirements.txt | 1 + scripts/{eth.py => parse_csv.py} | 0 scripts/submit.py | 69 ++++++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+) rename scripts/{eth.py => parse_csv.py} (100%) create mode 100644 scripts/submit.py diff --git a/config/config.ini b/config/config.ini index a3816d7..2aa4a00 100644 --- a/config/config.ini +++ b/config/config.ini @@ -3,3 +3,6 @@ chain_spec= [rpc] endpoint= + +[queue] +socket_path= diff --git a/requirements.txt b/requirements.txt index 889eb34..2ccad2e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ confini~=0.3.6rc3 cic-eth-registry~=0.5.5a7 eth-erc20~=0.0.9a3 pycryptodome==3.10.1 +pyxdg==0.27 diff --git a/scripts/eth.py b/scripts/parse_csv.py similarity index 100% rename from scripts/eth.py rename to scripts/parse_csv.py diff --git a/scripts/submit.py b/scripts/submit.py new file mode 100644 index 0000000..61b6100 --- /dev/null +++ b/scripts/submit.py @@ -0,0 +1,69 @@ +# standard imports +import os +import logging +import argparse +import uuid +import sys +import stat +import socket + +# external imports +import confini +from xdg.BaseDirectory import get_runtime_dir + +logging.basicConfig(level=logging.WARNING) +logg = logging.getLogger() + +config_dir = os.environ.get('CONFINI_DIR', '.') +default_queue_runtime_path = os.path.join(get_runtime_dir(), 'chainqueue') + +argparser = argparse.ArgumentParser('chainqueue transaction submission and trigger server') +argparser.add_argument('-c', '--config', dest='c', type=str, default=config_dir, help='configuration directory') +argparser.add_argument('--session-id', dest='session_id', type=str, default=str(uuid.uuid4()), help='session id to use for session') +argparser.add_argument('-s', '--socket-path', dest='s', type=str, help='socket path') +argparser.add_argument('--env-prefix', default=os.environ.get('CONFINI_ENV_PREFIX'), dest='env_prefix', type=str, help='environment prefix for variables to overwrite configuration') +argparser.add_argument('-v', action='store_true', help='be verbose') +argparser.add_argument('-vv', action='store_true', help='be very verbose') +argparser.add_argument('input_dir', type=str, help='directory with transaction files') +args = argparser.parse_args(sys.argv[1:]) + +if args.vv: + logg.setLevel(logging.DEBUG) +elif args.v: + logg.setLevel(logging.INFO) + +config = confini.Config(args.c) +socket_path = getattr(args, 's') +args_override = { + 'QUEUE_SOCKET_PATH': getattr(args, 's'), + } +config.dict_override(args_override, 'cli args') +config.process() +config.add(getattr(args, 'input_dir'), '_INPUT_DIR', True) +config.add(getattr(args, 'session_id'), '_SESSION_ID', True) +if not config.get('QUEUE_SOCKET_PATH'): + config.add(os.path.join(default_queue_runtime_path, config.get('_SESSION_ID'), 'chainqueue.sock'), 'QUEUE_SOCKET_PATH', True) +logg.debug('config loaded:\n{}'.format(config)) + + +def main(): + for p in os.listdir(config.get('_INPUT_DIR')): + cli = socket.socket(family=socket.AF_UNIX, type=socket.SOCK_STREAM) + cli.connect(config.get('QUEUE_SOCKET_PATH')) + if p[0] == '.': + continue + fpath = os.path.join(config.get('_INPUT_DIR'), p) + f = open(fpath, 'r') + tx = f.read() + f.close() + r = cli.send(tx.encode('utf-8')) + logg.debug('sent {} bytes'.format(r)) + r = cli.recv(4) + cli.close() + if int.from_bytes(r, byteorder='big'): + sys.stderr.write('error {}'.format(r)) + sys.exit(1) + logg.debug('submitted {} {} status {}'.format(fpath, tx, r)) + +if __name__ == '__main__': + main()