diff --git a/apps/contract-migration/3_deploy_token.sh b/apps/contract-migration/3_deploy_token.sh index f6e74342..e5ac8af8 100644 --- a/apps/contract-migration/3_deploy_token.sh +++ b/apps/contract-migration/3_deploy_token.sh @@ -59,12 +59,23 @@ function deploy_token_erc20_demurrage_token() { TOKEN_ADDRESS=`erc20-demurrage-token-deploy $fee_price_arg -p $RPC_PROVIDER -y $WALLET_KEY_FILE -i $CHAIN_SPEC --name "$TOKEN_NAME" --symbol $TOKEN_SYMBOL $DEV_DEBUG_FLAG -ww -s` } +function deploy_accounts_index() { + # Deploy accounts index contact + >&2 echo -e "\033[;96mDeploy accounts index contract for token $TOKEN_SYMBOL\033[;39m" + DEV_ACCOUNTS_INDEX_ADDRESS=`okota-accounts-index-deploy $gas_price_arg -u -s -w -y $WALLET_KEY_FILE -i $CHAIN_SPEC -p $RPC_PROVIDER $DEV_DEBUG_FLAG --address-declarator $DEV_ADDRESS_DECLARATOR --token-address $1` + + if [ -z "$have_default_token" ]; then + >&2 echo -e "\033[;96mAdd acccounts index record for default token to contract registry\033[;39m" + r=`eth-contract-registry-set $fee_price_arg -s -u -w -y $WALLET_KEY_FILE -e $CIC_REGISTRY_ADDRESS -i $CHAIN_SPEC -p $RPC_PROVIDER $DEV_DEBUG_FLAG --identifier AccountRegistry $DEV_ACCOUNTS_INDEX_ADDRESS` + add_pending_tx_hash $r + fi +} function deploy_minter_faucet() { FAUCET_AMOUNT=${FAUCET_AMOUNT:-0} # Token faucet contract - >&2 echo -e "\033[;96mDeploy token faucet contract\033[;39m" + >&2 echo -e "\033[;96mDeploy token faucet contract for token $TOKEN_SYMBOL\033[;39m" accounts_index_address=`eth-contract-registry-list -u -i $CHAIN_SPEC -p $RPC_PROVIDER -e $CIC_REGISTRY_ADDRESS $DEV_DEBUG_FLAG --raw AccountRegistry` faucet_address=`sarafu-faucet-deploy $fee_price_arg -s -y $WALLET_KEY_FILE -i $CHAIN_SPEC -p $RPC_PROVIDER -w $DEV_DEBUG_FLAG --account-index-address $accounts_index_address $1` @@ -78,7 +89,6 @@ function deploy_minter_faucet() { add_pending_tx_hash $r fi - >&2 echo -e "\033[;96mSet faucet as token minter\033[;39m" r=`giftable-token-minter -s -u $fee_price_arg -w -y $WALLET_KEY_FILE -e $TOKEN_ADDRESS -i $CHAIN_SPEC -p $RPC_PROVIDER $DEV_DEBUG_FLAG $faucet_address` add_pending_tx_hash $r @@ -95,17 +105,21 @@ if [ -z "$have_default_token" ]; then fi ->&2 echo -e "\033[;96mAdd token to token index\033[;39m" +>&2 echo -e "\033[;96mAdd token symbol $TOKEN_SYMBOL to token address $TOKEN_ADDRESS mapping to token index\033[;39m" token_index_address=`eth-contract-registry-list -u -i $CHAIN_SPEC -p $RPC_PROVIDER -e $CIC_REGISTRY_ADDRESS $DEV_DEBUG_FLAG --raw TokenRegistry` r=`eth-token-index-add $fee_price_arg -s -u -w -y $WALLET_KEY_FILE -i $CHAIN_SPEC -p $RPC_PROVIDER $DEV_DEBUG_FLAG -e $token_index_address $TOKEN_ADDRESS` add_pending_tx_hash $r ->&2 echo -e "\033[;96mMinting $DEV_TOKEN_MINT_AMOUNT tokens\033[;39m" +TOKEN_MINT_AMOUNT=${TOKEN_MINT_AMOUNT:-${DEV_TOKEN_MINT_AMOUNT}} +>&2 echo -e "\033[;96mMinting $TOKEN_MINT_AMOUNT tokens\033[;39m" r=`giftable-token-gift $fee_price_arg -p $RPC_PROVIDER -y $WALLET_KEY_FILE -i $CHAIN_SPEC -u $DEV_DEBUG_FLAG -s -w -e $TOKEN_ADDRESS "$DEV_TOKEN_MINT_AMOUNT"` add_pending_tx_hash $r +# Create accounts index for default token +deploy_accounts_index $TOKEN_ADDRESS + # Connect a minter component if defined TOKEN_MINTER_MODE=${TOKEN_MINTER_MODE:-"faucet"} if [ -z "$TOKEN_MINTER_MODE" ]; then diff --git a/apps/contract-migration/4_init_custodial.sh b/apps/contract-migration/4_init_custodial.sh index c6428cf1..96f74c26 100644 --- a/apps/contract-migration/4_init_custodial.sh +++ b/apps/contract-migration/4_init_custodial.sh @@ -18,33 +18,39 @@ fi must_address "$CIC_REGISTRY_ADDRESS" "registry" must_eth_rpc - # get required addresses from registries token_index_address=`eth-contract-registry-list -u -i $CHAIN_SPEC -p $RPC_PROVIDER -e $CIC_REGISTRY_ADDRESS $DEV_DEBUG_FLAG --raw TokenRegistry` -account_index_address=`eth-contract-registry-list -u -i $CHAIN_SPEC -p $RPC_PROVIDER -e $CIC_REGISTRY_ADDRESS $DEV_DEBUG_FLAG --raw AccountRegistry` +accounts_index_address=`eth-contract-registry-list -u -i $CHAIN_SPEC -p $RPC_PROVIDER -e $CIC_REGISTRY_ADDRESS $DEV_DEBUG_FLAG --raw AccountRegistry` reserve_address=`eth-token-index-list -i $CHAIN_SPEC -u -p $RPC_PROVIDER -e $token_index_address $DEV_DEBUG_FLAG --raw $CIC_DEFAULT_TOKEN_SYMBOL` -REDIS_HOST_CALLBACK=${REDIS_HOST_CALLBACK:-localhost} -REDIS_PORT_CALLBACK=${REDIS_PORT_CALLBACK:-6379} -#REDIS_HOST=${REDIS_HOST:-$REDIS_HOST_CALLBACK} -#REDIS_PORT=${REDIS_PORT:-$REDIS_PORT_CALLBACK} +REDIS_HOST_CALLBACK=${REDIS_HOST_CALLBACK:-$REDIS_HOST} +REDIS_PORT_CALLBACK=${REDIS_PORT_CALLBACK:-$REDIS_PORT} >&2 echo -e "\033[;96mcreate account for gas gifter\033[;39m" gas_gifter=`cic-eth-create --redis-timeout 120 $DEV_DEBUG_FLAG --redis-host-callback $REDIS_HOST_CALLBACK --redis-port-callback $REDIS_PORT_CALLBACK --no-register` cic-eth-tag -i $CHAIN_SPEC GAS_GIFTER $gas_gifter +>&2 echo -e "\033[;96mcreate account for accounts index writer\033[;39m" +accounts_index_writer=`cic-eth-create --redis-timeout 120 $DEV_DEBUG_FLAG --redis-host-callback $REDIS_HOST_CALLBACK --redis-port-callback $REDIS_PORT_CALLBACK --no-register` +cic-eth-tag -i $CHAIN_SPEC ACCOUNT_REGISTRY_WRITER $accounts_index_writer + + +# Assign system writer for accounts index +>&2 echo -e "\033[;96mEnable accounts index writer $accounts_index_writer to writer to accounts index contract at $accounts_index_address\033[;39m" +r=`eth-accounts-index-writer -s -w -u -i $CHAIN_SPEC -p $RPC_PROVIDER -e $accounts_index_address $DEV_DEBUG_FLAG $accounts_index_writer` +add_pending_tx_hash $r # Transfer gas to custodial gas provider adddress ->&2 echo -e "\033[;96mGift gas to gas gifter\033[;39m" +>&2 echo -e "\033[;96mGift gas to gas gifter $gas_gifter\033[;39m" echo "eth-gas -s -u -y $WALLET_KEY_FILE -i $CHAIN_SPEC -p $RPC_PROVIDER -w $DEV_DEBUG_FLAG -a $gas_gifter $DEV_GAS_AMOUNT" r=`eth-gas -s -u -y $WALLET_KEY_FILE -i $CHAIN_SPEC -p $RPC_PROVIDER -w $DEV_DEBUG_FLAG -a $gas_gifter $DEV_GAS_AMOUNT` add_pending_tx_hash $r ->&2 echo -e "\033[;96mgift gas to accounts index owner\033[;39m" +>&2 echo -e "\033[;96mgift gas to accounts index owner $accounts_index_writer\033[;39m" # for now we are using the same key for both DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER=$DEV_ETH_ACCOUNT_CONTRACT_DEPLOYER -r=`eth-gas -s -u -y $WALLET_KEY_FILE -i $CHAIN_SPEC -p $RPC_PROVIDER -w $DEV_DEBUG_FLAG -a $DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER $DEV_GAS_AMOUNT` +r=`eth-gas -s -u -y $WALLET_KEY_FILE -i $CHAIN_SPEC -p $RPC_PROVIDER -w $DEV_DEBUG_FLAG -a $accounts_index_writer $DEV_GAS_AMOUNT` add_pending_tx_hash $r diff --git a/apps/contract-migration/config/config.ini b/apps/contract-migration/config/config.ini index 795a0089..7683790f 100644 --- a/apps/contract-migration/config/config.ini +++ b/apps/contract-migration/config/config.ini @@ -1,7 +1,6 @@ [dev] eth_account_contract_deployer = token_mint_amount = 10000000000000000000000000000000000 -faucet_amount = 0 gas_amount = 100000000000000000000000 eth_gas_price = data_dir = @@ -21,8 +20,6 @@ result_url = [redis] host = port = -host_callback = -port_callback = [cic] registry_address = diff --git a/apps/contract-migration/requirements.txt b/apps/contract-migration/requirements.txt index 3d9ab53f..d5dc531d 100644 --- a/apps/contract-migration/requirements.txt +++ b/apps/contract-migration/requirements.txt @@ -11,4 +11,4 @@ sarafu-faucet>=0.0.7a2,<0.1.0 confini>=0.4.2rc3,<1.0.0 crypto-dev-signer>=0.4.15rc2,<=0.4.15 eth-token-index>=0.2.4a1,<=0.3.0 -okota>=0.2.4a5,<0.3.0 +okota>=0.2.4a13,<0.3.0 diff --git a/apps/data-seeding/cic_eth/traffic/cmd/cache.py b/apps/data-seeding/cic_eth/traffic/cmd/cache.py index e112ae10..e1d1752f 100644 --- a/apps/data-seeding/cic_eth/traffic/cmd/cache.py +++ b/apps/data-seeding/cic_eth/traffic/cmd/cache.py @@ -3,6 +3,10 @@ from chainlib.jsonrpc import JSONRPCException from eth_erc20 import ERC20 from eth_accounts_index import AccountsIndex from eth_token_index import TokenUniqueSymbolIndex +import logging + +logg = logging.getLogger(__name__) + class ERC20Token: @@ -46,7 +50,8 @@ class IndexCache: try: r = conn.do(o) entries.append(self.parse(r, conn)) - except JSONRPCException: + except JSONRPCException as e: + logg.debug('foo {}'.format(e)) return entries i += 1 diff --git a/apps/data-seeding/cic_eth/traffic/local/account.py b/apps/data-seeding/cic_eth/traffic/local/account.py index 830da009..44283e9f 100644 --- a/apps/data-seeding/cic_eth/traffic/local/account.py +++ b/apps/data-seeding/cic_eth/traffic/local/account.py @@ -11,6 +11,18 @@ queue = 'cic-eth' name = 'account' +def create_user(chain_spec, redis_host_callback, redis_port_callback, redis_db, redis_channel): + api = Api( + str(chain_spec), + queue=queue, + callback_param='{}:{}:{}:{}'.format(redis_host_callback, redis_port_callback, redis_db, redis_channel), + callback_task='cic_eth.callbacks.redis.redis', + callback_queue=queue, + ) + + return api.create_account(register=True) + + def do(token_pair, sender, recipient, sender_balance, aux, block_number): """Triggers creation and registration of new account through the custodial cic-eth component. @@ -24,14 +36,6 @@ def do(token_pair, sender, recipient, sender_balance, aux, block_number): See local.noop.do for details on parameters and return values. """ logg.debug('running {} {} {}'.format(__name__, token_pair, sender, recipient)) - api = Api( - str(aux['chain_spec']), - queue=queue, - callback_param='{}:{}:{}:{}'.format(aux['redis_host_callback'], aux['redis_port_callback'], aux['redis_db'], aux['redis_channel']), - callback_task='cic_eth.callbacks.redis.redis', - callback_queue=queue, - ) - - t = api.create_account(register=True) + t = create_user(aux['chain_spec'], aux['redis_host_callback'], aux['redis_port_callback'], aux['redis_db'], aux['redis_channel']) return (None, t, sender_balance, ) diff --git a/apps/data-seeding/cic_eth/traffic/traffic.py b/apps/data-seeding/cic_eth/traffic/traffic.py index 03f4cae5..b8fe9e37 100644 --- a/apps/data-seeding/cic_eth/traffic/traffic.py +++ b/apps/data-seeding/cic_eth/traffic/traffic.py @@ -21,6 +21,9 @@ import chainlib.eth.cli import cic_eth.cli from cic_eth.cli.chain import chain_interface from chainlib.eth.constant import ZERO_ADDRESS +from eth_accounts_index import AccountsIndex +from erc20_faucet import Faucet +from cic_eth.api import Api # local imports #import common @@ -108,6 +111,12 @@ def main(): raise NetworkError('AccountRegistry value missing from contract registry {}'.format(config.get('CIC_REGISTRY_ADDRESS'))) logg.info('using account registry {}'.format(account_registry)) account_cache = AccountRegistryCache(chain_spec, account_registry) + + faucet = registry.lookup('Faucet') + if faucet == ZERO_ADDRESS: + logg.warning('Faucet entry missing from value missing from contract registry {}. New account registrations will need external mechanism for initial token balances.'.format(config.get('CIC_REGISTRY_ADDRESS'))) + else: + logg.info('using faucet {}'.format(faucet)) # Set up provisioner for common task input data TrafficProvisioner.oracles['token'] = token_cache @@ -124,6 +133,27 @@ def main(): syncer = HeadSyncer(syncer_backend, chain_interface, block_callback=handler.refresh) syncer.add_filter(handler) + + # bootstrap two accounts if starting from scratch + c = AccountsIndex(chain_spec) + o = c.entry_count(account_registry) + r = conn.do(o) + + logg.debug('entry count {}'.format(c.parse_entry_count(r))) + + if c.parse_entry_count(r) == 0: + if faucet == ZERO_ADDRESS: + raise ValueError('No accounts exist in network and no faucet exists. It will be impossible for any created accounts to trade.') + c = Faucet(chain_spec) + o = c.token_amount(faucet) + r = conn.do(o) + if c.parse_token_amount(r) == 0: + raise ValueError('No accounts exist in network and faucet amount is set to 0. It will be impossible for any created accounts to trade.') + + api = Api(str(chain_spec), queue=config.get('CELERY_QUEUE')) + api.create_account(register=True) + api.create_account(register=True) + syncer.loop(1, conn) diff --git a/apps/data-seeding/requirements.txt b/apps/data-seeding/requirements.txt index f8616fab..962cefdf 100644 --- a/apps/data-seeding/requirements.txt +++ b/apps/data-seeding/requirements.txt @@ -1,11 +1,11 @@ sarafu-faucet~=0.0.7a2 -cic-eth[tools]~=0.12.4a8 -cic-types~=0.1.0a15 -crypto-dev-signer~=0.4.15a7 +cic-eth[tools]~=0.12.4a12 +cic-types~=0.2.0a1 +funga>=0.5.1a1,<=0.5.15 faker==4.17.1 chainsyncer~=0.0.6a3 -chainlib-eth~=0.0.9a14 -eth-address-index~=0.2.3a4 +chainlib-eth~=0.0.9rc4 +eth-address-index~=0.2.4a1 eth-contract-registry~=0.6.3a3 eth-accounts-index~=0.1.2a3 eth-erc20~=0.1.2a3 diff --git a/docker-compose_local.yml b/docker-compose_local.yml index 0d37d646..d3da1c19 100644 --- a/docker-compose_local.yml +++ b/docker-compose_local.yml @@ -69,6 +69,9 @@ services: TOKEN_SUPPLY_LIMIT: $TOKEN_SUPPLY_LIMIT TOKEN_DEMURRAGE_LEVEL: $TOKEN_DEMURRAGE_LEVEL TOKEN_SINK_ADDRESS: $TOKEN_SINK_ADDRESS + REDIS_HOST_CALLBACK: ${REDIS_HOST_CALLBACK:-redis} + REDIS_PORT_CALLBACK: ${REDIS_PORT_CALLBACK:-6379} + FAUCET_AMOUNT: ${FAUCET_AMOUNT:-0} command: ["./run_job.sh"] depends_on: - evm