From 5fa93633da509078f63e27d881eb42be400fdd07 Mon Sep 17 00:00:00 2001 From: Blair Vanderlugt Date: Tue, 30 Mar 2021 16:58:45 -0700 Subject: [PATCH 1/4] add gitkeep back --- service-configs/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 service-configs/.gitkeep diff --git a/service-configs/.gitkeep b/service-configs/.gitkeep new file mode 100644 index 00000000..e69de29b From 1886e6743b547efc61f0459d9386c28506e21f47 Mon Sep 17 00:00:00 2001 From: Louis Holbrook Date: Wed, 31 Mar 2021 10:52:27 +0000 Subject: [PATCH 2/4] Sovereign import script --- apps/cic-eth/requirements.txt | 10 +- apps/contract-migration/reset.sh | 3 + .../scripts/import_sovereign_users.py | 182 ++++++++++++++++++ .../scripts/requirements.txt | 6 +- apps/contract-migration/seed_cic_eth.sh | 6 +- 5 files changed, 197 insertions(+), 10 deletions(-) create mode 100644 apps/contract-migration/scripts/import_sovereign_users.py diff --git a/apps/cic-eth/requirements.txt b/apps/cic-eth/requirements.txt index a7a04da7..49104bf9 100644 --- a/apps/cic-eth/requirements.txt +++ b/apps/cic-eth/requirements.txt @@ -1,14 +1,14 @@ -cic-base~=0.1.2a46 +cic-base~=0.1.2a51 celery==4.4.7 crypto-dev-signer~=0.4.14a16 confini~=0.3.6rc3 -cic-eth-registry~=0.5.4a7 +cic-eth-registry~=0.5.4a8 #cic-bancor~=0.0.6 redis==3.5.3 alembic==1.4.2 websockets==8.1 requests~=2.24.0 -eth_accounts_index~=0.0.11a3 +eth_accounts_index~=0.0.11a6 erc20-transfer-authorization~=0.3.1a2 #simple-rlp==0.1.2 uWSGI==2.0.19.1 @@ -16,9 +16,9 @@ semver==2.13.0 websocket-client==0.57.0 moolb~=0.1.1b2 eth-address-index~=0.1.1a5 -chainlib~=0.0.1a42 +chainlib~=0.0.1a43 hexathon~=0.0.1a7 chainsyncer~=0.0.1a20 pysha3==1.0.2 coincurve==15.0.0 -sarafu-faucet==0.0.2a13 +sarafu-faucet~=0.0.2a15 diff --git a/apps/contract-migration/reset.sh b/apps/contract-migration/reset.sh index 0822994c..a3fa4c40 100755 --- a/apps/contract-migration/reset.sh +++ b/apps/contract-migration/reset.sh @@ -40,7 +40,10 @@ if [[ -n "${ETH_PROVIDER}" ]]; then #BANCOR_REGISTRY_ADDRESS=`cic-bancor-deploy --bancor-dir /usr/local/share/cic/bancor -z $DEV_ETH_RESERVE_ADDRESS -p $ETH_PROVIDER -o $DEV_ETH_ACCOUNT_CONTRACT_DEPLOYER` + >&2 echo "deploy account index contract" DEV_ACCOUNT_INDEX_ADDRESS=`eth-accounts-index-deploy -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -y $keystore_file -vv -w` + >&2 echo "add deployer address as account index writer" + eth-accounts-index-writer -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -a $DEV_ACCOUNT_INDEX_ADDRESS -ww $debug $DEV_ETH_ACCOUNT_CONTRACT_DEPLOYER CIC_REGISTRY_ADDRESS=`eth-contract-registry-deploy -i $CIC_CHAIN_SPEC -y $keystore_file --identifier BancorRegistry --identifier AccountRegistry --identifier TokenRegistry --identifier AddressDeclarator --identifier Faucet --identifier TransferAuthorization -p $ETH_PROVIDER -vv -w` eth-contract-registry-set -w -y $keystore_file -r $CIC_REGISTRY_ADDRESS -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -vv ContractRegistry $CIC_REGISTRY_ADDRESS diff --git a/apps/contract-migration/scripts/import_sovereign_users.py b/apps/contract-migration/scripts/import_sovereign_users.py new file mode 100644 index 00000000..31dcf4cd --- /dev/null +++ b/apps/contract-migration/scripts/import_sovereign_users.py @@ -0,0 +1,182 @@ +# standard imports +import os +import sys +import json +import logging +import argparse +import uuid +import datetime +import time +from glob import glob + +# external imports +import confini +from hexathon import ( + add_0x, + strip_0x, + ) +from cic_types.models.person import Person +from chainlib.eth.address import to_checksum_address +from chainlib.chain import ChainSpec +from chainlib.eth.connection import EthHTTPConnection +from chainlib.eth.gas import RPCGasOracle +from chainlib.eth.nonce import RPCNonceOracle +from cic_types.processor import generate_metadata_pointer +from eth_accounts_index import AccountRegistry +from cic_eth_registry import CICRegistry +from crypto_dev_signer.keystore.dict import DictKeystore +from crypto_dev_signer.eth.signer.defaultsigner import ReferenceSigner as EIP155Signer +from crypto_dev_signer.keystore.keyfile import to_dict as to_keyfile_dict + +logging.basicConfig(level=logging.WARNING) +logg = logging.getLogger() + +default_config_dir = '/usr/local/etc/cic' + +argparser = argparse.ArgumentParser() +argparser.add_argument('-p', '--provider', dest='p', default='http://localhost:8545', type=str, help='Web3 provider url (http only)') +argparser.add_argument('-y', '--key-file', dest='y', type=str, help='Ethereum keystore file to use for signing') +argparser.add_argument('-c', type=str, default=default_config_dir, help='config file') +argparser.add_argument('-i', '--chain-spec', dest='i', type=str, help='Chain specification string') +argparser.add_argument('-r', '--registry', dest='r', type=str, help='Contract registry address') +argparser.add_argument('--batch-size', dest='batch_size', default=50, type=int, help='burst size of sending transactions to node') +argparser.add_argument('--batch-delay', dest='batch_delay', default=2, type=int, help='seconds delay between batches') +argparser.add_argument('-v', action='store_true', help='Be verbose') +argparser.add_argument('-vv', action='store_true', help='Be more verbose') +argparser.add_argument('user_dir', type=str, help='path to users export dir tree') +args = argparser.parse_args() + +if args.v: + logg.setLevel(logging.INFO) +elif args.vv: + logg.setLevel(logging.DEBUG) + +config_dir = args.c +config = confini.Config(config_dir, os.environ.get('CONFINI_ENV_PREFIX')) +config.process() +args_override = { + 'CIC_REGISTRY_ADDRESS': getattr(args, 'r'), + 'CIC_CHAIN_SPEC': getattr(args, 'i'), + } +config.dict_override(args_override, 'cli') +config.add(args.user_dir, '_USERDIR', True) + +user_new_dir = os.path.join(args.user_dir, 'new') +os.makedirs(user_new_dir) + +meta_dir = os.path.join(args.user_dir, 'meta') +os.makedirs(meta_dir) + +user_old_dir = os.path.join(args.user_dir, 'old') +os.stat(user_old_dir) + +chain_spec = ChainSpec.from_chain_str(config.get('CIC_CHAIN_SPEC')) +chain_str = str(chain_spec) + +batch_size = args.batch_size +batch_delay = args.batch_delay + +rpc = EthHTTPConnection(args.p) + +signer_address = None +keystore = DictKeystore() +if args.y != None: + logg.debug('loading keystore file {}'.format(args.y)) + signer_address = keystore.import_keystore_file(args.y) + logg.debug('now have key for signer address {}'.format(signer_address)) +signer = EIP155Signer(keystore) + +nonce_oracle = RPCNonceOracle(signer_address, rpc) + +CICRegistry.address = config.get('CIC_REGISTRY_ADDRESS') +registry = CICRegistry(chain_spec, rpc) +account_registry_address = registry.by_name('AccountRegistry') + +keyfile_dir = os.path.join(config.get('_USERDIR'), 'keystore') +os.makedirs(keyfile_dir) + +def register_eth(i, u): + + address_hex = keystore.new() + address = add_0x(to_checksum_address(address_hex)) + + gas_oracle = RPCGasOracle(rpc, code_callback=AccountRegistry.gas) + c = AccountRegistry(signer=signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle, chain_id=chain_spec.chain_id()) + (tx_hash_hex, o) = c.add(account_registry_address, signer_address, address) + logg.debug('o {}'.format(o)) + rpc.do(o) + #r = rpc.wait(tx_hash_hex) + + pk = keystore.get(address) + keyfile_content = to_keyfile_dict(pk, '') + keyfile_path = os.path.join(keyfile_dir, '{}.json'.format(address)) + f = open(keyfile_path, 'w') + json.dump(keyfile_content, f) + f.close() + + logg.debug('[{}] register eth {} {} tx {} keyfile {}'.format(i, u, address, tx_hash_hex, keyfile_path)) + + return address + + +def register_ussd(u): + pass + + +if __name__ == '__main__': + + + i = 0 + j = 0 + for x in os.walk(user_old_dir): + for y in x[2]: + if y[len(y)-5:] != '.json': + continue + filepath = os.path.join(x[0], y) + f = open(filepath, 'r') + try: + o = json.load(f) + except json.decoder.JSONDecodeError as e: + f.close() + logg.error('load error for {}: {}'.format(y, e)) + continue + f.close() + u = Person.deserialize(o) + + new_address = register_eth(i, u) + if u.identities.get('evm') == None: + u.identities['evm'] = {} + sub_chain_str = '{}:{}'.format(chain_spec.common_name(), chain_spec.network_id()) + u.identities['evm'][sub_chain_str] = [new_address] + + register_ussd(u) + + new_address_clean = strip_0x(new_address) + filepath = os.path.join( + user_new_dir, + new_address_clean[:2].upper(), + new_address_clean[2:4].upper(), + new_address_clean.upper() + '.json', + ) + os.makedirs(os.path.dirname(filepath), exist_ok=True) + + o = u.serialize() + f = open(filepath, 'w') + f.write(json.dumps(o)) + f.close() + + #old_address = to_checksum_address(add_0x(y[:len(y)-5])) + #fi.write('{},{}\n'.format(new_address, old_address)) + meta_key = generate_metadata_pointer(bytes.fromhex(new_address_clean), 'cic.person') + meta_filepath = os.path.join(meta_dir, '{}.json'.format(new_address_clean.upper())) + os.symlink(os.path.realpath(filepath), meta_filepath) + + i += 1 + sys.stdout.write('imported {} {}'.format(i, u).ljust(200) + "\r") + + j += 1 + if j == batch_size: + time.sleep(batch_delay) + j = 0 + + #fi.close() diff --git a/apps/contract-migration/scripts/requirements.txt b/apps/contract-migration/scripts/requirements.txt index c195635f..9955cfde 100644 --- a/apps/contract-migration/scripts/requirements.txt +++ b/apps/contract-migration/scripts/requirements.txt @@ -1,3 +1,5 @@ -cic-base[full_graph]==0.1.2a40 -cic-eth==0.10.1b1 +cic-base[full_graph]==0.1.2a52 +sarafu-faucet==0.0.2a15 +cic-eth==0.10.1b2+build.9c750e70 cic-types==0.1.0a8 +crypto-dev-signer==0.4.14a17 diff --git a/apps/contract-migration/seed_cic_eth.sh b/apps/contract-migration/seed_cic_eth.sh index 0ba44c5b..b937cf2f 100755 --- a/apps/contract-migration/seed_cic_eth.sh +++ b/apps/contract-migration/seed_cic_eth.sh @@ -32,11 +32,11 @@ set -a # 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_ACCOUNTS_INDEX_ADDRESS=`eth-contract-registry-list -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -r $CIC_REGISTRY_ADDRESS -f brief AccountRegistry` +DEV_ACCOUNT_INDEX_ADDRESS=`eth-contract-registry-list -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -r $CIC_REGISTRY_ADDRESS -f brief AccountRegistry` DEV_RESERVE_ADDRESS=`eth-token-index-list -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -a $DEV_TOKEN_INDEX_ADDRESS -f brief SRF` cat <> $env_out_file cic-eth-tag -i $CIC_CHAIN_SPEC ACCOUNT_REGISTRY_WRITER $DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER >&2 echo "add acccounts index writer account as writer on contract" -eth-accounts-index-writer -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -a $DEV_ACCOUNTS_INDEX_ADDRESS -ww $debug $DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER +eth-accounts-index-writer -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -a $DEV_ACCOUNT_INDEX_ADDRESS -ww $debug $DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER # Transfer gas to custodial gas provider adddress >&2 echo gift gas to gas gifter From 426e46c79161abbffed8617f60d7a52c2cf68ea9 Mon Sep 17 00:00:00 2001 From: Louis Holbrook Date: Wed, 31 Mar 2021 11:04:05 +0000 Subject: [PATCH 3/4] Sovereign import part II --- apps/contract-migration/scripts/README.md | 19 ++++++++++++++++++- .../scripts/import_sovereign_users.py | 3 --- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/contract-migration/scripts/README.md b/apps/contract-migration/scripts/README.md index 048a1f6f..cdefe7f5 100644 --- a/apps/contract-migration/scripts/README.md +++ b/apps/contract-migration/scripts/README.md @@ -21,9 +21,13 @@ Make sure the following is running in the cluster: * eth * postgres * redis + * cic-meta-server + + +If using the _custodial_ alternative for user imports, also run: * cic-eth-tasker * cic-eth-dispatcher - * cic-eth-manager-head + * cic-eth-tracker You will want to run these in sequence: @@ -47,12 +51,25 @@ This will monitor new mined blocks and send balances to the newly created accoun ### 3. Users +Only use **one** of the following + +#### Custodial + +This alternative generates accounts using the `cic-eth` custodial engine + Without any modifications to the cluster and config files: `python import_users.py -c config --redis-host-callback redis ` ** A note on the The callback**: The script uses a redis callback to retrieve the newly generated custodial address. This is the redis server _from the perspective of the cic-eth component_. +#### Sovereign + +This alternative generates keystore files, while registering corresponding addresses in the accounts registry directly + +`python import_sovereign_users.py -c config -i -r -p -y ../keystore/UTC--2021-01-08T17-18-44.521011372Z--eb3907ecad74a0013c259d5874ae7f22dcbcc95c ` + +A `keystore` sub-directory in the data path is created, with ethereum keystore files for all generated private keys. Passphrase is set to empty string for all of them. ## VERIFY diff --git a/apps/contract-migration/scripts/import_sovereign_users.py b/apps/contract-migration/scripts/import_sovereign_users.py index 31dcf4cd..39f4143a 100644 --- a/apps/contract-migration/scripts/import_sovereign_users.py +++ b/apps/contract-migration/scripts/import_sovereign_users.py @@ -105,7 +105,6 @@ def register_eth(i, u): (tx_hash_hex, o) = c.add(account_registry_address, signer_address, address) logg.debug('o {}'.format(o)) rpc.do(o) - #r = rpc.wait(tx_hash_hex) pk = keystore.get(address) keyfile_content = to_keyfile_dict(pk, '') @@ -165,8 +164,6 @@ if __name__ == '__main__': f.write(json.dumps(o)) f.close() - #old_address = to_checksum_address(add_0x(y[:len(y)-5])) - #fi.write('{},{}\n'.format(new_address, old_address)) meta_key = generate_metadata_pointer(bytes.fromhex(new_address_clean), 'cic.person') meta_filepath = os.path.join(meta_dir, '{}.json'.format(new_address_clean.upper())) os.symlink(os.path.realpath(filepath), meta_filepath) From 462933d8ae4299aac04636dd3bf200de67f40ca9 Mon Sep 17 00:00:00 2001 From: Louis Holbrook Date: Thu, 1 Apr 2021 20:55:39 +0000 Subject: [PATCH 4/4] Remove custodial dependencies from sovereign import scripts --- .../cic_eth/runnable/daemons/dispatcher.py | 2 +- .../scripts/create_import_users.py | 4 - .../scripts/import_sovereign_users.py | 10 +- apps/contract-migration/scripts/verify.py | 117 +++++++++++++----- docker-compose.yml | 2 +- 5 files changed, 91 insertions(+), 44 deletions(-) diff --git a/apps/cic-eth/cic_eth/runnable/daemons/dispatcher.py b/apps/cic-eth/cic_eth/runnable/daemons/dispatcher.py index 1465b3b7..9f4ef332 100644 --- a/apps/cic-eth/cic_eth/runnable/daemons/dispatcher.py +++ b/apps/cic-eth/cic_eth/runnable/daemons/dispatcher.py @@ -88,7 +88,7 @@ run = True class DispatchSyncer: - yield_delay = 0.005 + yield_delay = 0.0005 def __init__(self, chain_spec): self.chain_spec = chain_spec diff --git a/apps/contract-migration/scripts/create_import_users.py b/apps/contract-migration/scripts/create_import_users.py index d8587ee0..e46d9e48 100644 --- a/apps/contract-migration/scripts/create_import_users.py +++ b/apps/contract-migration/scripts/create_import_users.py @@ -17,9 +17,7 @@ import random import vobject import celery from faker import Faker -import cic_eth_registry import confini -from cic_eth.api import Api from cic_types.models.person import ( Person, generate_vcard_from_contact_data, @@ -62,8 +60,6 @@ ts_then = int(dt_then.timestamp()) celery_app = celery.Celery(broker=config.get('CELERY_BROKER_URL'), backend=config.get('CELERY_RESULT_URL')) -api = Api(config.get('CIC_CHAIN_SPEC')) - gift_max = args.gift_threshold or 0 gift_factor = (10**6) diff --git a/apps/contract-migration/scripts/import_sovereign_users.py b/apps/contract-migration/scripts/import_sovereign_users.py index 39f4143a..30e3f5db 100644 --- a/apps/contract-migration/scripts/import_sovereign_users.py +++ b/apps/contract-migration/scripts/import_sovereign_users.py @@ -23,7 +23,7 @@ from chainlib.eth.gas import RPCGasOracle from chainlib.eth.nonce import RPCNonceOracle from cic_types.processor import generate_metadata_pointer from eth_accounts_index import AccountRegistry -from cic_eth_registry import CICRegistry +from contract_registry import Registry from crypto_dev_signer.keystore.dict import DictKeystore from crypto_dev_signer.eth.signer.defaultsigner import ReferenceSigner as EIP155Signer from crypto_dev_signer.keystore.keyfile import to_dict as to_keyfile_dict @@ -88,9 +88,11 @@ signer = EIP155Signer(keystore) nonce_oracle = RPCNonceOracle(signer_address, rpc) -CICRegistry.address = config.get('CIC_REGISTRY_ADDRESS') -registry = CICRegistry(chain_spec, rpc) -account_registry_address = registry.by_name('AccountRegistry') +registry = Registry() +o = registry.address_of(config.get('CIC_REGISTRY_ADDRESS'), 'AccountRegistry') +r = rpc.do(o) +account_registry_address = registry.parse_address_of(r) +logg.info('using account registry {}'.format(account_registry_address)) keyfile_dir = os.path.join(config.get('_USERDIR'), 'keystore') os.makedirs(keyfile_dir) diff --git a/apps/contract-migration/scripts/verify.py b/apps/contract-migration/scripts/verify.py index 0c7ddefa..08b791a7 100644 --- a/apps/contract-migration/scripts/verify.py +++ b/apps/contract-migration/scripts/verify.py @@ -10,6 +10,7 @@ import hashlib import csv import json import urllib +import copy # external imports import celery @@ -39,7 +40,6 @@ from chainlib.eth.gas import ( from chainlib.eth.tx import TxFactory from chainlib.eth.rpc import jsonrpc_template from chainlib.eth.error import EthException -from cic_eth.api.api_admin import AdminApi from cic_types.models.person import ( Person, generate_metadata_pointer, @@ -51,12 +51,27 @@ logg = logging.getLogger() config_dir = '/usr/local/etc/cic-syncer' +custodial_tests = [ + 'local_key', + 'gas', + 'faucet', + ] + +all_tests = custodial_tests + [ + 'accounts_index', + 'balance', + 'metadata', + ] + argparser = argparse.ArgumentParser(description='daemon that monitors transactions in new blocks') argparser.add_argument('-p', '--provider', dest='p', type=str, help='chain rpc provider address') argparser.add_argument('-c', type=str, default=config_dir, help='config root to use') argparser.add_argument('--old-chain-spec', type=str, dest='old_chain_spec', default='evm:oldchain:1', help='chain spec') argparser.add_argument('-i', '--chain-spec', type=str, dest='i', help='chain spec') argparser.add_argument('--meta-provider', type=str, dest='meta_provider', default='http://localhost:63380', help='cic-meta url') +argparser.add_argument('--skip-custodial', dest='skip_custodial', action='store_true', help='skip all custodial verifications') +argparser.add_argument('--exclude', action='append', type=str, default=[], help='skip specified verification') +argparser.add_argument('--include', action='append', type=str, help='include specified verification') argparser.add_argument('-r', '--registry-address', type=str, dest='r', help='CIC Registry address') 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('-x', '--exit-on-error', dest='x', action='store_true', help='Halt exection on error') @@ -95,14 +110,61 @@ user_dir = args.user_dir # user_out_dir from import_users.py meta_url = args.meta_provider exit_on_error = args.x +active_tests = [] +exclude = [] +include = args.include +if args.include == None: + include = all_tests +for t in args.exclude: + if t not in all_tests: + raise ValueError('Cannot exclude unknown verification "{}"'.format(t)) + exclude.append(t) +if args.skip_custodial: + logg.info('will skip all custodial verifications ({})'.format(','.join(custodial_tests))) + for t in custodial_tests: + if t not in exclude: + exclude.append(t) +for t in include: + if t not in all_tests: + raise ValueError('Cannot include unknown verification "{}"'.format(t)) + if t not in exclude: + active_tests.append(t) + logg.info('will perform verification "{}"'.format(t)) + +api = None +for t in custodial_tests: + if t in active_tests: + from cic_eth.api.api_admin import AdminApi + api = AdminApi(None) + logg.info('activating custodial module'.format(t)) + break + +cols = os.get_terminal_size().columns + + +def to_terminalwidth(s): + ss = s.ljust(int(cols)-1) + ss += "\r" + return ss + +def default_outfunc(s): + ss = to_terminalwidth(s) + sys.stdout.write(ss) +outfunc = default_outfunc +if logg.isEnabledFor(logging.DEBUG): + outfunc = logg.debug + class VerifierState: - def __init__(self, item_keys): + def __init__(self, item_keys, active_tests=None): self.items = {} for k in item_keys: - logg.info('k {}'.format(k)) self.items[k] = 0 + if active_tests == None: + self.active_tests = copy.copy(item_keys) + else: + self.active_tests = copy.copy(active_tests) def poke(self, item_key): @@ -112,7 +174,10 @@ class VerifierState: def __str__(self): r = '' for k in self.items.keys(): - r += '{}: {}\n'.format(k, self.items[k]) + if k in self.active_tests: + r += '{}: {}\n'.format(k, self.items[k]) + else: + r += '{}: skipped\n'.format(k) return r @@ -148,10 +213,10 @@ class Verifier: verifymethods = [] for k in dir(self): if len(k) > 7 and k[:7] == 'verify_': - logg.info('adding verify method {}'.format(k)) + logg.debug('verifier has verify method {}'.format(k)) verifymethods.append(k[7:]) - self.state = VerifierState(verifymethods) + self.state = VerifierState(verifymethods, active_tests=active_tests) def verify_accounts_index(self, address, balance=None): @@ -233,26 +298,14 @@ class Verifier: raise VerifierError(o_retrieved, 'metadata (person)') - def verify(self, address, balance): - logg.debug('verify {} {}'.format(address, balance)) + def verify(self, address, balance, debug_stem=None): - methods = [ - 'local_key', - 'accounts_index', - 'balance', - 'metadata', - 'gas', - 'faucet', - ] - - for k in methods: + for k in active_tests: + s = '{} {}'.format(debug_stem, k) + outfunc(s) try: m = getattr(self, 'verify_{}'.format(k)) m(address, balance) -# self.verify_local_key(address) -# self.verify_accounts_index(address) -# self.verify_balance(address, balance) -# self.verify_metadata(address) except VerifierError as e: logline = 'verification {} failed for {}: {}'.format(k, address, str(e)) if self.exit_on_error: @@ -266,10 +319,6 @@ class Verifier: return str(self.state) -class MockClient: - - w3 = None - def main(): global chain_str, block_offset, user_dir @@ -291,7 +340,6 @@ def main(): o['params'].append(txf.normalize(tx)) o['params'].append('latest') r = conn.do(o) - print('r {}'.format(r)) token_index_address = to_checksum_address(eth_abi.decode_single('address', bytes.fromhex(strip_0x(r)))) logg.info('found token index address {}'.format(token_index_address)) @@ -320,6 +368,7 @@ def main(): logg.info('found faucet {}'.format(faucet_address)) + # Get Sarafu token address tx = txf.template(ZERO_ADDRESS, token_index_address) data = add_0x(registry_addressof_method) @@ -333,7 +382,6 @@ def main(): o['params'].append(txf.normalize(tx)) o['params'].append('latest') r = conn.do(o) - print('r {}'.format(r)) sarafu_token_address = to_checksum_address(eth_abi.decode_single('address', bytes.fromhex(strip_0x(r)))) logg.info('found token address {}'.format(sarafu_token_address)) @@ -348,7 +396,7 @@ def main(): try: address = to_checksum_address(r[0]) #sys.stdout.write('loading balance {} {}'.format(i, address).ljust(200) + "\r") - logg.debug('loading balance {} {}'.format(i, address).ljust(200)) + outfunc('loading balance {} {}'.format(i, address)) #.ljust(200)) except ValueError: break balance = int(r[1].rstrip()) @@ -357,11 +405,10 @@ def main(): f.close() - api = AdminApi(MockClient()) - verifier = Verifier(conn, api, gas_oracle, chain_spec, account_index_address, sarafu_token_address, faucet_address, user_dir, exit_on_error) user_new_dir = os.path.join(user_dir, 'new') + i = 0 for x in os.walk(user_new_dir): for y in x[2]: if y[len(y)-5:] != '.json': @@ -377,7 +424,7 @@ def main(): f.close() u = Person.deserialize(o) - logg.debug('data {}'.format(u.identities['evm'])) + #logg.debug('data {}'.format(u.identities['evm'])) subchain_str = '{}:{}'.format(chain_spec.common_name(), chain_spec.network_id()) new_address = u.identities['evm'][subchain_str][0] @@ -388,9 +435,11 @@ def main(): balance = balances[old_address] except KeyError: logg.info('no old balance found for {}, assuming 0'.format(old_address)) - logg.debug('checking {} -> {} = {}'.format(old_address, new_address, balance)) - verifier.verify(new_address, balance) + s = 'checking {}: {} -> {} = {}'.format(i, old_address, new_address, balance) + + verifier.verify(new_address, balance, debug_stem=s) + i += 1 print(verifier) diff --git a/docker-compose.yml b/docker-compose.yml index 6fa6e8a1..5adf741f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -373,7 +373,7 @@ services: - -c - | if [[ -f /tmp/cic/config/.env ]]; then source /tmp/cic/config/.env; fi - ./start_retry.sh -v + ./start_retry.sh -vv # command: "/root/start_retry.sh -q cic-eth -vv"