diff --git a/apps/cic-eth/cic_eth/eth/account.py b/apps/cic-eth/cic_eth/eth/account.py index e55bd632..6028cb88 100644 --- a/apps/cic-eth/cic_eth/eth/account.py +++ b/apps/cic-eth/cic_eth/eth/account.py @@ -3,9 +3,11 @@ import logging # external imports import celery -from erc20_single_shot_faucet import Faucet +from erc20_single_shot_faucet import SingleShotFaucet as Faucet from chainlib.eth.constant import ZERO_ADDRESS -from hexathon import strip_0x +from hexathon import ( + strip_0x, + ) from chainlib.connection import RPCConnection from chainlib.eth.sign import ( new_account, @@ -18,6 +20,7 @@ from chainlib.eth.tx import ( ) from chainlib.chain import ChainSpec from eth_accounts_index import AccountRegistry +from sarafu_faucet import MinterFaucet as Faucet # local import #from cic_eth.registry import safe_registry @@ -121,23 +124,18 @@ def register(self, account_address, chain_spec_dict, writer_address=None): # Generate and sign transaction rpc_signer = RPCConnection.connect(chain_spec, 'signer') - #nonce_oracle = self.create_nonce_oracle(writer_address, rpc) nonce_oracle = CustodialTaskNonceOracle(writer_address, self.request.root_id, session=session) #, default_nonce) gas_oracle = self.create_gas_oracle(rpc, AccountRegistry.gas) account_registry = AccountRegistry(signer=rpc_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle, chain_id=chain_spec.chain_id()) (tx_hash_hex, tx_signed_raw_hex) = account_registry.add(account_registry_address, writer_address, account_address, tx_format=TxFormat.RLP_SIGNED) rpc_signer.disconnect() - # TODO: if cache task fails, task chain will not return - cache_task = 'cic_eth.eth.account.cache_account_data' - # add transaction to queue + cache_task = 'cic_eth.eth.account.cache_account_data' register_tx(tx_hash_hex, tx_signed_raw_hex, chain_spec, queue, cache_task=cache_task, session=session) session.commit() session.close() - #gas_budget = tx_add['gas'] * tx_add['gasPrice'] - gas_pair = gas_oracle.get_gas(tx_signed_raw_hex) gas_budget = gas_pair[0] * gas_pair[1] logg.debug('register user tx {} {} {}'.format(tx_hash_hex, queue, gas_budget)) @@ -156,7 +154,7 @@ def register(self, account_address, chain_spec_dict, writer_address=None): @celery_app.task(bind=True, base=CriticalSQLAlchemyAndSignerTask) -def gift(self, account_address, chain_str): +def gift(self, account_address, chain_spec_dict): """Creates a transaction to invoke the faucet contract for the given address. :param account_address: Ethereum address to give to @@ -166,28 +164,39 @@ def gift(self, account_address, chain_str): :returns: Raw signed transaction :rtype: list with transaction as only element """ - chain_spec = ChainSpec.from_chain_str(chain_str) + chain_spec = ChainSpec.from_dict(chain_spec_dict) logg.debug('gift account address {} to index'.format(account_address)) - queue = self.request.delivery_info['routing_key'] + queue = self.request.delivery_info.get('routing_key') - c = RpcClient(chain_spec, holder_address=account_address) - registry = safe_registry(c.w3) - txf = AccountTxFactory(account_address, c, registry=registry) - - #session = SessionBase.create_session() + # Retrieve account index address session = self.create_session() - tx_add = txf.gift(account_address, chain_spec, self.request.root_id, session=session) - (tx_hash_hex, tx_signed_raw_hex) = sign_and_register_tx(tx_add, chain_str, queue, 'cic_eth.eth.account.cache_gift_data', session=session) + rpc = RPCConnection.connect(chain_spec, 'default') + registry = CICRegistry(chain_spec, rpc) + faucet_address = registry.by_name('Faucet', sender_address=self.call_address) + + # Generate and sign transaction + rpc_signer = RPCConnection.connect(chain_spec, 'signer') + nonce_oracle = CustodialTaskNonceOracle(account_address, self.request.root_id, session=session) #, default_nonce) + gas_oracle = self.create_gas_oracle(rpc, Faucet.gas) + faucet = Faucet(signer=rpc_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle, chain_id=chain_spec.chain_id()) + (tx_hash_hex, tx_signed_raw_hex) = faucet.give_to(faucet_address, account_address, account_address, tx_format=TxFormat.RLP_SIGNED) + rpc_signer.disconnect() + + # add transaction to queue + cache_task = 'cic_eth.eth.account.cache_gift_data' + register_tx(tx_hash_hex, tx_signed_raw_hex, chain_spec, queue, cache_task, session=session) session.commit() session.close() - gas_budget = tx_add['gas'] * tx_add['gasPrice'] + gas_pair = gas_oracle.get_gas(tx_signed_raw_hex) + gas_budget = gas_pair[0] * gas_pair[1] + logg.debug('register user tx {} {} {}'.format(tx_hash_hex, queue, gas_budget)) + rpc.disconnect() - logg.debug('gift user tx {}'.format(tx_hash_hex)) - s = create_check_gas_and_send_task( + s = create_check_gas_task( [tx_signed_raw_hex], - chain_str, + chain_spec, account_address, gas_budget, [tx_hash_hex], @@ -199,7 +208,7 @@ def gift(self, account_address, chain_str): @celery_app.task(bind=True) -def have(self, account, chain_str): +def have(self, account, chain_spec_dict): """Check whether the given account exists in keystore :param account: Account to check @@ -209,7 +218,7 @@ def have(self, account, chain_str): :returns: Account, or None if not exists :rtype: Varies """ - chain_spec = ChainSpec.from_chain_str(chain_str) + chain_spec = ChainSpec.from_dict(chain_spec_dict) o = sign_message(account, '0x2a') try: conn = RPCConnection.connect(chain_spec, 'signer') @@ -249,7 +258,7 @@ def cache_gift_data( self, tx_hash_hex, tx_signed_raw_hex, - chain_spec, + chain_spec_dict, ): """Generates and commits transaction cache metadata for a Faucet.giveTo transaction @@ -262,14 +271,12 @@ def cache_gift_data( :returns: Transaction hash and id of cache element in storage backend, respectively :rtype: tuple """ - chain_spec = ChainSpec.from_chain_str(chain_str) - c = RpcClient(chain_spec) + chain_spec = ChainSpec.from_dict(chain_spec_dict) - tx_signed_raw_bytes = bytes.fromhex(tx_signed_raw_hex[2:]) + tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex)) tx = unpack(tx_signed_raw_bytes, chain_spec.chain_id()) - tx_data = unpack_gift(tx['data']) + tx_data = Faucet.parse_give_to_request(tx['data']) - #session = SessionBase.create_session() session = self.create_session() tx_cache = TxCache( @@ -311,8 +318,7 @@ def cache_account_data( chain_spec = ChainSpec.from_dict(chain_spec_dict) tx_signed_raw_bytes = bytes.fromhex(tx_signed_raw_hex[2:]) tx = unpack(tx_signed_raw_bytes, chain_id=chain_spec.chain_id()) - raise NotImplementedError('unpack register must be replaced with AccountRegistry parser') - tx_data = unpack_register(tx['data']) + tx_data = AccountRegistry.parse_add_request(tx['data']) session = SessionBase.create_session() tx_cache = TxCache( diff --git a/apps/cic-eth/cic_eth/runnable/daemons/filters/transferauth.py b/apps/cic-eth/cic_eth/runnable/daemons/filters/transferauth.py index 82ae9a4f..9c09bafe 100644 --- a/apps/cic-eth/cic_eth/runnable/daemons/filters/transferauth.py +++ b/apps/cic-eth/cic_eth/runnable/daemons/filters/transferauth.py @@ -7,41 +7,29 @@ from hexathon import ( strip_0x, add_0x, ) -from chainlib.eth.address import to_checksum +from chainlib.eth.address import to_checksum_address +from chainlib.eth.constant import ZERO_ADDRESS +from chainlib.eth.contract import ( + ABIContractType, + abi_decode_single, + ) +from cic_eth_registry import CICRegistry +from erc20_transfer_authorization import TransferAuthorization + +# local imports from .base import SyncFilter logg = logging.getLogger(__name__) -transfer_request_signature = 'ed71262a' - -def unpack_create_request(data): - - data = strip_0x(data) - cursor = 0 - f = data[cursor:cursor+8] - cursor += 8 - - if f != transfer_request_signature: - raise ValueError('Invalid create request data ({})'.format(f)) - - o = {} - o['sender'] = data[cursor+24:cursor+64] - cursor += 64 - o['recipient'] = data[cursor+24:cursor+64] - cursor += 64 - o['token'] = data[cursor+24:cursor+64] - cursor += 64 - o['value'] = int(data[cursor:], 16) - return o - class TransferAuthFilter(SyncFilter): - def __init__(self, registry, chain_spec, queue=None): + def __init__(self, registry, chain_spec, conn, queue=None, call_address=ZERO_ADDRESS): self.queue = queue self.chain_spec = chain_spec - self.transfer_request_contract = registry.get_contract(self.chain_spec, 'TransferAuthorization') + registry = CICRegistry(chain_spec, conn) + self.transfer_request_contract = registry.by_name('TransferAuthorization', sender_address=call_address) def filter(self, conn, block, tx, session): #rcpt, chain_str, session=None): @@ -61,11 +49,13 @@ class TransferAuthFilter(SyncFilter): logg.debug('not our transfer auth contract address {}'.format(recipient)) return False - o = unpack_create_request(tx.payload) + r = TransferAuthorization.parse_create_request_request(tx.payload) - sender = add_0x(to_checksum(o['sender'])) - recipient = add_0x(to_checksum(recipient)) - token = add_0x(to_checksum(o['token'])) + sender = abi_decode_single(ABIContractType.ADDRESS, r[0]) + recipient = abi_decode_single(ABIContractType.ADDRESS, r[1]) + token = abi_decode_single(ABIContractType.ADDRESS, r[2]) + value = abi_decode_single(ABIContractType.UINT256, r[3]) + token_data = { 'address': token, } @@ -83,8 +73,8 @@ class TransferAuthFilter(SyncFilter): [ sender, recipient, - o['value'], - str(self.chain_spec), + value, + self.chain_spec.asdict(), ], queue=self.queue, ) diff --git a/apps/cic-eth/tests/task/test_task_account.py b/apps/cic-eth/tests/task/test_task_account.py index 0129eee4..d4e0ee6f 100644 --- a/apps/cic-eth/tests/task/test_task_account.py +++ b/apps/cic-eth/tests/task/test_task_account.py @@ -7,6 +7,8 @@ import time import pytest import celery from chainlib.connection import RPCConnection +from chainlib.eth.nonce import RPCNonceOracle +from chainlib.eth.tx import receipt from eth_accounts_index import AccountRegistry from hexathon import strip_0x @@ -22,7 +24,6 @@ from cic_eth.db.models.role import AccountRole logg = logging.getLogger() -@pytest.mark.skip() def test_create_account( default_chain_spec, eth_rpc, @@ -121,7 +122,6 @@ def test_register_account( assert int(strip_0x(r), 16) == 1 -@pytest.mark.skip() def test_role_task( default_chain_spec, init_database, @@ -136,9 +136,53 @@ def test_role_task( 'cic_eth.eth.account.role', [ address, - str(default_chain_spec), + default_chain_spec.asdict(), ], ) t = s.apply_async() r = t.get() assert r == 'foo' + + + +def test_gift( + init_database, + default_chain_spec, + contract_roles, + agent_roles, + account_registry, + faucet, + eth_rpc, + eth_signer, + init_celery_tasks, + cic_registry, + celery_session_worker, + ): + + nonce_oracle = RPCNonceOracle(contract_roles['ACCOUNT_REGISTRY_WRITER'], eth_rpc) + c = AccountRegistry(signer=eth_signer, nonce_oracle=nonce_oracle, chain_id=default_chain_spec.chain_id()) + (tx_hash_hex, o) = c.add(account_registry, contract_roles['ACCOUNT_REGISTRY_WRITER'], agent_roles['ALICE']) + eth_rpc.do(o) + o = receipt(tx_hash_hex) + r = eth_rpc.do(o) + assert r['status'] == 1 + + s_nonce = celery.signature( + 'cic_eth.eth.tx.reserve_nonce', + [ + agent_roles['ALICE'], + ], + queue=None, + ) + + s_gift = celery.signature( + 'cic_eth.eth.account.gift', + [ + default_chain_spec.asdict(), + ], + queue=None, + ) + s_nonce.link(s_gift) + t = s_nonce.apply_async() + r = t.get_leaf() + assert t.successful() diff --git a/apps/contract-migration/docker/Dockerfile b/apps/contract-migration/docker/Dockerfile index 16e11051..91c160a1 100644 --- a/apps/contract-migration/docker/Dockerfile +++ b/apps/contract-migration/docker/Dockerfile @@ -1,14 +1,22 @@ -#FROM ethereum/solc:0.6.12 -FROM ethereum/solc:0.8.0 +# syntax = docker/dockerfile:1.2 +FROM python:3.8.6-slim-buster as compile-image -# The solc image messes up the alpine environment, so we have to go all over again -FROM alpine -COPY --from=0 /usr/bin/solc /usr/bin/solc +RUN apt-get update +RUN apt-get install -y --no-install-recommends git gcc g++ libpq-dev gawk jq telnet wget openssl iputils-ping gnupg socat bash procps make python2 cargo -RUN apk update && \ - apk add make git - -WORKDIR /usr/src +RUN apt-get install -y software-properties-common +RUN add-apt-repository ppa:ethereum/ethereum +RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1C52189C923F6CA9 +RUN apt-get update +RUN apt-get install solc +RUN pip install --upgrade pip + +WORKDIR /root +RUN mkdir -vp /usr/local/etc/cic + +COPY contract-migration/nvm.sh . +ENV CONFINI_DIR /usr/local/etc/cic/ +RUN mkdir -vp $CONFINI_DIR ARG cic_config_commit=35c69ba75f00c8147150acf325565d5391cf25bf ARG cic_config_url=https://gitlab.com/grassrootseconomics/cic-config.git/ @@ -16,11 +24,8 @@ RUN echo Install confini schema files && \ git clone --depth 1 $cic_config_url cic-config && \ cd cic-config && \ git fetch --depth 1 origin $cic_config_commit && \ - git checkout $cic_config_commit && \ - mkdir -vp /usr/local/etc/cic && \ - cp -v *.ini /usr/local/etc/cic/ -ENV CONFINI_DIR /usr/local/etc/cic - + git checkout $cic_config_commit && \ + cp -v *.ini $CONFINI_DIR ARG cic_contracts_commit=698ef3a30fde8d7f2c498f1208fb0ff45d665501 ARG cic_contracts_url=https://gitlab.com/grassrootseconomics/cic-contracts.git/ @@ -31,30 +36,6 @@ RUN echo Install ABI collection for solidity interfaces used across all componen git checkout $cic_contracts_commit && \ make install -#COPY ./Makefile ./cic-contracts/Makefile -#COPY ./*.sol ./cic-contracts/ - -#RUN cd cic-contracts && \ -# make -B && make install -B - -FROM python:3.8.6-slim-buster - -COPY --from=1 /usr/local/share/cic/ /usr/local/share/cic/ -COPY --from=1 /usr/local/etc/ /usr/local/etc/ - -LABEL authors="Louis Holbrook 0826EDA1702D1E87C6E2875121D2E7BB88C2A746" -LABEL spdx-license-identifier="GPL-3.0-or-later" -LABEL description="Base layer for buiding development images for the cic component suite" - -RUN apt-get update && \ - apt-get install -y git gcc g++ libpq-dev && \ - apt-get install -y vim gawk jq telnet openssl iputils-ping curl wget gnupg socat bash procps make python2 postgresql-client - - -RUN echo installing nodejs tooling - -COPY contract-migration/nvm.sh /root/ - # Install nvm with node and npm # https://stackoverflow.com/questions/25899912/how-to-install-nvm-in-docker ENV NVM_DIR /root/.nvm @@ -65,67 +46,95 @@ RUN wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | && . $NVM_DIR/nvm.sh \ && nvm install $NODE_VERSION \ && nvm alias default $NODE_VERSION \ - && nvm use $NODE_VERSION \ -# So many ridiculously stupid issues with node in docker that take oceans of absolutely wasted time to resolve -# owner of these files is "1001" by default - wtf - && chown -R root:root "$NVM_DIR/versions/node/v$NODE_VERSION" + && nvm use $NODE_VERSION +# && chown -R root:root "$NVM_DIR/versions/node/v$NODE_VERSION" ENV NODE_PATH $NVM_DIR/versions/node//v$NODE_VERSION/lib/node_modules ENV PATH $NVM_DIR/versions/node//v$NODE_VERSION/bin:$PATH +RUN useradd --create-home grassroots +WORKDIR /home/grassroots +USER grassroots ARG pip_extra_index_url=https://pip.grassrootseconomics.net:8433 +ARG cic_base_version=0.1.1a23 +ARG cic_registry_version=0.5.3a24 +ARG cic_eth_version=0.10.0a41 +ARG chainlib_version=0.0.1a21 +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 \ + cic-registry==$cic_registry_version \ + cic-eth==$cic_eth_version \ + chainlib==$chainlib_version \ + cic-contracts==$cic_contracts_version + +# ARG cic_bancor_url=https://gitlab.com/grassrootseconomics/cic-bancor.git/ +# ARG cic_bancor_contracts_url=https://github.com/bancorprotocol/contracts-solidity +# RUN echo Compile and install bancor protocol contracts && \ +# git clone --depth 1 $cic_bancor_url cic-bancor && \ +# cd cic-bancor + +# RUN cd cic-bancor/python && \ +# pip install --extra-index-url $pip_extra_index_url . # This is a temporary solution for building the Bancor contracts using the bancor protocol repository truffle setup # We should instead flatten the files ourselves and build them with solc in the first image layer in this file -ARG cic_bancor_commit=a04c7ae6882ea515938d852cc861d59a35070094 -ARG cic_bancor_url=https://gitlab.com/grassrootseconomics/cic-bancor.git/ -ARG cic_bancor_contracts_url=https://github.com/bancorprotocol/contracts-solidity -RUN echo Compile and install bancor protocol contracts && \ - git clone --depth 1 $cic_bancor_url cic-bancor && \ - cd cic-bancor && \ - git fetch --depth 1 origin $cic_bancor_commit && \ - git checkout $cic_bancor_commit && \ - # Apparently the git version here doesn't have set-url as a command. *sigh* - #if [ ! -z $cic_bancor_contracts_url ]; then - # git submodule set-url bancor $cic_bancor_contracts_url - #fi - git submodule init && \ - git submodule update -RUN cd root && \ - . $NVM_DIR/nvm.sh &&\ - nvm install $BANCOR_NODE_VERSION && \ - nvm use $BANCOR_NODE_VERSION && \ - cd - && \ - cd cic-bancor/bancor && \ - npm install --python=/usr/bin/python2 && \ - node_modules/truffle/build/cli.bundled.js compile && \ - mkdir -vp /usr/local/share/cic/bancor/solidity/build && \ - cp -vR solidity/build/contracts /usr/local/share/cic/bancor/solidity/build/ -RUN cd cic-bancor/python && \ - pip install --extra-index-url $pip_extra_index_url . +# ARG cic_bancor_commit=a04c7ae6882ea515938d852cc861d59a35070094 +# ARG cic_bancor_url=https://gitlab.com/grassrootseconomics/cic-bancor.git/ +# ARG cic_bancor_contracts_url=https://github.com/bancorprotocol/contracts-solidity +# RUN echo Compile and install bancor protocol contracts && \ +# git clone --depth 1 $cic_bancor_url cic-bancor && \ +# cd cic-bancor && \ +# git fetch --depth 1 origin $cic_bancor_commit && \ +# git checkout $cic_bancor_commit && \ +# # Apparently the git version here doesn't have set-url as a command. *sigh* +# #if [ ! -z $cic_bancor_contracts_url ]; then +# # git submodule set-url bancor $cic_bancor_contracts_url +# #fi +# git submodule init && \ +# git submodule update +# RUN cd root && \ +# . $NVM_DIR/nvm.sh &&\ +# nvm install $BANCOR_NODE_VERSION && \ +# nvm use $BANCOR_NODE_VERSION && \ +# cd - && \ +# cd cic-bancor/bancor && \ +# npm install --python=/usr/bin/python2 && \ +# node_modules/truffle/build/cli.bundled.js compile && \ +# mkdir -vp /usr/local/share/cic/bancor/solidity/build && \ +# cp -vR solidity/build/contracts /usr/local/share/cic/bancor/solidity/build/ +# RUN cd cic-bancor/python && \ +# pip install --extra-index-url $pip_extra_index_url . +FROM python:3.8.6-slim-buster as runtime-image -RUN apt-get install -y cargo -ARG cic_base_version=0.1.1a30 -RUN pip install --extra-index-url $pip_extra_index_url cic-base[full_graph]==$cic_base_version +RUN apt-get update +RUN apt-get install -y --no-install-recommends gnupg libpq-dev -ARG cic_registry_version=0.5.3a24 -RUN pip install --extra-index-url $pip_extra_index_url cic-registry==$cic_registry_version +COPY --from=compile-image /usr/local/bin/ /usr/local/bin/ +COPY --from=compile-image /usr/local/etc/cic/ /usr/local/etc/cic/ -WORKDIR /root +RUN useradd --create-home grassroots +WORKDIR /home/grassroots +# COPY python dependencies to user dir +COPY --from=compile-image /home/grassroots/.local .local +ENV PATH=/home/grassroots/.local/bin:$PATH COPY contract-migration/testdata/pgp testdata/pgp -COPY contract-migration/wait-for-it.sh . -RUN chmod +x ./wait-for-it.sh - -# COPY contract-migration/.env_config_template .env_config_template -# COPY contract-migration/.env_dockercompose_template .env_dockercompose_template - -COPY contract-migration/reset.sh reset.sh -COPY contract-migration/from_env.sh from_env.sh -COPY contract-migration/seed_cic_eth.sh seed_cic_eth.sh COPY contract-migration/sarafu_declaration.json sarafu_declaration.json COPY contract-migration/keystore keystore +COPY contract-migration/envlist . +COPY contract-migration/*.sh ./ -ENTRYPOINT [ "/bin/bash" ] +# RUN chown grassroots:grassroots .local/ +RUN chown grassroots:grassroots -R . +RUN chmod gu+x *.sh + +RUN mkdir -p /tmp/cic/config +RUN chown grassroots:grassroots /tmp/cic/config +# A shared output dir for environment configs +RUN chmod a+rwx /tmp/cic/config + +USER grassroots + +ENTRYPOINT [ ] diff --git a/apps/contract-migration/envlist b/apps/contract-migration/envlist new file mode 100644 index 00000000..8613215b --- /dev/null +++ b/apps/contract-migration/envlist @@ -0,0 +1,61 @@ +SYNCER_LOOP_INTERVAL +SSL_ENABLE_CLIENT +SSL_CERT_FILE +SSL_KEY_FILE +SSL_PASSWORD +SSL_CA_FILE +BANCOR_DIR +REDIS_HOST +REDIS_PORT +REDIS_DB +PGP_EXPORTS_DIR +PGP_PRIVATEKEY_FILE +PGP_PASSPHRASE +DATABASE_USER +DATABASE_PASSWORD +DATABASE_NAME +DATABASE_HOST +DATABASE_PORT +DATABASE_ENGINE +DATABASE_DRIVER +DATABASE_DEBUG +TASKS_AFRICASTALKING +TASKS_SMS_DB +TASKS_LOG +TASKS_TRACE_QUEUE_STATUS +TASKS_TRANSFER_CALLBACKS +DEV_MNEMONIC +DEV_ETH_RESERVE_ADDRESS +DEV_ETH_ACCOUNTS_INDEX_ADDRESS +DEV_ETH_RESERVE_AMOUNT +DEV_ETH_ACCOUNT_BANCOR_DEPLOYER +DEV_ETH_ACCOUNT_CONTRACT_DEPLOYER +DEV_ETH_ACCOUNT_GAS_PROVIDER +DEV_ETH_ACCOUNT_RESERVE_OWNER +DEV_ETH_ACCOUNT_RESERVE_MINTER +DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_OWNER +DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER +DEV_ETH_ACCOUNT_SARAFU_OWNER +DEV_ETH_ACCOUNT_SARAFU_GIFTER +DEV_ETH_ACCOUNT_APPROVAL_ESCROW_OWNER +DEV_ETH_ACCOUNT_SINGLE_SHOT_FAUCET_OWNER +DEV_ETH_SARAFU_TOKEN_NAME +DEV_ETH_SARAFU_TOKEN_SYMBOL +DEV_ETH_SARAFU_TOKEN_DECIMALS +DEV_ETH_SARAFU_TOKEN_ADDRESS +DEV_PGP_PUBLICKEYS_ACTIVE_FILE +DEV_PGP_PUBLICKEYS_TRUSTED_FILE +DEV_PGP_PUBLICKEYS_ENCRYPT_FILE +CIC_REGISTRY_ADDRESS +CIC_APPROVAL_ESCROW_ADDRESS +CIC_TOKEN_INDEX_ADDRESS +CIC_ACCOUNTS_INDEX_ADDRESS +CIC_DECLARATOR_ADDRESS +CIC_CHAIN_SPEC +ETH_PROVIDER +ETH_ABI_DIR +SIGNER_SOCKET_PATH +SIGNER_SECRET +CELERY_BROKER_URL +CELERY_RESULT_URL +META_PROVIDER diff --git a/apps/contract-migration/reset.sh b/apps/contract-migration/reset.sh index d76d2441..138a70e1 100755 --- a/apps/contract-migration/reset.sh +++ b/apps/contract-migration/reset.sh @@ -19,6 +19,12 @@ echo \n # pushd /usr/src init_level_file=${CIC_DATA_DIR}/.init +if [ ! -f ${CIC_DATA_DIR}/.init ]; then + echo "Creating .init file..." + mkdir -p $CIC_DATA_DIR + touch /tmp/cic/config/.init +# touch $init_level_file +fi echo -n 1 > $init_level_file # Abort on any error (including if wait-for-it fails). @@ -61,10 +67,10 @@ export DEV_ETH_ACCOUNTS_INDEX_ADDRESS=$CIC_ACCOUNTS_INDEX_ADDRESS export BANCOR_REGISTRY_ADDRESS=$BANCOR_REGISTRY_ADDRESS export CIC_REGISTRY_ADDRESS=$CIC_REGISTRY_ADDRESS export CIC_TRUST_ADDRESS=$DEV_ETH_ACCOUNT_CONTRACT_DEPLOYER - +export CIC_DECLARATOR_ADDRESS=$CIC_DECLARATOR_ADDRESS EOF -cat $CIC_DATA_DIR/envlist | bash from_env.sh > $CIC_DATA_DIR/.env_all +cat ./envlist | bash from_env.sh > $CIC_DATA_DIR/.env_all # popd set +a diff --git a/apps/contract-migration/run_job.sh b/apps/contract-migration/run_job.sh new file mode 100644 index 00000000..f6c4c076 --- /dev/null +++ b/apps/contract-migration/run_job.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +if [[ $RUN_LEVEL -gt 0 ]] +then + ./reset.sh +fi + +if [[ $RUN_LEVEL -gt 1 ]] +then + ./seed_cic_eth.sh +fi \ No newline at end of file diff --git a/apps/contract-migration/scripts/requirements.txt b/apps/contract-migration/scripts/requirements.txt index 0d593f66..b16cc544 100644 --- a/apps/contract-migration/scripts/requirements.txt +++ b/apps/contract-migration/scripts/requirements.txt @@ -1,3 +1,3 @@ -cic-base[full_graph]==0.1.1a28 -cic-eth==0.10.0a46 +cic-base[full_graph]==0.1.1a23 +cic-eth==0.10.0a41 cic-types==0.1.0a8 diff --git a/apps/contract-migration/scripts/verify.py b/apps/contract-migration/scripts/verify.py index ebcb9fef..3eb47311 100644 --- a/apps/contract-migration/scripts/verify.py +++ b/apps/contract-migration/scripts/verify.py @@ -68,7 +68,6 @@ if args.v == True: logging.getLogger().setLevel(logging.INFO) elif args.vv == True: logging.getLogger().setLevel(logging.DEBUG) -verbose = args.vv or args.v config_dir = os.path.join(args.c) os.makedirs(config_dir, 0o777, True) @@ -314,8 +313,7 @@ def main(): r = l.split(',') try: address = to_checksum(r[0]) - if not verbose: - sys.stdout.write('loading balance {} {}'.format(i, address).ljust(200) + "\r") + #sys.stdout.write('loading balance {} {}'.format(i, address).ljust(200) + "\r") logg.debug('loading balance {} {}'.format(i, address).ljust(200)) except ValueError: break @@ -330,7 +328,6 @@ def main(): verifier = Verifier(conn, api, gas_oracle, chain_spec, account_index_address, sarafu_token_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': @@ -346,8 +343,6 @@ def main(): f.close() u = Person.deserialize(o) - if not verbose: - sys.stdout.write('processing {} {}'.format(i, u.identities['evm']).ljust(200) + "\r") logg.debug('data {}'.format(u.identities['evm'])) subchain_str = '{}:{}'.format(chain_spec.common_name(), chain_spec.network_id()) @@ -362,7 +357,6 @@ def main(): logg.debug('checking {} -> {} = {}'.format(old_address, new_address, balance)) verifier.verify(new_address, balance) - i += 1 print(verifier) diff --git a/apps/contract-migration/seed_cic_eth.sh b/apps/contract-migration/seed_cic_eth.sh old mode 100644 new mode 100755 index 0f969e56..3264ecda --- a/apps/contract-migration/seed_cic_eth.sh +++ b/apps/contract-migration/seed_cic_eth.sh @@ -26,13 +26,11 @@ env_out_file=${CIC_DATA_DIR}/.env_seed init_level_file=${CIC_DATA_DIR}/.init truncate $env_out_file -s 0 +pip install --extra-index-url https://pip.grassrootseconomics.net:8433 chainlib==0.0.1a22 set -e set -a -# We need to not install these here... -pip install --extra-index-url $DEV_PIP_EXTRA_INDEX_URL cic-eth==0.10.0a46 chainlib==0.0.1a25 cic-contracts==0.0.2a2 - >&2 echo "create account for gas gifter" old_gas_provider=$DEV_ETH_ACCOUNT_GAS_PROVIDER DEV_ETH_ACCOUNT_GAS_GIFTER=`cic-eth-create $debug --redis-host-callback=$REDIS_HOST --redis-port-callback=$REDIS_PORT --no-register` @@ -55,9 +53,9 @@ cic-eth-tag TRANSFER_AUTHORIZATION_OWNER $DEV_ETH_ACCOUNT_TRANSFER_AUTHORIZATION #cic-eth-tag FAUCET_GIFTER $DEV_ETH_ACCOUNT_FAUCET_OWNER >&2 echo "create account for accounts index writer" -DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER=`cic-eth-create $debug --redis-host-callback=$REDIS_HOST --redis-port-callback=$REDIS_PORT --no-register` -echo DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER=$DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER >> $env_out_file -cic-eth-tag ACCOUNT_REGISTRY_WRITER $DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER +DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER=`cic-eth-create $debug --redis-host-callback=$REDIS_HOST --redis-port-callback=$REDIS_PORT --no-register` +echo DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER=$DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER >> $env_out_file +cic-eth-tag ACCOUNTS_INDEX_WRITER $DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER # Transfer gas to custodial gas provider adddress @@ -68,7 +66,7 @@ cic-eth-tag ACCOUNT_REGISTRY_WRITER $DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER >&2 eth-gas -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -w $debug $DEV_ETH_ACCOUNT_SARAFU_GIFTER $gas_amount >&2 echo gift gas to account index owner ->&2 eth-gas -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -w $debug $DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER $gas_amount +>&2 eth-gas -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -w $debug $DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER $gas_amount # Send token to token creator >&2 echo "gift tokens to sarafu owner" @@ -100,7 +98,7 @@ export CIC_TRANSFER_AUTHORIZATION_ADDRESS=$CIC_TRANSFER_AUTHORIZATION_ADDRESS # Deploy one-time token faucet for newly created token >&2 echo "deploy faucet" -DEV_ETH_SARAFU_FAUCET_ADDRESS=`sarafu-faucet-deploy -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER --token-address $DEV_ETH_SARAFU_TOKEN_ADDRESS --editor $DEV_ETH_ACCOUNT_CONTRACT_DEPLOYER --set-amount $faucet_amount --accounts-index-address $DEV_ETH_ACCOUNT_REGISTRY_ADDRESS -w $debug` +DEV_ETH_SARAFU_FAUCET_ADDRESS=`sarafu-faucet-deploy -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER --token-address $DEV_ETH_SARAFU_TOKEN_ADDRESS --editor $DEV_ETH_ACCOUNT_CONTRACT_DEPLOYER --set-amount $faucet_amount --accounts-index-address $DEV_ETH_ACCOUNTS_INDEX_ADDRESS -w $debug` echo DEV_ETH_SARAFU_FAUCET_ADDRESS=$DEV_ETH_SARAFU_FAUCET_ADDRESS >> $env_out_file export DEV_ETH_SARAFU_FAUCET_ADDRESS=$DEV_ETH_SARAFU_FAUCET_ADDRESS @@ -128,6 +126,7 @@ export CIC_TOKEN_INDEX_ADDRESS=$CIC_TOKEN_INDEX_ADDRESS >&2 echo "add declarations for sarafu token" token_description_one=`sha256sum sarafu_declaration.json | awk '{ print $1; }'` token_description_two=0x54686973206973207468652053617261667520746f6b656e0000000000000000 +echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> foo $CIC_DECLARATOR_ADDRESSh" >&2 eth-address-declarator-add -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -r $CIC_DECLARATOR_ADDRESS -w $debug $DEV_ETH_SARAFU_TOKEN_ADDRESS $token_description_one >&2 eth-address-declarator-add -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -r $CIC_DECLARATOR_ADDRESS -w $debug $DEV_ETH_SARAFU_TOKEN_ADDRESS $token_description_two @@ -143,7 +142,7 @@ token_description_two=0x54686973206973207468652053617261667520746f6b656e00000000 # Add accounts index writer with key from keystore >&2 echo "add keystore account $keystore_file to accounts index writers" ->&2 eth-accounts-index-add -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -r $CIC_ACCOUNT_REGISTRY_ADDRESS --writer $DEV_ETH_ACCOUNT_ACCOUNT_REGISTRY_WRITER -w $debug +>&2 eth-accounts-index-add -y $keystore_file -i $CIC_CHAIN_SPEC -p $ETH_PROVIDER -r $CIC_ACCOUNTS_INDEX_ADDRESS --writer $DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER -w $debug echo -n 0 > $init_level_file