eth-token-index

Token symbol to address unique index
Log | Files | Refs

commit d8199b7002523cced9aef2e8cd3fc803ace0196f
parent d15ad541dc449957b0415d81af7640033e34ecde
Author: lash <dev@holbrook.no>
Date:   Thu, 30 Mar 2023 16:57:49 +0100

Update list tool to current chainlib, skip output of duplicate tokens

Diffstat:
Mpython/eth_token_index/runnable/list.py | 59++++++++++++++++++++++++++++++++++++++++++++++-------------
Mpython/eth_token_index/runnable/publish.py | 16----------------
Mpython/setup.cfg | 2+-
3 files changed, 47 insertions(+), 30 deletions(-)

diff --git a/python/eth_token_index/runnable/list.py b/python/eth_token_index/runnable/list.py @@ -19,6 +19,20 @@ from chainlib.chain import ChainSpec from eth_erc20 import ERC20 from chainlib.eth.address import to_checksum_address from hexathon import add_0x +from chainlib.eth.cli.arg import ( + Arg, + ArgFlag, + process_args, + ) +from chainlib.eth.cli.config import ( + Config, + process_config, + ) +from chainlib.eth.cli.log import process_log +from chainlib.eth.settings import process_settings +from chainlib.settings import ChainSettings +from chainlib.eth.address import is_same_address +from chainlib.eth.constant import ZERO_ADDRESS # local imports from eth_token_index import TokenUniqueSymbolIndex @@ -30,23 +44,28 @@ default_format = 'terminal' script_dir = os.path.dirname(__file__) data_dir = os.path.join(script_dir, '..', 'data') -arg_flags = chainlib.eth.cli.argflag_std_write | chainlib.eth.cli.Flag.EXEC -argparser = chainlib.eth.cli.ArgumentParser(arg_flags) +arg_flags = ArgFlag() +arg = Arg(arg_flags) +flags = arg_flags.STD_READ | arg_flags.EXEC + +argparser = chainlib.eth.cli.ArgumentParser() argparser.add_argument('token_symbol', type=str, nargs='?', help='Token symbol to return address for') +argparser = process_args(argparser, arg, flags) args = argparser.parse_args() +logg = process_log(args, logg) + extra_args = { 'token_symbol': None, } -config = chainlib.eth.cli.Config.from_args(args, arg_flags, extra_args=extra_args, default_fee_limit=TokenUniqueSymbolIndex.gas()) - -#wallet = chainlib.eth.cli.Wallet() -#wallet.from_config(config) +#config = chainlib.eth.cli.Config.from_args(args, arg_flags, extra_args=extra_args, default_fee_limit=TokenUniqueSymbolIndex.gas()) +config = Config() +config = process_config(config, arg, args, flags, positional_name='token_symbol') +logg.debug('config loaded:\n{}'.format(config)) -rpc = chainlib.eth.cli.Rpc() -conn = rpc.connect_by_config(config) - -chain_spec = ChainSpec.from_chain_str(config.get('CHAIN_SPEC')) +settings = ChainSettings() +settings = process_settings(settings, config) +logg.debug('settings loaded:\n{}'.format(settings)) def out_element(e, w=sys.stdout): @@ -78,18 +97,32 @@ def ls(ifc, conn, contract_address, token_ifc, w=sys.stdout): r = conn.do(o) token_symbol = token_ifc.parse_symbol(r) + o = ifc.address_of(contract_address, token_symbol) + r = conn.do(o) + reverse_token_address = ifc.parse_entry(r) + logg.debug('checking token idx {} symbol {} address {} reverse address {}'.format(i, token_symbol, token_address, reverse_token_address)) + if is_same_address(token_address, ZERO_ADDRESS): + logg.warning('token idx {} {} was registered with zero-address'.format(i, token_symbol)) + continue + if is_same_address(reverse_token_address, ZERO_ADDRESS): + raise ValueError('token idx {} {} has entry but zero-address reverse lookup. Are you using the correct reverse lookup keys?'.format(i, token_symbol)) + if not is_same_address(token_address, reverse_token_address): + logg.info('token idx {} {} address {} does not match reverse address {}, skipping'.format(i, token_symbol, token_address, reverse_token_address)) + continue + element(ifc, conn, contract_address, token_symbol, w) def main(): - token_ifc = ERC20(chain_spec) - ifc = TokenUniqueSymbolIndex(chain_spec) + conn = settings.get('CONN') + token_ifc = ERC20(settings.get('CHAIN_SPEC')) + ifc = TokenUniqueSymbolIndex(settings.get('CHAIN_SPEC')) contract_address = to_checksum_address(config.get('_EXEC_ADDRESS')) if not config.true('_UNSAFE') and contract_address != add_0x(config.get('_EXEC_ADDRESS')): raise ValueError('invalid checksum address for contract') - token_symbol = config.get('_TOKEN_SYMBOL') + token_symbol = config.get('_POSARG') if token_symbol != None: element(ifc, conn, contract_address, token_symbol, sys.stdout) else: diff --git a/python/eth_token_index/runnable/publish.py b/python/eth_token_index/runnable/publish.py @@ -56,22 +56,6 @@ settings = process_settings(settings, config) logg.debug('settings loaded:\n{}'.format(settings)) - -#arg_flags = chainlib.eth.cli.argflag_std_write -#argparser = chainlib.eth.cli.ArgumentParser(arg_flags) -#args = argparser.parse_args() -# -#config = chainlib.eth.cli.Config.from_args(args, arg_flags, default_fee_limit=TokenUniqueSymbolIndex.gas()) -# -#wallet = chainlib.eth.cli.Wallet() -#wallet.from_config(config) -# -#rpc = chainlib.eth.cli.Rpc(wallet=wallet) -#conn = rpc.connect_by_config(config) -# -#chain_spec = ChainSpec.from_chain_str(config.get('CHAIN_SPEC')) - - def main(): conn = settings.get('CONN') c = TokenUniqueSymbolIndex( diff --git a/python/setup.cfg b/python/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = eth-token-index -version = 0.6.0 +version = 0.6.1 description = Token symbol to address unique index author = Louis Holbrook author_email = dev@holbrook.no