diff --git a/apps/cic-eth/cic_eth/api/api_admin.py b/apps/cic-eth/cic_eth/api/api_admin.py index 298d59dd..4378cf3a 100644 --- a/apps/cic-eth/cic_eth/api/api_admin.py +++ b/apps/cic-eth/cic_eth/api/api_admin.py @@ -313,7 +313,7 @@ class AdminApi: # TODO: Add exception upon non-existent tx aswell as invalid tx data to docstring - def tx(self, chain_spec, tx_hash=None, tx_raw=None): + def tx(self, chain_spec, tx_hash=None, tx_raw=None, registry=None): """Output local and network details about a given transaction with local origin. If the transaction hash is given, the raw trasnaction data will be retrieved from the local transaction queue backend. Otherwise the raw transaction data must be provided directly. Only one of transaction hash and transaction data can be passed. @@ -365,7 +365,6 @@ class AdminApi: tx['sender_description'] = 'Custodial account' tx['recipient_description'] = 'Custodial account' - registry = CICRegistry(chain_spec, self.rpc) o = code(tx['sender']) r = self.rpc.do(o) if len(strip_0x(r, allow_empty=True)) > 0: diff --git a/apps/cic-eth/cic_eth/runnable/view.py b/apps/cic-eth/cic_eth/runnable/view.py index 0cd6f8d2..fa8cc75d 100644 --- a/apps/cic-eth/cic_eth/runnable/view.py +++ b/apps/cic-eth/cic_eth/runnable/view.py @@ -11,18 +11,17 @@ import sys import re import datetime -# third-party imports +# external imports import confini import celery -import web3 -from cic_registry import CICRegistry -from cic_registry.chain import ChainSpec -from cic_registry.chain import ChainRegistry +from cic_eth_registry import CICRegistry +from cic_eth_registry.lookup.declarator import AddressDeclaratorLookup +from chainlib.chain import ChainSpec +from chainlib.eth.connection import EthHTTPConnection from hexathon import add_0x # local imports from cic_eth.api import AdminApi -from cic_eth.eth.rpc import RpcClient from cic_eth.db.enum import ( StatusEnum, status_str, @@ -32,18 +31,14 @@ from cic_eth.db.enum import ( logging.basicConfig(level=logging.WARNING) logg = logging.getLogger() -logging.getLogger('web3').setLevel(logging.WARNING) -logging.getLogger('urllib3').setLevel(logging.WARNING) - - -default_abi_dir = '/usr/share/local/cic/solidity/abi' +default_format = 'terminal' default_config_dir = os.environ.get('CONFINI_DIR', '/usr/local/etc/cic') argparser = argparse.ArgumentParser() -argparser.add_argument('-p', '--provider', dest='p', type=str, help='Web3 provider url (http only)') +argparser.add_argument('-p', '--provider', dest='p', default='http://localhost:8545', type=str, help='Web3 provider url (http only)') argparser.add_argument('-r', '--registry-address', dest='r', type=str, help='CIC registry address') -argparser.add_argument('-f', '--format', dest='f', default='terminal', type=str, help='Output format') -argparser.add_argument('--status-raw', dest='status_raw', action='store_true', help='Output statis bit enum names only') +argparser.add_argument('-f', '--format', dest='f', default=default_format, type=str, help='Output format') +argparser.add_argument('--status-raw', dest='status_raw', action='store_true', help='Output status bit enum names only') argparser.add_argument('-c', type=str, default=default_config_dir, help='config root to use') argparser.add_argument('-i', '--chain-spec', dest='i', type=str, help='chain spec') argparser.add_argument('-q', type=str, default='cic-eth', help='celery queue to submit transaction tasks to') @@ -74,38 +69,30 @@ config.censor('PASSWORD', 'DATABASE') config.censor('PASSWORD', 'SSL') logg.debug('config loaded from {}:\n{}'.format(config_dir, config)) -config.add(add_0x(args.query), '_QUERY', True) - -re_websocket = re.compile('^wss?://') -re_http = re.compile('^https?://') -blockchain_provider = config.get('ETH_PROVIDER') -if re.match(re_websocket, blockchain_provider) != None: - blockchain_provider = web3.Web3.WebsocketProvider(blockchain_provider) -elif re.match(re_http, blockchain_provider) != None: - blockchain_provider = web3.Web3.HTTPProvider(blockchain_provider) -else: - raise ValueError('unknown provider url {}'.format(blockchain_provider)) - -def web3_constructor(): - w3 = web3.Web3(blockchain_provider) - return (blockchain_provider, w3) -RpcClient.set_constructor(web3_constructor) - +try: + config.add(add_0x(args.query), '_QUERY', True) +except: + config.add(args.query, '_QUERY', True) celery_app = celery.Celery(broker=config.get('CELERY_BROKER_URL'), backend=config.get('CELERY_RESULT_URL')) queue = args.q chain_spec = ChainSpec.from_chain_str(config.get('CIC_CHAIN_SPEC')) -chain_str = str(chain_spec) -c = RpcClient(chain_spec) -admin_api = AdminApi(c) -CICRegistry.init(c.w3, config.get('CIC_REGISTRY_ADDRESS'), chain_spec) -chain_registry = ChainRegistry(chain_spec) -CICRegistry.add_chain_registry(chain_registry) -CICRegistry.add_path(config.get('ETH_ABI_DIR')) -CICRegistry.load_for(chain_spec) +rpc = EthHTTPConnection(args.p) + +registry_address = args.r + +admin_api = AdminApi(rpc) + +trusted_addresses_src = config.get('CIC_TRUST_ADDRESS') +if trusted_addresses_src == None: + logg.critical('At least one trusted address must be declared in CIC_TRUST_ADDRESS') + sys.exit(1) +trusted_addresses = trusted_addresses_src.split(',') +for address in trusted_addresses: + logg.info('using trusted address {}'.format(address)) fmt = 'terminal' if args.f[:1] == 'j': @@ -155,19 +142,33 @@ def render_lock(o, **kwargs): return s + +def connect_registry(registry_address, chain_spec, rpc): + CICRegistry.address = registry_address + registry = CICRegistry(chain_spec, rpc) + declarator_address = registry.by_name('AddressDeclarator') + lookup = AddressDeclaratorLookup(declarator_address, trusted_addresses) + registry.add_lookup(lookup) + return registry + + # TODO: move each command to submodule def main(): txs = [] renderer = render_tx if len(config.get('_QUERY')) > 66: + registry = connect_registry(registry_address, chain_spec, rpc) txs = [admin_api.tx(chain_spec, tx_raw=config.get('_QUERY'))] elif len(config.get('_QUERY')) > 42: + registry = connect_registry(registry_address, chain_spec, rpc) txs = [admin_api.tx(chain_spec, tx_hash=config.get('_QUERY'))] elif len(config.get('_QUERY')) == 42: + registry = connect_registry(registry_address, chain_spec, rpc) txs = admin_api.account(chain_spec, config.get('_QUERY'), include_recipient=False) renderer = render_account elif len(config.get('_QUERY')) >= 4 and config.get('_QUERY')[:4] == 'lock': - txs = admin_api.get_lock() + t = admin_api.get_lock() + txs = t.get() renderer = render_lock else: raise ValueError('cannot parse argument {}'.format(config.get('_QUERY'))) diff --git a/apps/cic-eth/requirements.txt b/apps/cic-eth/requirements.txt index 9a1215aa..48e64243 100644 --- a/apps/cic-eth/requirements.txt +++ b/apps/cic-eth/requirements.txt @@ -1,4 +1,4 @@ -cic-base~=0.1.2a21 +cic-base~=0.1.2a22 web3==5.12.2 celery==4.4.7 crypto-dev-signer~=0.4.14a8 diff --git a/apps/contract-migration/docker/Dockerfile b/apps/contract-migration/docker/Dockerfile index ee3e0627..2dba327c 100644 --- a/apps/contract-migration/docker/Dockerfile +++ b/apps/contract-migration/docker/Dockerfile @@ -57,7 +57,7 @@ WORKDIR /home/grassroots USER grassroots ARG pip_extra_index_url=https://pip.grassrootseconomics.net:8433 -ARG cic_base_version=0.1.2a20 +ARG cic_base_version=0.1.2a22 ARG cic_eth_version=0.10.1a5+build.5bf30afb ARG cic_contracts_version=0.0.2a2 RUN pip install --user --extra-index-url $pip_extra_index_url cic-base[full_graph]==$cic_base_version \ diff --git a/apps/contract-migration/seed_cic_eth.sh b/apps/contract-migration/seed_cic_eth.sh index b8a733b7..0a1fb95c 100755 --- a/apps/contract-migration/seed_cic_eth.sh +++ b/apps/contract-migration/seed_cic_eth.sh @@ -30,9 +30,6 @@ truncate $env_out_file -s 0 set -e set -a -#pip install --extra-index-url https://pip.grassrootseconomics.net:8433 chainlib==0.0.1a22 -pip install --extra-index-url https://pip.grassrootseconomics.net:8433 eth-address-index==0.1.1a4 chainlib==0.0.1a33 - # get required addresses from registries DEV_TOKEN_INDEX_ADDRESS=`eth-contract-registry-list -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -r $CIC_REGISTRY_ADDRESS -f brief TokenRegistry` DEV_RESERVE_ADDRESS=`eth-token-index-list -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -a $DEV_TOKEN_INDEX_ADDRESS -f brief SRF`