diff --git a/apps/cic-cache/requirements.txt b/apps/cic-cache/requirements.txt index ad1232c3..865db82e 100644 --- a/apps/cic-cache/requirements.txt +++ b/apps/cic-cache/requirements.txt @@ -1,12 +1,13 @@ -cic-base~=0.1.2b10 +cic-base~=0.1.3a1 alembic==1.4.2 confini~=0.3.6rc3 uwsgi==2.0.19.1 moolb~=0.1.0 -cic-eth-registry~=0.5.5a4 +cic-eth-registry~=0.5.6a1 SQLAlchemy==1.3.20 semver==2.13.0 psycopg2==2.8.6 celery==4.4.7 redis==3.5.3 -chainsyncer[sql]~=0.0.2a4 +chainsyncer[sql]~=0.0.3a1 +erc20-faucet~=0.2.2a1 diff --git a/apps/cic-cache/test_requirements.txt b/apps/cic-cache/test_requirements.txt index e0addadd..3582004c 100644 --- a/apps/cic-cache/test_requirements.txt +++ b/apps/cic-cache/test_requirements.txt @@ -6,6 +6,5 @@ sqlparse==0.4.1 pytest-celery==0.0.0a1 eth_tester==0.5.0b3 py-evm==0.3.0a20 -web3==5.12.2 -cic-eth-registry~=0.5.5a3 -cic-base[full]==0.1.2b8 +cic-base[full]==0.1.3a1 +sarafu-faucet~=0.0.4a1 diff --git a/apps/cic-eth/MANIFEST.in b/apps/cic-eth/MANIFEST.in new file mode 100644 index 00000000..739a53c6 --- /dev/null +++ b/apps/cic-eth/MANIFEST.in @@ -0,0 +1,2 @@ +include *requirements.txt + diff --git a/apps/cic-eth/cic_eth/api/api_admin.py b/apps/cic-eth/cic_eth/api/api_admin.py index c5c1e142..34fc4d68 100644 --- a/apps/cic-eth/cic_eth/api/api_admin.py +++ b/apps/cic-eth/cic_eth/api/api_admin.py @@ -562,13 +562,13 @@ class AdminApi: tx['source_token_symbol'] = source_token.symbol o = erc20_c.balance_of(tx['source_token'], tx['sender'], sender_address=self.call_address) r = self.rpc.do(o) - tx['sender_token_balance'] = erc20_c.parse_balance_of(r) + tx['sender_token_balance'] = erc20_c.parse_balance(r) if destination_token != None: tx['destination_token_symbol'] = destination_token.symbol o = erc20_c.balance_of(tx['destination_token'], tx['recipient'], sender_address=self.call_address) r = self.rpc.do(o) - tx['recipient_token_balance'] = erc20_c.parse_balance_of(r) + tx['recipient_token_balance'] = erc20_c.parse_balance(r) #tx['recipient_token_balance'] = destination_token.function('balanceOf')(tx['recipient']).call() # TODO: this can mean either not subitted or culled, need to check other txs with same nonce to determine which diff --git a/apps/cic-eth/cic_eth/runnable/daemons/server.py b/apps/cic-eth/cic_eth/runnable/daemons/server.py deleted file mode 100644 index 875c581e..00000000 --- a/apps/cic-eth/cic_eth/runnable/daemons/server.py +++ /dev/null @@ -1,136 +0,0 @@ -# standard imports -import os -import re -import logging -import argparse -import json - -# third-party imports -import web3 -import confini -import celery -from json.decoder import JSONDecodeError -from cic_registry.chain import ChainSpec - -# local imports -from cic_eth.db import dsn_from_config -from cic_eth.db.models.base import SessionBase -from cic_eth.eth.util import unpack_signed_raw_tx - -logging.basicConfig(level=logging.WARNING) -logg = logging.getLogger() - -rootdir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) -dbdir = os.path.join(rootdir, 'cic_eth', 'db') -migrationsdir = os.path.join(dbdir, 'migrations') - -config_dir = os.path.join('/usr/local/etc/cic-eth') - -argparser = argparse.ArgumentParser() -argparser.add_argument('-c', type=str, default=config_dir, help='config file') -argparser.add_argument('-i', '--chain-spec', dest='i', type=str, help='chain spec') -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('-q', type=str, default='cic-eth', help='queue name for worker tasks') -argparser.add_argument('-v', action='store_true', help='be verbose') -argparser.add_argument('-vv', action='store_true', help='be more verbose') -args = argparser.parse_args() - -if args.vv: - logging.getLogger().setLevel(logging.DEBUG) -elif args.v: - logging.getLogger().setLevel(logging.INFO) - -config = confini.Config(args.c, args.env_prefix) -config.process() -args_override = { - 'CIC_CHAIN_SPEC': getattr(args, 'i'), - } -config.censor('PASSWORD', 'DATABASE') -config.censor('PASSWORD', 'SSL') -logg.debug('config:\n{}'.format(config)) - -dsn = dsn_from_config(config) -SessionBase.connect(dsn) - -celery_app = celery.Celery(backend=config.get('CELERY_RESULT_URL'), broker=config.get('CELERY_BROKER_URL')) -queue = args.q - -re_something = r'^/something/?' - -chain_spec = ChainSpec.from_chain_str(config.get('CIC_CHAIN_SPEC')) - - -def process_something(session, env): - r = re.match(re_something, env.get('PATH_INFO')) - if not r: - return None - - #if env.get('CONTENT_TYPE') != 'application/json': - # raise AttributeError('content type') - - #if env.get('REQUEST_METHOD') != 'POST': - # raise AttributeError('method') - - #post_data = json.load(env.get('wsgi.input')) - - #return ('text/plain', 'foo'.encode('utf-8'),) - - -# uwsgi application -def application(env, start_response): - - for k in env.keys(): - logg.debug('env {} {}'.format(k, env[k])) - - headers = [] - content = b'' - err = None - - session = SessionBase.create_session() - for handler in [ - process_something, - ]: - try: - r = handler(session, env) - except AttributeError as e: - logg.error('handler fail attribute {}'.format(e)) - err = '400 Impertinent request' - break - except JSONDecodeError as e: - logg.error('handler fail json {}'.format(e)) - err = '400 Invalid data format' - break - except KeyError as e: - logg.error('handler fail key {}'.format(e)) - err = '400 Invalid JSON' - break - except ValueError as e: - logg.error('handler fail value {}'.format(e)) - err = '400 Invalid data' - break - except RuntimeError as e: - logg.error('task fail value {}'.format(e)) - err = '500 Task failed, sorry I cannot tell you more' - break - if r != None: - (mime_type, content) = r - break - session.close() - - if err != None: - headers.append(('Content-Type', 'text/plain, charset=UTF-8',)) - start_response(err, headers) - session.close() - return [content] - - headers.append(('Content-Length', str(len(content))),) - headers.append(('Access-Control-Allow-Origin', '*',)); - - if len(content) == 0: - headers.append(('Content-Type', 'text/plain, charset=UTF-8',)) - start_response('404 Looked everywhere, sorry', headers) - else: - headers.append(('Content-Type', mime_type,)) - start_response('200 OK', headers) - - return [content] diff --git a/apps/cic-eth/cic_eth/runnable/daemons/tracker.py b/apps/cic-eth/cic_eth/runnable/daemons/tracker.py index 10ef5154..58d33eca 100644 --- a/apps/cic-eth/cic_eth/runnable/daemons/tracker.py +++ b/apps/cic-eth/cic_eth/runnable/daemons/tracker.py @@ -26,10 +26,8 @@ from hexathon import ( strip_0x, ) from chainsyncer.backend.sql import SQLBackend -from chainsyncer.driver import ( - HeadSyncer, - HistorySyncer, - ) +from chainsyncer.driver.head import HeadSyncer +from chainsyncer.driver.history import HistorySyncer from chainsyncer.db.models.base import SessionBase # local imports diff --git a/apps/cic-eth/cic_eth/version.py b/apps/cic-eth/cic_eth/version.py index 0edda257..a3457bc6 100644 --- a/apps/cic-eth/cic_eth/version.py +++ b/apps/cic-eth/cic_eth/version.py @@ -9,8 +9,8 @@ import semver version = ( 0, 11, - 0, - 'beta.16', + 1, + 'alpha.1', ) version_object = semver.VersionInfo( diff --git a/apps/cic-eth/requirements.txt b/apps/cic-eth/requirements.txt index b601639a..1187eeff 100644 --- a/apps/cic-eth/requirements.txt +++ b/apps/cic-eth/requirements.txt @@ -1,25 +1,25 @@ -cic-base~=0.1.2b15 +cic-base~=0.1.3a1 celery==4.4.7 -crypto-dev-signer~=0.4.14b3 +crypto-dev-signer~=0.4.14b6 confini~=0.3.6rc3 -cic-eth-registry~=0.5.5a7 +cic-eth-registry~=0.5.6a1 redis==3.5.3 alembic==1.4.2 websockets==8.1 requests~=2.24.0 -eth_accounts_index~=0.0.11a12 -erc20-transfer-authorization~=0.3.1a7 +eth_accounts_index~=0.0.12a1 +erc20-transfer-authorization~=0.3.2a1 uWSGI==2.0.19.1 semver==2.13.0 websocket-client==0.57.0 moolb~=0.1.1b2 -eth-address-index~=0.1.1a11 -chainlib~=0.0.3rc2 +eth-address-index~=0.1.2a1 +chainlib-eth~=0.0.5a1 hexathon~=0.0.1a7 -chainsyncer[sql]~=0.0.2a5 -chainqueue~=0.0.2b3 -sarafu-faucet~=0.0.3a3 -erc20-faucet~=0.2.1a5 +chainsyncer[sql]~=0.0.3a1 +chainqueue~=0.0.2b5 +sarafu-faucet~=0.0.4a1 +erc20-faucet~=0.2.2a1 coincurve==15.0.0 potaahto~=0.0.1a2 pycryptodome==3.10.1 diff --git a/apps/data-seeding/cic_eth/import_balance.py b/apps/data-seeding/cic_eth/import_balance.py index 904299a1..7a8aa92c 100644 --- a/apps/data-seeding/cic_eth/import_balance.py +++ b/apps/data-seeding/cic_eth/import_balance.py @@ -30,7 +30,7 @@ from chainlib.eth.address import to_checksum_address from chainlib.eth.gas import OverrideGasOracle from chainlib.eth.nonce import RPCNonceOracle from chainlib.eth.tx import TxFactory -from chainlib.jsonrpc import jsonrpc_template +from chainlib.jsonrpc import JSONRPCRequest from chainlib.eth.error import EthException from chainlib.chain import ChainSpec from chainlib.eth.constant import ZERO_ADDRESS @@ -226,11 +226,13 @@ def main(): data = add_0x(registry_addressof_method) data += eth_abi.encode_single('bytes32', b'TokenRegistry').hex() txf.set_code(tx, data) - - o = jsonrpc_template() + + j = JSONRPCRequest() + o = j.template() o['method'] = 'eth_call' o['params'].append(txf.normalize(tx)) o['params'].append('latest') + o = j.finalize(o) r = conn.do(o) 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)) @@ -244,10 +246,11 @@ def main(): z = h.digest() data += eth_abi.encode_single('bytes32', z).hex() txf.set_code(tx, data) - o = jsonrpc_template() + o = j.template() o['method'] = 'eth_call' o['params'].append(txf.normalize(tx)) o['params'].append('latest') + o = j.finalize(o) r = conn.do(o) try: sarafu_token_address = to_checksum_address(eth_abi.decode_single('address', bytes.fromhex(strip_0x(r)))) diff --git a/apps/data-seeding/eth/import_balance.py b/apps/data-seeding/eth/import_balance.py index d391d021..2e977d93 100644 --- a/apps/data-seeding/eth/import_balance.py +++ b/apps/data-seeding/eth/import_balance.py @@ -30,7 +30,7 @@ from chainlib.eth.address import to_checksum_address from chainlib.eth.gas import OverrideGasOracle from chainlib.eth.nonce import RPCNonceOracle from chainlib.eth.tx import TxFactory -from chainlib.jsonrpc import jsonrpc_template +from chainlib.jsonrpc import JSONRPCRequest from chainlib.eth.error import EthException from chainlib.chain import ChainSpec from crypto_dev_signer.eth.signer import ReferenceSigner as EIP155Signer @@ -225,11 +225,13 @@ def main(): data = add_0x(registry_addressof_method) data += eth_abi.encode_single('bytes32', b'TokenRegistry').hex() txf.set_code(tx, data) - - o = jsonrpc_template() + + j = JSONRPCRequest() + o = j.template() o['method'] = 'eth_call' o['params'].append(txf.normalize(tx)) o['params'].append('latest') + o = j.finalize(o) r = conn.do(o) 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)) @@ -243,10 +245,11 @@ def main(): z = h.digest() data += eth_abi.encode_single('bytes32', z).hex() txf.set_code(tx, data) - o = jsonrpc_template() + o = j.template() o['method'] = 'eth_call' o['params'].append(txf.normalize(tx)) o['params'].append('latest') + o = j.finalize(o) r = conn.do(o) try: sarafu_token_address = to_checksum_address(eth_abi.decode_single('address', bytes.fromhex(strip_0x(r)))) diff --git a/apps/data-seeding/requirements.txt b/apps/data-seeding/requirements.txt index 4f2cb559..8e014acb 100644 --- a/apps/data-seeding/requirements.txt +++ b/apps/data-seeding/requirements.txt @@ -1,5 +1,5 @@ -cic-base[full_graph]==0.1.2b15 -sarafu-faucet==0.0.3a3 -cic-eth==0.11.0b16 -cic-types==0.1.0a11 -crypto-dev-signer==0.4.14b3 +cic-base[full_graph]==0.1.3a1 +sarafu-faucet==0.0.4a1 +cic-eth==0.11.1a1 +cic-types==0.1.0a13 +crypto-dev-signer==0.4.14b6 diff --git a/apps/data-seeding/verify.py b/apps/data-seeding/verify.py index af90c04d..bca6ce95 100644 --- a/apps/data-seeding/verify.py +++ b/apps/data-seeding/verify.py @@ -25,7 +25,7 @@ from chainlib.eth.gas import ( ) from chainlib.eth.tx import TxFactory from chainlib.hash import keccak256_string_to_hex -from chainlib.jsonrpc import jsonrpc_template +from chainlib.jsonrpc import JSONRPCRequest from cic_types.models.person import ( Person, generate_metadata_pointer, @@ -264,9 +264,11 @@ class Verifier: data += eth_abi.encode_single('address', address).hex() tx = self.tx_factory.set_code(tx, data) tx = self.tx_factory.normalize(tx) - o = jsonrpc_template() + j = JSONRPCRequest() + o = j.template() o['method'] = 'eth_call' o['params'].append(tx) + o = j.finalize(o) r = self.conn.do(o) logg.debug('index check for {}: {}'.format(address, r)) n = eth_abi.decode_single('uint256', bytes.fromhex(strip_0x(r))) @@ -429,10 +431,12 @@ def main(): data += eth_abi.encode_single('bytes32', b'TokenRegistry').hex() txf.set_code(tx, data) - o = jsonrpc_template() + j = JSONRPCRequest() + o = j.template() o['method'] = 'eth_call' o['params'].append(txf.normalize(tx)) o['params'].append('latest') + o = j.finalize(o) r = conn.do(o) 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)) @@ -441,10 +445,11 @@ def main(): data += eth_abi.encode_single('bytes32', b'AccountRegistry').hex() txf.set_code(tx, data) - o = jsonrpc_template() + o = j.template() o['method'] = 'eth_call' o['params'].append(txf.normalize(tx)) o['params'].append('latest') + o = j.finalize(o) r = conn.do(o) account_index_address = to_checksum_address(eth_abi.decode_single('address', bytes.fromhex(strip_0x(r)))) logg.info('found account index address {}'.format(account_index_address)) @@ -453,10 +458,11 @@ def main(): data += eth_abi.encode_single('bytes32', b'Faucet').hex() txf.set_code(tx, data) - o = jsonrpc_template() + o = j.template() o['method'] = 'eth_call' o['params'].append(txf.normalize(tx)) o['params'].append('latest') + o = j.finalize(o) r = conn.do(o) faucet_address = to_checksum_address(eth_abi.decode_single('address', bytes.fromhex(strip_0x(r)))) logg.info('found faucet {}'.format(faucet_address)) @@ -471,10 +477,11 @@ def main(): z = h.digest() data += eth_abi.encode_single('bytes32', z).hex() txf.set_code(tx, data) - o = jsonrpc_template() + o = j.template() o['method'] = 'eth_call' o['params'].append(txf.normalize(tx)) o['params'].append('latest') + o = j.finalize(o) r = conn.do(o) 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)) diff --git a/docker-compose.yml b/docker-compose.yml index 28379982..749d9c62 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -387,44 +387,6 @@ services: # command: "/root/start_retry.sh -q cic-eth -vv" -# cic-eth-server: -# build: -# context: apps/ -# dockerfile: cic-eth/docker/Dockerfile -# environment: -# CIC_CHAIN_SPEC: $CIC_CHAIN_SPEC -# CELERY_BROKER_URL: $CELERY_BROKER_URL -# CELERY_RESULT_URL: $CELERY_RESULT_URL -# SERVER_PORT: 8000 -# depends_on: -# - eth -# - postgres -# - redis -# ports: -# - ${HTTP_PORT_CIC_ETH:-63314}:8000 -# deploy: -# restart_policy: -# condition: on-failure -# volumes: -# - contract-config:/tmp/cic/config/:ro -# command: -# - /bin/bash -# - -c -# - | -# if [[ -f /tmp/cic/config/.env ]]; then source /tmp/cic/config/.env; fi -# "/usr/local/bin/uwsgi" \ -# --wsgi-file /usr/src/cic-eth/cic_eth/runnable/server_agent.py \ -# --http :80 \ -# --pyargv -vv -## entrypoint: -## - "/usr/local/bin/uwsgi" -## - "--wsgi-file" -## - "/usr/src/cic-eth/cic_eth/runnable/server_agent.py" -## - "--http" -## - ":80" -# # command: "--pyargv -vv" - - cic-notify-tasker: build: