Compare commits
8 Commits
bvander/co
...
lash/init-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e251612487
|
||
|
|
86592b837a
|
||
|
|
fae3258c72
|
||
|
|
9cfb97eb35
|
||
|
|
b6b6e36da9
|
||
|
|
a5cc173143
|
||
|
|
d5392ff160
|
||
|
|
58b890b971
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -15,4 +15,3 @@ build/
|
||||
.idea
|
||||
**/.vim
|
||||
**/*secret.yaml
|
||||
**/*.bash_history
|
||||
|
||||
@@ -19,11 +19,6 @@ Run app/contract-migration to deploy contracts
|
||||
RUN_MASK=3 docker-compose up contract-migration
|
||||
```
|
||||
|
||||
View container status
|
||||
```
|
||||
docker ps --filter network=cic-network --format "table {{.ID}}\t{{.Names}}\t{{.Status}}" --all
|
||||
```
|
||||
|
||||
stop cluster
|
||||
```
|
||||
docker-compose down
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
echo "fetching migration variables from $CONTRACT_MIGRATION_URL"
|
||||
for s in $(curl -s "$CONTRACT_MIGRATION_URL/readyz" | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]" ); do
|
||||
echo "exporting $s"
|
||||
export $s
|
||||
done
|
||||
@@ -1,23 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
WAIT_FOR_TIMEOUT=${WAIT_FOR_TIMEOUT:-600}
|
||||
|
||||
. ./db.sh
|
||||
|
||||
if [ $? -ne "0" ]; then
|
||||
>&2 echo db migrate fail
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$CONTRACT_MIGRATION_URL" ]]; then
|
||||
echo "waiting for $CONTRACT_MIGRATION_URL/readyz"
|
||||
./wait-for-it.sh $CONTRACT_MIGRATION_URL -t $WAIT_FOR_TIMEOUT
|
||||
source ./get_readyz.sh # set env vars form endpoint
|
||||
/usr/local/bin/uwsgi --wsgi-file /root/cic_cache/runnable/daemons/server.py --http :8000 --pyargv "-vv"
|
||||
else
|
||||
/usr/local/bin/uwsgi --wsgi-file /root/cic_cache/runnable/daemons/server.py --http :8000 --pyargv "-vv"
|
||||
fi
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
WAIT_FOR_TIMEOUT=${WAIT_FOR_TIMEOUT:-600}
|
||||
|
||||
. ./db.sh
|
||||
|
||||
if [ $? -ne "0" ]; then
|
||||
>&2 echo db migrate fail
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$CONTRACT_MIGRATION_URL" ]]; then
|
||||
echo "waiting for $CONTRACT_MIGRATION_URL/readyz"
|
||||
./wait-for-it.sh $CONTRACT_MIGRATION_URL -t $WAIT_FOR_TIMEOUT
|
||||
source ./get_readyz.sh # set env vars form endpoint
|
||||
/usr/local/bin/cic-cache-taskerd -vv
|
||||
else
|
||||
/usr/local/bin/cic-cache-taskerd -vv
|
||||
fi
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
WAIT_FOR_TIMEOUT=${WAIT_FOR_TIMEOUT:-600}
|
||||
|
||||
. ./db.sh
|
||||
|
||||
if [ $? -ne "0" ]; then
|
||||
@@ -12,12 +7,4 @@ if [ $? -ne "0" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$CONTRACT_MIGRATION_URL" ]]; then
|
||||
echo "waiting for $CONTRACT_MIGRATION_URL/readyz"
|
||||
docker/wait-for-it.sh $CONTRACT_MIGRATION_URL -t $WAIT_FOR_TIMEOUT
|
||||
source docker/get_readyz.sh # set env vars form endpoint
|
||||
/usr/local/bin/cic-cache-trackerd $@
|
||||
else
|
||||
/usr/local/bin/cic-cache-trackerd $@
|
||||
fi
|
||||
|
||||
/usr/local/bin/cic-cache-trackerd $@
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Use this script to test if a given TCP host/port are available
|
||||
|
||||
WAITFORIT_cmdname=${0##*/}
|
||||
|
||||
echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
|
||||
|
||||
usage()
|
||||
{
|
||||
cat << USAGE >&2
|
||||
Usage:
|
||||
$WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
|
||||
-h HOST | --host=HOST Host or IP under test
|
||||
-p PORT | --port=PORT TCP port under test
|
||||
Alternatively, you specify the host and port as host:port
|
||||
-s | --strict Only execute subcommand if the test succeeds
|
||||
-q | --quiet Don't output any status messages
|
||||
-t TIMEOUT | --timeout=TIMEOUT
|
||||
Timeout in seconds, zero for no timeout
|
||||
-- COMMAND ARGS Execute command with args after the test finishes
|
||||
USAGE
|
||||
exit 1
|
||||
}
|
||||
|
||||
wait_for()
|
||||
{
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
else
|
||||
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
|
||||
fi
|
||||
WAITFORIT_start_ts=$(date +%s)
|
||||
while :
|
||||
do
|
||||
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
|
||||
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
|
||||
WAITFORIT_result=$?
|
||||
else
|
||||
(echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
|
||||
WAITFORIT_result=$?
|
||||
fi
|
||||
if [[ $WAITFORIT_result -eq 0 ]]; then
|
||||
WAITFORIT_end_ts=$(date +%s)
|
||||
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
return $WAITFORIT_result
|
||||
}
|
||||
|
||||
wait_for_wrapper()
|
||||
{
|
||||
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
|
||||
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
else
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
fi
|
||||
WAITFORIT_PID=$!
|
||||
trap "kill -INT -$WAITFORIT_PID" INT
|
||||
wait $WAITFORIT_PID
|
||||
WAITFORIT_RESULT=$?
|
||||
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
fi
|
||||
return $WAITFORIT_RESULT
|
||||
}
|
||||
|
||||
# process arguments
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case "$1" in
|
||||
*:* )
|
||||
WAITFORIT_hostport=(${1//:/ })
|
||||
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
|
||||
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
|
||||
shift 1
|
||||
;;
|
||||
--child)
|
||||
WAITFORIT_CHILD=1
|
||||
shift 1
|
||||
;;
|
||||
-q | --quiet)
|
||||
WAITFORIT_QUIET=1
|
||||
shift 1
|
||||
;;
|
||||
-s | --strict)
|
||||
WAITFORIT_STRICT=1
|
||||
shift 1
|
||||
;;
|
||||
-h)
|
||||
WAITFORIT_HOST="$2"
|
||||
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--host=*)
|
||||
WAITFORIT_HOST="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-p)
|
||||
WAITFORIT_PORT="$2"
|
||||
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--port=*)
|
||||
WAITFORIT_PORT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-t)
|
||||
WAITFORIT_TIMEOUT="$2"
|
||||
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--timeout=*)
|
||||
WAITFORIT_TIMEOUT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
WAITFORIT_CLI=("$@")
|
||||
break
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echoerr "Unknown argument: $1"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
|
||||
echoerr "Error: you need to provide a host and port to test."
|
||||
usage
|
||||
fi
|
||||
|
||||
WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
|
||||
WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
|
||||
WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
|
||||
WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
|
||||
|
||||
# Check to see if timeout is from busybox?
|
||||
WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
|
||||
WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
|
||||
|
||||
WAITFORIT_BUSYTIMEFLAG=""
|
||||
if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
|
||||
WAITFORIT_ISBUSY=1
|
||||
# Check if busybox timeout uses -t flag
|
||||
# (recent Alpine versions don't support -t anymore)
|
||||
if timeout &>/dev/stdout | grep -q -e '-t '; then
|
||||
WAITFORIT_BUSYTIMEFLAG="-t"
|
||||
fi
|
||||
else
|
||||
WAITFORIT_ISBUSY=0
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CHILD -gt 0 ]]; then
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
exit $WAITFORIT_RESULT
|
||||
else
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
wait_for_wrapper
|
||||
WAITFORIT_RESULT=$?
|
||||
else
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CLI != "" ]]; then
|
||||
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
exec "${WAITFORIT_CLI[@]}"
|
||||
else
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
@@ -1,5 +1,5 @@
|
||||
SQLAlchemy==1.3.20
|
||||
cic-eth-registry>=0.6.1a3,<0.7.0
|
||||
cic-eth-registry>=0.6.1a2,<0.7.0
|
||||
hexathon~=0.0.1a8
|
||||
chainqueue>=0.0.4a6,<0.1.0
|
||||
eth-erc20>=0.1.2a2,<0.2.0
|
||||
|
||||
@@ -9,7 +9,6 @@ import logging
|
||||
# external imports
|
||||
import celery
|
||||
from chainlib.chain import ChainSpec
|
||||
from hexathon import strip_0x
|
||||
|
||||
# local imports
|
||||
from cic_eth.api.base import ApiBase
|
||||
@@ -255,8 +254,6 @@ class Api(ApiBase):
|
||||
:returns: uuid of root task
|
||||
:rtype: celery.Task
|
||||
"""
|
||||
#from_address = strip_0x(from_address)
|
||||
#to_address = strip_0x(to_address)
|
||||
s_check = celery.signature(
|
||||
'cic_eth.admin.ctrl.check_lock',
|
||||
[
|
||||
|
||||
@@ -13,7 +13,7 @@ from chainlib.eth.sign import (
|
||||
new_account,
|
||||
sign_message,
|
||||
)
|
||||
from chainlib.eth.address import to_checksum_address, is_address
|
||||
from chainlib.eth.address import to_checksum_address
|
||||
from chainlib.eth.tx import TxFormat
|
||||
from chainlib.chain import ChainSpec
|
||||
from chainlib.error import JSONRPCException
|
||||
@@ -31,7 +31,6 @@ from cic_eth.eth.gas import (
|
||||
from cic_eth.db.models.nonce import Nonce
|
||||
from cic_eth.db.models.base import SessionBase
|
||||
from cic_eth.db.models.role import AccountRole
|
||||
from cic_eth.encode import tx_normalize
|
||||
from cic_eth.error import (
|
||||
RoleMissingError,
|
||||
SignerError,
|
||||
@@ -50,7 +49,6 @@ from cic_eth.queue.tx import (
|
||||
from cic_eth.encode import (
|
||||
unpack_normal,
|
||||
ZERO_ADDRESS_NORMAL,
|
||||
tx_normalize,
|
||||
)
|
||||
|
||||
logg = logging.getLogger()
|
||||
@@ -86,7 +84,7 @@ def create(self, password, chain_spec_dict):
|
||||
# TODO: It seems infeasible that a can be None in any case, verify
|
||||
if a == None:
|
||||
raise SignerError('create account')
|
||||
a = tx_normalize.wallet_address(a)
|
||||
|
||||
logg.debug('created account {}'.format(a))
|
||||
|
||||
# Initialize nonce provider record for account
|
||||
@@ -177,9 +175,6 @@ def gift(self, account_address, chain_spec_dict):
|
||||
"""
|
||||
chain_spec = ChainSpec.from_dict(chain_spec_dict)
|
||||
|
||||
if is_address(account_address):
|
||||
account_address = tx_normalize.wallet_address(account_address)
|
||||
|
||||
logg.debug('gift account address {} to index'.format(account_address))
|
||||
queue = self.request.delivery_info.get('routing_key')
|
||||
|
||||
@@ -253,9 +248,8 @@ def have(self, account, chain_spec_dict):
|
||||
|
||||
@celery_app.task(bind=True, base=CriticalSQLAlchemyTask)
|
||||
def set_role(self, tag, address, chain_spec_dict):
|
||||
if not is_address(address):
|
||||
raise ValueError('invalid address {}'.format(address))
|
||||
address = tx_normalize.wallet_address(address)
|
||||
if not to_checksum_address(address):
|
||||
raise ValueError('invalid checksum address {}'.format(address))
|
||||
session = SessionBase.create_session()
|
||||
role = AccountRole.set(tag, address, session=session)
|
||||
session.add(role)
|
||||
@@ -304,15 +298,13 @@ def cache_gift_data(
|
||||
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
||||
tx = unpack_normal(tx_signed_raw_bytes, chain_spec)
|
||||
tx_data = Faucet.parse_give_to_request(tx['data'])
|
||||
sender_address = tx_normalize.wallet_address(tx['from'])
|
||||
recipient_address = tx_normalize.wallet_address(tx['to'])
|
||||
|
||||
session = self.create_session()
|
||||
|
||||
tx_dict = {
|
||||
'hash': tx['hash'],
|
||||
'from': sender_address,
|
||||
'to': recipient_address,
|
||||
'from': tx['from'],
|
||||
'to': tx['to'],
|
||||
'source_token': ZERO_ADDRESS_NORMAL,
|
||||
'destination_token': ZERO_ADDRESS_NORMAL,
|
||||
'from_value': 0,
|
||||
@@ -346,14 +338,12 @@ def cache_account_data(
|
||||
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
||||
tx = unpack_normal(tx_signed_raw_bytes, chain_spec)
|
||||
tx_data = AccountsIndex.parse_add_request(tx['data'])
|
||||
sender_address = tx_normalize.wallet_address(tx['from'])
|
||||
recipient_address = tx_normalize.wallet_address(tx['to'])
|
||||
|
||||
session = SessionBase.create_session()
|
||||
tx_dict = {
|
||||
'hash': tx['hash'],
|
||||
'from': sender_address,
|
||||
'to': recipient_address,
|
||||
'from': tx['from'],
|
||||
'to': tx['to'],
|
||||
'source_token': ZERO_ADDRESS_NORMAL,
|
||||
'destination_token': ZERO_ADDRESS_NORMAL,
|
||||
'from_value': 0,
|
||||
|
||||
@@ -12,10 +12,7 @@ from chainlib.eth.tx import (
|
||||
)
|
||||
from cic_eth_registry import CICRegistry
|
||||
from cic_eth_registry.erc20 import ERC20Token
|
||||
from hexathon import (
|
||||
strip_0x,
|
||||
add_0x,
|
||||
)
|
||||
from hexathon import strip_0x
|
||||
from chainqueue.error import NotLocalTxError
|
||||
from eth_erc20 import ERC20
|
||||
from chainqueue.sql.tx import cache_tx_dict
|
||||
@@ -41,7 +38,6 @@ from cic_eth.task import (
|
||||
CriticalSQLAlchemyAndSignerTask,
|
||||
)
|
||||
from cic_eth.eth.nonce import CustodialTaskNonceOracle
|
||||
from cic_eth.encode import tx_normalize
|
||||
|
||||
celery_app = celery.current_app
|
||||
logg = logging.getLogger()
|
||||
@@ -66,8 +62,7 @@ def balance(tokens, holder_address, chain_spec_dict):
|
||||
|
||||
for t in tokens:
|
||||
address = t['address']
|
||||
logg.debug('address {} {}'.format(address, holder_address))
|
||||
token = ERC20Token(chain_spec, rpc, add_0x(address))
|
||||
token = ERC20Token(chain_spec, rpc, address)
|
||||
c = ERC20(chain_spec)
|
||||
o = c.balance_of(address, holder_address, sender_address=caller_address)
|
||||
r = rpc.do(o)
|
||||
@@ -376,15 +371,13 @@ def cache_transfer_data(
|
||||
tx = unpack(tx_signed_raw_bytes, chain_spec)
|
||||
|
||||
tx_data = ERC20.parse_transfer_request(tx['data'])
|
||||
sender_address = tx_normalize.wallet_address(tx['from'])
|
||||
recipient_address = tx_normalize.wallet_address(tx_data[0])
|
||||
recipient_address = tx_data[0]
|
||||
token_value = tx_data[1]
|
||||
|
||||
|
||||
session = SessionBase.create_session()
|
||||
tx_dict = {
|
||||
'hash': tx_hash_hex,
|
||||
'from': sender_address,
|
||||
'from': tx['from'],
|
||||
'to': recipient_address,
|
||||
'source_token': tx['to'],
|
||||
'destination_token': tx['to'],
|
||||
@@ -455,14 +448,13 @@ def cache_approve_data(
|
||||
tx = unpack(tx_signed_raw_bytes, chain_spec)
|
||||
|
||||
tx_data = ERC20.parse_approve_request(tx['data'])
|
||||
sender_address = tx_normalize.wallet_address(tx['from'])
|
||||
recipient_address = tx_normalize.wallet_address(tx_data[0])
|
||||
recipient_address = tx_data[0]
|
||||
token_value = tx_data[1]
|
||||
|
||||
session = SessionBase.create_session()
|
||||
tx_dict = {
|
||||
'hash': tx_hash_hex,
|
||||
'from': sender_address,
|
||||
'from': tx['from'],
|
||||
'to': recipient_address,
|
||||
'source_token': tx['to'],
|
||||
'destination_token': tx['to'],
|
||||
|
||||
@@ -9,11 +9,7 @@ from hexathon import (
|
||||
)
|
||||
#from chainlib.eth.constant import ZERO_ADDRESS
|
||||
from chainlib.chain import ChainSpec
|
||||
from chainlib.eth.address import (
|
||||
is_checksum_address,
|
||||
to_checksum_address,
|
||||
is_address
|
||||
)
|
||||
from chainlib.eth.address import is_checksum_address
|
||||
from chainlib.connection import RPCConnection
|
||||
from chainqueue.db.enum import StatusBits
|
||||
from chainqueue.sql.tx import cache_tx_dict
|
||||
@@ -78,6 +74,7 @@ class MaxGasOracle:
|
||||
return MAXIMUM_FEE_UNITS
|
||||
|
||||
|
||||
#def create_check_gas_task(tx_signed_raws_hex, chain_spec, holder_address, gas=None, tx_hashes_hex=None, queue=None):
|
||||
def create_check_gas_task(tx_signed_raws_hex, chain_spec, holder_address, gas=None, tx_hashes_hex=None, queue=None):
|
||||
"""Creates a celery task signature for a check_gas task that adds the task to the outgoing queue to be processed by the dispatcher.
|
||||
|
||||
@@ -182,9 +179,8 @@ def check_gas(self, tx_hashes_hex, chain_spec_dict, txs_hex=[], address=None, ga
|
||||
:return: Signed raw transaction data list
|
||||
:rtype: param txs, unchanged
|
||||
"""
|
||||
rpc_format_address = None
|
||||
if address != None:
|
||||
if not is_address(address):
|
||||
if not is_checksum_address(address):
|
||||
raise ValueError('invalid address {}'.format(address))
|
||||
address = tx_normalize.wallet_address(address)
|
||||
address = add_0x(address)
|
||||
@@ -199,6 +195,7 @@ def check_gas(self, tx_hashes_hex, chain_spec_dict, txs_hex=[], address=None, ga
|
||||
txs.append(tx)
|
||||
|
||||
chain_spec = ChainSpec.from_dict(chain_spec_dict)
|
||||
logg.debug('txs {} tx_hashes {}'.format(txs, tx_hashes))
|
||||
|
||||
addresspass = None
|
||||
if len(txs) == 0:
|
||||
@@ -214,15 +211,13 @@ def check_gas(self, tx_hashes_hex, chain_spec_dict, txs_hex=[], address=None, ga
|
||||
raise ValueError('txs passed to check gas must all have same sender; had {} got {}'.format(address, tx['from']))
|
||||
addresspass.append(address)
|
||||
|
||||
rpc_format_address = add_0x(to_checksum_address(address))
|
||||
|
||||
queue = self.request.delivery_info.get('routing_key')
|
||||
|
||||
conn = RPCConnection.connect(chain_spec)
|
||||
|
||||
gas_balance = 0
|
||||
try:
|
||||
o = balance(rpc_format_address)
|
||||
o = balance(address)
|
||||
r = conn.do(o)
|
||||
conn.disconnect()
|
||||
gas_balance = abi_decode_single(ABIContractType.UINT256, r)
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
from chainlib.eth.constant import ZERO_ADDRESS
|
||||
from chainlib.status import Status as TxStatus
|
||||
from cic_eth_registry.erc20 import ERC20Token
|
||||
from hexathon import add_0x
|
||||
|
||||
# local impor:ts
|
||||
# local imports
|
||||
from cic_eth.ext.address import translate_address
|
||||
|
||||
|
||||
@@ -45,8 +44,8 @@ class ExtendedTx:
|
||||
destination = source
|
||||
if destination_value == None:
|
||||
destination_value = source_value
|
||||
st = ERC20Token(self.chain_spec, self.rpc, add_0x(source))
|
||||
dt = ERC20Token(self.chain_spec, self.rpc, add_0x(destination))
|
||||
st = ERC20Token(self.chain_spec, self.rpc, source)
|
||||
dt = ERC20Token(self.chain_spec, self.rpc, destination)
|
||||
self.source_token = source
|
||||
self.source_token_symbol = st.symbol
|
||||
self.source_token_name = st.name
|
||||
|
||||
@@ -3,12 +3,11 @@ import logging
|
||||
|
||||
# external imports
|
||||
import celery
|
||||
from chainlib.eth.address import is_checksum_address, is_address, strip_0x
|
||||
from chainlib.eth.address import is_checksum_address
|
||||
|
||||
# local imports
|
||||
from cic_eth.db.models.role import AccountRole
|
||||
from cic_eth.db.models.base import SessionBase
|
||||
from cic_eth.encode import tx_normalize
|
||||
from cic_eth.task import CriticalSQLAlchemyTask
|
||||
from cic_eth.db.models.nonce import (
|
||||
Nonce,
|
||||
@@ -43,8 +42,7 @@ class CustodialTaskNonceOracle():
|
||||
:returns: Nonce
|
||||
:rtype: number
|
||||
"""
|
||||
address = tx_normalize.wallet_address(self.address)
|
||||
r = NonceReservation.release(address, self.uuid, session=self.session)
|
||||
r = NonceReservation.release(self.address, self.uuid, session=self.session)
|
||||
return r[1]
|
||||
|
||||
|
||||
@@ -60,18 +58,17 @@ def reserve_nonce(self, chained_input, chain_spec_dict, signer_address=None):
|
||||
address = chained_input
|
||||
logg.debug('non-explicit address for reserve nonce, using arg head {}'.format(chained_input))
|
||||
else:
|
||||
if is_address(signer_address):
|
||||
if is_checksum_address(signer_address):
|
||||
address = signer_address
|
||||
logg.debug('explicit address for reserve nonce {}'.format(signer_address))
|
||||
else:
|
||||
address = AccountRole.get_address(signer_address, session=session)
|
||||
logg.debug('role for reserve nonce {} -> {}'.format(signer_address, address))
|
||||
|
||||
if not is_address(address):
|
||||
if not is_checksum_address(address):
|
||||
raise ValueError('invalid result when resolving address for nonce {}'.format(address))
|
||||
|
||||
root_id = self.request.root_id
|
||||
address = tx_normalize.wallet_address(address)
|
||||
r = NonceReservation.next(address, root_id, session=session)
|
||||
logg.debug('nonce {} reserved for address {} task {}'.format(r[1], address, r[0]))
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ from potaahto.symbols import snake_and_camel
|
||||
from cic_eth.queue.time import tx_times
|
||||
from cic_eth.task import BaseTask
|
||||
from cic_eth.db.models.base import SessionBase
|
||||
from cic_eth.encode import tx_normalize
|
||||
|
||||
celery_app = celery.current_app
|
||||
logg = logging.getLogger()
|
||||
@@ -135,7 +134,7 @@ def list_tx_by_bloom(self, bloomspec, address, chain_spec_dict):
|
||||
tx_address = transfer_data[0]
|
||||
tx_token_value = transfer_data[1]
|
||||
|
||||
if tx_normalize.wallet_address(address) == tx_normalize.wallet_address(tx_address):
|
||||
if address == tx_address:
|
||||
status = StatusEnum.SENT
|
||||
try:
|
||||
o = receipt(tx['hash'])
|
||||
@@ -153,8 +152,8 @@ def list_tx_by_bloom(self, bloomspec, address, chain_spec_dict):
|
||||
times = tx_times(tx['hash'], chain_spec)
|
||||
tx_r = {
|
||||
'hash': tx['hash'],
|
||||
'sender': tx_normalize.wallet_address(tx['from']),
|
||||
'recipient': tx_normalize.wallet_address(tx_address),
|
||||
'sender': tx['from'],
|
||||
'recipient': tx_address,
|
||||
'source_value': tx_token_value,
|
||||
'destination_value': tx_token_value,
|
||||
'source_token': tx['to'],
|
||||
@@ -165,12 +164,12 @@ def list_tx_by_bloom(self, bloomspec, address, chain_spec_dict):
|
||||
tx_r['date_created'] = times['queue']
|
||||
else:
|
||||
tx_r['date_created'] = times['network']
|
||||
txs[strip_0x(tx['hash'])] = tx_r
|
||||
txs[tx['hash']] = tx_r
|
||||
break
|
||||
|
||||
return txs
|
||||
|
||||
|
||||
|
||||
# TODO: Surely it must be possible to optimize this
|
||||
# TODO: DRY this with callback filter in cic_eth/runnable/manager
|
||||
# TODO: Remove redundant fields from end representation (timestamp, tx_hash)
|
||||
@@ -231,8 +230,6 @@ def tx_collate(self, tx_batches, chain_spec_dict, offset, limit, newest_first=Tr
|
||||
except UnknownContractError:
|
||||
logg.error('verify failed on tx {}, skipping'.format(tx['hash']))
|
||||
continue
|
||||
tx['recipient'] = tx_normalize.wallet_address(tx['recipient'])
|
||||
tx['sender'] = tx_normalize.wallet_address(tx['sender'])
|
||||
txs.append(tx)
|
||||
|
||||
return txs
|
||||
|
||||
@@ -58,7 +58,6 @@ def get_tx_local(chain_spec, tx_hash, session=None):
|
||||
|
||||
@celery_app.task(base=CriticalSQLAlchemyTask)
|
||||
def get_account_tx(chain_spec_dict, address, as_sender=True, as_recipient=True, counterpart=None):
|
||||
address = tx_normalize.wallet_address(address)
|
||||
chain_spec = ChainSpec.from_dict(chain_spec_dict)
|
||||
return get_account_tx_local(chain_spec, address, as_sender=as_sender, as_recipient=as_recipient, counterpart=counterpart)
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ from erc20_faucet import Faucet
|
||||
# local imports
|
||||
from .base import SyncFilter
|
||||
from cic_eth.eth.meta import ExtendedTx
|
||||
from cic_eth.encode import tx_normalize
|
||||
|
||||
logg = logging.getLogger().getChild(__name__)
|
||||
|
||||
@@ -43,9 +42,9 @@ class CallbackFilter(SyncFilter):
|
||||
return (None, None)
|
||||
r = ERC20.parse_transfer_request(tx.payload)
|
||||
transfer_data = {}
|
||||
transfer_data['to'] = tx_normalize.wallet_address(r[0])
|
||||
transfer_data['to'] = r[0]
|
||||
transfer_data['value'] = r[1]
|
||||
transfer_data['from'] = tx_normalize.wallet_address(tx.outputs[0])
|
||||
transfer_data['from'] = tx.outputs[0]
|
||||
transfer_data['token_address'] = tx.inputs[0]
|
||||
return ('transfer', transfer_data)
|
||||
|
||||
@@ -55,8 +54,8 @@ class CallbackFilter(SyncFilter):
|
||||
return (None, None)
|
||||
r = ERC20.parse_transfer_from_request(tx.payload)
|
||||
transfer_data = {}
|
||||
transfer_data['from'] = tx_normalize.wallet_address(r[0])
|
||||
transfer_data['to'] = tx_normalize.wallet_address(r[1])
|
||||
transfer_data['from'] = r[0]
|
||||
transfer_data['to'] = r[1]
|
||||
transfer_data['value'] = r[2]
|
||||
transfer_data['token_address'] = tx.inputs[0]
|
||||
return ('transferfrom', transfer_data)
|
||||
@@ -67,9 +66,9 @@ class CallbackFilter(SyncFilter):
|
||||
return (None, None)
|
||||
r = Faucet.parse_give_to_request(tx.payload)
|
||||
transfer_data = {}
|
||||
transfer_data['to'] = tx_normalize.wallet_address(r[0])
|
||||
transfer_data['to'] = r[0]
|
||||
transfer_data['value'] = tx.value
|
||||
transfer_data['from'] = tx_normalize.wallet_address(tx.outputs[0])
|
||||
transfer_data['from'] = tx.outputs[0]
|
||||
#transfer_data['token_address'] = tx.inputs[0]
|
||||
faucet_contract = tx.inputs[0]
|
||||
|
||||
|
||||
@@ -12,8 +12,7 @@ from hexathon import (
|
||||
# local imports
|
||||
from .base import SyncFilter
|
||||
|
||||
#logg = logging.getLogger(__name__)
|
||||
logg = logging.getLogger()
|
||||
logg = logging.getLogger(__name__)
|
||||
|
||||
account_registry_add_log_hash = '0x9cc987676e7d63379f176ea50df0ae8d2d9d1141d1231d4ce15b5965f73c9430'
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ from cic_eth_registry import CICRegistry
|
||||
from erc20_transfer_authorization import TransferAuthorization
|
||||
|
||||
# local imports
|
||||
from cic_eth.encode import tx_normalize
|
||||
from .base import SyncFilter
|
||||
|
||||
|
||||
@@ -53,9 +52,9 @@ class TransferAuthFilter(SyncFilter):
|
||||
|
||||
r = TransferAuthorization.parse_create_request_request(tx.payload)
|
||||
|
||||
sender = tx_normalize.wallet_address(r[0])
|
||||
recipient = tx_normalize.wallet_address(r[1])
|
||||
token = tx_normalize.executable_address(r[2])
|
||||
sender = r[0]
|
||||
recipient = r[1]
|
||||
token = r[2]
|
||||
value = r[3]
|
||||
|
||||
token_data = {
|
||||
|
||||
@@ -206,7 +206,7 @@ def main():
|
||||
|
||||
BaseTask.default_token_symbol = config.get('CIC_DEFAULT_TOKEN_SYMBOL')
|
||||
BaseTask.default_token_address = registry.by_name(BaseTask.default_token_symbol)
|
||||
default_token = ERC20Token(chain_spec, conn, add_0x(BaseTask.default_token_address))
|
||||
default_token = ERC20Token(chain_spec, conn, BaseTask.default_token_address)
|
||||
default_token.load(conn)
|
||||
BaseTask.default_token_decimals = default_token.decimals
|
||||
BaseTask.default_token_name = default_token.name
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
echo "fetching migration variables from $CONTRACT_MIGRATION_URL"
|
||||
for s in $(curl -s "$CONTRACT_MIGRATION_URL/readyz" | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]" ); do
|
||||
echo "exporting $s"
|
||||
export $s
|
||||
done
|
||||
@@ -1,17 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
. ./db.sh
|
||||
|
||||
WAIT_FOR_TIMEOUT=${WAIT_FOR_TIMEOUT:-600}
|
||||
|
||||
if [[ "$CONTRACT_MIGRATION_URL" ]]; then
|
||||
echo "waiting for $CONTRACT_MIGRATION_URL/readyz"
|
||||
./wait-for-it.sh $CONTRACT_MIGRATION_URL -t $WAIT_FOR_TIMEOUT
|
||||
source ./get_readyz.sh # set env vars form endpoint
|
||||
/usr/local/bin/cic-eth-dispatcherd $@
|
||||
else
|
||||
/usr/local/bin/cic-eth-dispatcherd $@
|
||||
fi
|
||||
/usr/local/bin/cic-eth-dispatcherd $@
|
||||
|
||||
@@ -1,18 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
. ./db.sh
|
||||
|
||||
WAIT_FOR_TIMEOUT=${WAIT_FOR_TIMEOUT:-600}
|
||||
|
||||
|
||||
if [[ "$CONTRACT_MIGRATION_URL" ]]; then
|
||||
echo "waiting for $CONTRACT_MIGRATION_URL/readyz"
|
||||
./wait-for-it.sh $CONTRACT_MIGRATION_URL -t $WAIT_FOR_TIMEOUT
|
||||
source ./get_readyz.sh # set env vars form endpoint
|
||||
/usr/local/bin/cic-eth-retrierd $@
|
||||
else
|
||||
/usr/local/bin/cic-eth-retrierd $@
|
||||
fi
|
||||
/usr/local/bin/cic-eth-retrierd $@
|
||||
|
||||
@@ -1,18 +1,31 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
. ./db.sh
|
||||
|
||||
WAIT_FOR_TIMEOUT=${WAIT_FOR_TIMEOUT:-600}
|
||||
# set CONFINI_ENV_PREFIX to override the env prefix to override env vars
|
||||
|
||||
#echo "!!! starting signer"
|
||||
#python /usr/local/bin/crypto-dev-daemon -c /usr/local/etc/crypto-dev-signer -vv 2> /tmp/signer.log &
|
||||
|
||||
if [[ "$CONTRACT_MIGRATION_URL" ]]; then
|
||||
echo "waiting for $CONTRACT_MIGRATION_URL/readyz"
|
||||
./wait-for-it.sh $CONTRACT_MIGRATION_URL -t $WAIT_FOR_TIMEOUT
|
||||
source ./get_readyz.sh # set env vars form endpoint
|
||||
/usr/local/bin/cic-eth-taskerd $@
|
||||
else
|
||||
/usr/local/bin/cic-eth-taskerd $@
|
||||
fi
|
||||
echo "!!! starting taskerd"
|
||||
/usr/local/bin/cic-eth-taskerd $@
|
||||
|
||||
# thanks! https://docs.docker.com/config/containers/multi-service_container/
|
||||
#sleep 1;
|
||||
#echo "!!! entering monitor loop"
|
||||
#while true; do
|
||||
# ps aux | grep crypto-dev-daemon | grep -q -v grep
|
||||
# PROCESS_1_STATUS=$?
|
||||
# ps aux | grep cic-eth-tasker |grep -q -v grep
|
||||
# PROCESS_2_STATUS=$?
|
||||
# # If the greps above find anything, they exit with 0 status
|
||||
# # If they are not both 0, then something is wrong
|
||||
# if [ $PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0 ]; then
|
||||
# echo "One of the processes has already exited."
|
||||
# exit 1
|
||||
# fi
|
||||
# sleep 15;
|
||||
#done
|
||||
#
|
||||
set +e
|
||||
|
||||
@@ -1,17 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
. ./db.sh
|
||||
|
||||
WAIT_FOR_TIMEOUT=${WAIT_FOR_TIMEOUT:-600}
|
||||
|
||||
if [[ "$CONTRACT_MIGRATION_URL" ]]; then
|
||||
echo "waiting for $CONTRACT_MIGRATION_URL/readyz"
|
||||
./wait-for-it.sh $CONTRACT_MIGRATION_URL -t $WAIT_FOR_TIMEOUT
|
||||
source ./get_readyz.sh # set env vars form endpoint
|
||||
/usr/local/bin/cic-eth-trackerd $@
|
||||
else
|
||||
/usr/local/bin/cic-eth-trackerd $@
|
||||
fi
|
||||
/usr/local/bin/cic-eth-trackerd $@
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Use this script to test if a given TCP host/port are available
|
||||
|
||||
WAITFORIT_cmdname=${0##*/}
|
||||
|
||||
echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
|
||||
|
||||
usage()
|
||||
{
|
||||
cat << USAGE >&2
|
||||
Usage:
|
||||
$WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
|
||||
-h HOST | --host=HOST Host or IP under test
|
||||
-p PORT | --port=PORT TCP port under test
|
||||
Alternatively, you specify the host and port as host:port
|
||||
-s | --strict Only execute subcommand if the test succeeds
|
||||
-q | --quiet Don't output any status messages
|
||||
-t TIMEOUT | --timeout=TIMEOUT
|
||||
Timeout in seconds, zero for no timeout
|
||||
-- COMMAND ARGS Execute command with args after the test finishes
|
||||
USAGE
|
||||
exit 1
|
||||
}
|
||||
|
||||
wait_for()
|
||||
{
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
else
|
||||
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
|
||||
fi
|
||||
WAITFORIT_start_ts=$(date +%s)
|
||||
while :
|
||||
do
|
||||
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
|
||||
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
|
||||
WAITFORIT_result=$?
|
||||
else
|
||||
(echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
|
||||
WAITFORIT_result=$?
|
||||
fi
|
||||
if [[ $WAITFORIT_result -eq 0 ]]; then
|
||||
WAITFORIT_end_ts=$(date +%s)
|
||||
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
return $WAITFORIT_result
|
||||
}
|
||||
|
||||
wait_for_wrapper()
|
||||
{
|
||||
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
|
||||
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
else
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
fi
|
||||
WAITFORIT_PID=$!
|
||||
trap "kill -INT -$WAITFORIT_PID" INT
|
||||
wait $WAITFORIT_PID
|
||||
WAITFORIT_RESULT=$?
|
||||
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
fi
|
||||
return $WAITFORIT_RESULT
|
||||
}
|
||||
|
||||
# process arguments
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case "$1" in
|
||||
*:* )
|
||||
WAITFORIT_hostport=(${1//:/ })
|
||||
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
|
||||
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
|
||||
shift 1
|
||||
;;
|
||||
--child)
|
||||
WAITFORIT_CHILD=1
|
||||
shift 1
|
||||
;;
|
||||
-q | --quiet)
|
||||
WAITFORIT_QUIET=1
|
||||
shift 1
|
||||
;;
|
||||
-s | --strict)
|
||||
WAITFORIT_STRICT=1
|
||||
shift 1
|
||||
;;
|
||||
-h)
|
||||
WAITFORIT_HOST="$2"
|
||||
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--host=*)
|
||||
WAITFORIT_HOST="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-p)
|
||||
WAITFORIT_PORT="$2"
|
||||
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--port=*)
|
||||
WAITFORIT_PORT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-t)
|
||||
WAITFORIT_TIMEOUT="$2"
|
||||
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--timeout=*)
|
||||
WAITFORIT_TIMEOUT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
WAITFORIT_CLI=("$@")
|
||||
break
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echoerr "Unknown argument: $1"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
|
||||
echoerr "Error: you need to provide a host and port to test."
|
||||
usage
|
||||
fi
|
||||
|
||||
WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
|
||||
WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
|
||||
WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
|
||||
WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
|
||||
|
||||
# Check to see if timeout is from busybox?
|
||||
WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
|
||||
WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
|
||||
|
||||
WAITFORIT_BUSYTIMEFLAG=""
|
||||
if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
|
||||
WAITFORIT_ISBUSY=1
|
||||
# Check if busybox timeout uses -t flag
|
||||
# (recent Alpine versions don't support -t anymore)
|
||||
if timeout &>/dev/stdout | grep -q -e '-t '; then
|
||||
WAITFORIT_BUSYTIMEFLAG="-t"
|
||||
fi
|
||||
else
|
||||
WAITFORIT_ISBUSY=0
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CHILD -gt 0 ]]; then
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
exit $WAITFORIT_RESULT
|
||||
else
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
wait_for_wrapper
|
||||
WAITFORIT_RESULT=$?
|
||||
else
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CLI != "" ]]; then
|
||||
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
exec "${WAITFORIT_CLI[@]}"
|
||||
else
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
@@ -1,4 +1,3 @@
|
||||
celery==4.4.7
|
||||
chainlib-eth>=0.0.9rc2,<0.1.0
|
||||
chainlib-eth>=0.0.9a14,<0.1.0
|
||||
semver==2.13.0
|
||||
crypto-dev-signer>=0.4.15rc2,<0.5.0
|
||||
|
||||
@@ -8,7 +8,7 @@ pycryptodome==3.10.1
|
||||
liveness~=0.0.1a7
|
||||
eth-address-index>=0.2.3a4,<0.3.0
|
||||
eth-accounts-index>=0.1.2a3,<0.2.0
|
||||
cic-eth-registry>=0.6.1a3,<0.7.0
|
||||
cic-eth-registry>=0.6.1a2,<0.7.0
|
||||
erc20-faucet>=0.3.2a2,<0.4.0
|
||||
erc20-transfer-authorization>=0.3.5a2,<0.4.0
|
||||
sarafu-faucet>=0.0.7a2,<0.1.0
|
||||
|
||||
@@ -18,10 +18,7 @@ from eth_erc20 import ERC20
|
||||
from sarafu_faucet import MinterFaucet
|
||||
from eth_accounts_index.registry import AccountRegistry
|
||||
from potaahto.symbols import snake_and_camel
|
||||
from hexathon import (
|
||||
add_0x,
|
||||
strip_0x,
|
||||
)
|
||||
from hexathon import add_0x
|
||||
|
||||
# local imports
|
||||
from cic_eth.runnable.daemons.filters.callback import CallbackFilter
|
||||
@@ -163,7 +160,7 @@ def test_faucet_gift_to_tx(
|
||||
assert transfer_data['token_address'] == foo_token
|
||||
|
||||
|
||||
def test_callback_filter_filter(
|
||||
def test_callback_filter(
|
||||
default_chain_spec,
|
||||
init_database,
|
||||
eth_rpc,
|
||||
@@ -216,7 +213,6 @@ def test_callback_filter_filter(
|
||||
|
||||
def call_back(self, transfer_type, result):
|
||||
self.results[transfer_type] = result
|
||||
logg.debug('result {}'.format(result))
|
||||
return self
|
||||
|
||||
mock = CallbackMock()
|
||||
@@ -225,4 +221,4 @@ def test_callback_filter_filter(
|
||||
fltr.filter(eth_rpc, mockblock, tx, init_database)
|
||||
|
||||
assert mock.results.get('transfer') != None
|
||||
assert mock.results['transfer']['destination_token'] == strip_0x(foo_token)
|
||||
assert mock.results['transfer']['destination_token'] == foo_token
|
||||
|
||||
@@ -17,9 +17,6 @@ from chainlib.eth.block import (
|
||||
block_by_number,
|
||||
Block,
|
||||
)
|
||||
from chainlib.eth.address import (
|
||||
to_checksum_address,
|
||||
)
|
||||
from erc20_faucet import Faucet
|
||||
from hexathon import (
|
||||
strip_0x,
|
||||
@@ -28,6 +25,7 @@ from hexathon import (
|
||||
|
||||
# local imports
|
||||
from cic_eth.runnable.daemons.filters.register import RegistrationFilter
|
||||
from cic_eth.encode import tx_normalize
|
||||
from cic_eth.queue.query import get_account_tx_local
|
||||
|
||||
logg = logging.getLogger()
|
||||
@@ -72,13 +70,12 @@ def test_register_filter(
|
||||
tx = Tx(tx_src, block=block, rcpt=rcpt)
|
||||
tx.apply_receipt(rcpt)
|
||||
|
||||
fltr = RegistrationFilter(default_chain_spec, to_checksum_address(os.urandom(20).hex()), queue=None)
|
||||
fltr = RegistrationFilter(default_chain_spec, add_0x(os.urandom(20).hex()), queue=None)
|
||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
||||
assert t == None
|
||||
|
||||
fltr = RegistrationFilter(default_chain_spec, to_checksum_address(account_registry), queue=None)
|
||||
fltr = RegistrationFilter(default_chain_spec, account_registry, queue=None)
|
||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
||||
logg.debug('t {}'.format(t))
|
||||
|
||||
t.get_leaf()
|
||||
assert t.successful()
|
||||
@@ -92,4 +89,4 @@ def test_register_filter(
|
||||
gift_tx = unpack(tx_raw_signed_bytes, default_chain_spec)
|
||||
|
||||
gift = Faucet.parse_give_to_request(gift_tx['data'])
|
||||
assert add_0x(gift[0]) == agent_roles['ALICE']
|
||||
assert gift[0] == agent_roles['ALICE']
|
||||
|
||||
@@ -19,7 +19,6 @@ from chainqueue.sql.query import get_account_tx
|
||||
|
||||
# local imports
|
||||
from cic_eth.runnable.daemons.filters.transferauth import TransferAuthFilter
|
||||
from cic_eth.encode import tx_normalize
|
||||
|
||||
|
||||
def test_filter_transferauth(
|
||||
@@ -67,8 +66,7 @@ def test_filter_transferauth(
|
||||
t.get_leaf()
|
||||
assert t.successful()
|
||||
|
||||
#approve_txs = get_account_tx(default_chain_spec.asdict(), agent_roles['ALICE'], as_sender=True, session=init_database)
|
||||
approve_txs = get_account_tx(default_chain_spec.asdict(), tx_normalize.wallet_address(agent_roles['ALICE']), as_sender=True, session=init_database)
|
||||
approve_txs = get_account_tx(default_chain_spec.asdict(), agent_roles['ALICE'], as_sender=True, session=init_database)
|
||||
ks = list(approve_txs.keys())
|
||||
assert len(ks) == 1
|
||||
|
||||
@@ -78,4 +76,4 @@ def test_filter_transferauth(
|
||||
|
||||
c = ERC20(default_chain_spec)
|
||||
approve = c.parse_approve_request(approve_tx['data'])
|
||||
assert approve[0] == strip_0x(agent_roles['BOB'])
|
||||
assert approve[0] == agent_roles['BOB']
|
||||
|
||||
@@ -110,8 +110,8 @@ def test_tag_account(
|
||||
t = api.tag_account('bar', agent_roles['CAROL'], default_chain_spec)
|
||||
t.get()
|
||||
|
||||
assert AccountRole.get_address('foo', init_database) == tx_normalize.wallet_address(agent_roles['ALICE'])
|
||||
assert AccountRole.get_address('bar', init_database) == tx_normalize.wallet_address(agent_roles['CAROL'])
|
||||
assert AccountRole.get_address('foo', init_database) == agent_roles['ALICE']
|
||||
assert AccountRole.get_address('bar', init_database) == agent_roles['CAROL']
|
||||
|
||||
|
||||
def test_tx(
|
||||
|
||||
@@ -10,7 +10,6 @@ from cic_eth_registry.erc20 import ERC20Token
|
||||
from chainlib.chain import ChainSpec
|
||||
from eth_accounts_index import AccountsIndex
|
||||
from chainlib.eth.tx import (
|
||||
receipt,
|
||||
transaction,
|
||||
)
|
||||
from chainqueue.sql.state import (
|
||||
@@ -30,7 +29,6 @@ def test_account_api(
|
||||
init_database,
|
||||
init_eth_rpc,
|
||||
account_registry,
|
||||
cic_registry,
|
||||
custodial_roles,
|
||||
celery_session_worker,
|
||||
):
|
||||
@@ -51,7 +49,6 @@ def test_account_api_register(
|
||||
eth_rpc,
|
||||
celery_session_worker,
|
||||
):
|
||||
|
||||
api = Api(str(default_chain_spec), callback_param='accounts', callback_task='cic_eth.callbacks.noop.noop', queue=None)
|
||||
t = api.create_account('')
|
||||
register_tx_hash = t.get_leaf()
|
||||
@@ -72,18 +69,12 @@ def test_account_api_register(
|
||||
r = t.get_leaf()
|
||||
assert t.successful()
|
||||
|
||||
o = receipt(register_tx_hash)
|
||||
r = eth_rpc.do(o)
|
||||
assert r['status'] == 1
|
||||
|
||||
o = transaction(register_tx_hash)
|
||||
tx_src = eth_rpc.do(o)
|
||||
|
||||
c = AccountsIndex(default_chain_spec)
|
||||
address = c.parse_add_request(tx_src['data'])
|
||||
logg.debug('address {} '.format(address))
|
||||
o = c.have(account_registry, address[0], sender_address=custodial_roles['CONTRACT_DEPLOYER'])
|
||||
logg.debug('o {}'.format(o))
|
||||
r = eth_rpc.do(o)
|
||||
assert c.parse_have(r)
|
||||
|
||||
|
||||
@@ -3,22 +3,18 @@ import os
|
||||
import logging
|
||||
|
||||
# external imports
|
||||
import pytest
|
||||
from chainlib.eth.address import to_checksum_address
|
||||
from hexathon import add_0x
|
||||
|
||||
# local imports
|
||||
from cic_eth.api.api_task import Api
|
||||
|
||||
logg = logging.getLogger()
|
||||
|
||||
|
||||
def test_balance_simple_api(
|
||||
default_chain_spec,
|
||||
init_database,
|
||||
cic_registry,
|
||||
foo_token,
|
||||
register_lookups,
|
||||
register_tokens,
|
||||
api,
|
||||
celery_session_worker,
|
||||
@@ -26,7 +22,7 @@ def test_balance_simple_api(
|
||||
|
||||
chain_str = str(default_chain_spec)
|
||||
|
||||
a = add_0x(to_checksum_address(os.urandom(20).hex()))
|
||||
a = to_checksum_address('0x' + os.urandom(20).hex())
|
||||
t = api.balance(a, 'FOO', include_pending=False)
|
||||
r = t.get_leaf()
|
||||
assert t.successful()
|
||||
@@ -40,7 +36,6 @@ def test_balance_complex_api(
|
||||
init_database,
|
||||
cic_registry,
|
||||
foo_token,
|
||||
register_lookups,
|
||||
register_tokens,
|
||||
api,
|
||||
celery_session_worker,
|
||||
@@ -48,7 +43,7 @@ def test_balance_complex_api(
|
||||
|
||||
chain_str = str(default_chain_spec)
|
||||
|
||||
a = add_0x(to_checksum_address(os.urandom(20).hex()))
|
||||
a = to_checksum_address('0x' + os.urandom(20).hex())
|
||||
t = api.balance(a, 'FOO', include_pending=True)
|
||||
r = t.get_leaf()
|
||||
assert t.successful()
|
||||
|
||||
@@ -6,7 +6,6 @@ import pytest
|
||||
from chainlib.eth.nonce import RPCNonceOracle
|
||||
from eth_erc20 import ERC20
|
||||
from chainlib.eth.tx import receipt
|
||||
from hexathon import strip_0x
|
||||
|
||||
# local imports
|
||||
from cic_eth.api.api_task import Api
|
||||
@@ -24,6 +23,7 @@ from cic_eth.pytest.mock.filter import (
|
||||
logg = logging.getLogger()
|
||||
|
||||
|
||||
@pytest.mark.xfail()
|
||||
def test_list_tx(
|
||||
default_chain_spec,
|
||||
init_database,
|
||||
@@ -34,10 +34,8 @@ def test_list_tx(
|
||||
agent_roles,
|
||||
foo_token,
|
||||
register_tokens,
|
||||
register_lookups,
|
||||
init_eth_tester,
|
||||
celery_session_worker,
|
||||
init_celery_tasks,
|
||||
):
|
||||
|
||||
tx_hashes = []
|
||||
@@ -65,16 +63,13 @@ def test_list_tx(
|
||||
o = receipt(tx_hash_hex)
|
||||
r = eth_rpc.do(o)
|
||||
assert r['status'] == 1
|
||||
|
||||
a = r['block_number']
|
||||
ab = a.to_bytes(4, 'big')
|
||||
block_filter.add(ab)
|
||||
block_filter.add(a.to_bytes(4, 'big'))
|
||||
|
||||
bb = r['transaction_index'].to_bytes(4, 'big')
|
||||
cb = ab + bb
|
||||
tx_filter.add(cb)
|
||||
a = r['block_number'] + r['transaction_index']
|
||||
tx_filter.add(a.to_bytes(4, 'big'))
|
||||
|
||||
tx_hashes.append(strip_0x(tx_hash_hex))
|
||||
tx_hashes.append(tx_hash_hex)
|
||||
|
||||
# external tx two
|
||||
Nonce.next(agent_roles['ALICE'], 'foo', session=init_database)
|
||||
@@ -88,29 +83,26 @@ def test_list_tx(
|
||||
o = receipt(tx_hash_hex)
|
||||
r = eth_rpc.do(o)
|
||||
assert r['status'] == 1
|
||||
|
||||
a = r['block_number']
|
||||
ab = a.to_bytes(4, 'big')
|
||||
block_filter.add(ab)
|
||||
block_filter.add(a.to_bytes(4, 'big'))
|
||||
|
||||
bb = r['transaction_index'].to_bytes(4, 'big')
|
||||
cb = ab + bb
|
||||
tx_filter.add(cb)
|
||||
a = r['block_number'] + r['transaction_index']
|
||||
tx_filter.add(a.to_bytes(4, 'big'))
|
||||
|
||||
tx_hashes.append(strip_0x(tx_hash_hex))
|
||||
tx_hashes.append(tx_hash_hex)
|
||||
|
||||
init_eth_tester.mine_blocks(28)
|
||||
|
||||
# custodial tx 1
|
||||
api = Api(str(default_chain_spec), queue=None)
|
||||
t = api.transfer(agent_roles['ALICE'], agent_roles['CAROL'], 64, 'FOO')
|
||||
t = api.transfer(agent_roles['ALICE'], agent_roles['CAROL'], 64, 'FOO') #, 'blinky')
|
||||
r = t.get_leaf()
|
||||
assert t.successful()
|
||||
tx_hashes.append(r)
|
||||
|
||||
# custodial tx 2
|
||||
api = Api(str(default_chain_spec), queue=None)
|
||||
t = api.transfer(agent_roles['ALICE'], agent_roles['DAVE'], 16, 'FOO')
|
||||
t = api.transfer(agent_roles['ALICE'], agent_roles['DAVE'], 16, 'FOO') #, 'blinky')
|
||||
r = t.get_leaf()
|
||||
assert t.successful()
|
||||
tx_hashes.append(r)
|
||||
@@ -125,8 +117,7 @@ def test_list_tx(
|
||||
assert len(r) == 3
|
||||
logg.debug('rrrr {}'.format(r))
|
||||
|
||||
logg.debug('testing against hashes {}'.format(tx_hashes))
|
||||
for tx in r:
|
||||
logg.debug('have tx {}'.format(tx))
|
||||
tx_hashes.remove(strip_0x(tx['hash']))
|
||||
tx_hashes.remove(tx['hash'])
|
||||
assert len(tx_hashes) == 1
|
||||
|
||||
@@ -10,7 +10,6 @@ from chainlib.eth.tx import (
|
||||
)
|
||||
from eth_erc20 import ERC20
|
||||
from chainlib.eth.nonce import RPCNonceOracle
|
||||
from hexathon import add_0x
|
||||
|
||||
# local imports
|
||||
from cic_eth.db.models.nonce import (
|
||||
@@ -92,5 +91,5 @@ def test_filter_process(
|
||||
|
||||
assert len(r) == 2
|
||||
for tx_hash in r.keys():
|
||||
tx_hashes.remove(add_0x(tx_hash))
|
||||
tx_hashes.remove(tx_hash)
|
||||
assert len(tx_hashes) == 0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
crypto-dev-signer>=0.4.15a7,<=0.4.15
|
||||
chainqueue>=0.0.5a1,<0.1.0
|
||||
cic-eth-registry>=0.6.1a3,<0.7.0
|
||||
cic-eth-registry>=0.6.1a2,<0.7.0
|
||||
redis==3.5.3
|
||||
hexathon~=0.0.1a8
|
||||
pycryptodome==3.10.1
|
||||
|
||||
@@ -101,7 +101,7 @@ def get_cached_available_balance(blockchain_address: str) -> float:
|
||||
:return: Operational balance of an account.
|
||||
:rtype: float
|
||||
"""
|
||||
identifier = bytes.fromhex(blockchain_address)
|
||||
identifier = bytes.fromhex(blockchain_address[2:])
|
||||
key = cache_data_key(identifier, salt=':cic.balances')
|
||||
cached_balances = get_cached_data(key=key)
|
||||
if cached_balances:
|
||||
|
||||
@@ -4,6 +4,7 @@ import logging
|
||||
from typing import Optional
|
||||
|
||||
# external imports
|
||||
from chainlib.hash import strip_0x
|
||||
from cic_types.models.person import Person
|
||||
|
||||
# local imports
|
||||
@@ -19,7 +20,7 @@ def get_cached_preferred_language(blockchain_address: str) -> Optional[str]:
|
||||
:return: Account's set preferred language | Fallback preferred language.
|
||||
:rtype: str
|
||||
"""
|
||||
identifier = bytes.fromhex(blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(blockchain_address))
|
||||
preferences_metadata_handler = PreferencesMetadata(identifier)
|
||||
cached_preferences_metadata = preferences_metadata_handler.get_cached_metadata()
|
||||
if cached_preferences_metadata:
|
||||
|
||||
@@ -86,7 +86,7 @@ def query_statement(blockchain_address: str, limit: int = 9):
|
||||
:param limit: Number of transactions to be returned.
|
||||
:type limit: int
|
||||
"""
|
||||
logg.debug(f'retrieving statement for address: {blockchain_address}')
|
||||
logg.debug(f'retrieving balance for address: {blockchain_address}')
|
||||
chain_str = Chain.spec.__str__()
|
||||
cic_eth_api = Api(
|
||||
chain_str=chain_str,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import json
|
||||
|
||||
# external imports
|
||||
from chainlib.hash import strip_0x
|
||||
from cic_eth.api import Api
|
||||
|
||||
# local imports
|
||||
@@ -100,7 +101,7 @@ class Account(SessionBase):
|
||||
session.add(self)
|
||||
session.flush()
|
||||
SessionBase.release_session(session=session)
|
||||
return 'Pin reset successful.'
|
||||
return f'Pin reset successful.'
|
||||
|
||||
def standard_metadata_id(self) -> str:
|
||||
"""This function creates an account's standard metadata identification information that contains an account owner's
|
||||
@@ -108,7 +109,7 @@ class Account(SessionBase):
|
||||
:return: Standard metadata identification information | e164 formatted phone number.
|
||||
:rtype: str
|
||||
"""
|
||||
identifier = bytes.fromhex(self.blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(self.blockchain_address))
|
||||
key = cache_data_key(identifier, ':cic.person')
|
||||
account_metadata = get_cached_data(key)
|
||||
if not account_metadata:
|
||||
|
||||
@@ -37,7 +37,7 @@ class MenuProcessor:
|
||||
def __init__(self, account: Account, display_key: str, menu_name: str, session: Session, ussd_session: dict):
|
||||
self.account = account
|
||||
self.display_key = display_key
|
||||
self.identifier = bytes.fromhex(self.account.blockchain_address)
|
||||
self.identifier = bytes.fromhex(self.account.blockchain_address[2:])
|
||||
self.menu_name = menu_name
|
||||
self.session = session
|
||||
self.ussd_session = ussd_session
|
||||
|
||||
@@ -5,6 +5,7 @@ from datetime import timedelta
|
||||
|
||||
# third-party imports
|
||||
import celery
|
||||
from chainlib.hash import strip_0x
|
||||
|
||||
# local imports
|
||||
from cic_ussd.account.balance import get_balances, calculate_available_balance
|
||||
@@ -54,7 +55,6 @@ def account_creation_callback(self, result: str, url: str, status_code: int):
|
||||
session.add(account)
|
||||
session.commit()
|
||||
session.close()
|
||||
logg.debug(f'recorded account with identifier: {result}')
|
||||
|
||||
queue = self.request.delivery_info.get('routing_key')
|
||||
s_phone_pointer = celery.signature(
|
||||
@@ -86,7 +86,7 @@ def balances_callback(result: list, param: str, status_code: int):
|
||||
raise ValueError(f'Unexpected status code: {status_code}.')
|
||||
|
||||
balances = result[0]
|
||||
identifier = bytes.fromhex(param)
|
||||
identifier = bytes.fromhex(strip_0x(param))
|
||||
key = cache_data_key(identifier, ':cic.balances')
|
||||
cache_data(key, json.dumps(balances))
|
||||
|
||||
@@ -113,10 +113,8 @@ def statement_callback(self, result, param: str, status_code: int):
|
||||
for transaction in statement_transactions:
|
||||
recipient_transaction, sender_transaction = transaction_actors(transaction)
|
||||
if recipient_transaction.get('blockchain_address') == param:
|
||||
recipient_transaction['alt_blockchain_address'] = sender_transaction.get('blockchain_address')
|
||||
generate(param, queue, recipient_transaction)
|
||||
if sender_transaction.get('blockchain_address') == param:
|
||||
sender_transaction['alt_blockchain_address'] = recipient_transaction.get('blockchain_address')
|
||||
generate(param, queue, sender_transaction)
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import logging
|
||||
|
||||
# third-party imports
|
||||
import celery
|
||||
from hexathon import strip_0x
|
||||
|
||||
# local imports
|
||||
from cic_ussd.metadata import CustomMetadata, PersonMetadata, PhonePointerMetadata, PreferencesMetadata
|
||||
@@ -20,7 +21,7 @@ def query_person_metadata(blockchain_address: str):
|
||||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
identifier = bytes.fromhex(blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(blockchain_address))
|
||||
person_metadata_client = PersonMetadata(identifier=identifier)
|
||||
person_metadata_client.query()
|
||||
|
||||
@@ -35,14 +36,14 @@ def create_person_metadata(blockchain_address: str, data: dict):
|
||||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
identifier = bytes.fromhex(blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(blockchain_address))
|
||||
person_metadata_client = PersonMetadata(identifier=identifier)
|
||||
person_metadata_client.create(data=data)
|
||||
|
||||
|
||||
@celery_app.task
|
||||
def edit_person_metadata(blockchain_address: str, data: dict):
|
||||
identifier = bytes.fromhex(blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(blockchain_address))
|
||||
person_metadata_client = PersonMetadata(identifier=identifier)
|
||||
person_metadata_client.edit(data=data)
|
||||
|
||||
@@ -50,21 +51,21 @@ def edit_person_metadata(blockchain_address: str, data: dict):
|
||||
@celery_app.task(bind=True, base=CriticalMetadataTask)
|
||||
def add_phone_pointer(self, blockchain_address: str, phone_number: str):
|
||||
identifier = phone_number.encode('utf-8')
|
||||
stripped_address = blockchain_address
|
||||
stripped_address = strip_0x(blockchain_address)
|
||||
phone_metadata_client = PhonePointerMetadata(identifier=identifier)
|
||||
phone_metadata_client.create(data=stripped_address)
|
||||
|
||||
|
||||
@celery_app.task()
|
||||
def add_custom_metadata(blockchain_address: str, data: dict):
|
||||
identifier = bytes.fromhex(blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(blockchain_address))
|
||||
custom_metadata_client = CustomMetadata(identifier=identifier)
|
||||
custom_metadata_client.create(data=data)
|
||||
|
||||
|
||||
@celery_app.task()
|
||||
def add_preferences_metadata(blockchain_address: str, data: dict):
|
||||
identifier = bytes.fromhex(blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(blockchain_address))
|
||||
preferences_metadata_client = PreferencesMetadata(identifier=identifier)
|
||||
preferences_metadata_client.create(data=data)
|
||||
|
||||
@@ -75,7 +76,7 @@ def query_preferences_metadata(blockchain_address: str):
|
||||
:param blockchain_address: Blockchain address of an account.
|
||||
:type blockchain_address: str | Ox-hex
|
||||
"""
|
||||
identifier = bytes.fromhex(blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(blockchain_address))
|
||||
logg.debug(f'Retrieving preferences metadata for address: {blockchain_address}.')
|
||||
person_metadata_client = PreferencesMetadata(identifier=identifier)
|
||||
return person_metadata_client.query()
|
||||
|
||||
@@ -5,6 +5,7 @@ import logging
|
||||
# third-party imports
|
||||
import celery
|
||||
import i18n
|
||||
from chainlib.hash import strip_0x
|
||||
|
||||
# local imports
|
||||
from cic_ussd.account.metadata import get_cached_preferred_language
|
||||
@@ -23,13 +24,17 @@ logg = logging.getLogger(__file__)
|
||||
def generate_statement(self, querying_party: str, transaction: dict):
|
||||
""""""
|
||||
queue = self.request.delivery_info.get('routing_key')
|
||||
|
||||
s_preferences = celery.signature(
|
||||
'cic_ussd.tasks.metadata.query_preferences_metadata', [querying_party], queue=queue
|
||||
)
|
||||
s_parse_transaction = celery.signature(
|
||||
'cic_ussd.tasks.processor.parse_transaction', [transaction], queue=queue
|
||||
)
|
||||
s_cache_statement = celery.signature(
|
||||
'cic_ussd.tasks.processor.cache_statement', [querying_party], queue=queue
|
||||
)
|
||||
celery.chain(s_parse_transaction, s_cache_statement).apply_async()
|
||||
celery.chain(s_preferences, s_parse_transaction, s_cache_statement).apply_async()
|
||||
|
||||
|
||||
@celery_app.task
|
||||
@@ -48,7 +53,7 @@ def cache_statement(parsed_transaction: dict, querying_party: str):
|
||||
statement_transactions = json.loads(cached_statement)
|
||||
statement_transactions.append(parsed_transaction)
|
||||
data = json.dumps(statement_transactions)
|
||||
identifier = bytes.fromhex(querying_party)
|
||||
identifier = bytes.fromhex(strip_0x(querying_party))
|
||||
key = cache_data_key(identifier, ':cic.statement')
|
||||
cache_data(key, data)
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
echo "fetching migration variables from $CONTRACT_MIGRATION_URL"
|
||||
for s in $(curl -s "$CONTRACT_MIGRATION_URL/readyz" | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]" ); do
|
||||
echo "exporting $s"
|
||||
export $s
|
||||
done
|
||||
@@ -1,182 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Use this script to test if a given TCP host/port are available
|
||||
|
||||
WAITFORIT_cmdname=${0##*/}
|
||||
|
||||
echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
|
||||
|
||||
usage()
|
||||
{
|
||||
cat << USAGE >&2
|
||||
Usage:
|
||||
$WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
|
||||
-h HOST | --host=HOST Host or IP under test
|
||||
-p PORT | --port=PORT TCP port under test
|
||||
Alternatively, you specify the host and port as host:port
|
||||
-s | --strict Only execute subcommand if the test succeeds
|
||||
-q | --quiet Don't output any status messages
|
||||
-t TIMEOUT | --timeout=TIMEOUT
|
||||
Timeout in seconds, zero for no timeout
|
||||
-- COMMAND ARGS Execute command with args after the test finishes
|
||||
USAGE
|
||||
exit 1
|
||||
}
|
||||
|
||||
wait_for()
|
||||
{
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
else
|
||||
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
|
||||
fi
|
||||
WAITFORIT_start_ts=$(date +%s)
|
||||
while :
|
||||
do
|
||||
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
|
||||
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
|
||||
WAITFORIT_result=$?
|
||||
else
|
||||
(echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
|
||||
WAITFORIT_result=$?
|
||||
fi
|
||||
if [[ $WAITFORIT_result -eq 0 ]]; then
|
||||
WAITFORIT_end_ts=$(date +%s)
|
||||
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
return $WAITFORIT_result
|
||||
}
|
||||
|
||||
wait_for_wrapper()
|
||||
{
|
||||
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
|
||||
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
else
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
fi
|
||||
WAITFORIT_PID=$!
|
||||
trap "kill -INT -$WAITFORIT_PID" INT
|
||||
wait $WAITFORIT_PID
|
||||
WAITFORIT_RESULT=$?
|
||||
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
fi
|
||||
return $WAITFORIT_RESULT
|
||||
}
|
||||
|
||||
# process arguments
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case "$1" in
|
||||
*:* )
|
||||
WAITFORIT_hostport=(${1//:/ })
|
||||
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
|
||||
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
|
||||
shift 1
|
||||
;;
|
||||
--child)
|
||||
WAITFORIT_CHILD=1
|
||||
shift 1
|
||||
;;
|
||||
-q | --quiet)
|
||||
WAITFORIT_QUIET=1
|
||||
shift 1
|
||||
;;
|
||||
-s | --strict)
|
||||
WAITFORIT_STRICT=1
|
||||
shift 1
|
||||
;;
|
||||
-h)
|
||||
WAITFORIT_HOST="$2"
|
||||
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--host=*)
|
||||
WAITFORIT_HOST="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-p)
|
||||
WAITFORIT_PORT="$2"
|
||||
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--port=*)
|
||||
WAITFORIT_PORT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-t)
|
||||
WAITFORIT_TIMEOUT="$2"
|
||||
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--timeout=*)
|
||||
WAITFORIT_TIMEOUT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
WAITFORIT_CLI=("$@")
|
||||
break
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echoerr "Unknown argument: $1"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
|
||||
echoerr "Error: you need to provide a host and port to test."
|
||||
usage
|
||||
fi
|
||||
|
||||
WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
|
||||
WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
|
||||
WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
|
||||
WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
|
||||
|
||||
# Check to see if timeout is from busybox?
|
||||
WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
|
||||
WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
|
||||
|
||||
WAITFORIT_BUSYTIMEFLAG=""
|
||||
if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
|
||||
WAITFORIT_ISBUSY=1
|
||||
# Check if busybox timeout uses -t flag
|
||||
# (recent Alpine versions don't support -t anymore)
|
||||
if timeout &>/dev/stdout | grep -q -e '-t '; then
|
||||
WAITFORIT_BUSYTIMEFLAG="-t"
|
||||
fi
|
||||
else
|
||||
WAITFORIT_ISBUSY=0
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CHILD -gt 0 ]]; then
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
exit $WAITFORIT_RESULT
|
||||
else
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
wait_for_wrapper
|
||||
WAITFORIT_RESULT=$?
|
||||
else
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CLI != "" ]]; then
|
||||
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
exec "${WAITFORIT_CLI[@]}"
|
||||
else
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
@@ -28,6 +28,7 @@ def test_filter_statement_transactions(transactions_list):
|
||||
|
||||
def test_generate(activated_account,
|
||||
cache_default_token_data,
|
||||
cache_statement,
|
||||
cache_preferences,
|
||||
celery_session_worker,
|
||||
init_cache,
|
||||
@@ -36,22 +37,22 @@ def test_generate(activated_account,
|
||||
preferences,
|
||||
preferences_metadata_url,
|
||||
transactions_list):
|
||||
statement_transactions = filter_statement_transactions(transactions_list)
|
||||
for transaction in statement_transactions:
|
||||
querying_party = activated_account.blockchain_address
|
||||
recipient_transaction, sender_transaction = transaction_actors(transaction)
|
||||
if recipient_transaction.get('blockchain_address') == querying_party:
|
||||
recipient_transaction['alt_blockchain_address'] = sender_transaction.get('blockchain_address')
|
||||
generate(querying_party, None, recipient_transaction)
|
||||
if sender_transaction.get('blockchain_address') == querying_party:
|
||||
sender_transaction['alt_blockchain_address'] = recipient_transaction.get('blockchain_address')
|
||||
generate(querying_party, None, sender_transaction)
|
||||
time.sleep(2)
|
||||
identifier = bytes.fromhex(activated_account.blockchain_address)
|
||||
key = cache_data_key(identifier, ':cic.statement')
|
||||
statement = get_cached_data(key)
|
||||
statement = json.loads(statement)
|
||||
assert len(statement) == 1
|
||||
with requests_mock.Mocker(real_http=False) as request_mocker:
|
||||
request_mocker.register_uri('GET', preferences_metadata_url, status_code=200, reason='OK', json=preferences)
|
||||
statement_transactions = filter_statement_transactions(transactions_list)
|
||||
for transaction in statement_transactions:
|
||||
querying_party = activated_account.blockchain_address
|
||||
recipient_transaction, sender_transaction = transaction_actors(transaction)
|
||||
if recipient_transaction.get('blockchain_address') == querying_party:
|
||||
generate(querying_party, None, recipient_transaction)
|
||||
if sender_transaction.get('blockchain_address') == querying_party:
|
||||
generate(querying_party, None, sender_transaction)
|
||||
time.sleep(2)
|
||||
identifier = bytes.fromhex(strip_0x(activated_account.blockchain_address))
|
||||
key = cache_data_key(identifier, ':cic.statement')
|
||||
statement = get_cached_data(key)
|
||||
statement = json.loads(statement)
|
||||
assert len(statement) == 1
|
||||
|
||||
|
||||
def test_get_cached_statement(activated_account, cache_statement, statement):
|
||||
|
||||
@@ -57,7 +57,7 @@ def test_menu_processor(activated_account,
|
||||
available_balance=available_balance,
|
||||
token_symbol=token_symbol)
|
||||
|
||||
identifier = bytes.fromhex(activated_account.blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(activated_account.blockchain_address))
|
||||
key = cache_data_key(identifier, ':cic.adjusted_balance')
|
||||
adjusted_balance = 45931650.64654012
|
||||
cache_data(key, json.dumps(adjusted_balance))
|
||||
@@ -108,7 +108,7 @@ def test_menu_processor(activated_account,
|
||||
display_key = 'ussd.kenya.display_user_metadata'
|
||||
ussd_menu = UssdMenu.find_by_name('display_user_metadata')
|
||||
name = ussd_menu.get('name')
|
||||
identifier = bytes.fromhex(activated_account.blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(activated_account.blockchain_address))
|
||||
person_metadata = PersonMetadata(identifier)
|
||||
cached_person_metadata = person_metadata.get_cached_metadata()
|
||||
resp = response(activated_account, display_key, name, init_database, generic_ussd_session)
|
||||
|
||||
@@ -114,7 +114,6 @@ def test_statement_callback(activated_account, mocker, transactions_list):
|
||||
s_statement_callback.apply_async().get()
|
||||
statement_transactions = filter_statement_transactions(transactions_list)
|
||||
recipient_transaction, sender_transaction = transaction_actors(statement_transactions[0])
|
||||
sender_transaction['alt_blockchain_address'] = recipient_transaction.get('blockchain_address')
|
||||
mock_statement_generate.assert_called_with(
|
||||
(activated_account.blockchain_address, sender_transaction), {}, queue='cic-ussd')
|
||||
|
||||
|
||||
12
apps/cic-ussd/tests/fixtures/account.py
vendored
12
apps/cic-ussd/tests/fixtures/account.py
vendored
@@ -54,7 +54,7 @@ def cache_account_creation_data(init_cache, account_creation_data):
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def cache_balances(activated_account, balances, init_cache):
|
||||
identifier = bytes.fromhex(activated_account.blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(activated_account.blockchain_address))
|
||||
balances = json.dumps(balances[0])
|
||||
key = cache_data_key(identifier, ':cic.balances')
|
||||
cache_data(key, balances)
|
||||
@@ -70,7 +70,7 @@ def cache_default_token_data(default_token_data, init_cache, load_chain_spec):
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def cache_person_metadata(activated_account, init_cache, person_metadata):
|
||||
identifier = bytes.fromhex(activated_account.blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(activated_account.blockchain_address))
|
||||
person = json.dumps(person_metadata)
|
||||
key = cache_data_key(identifier, ':cic.person')
|
||||
cache_data(key, person)
|
||||
@@ -78,7 +78,7 @@ def cache_person_metadata(activated_account, init_cache, person_metadata):
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def cache_preferences(activated_account, init_cache, preferences):
|
||||
identifier = bytes.fromhex(activated_account.blockchain_address)
|
||||
identifier = bytes.fromhex(strip_0x(activated_account.blockchain_address))
|
||||
preferences = json.dumps(preferences)
|
||||
key = cache_data_key(identifier, ':cic.preferences')
|
||||
cache_data(key, preferences)
|
||||
@@ -86,10 +86,10 @@ def cache_preferences(activated_account, init_cache, preferences):
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def cache_statement(activated_account, init_cache, statement):
|
||||
identifier = bytes.fromhex(activated_account.blockchain_address)
|
||||
statement = json.dumps(statement)
|
||||
identifier = bytes.fromhex(strip_0x(activated_account.blockchain_address))
|
||||
preferences = json.dumps(statement)
|
||||
key = cache_data_key(identifier, ':cic.statement')
|
||||
cache_data(key, statement)
|
||||
cache_data(key, preferences)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
|
||||
14
apps/cic-ussd/tests/fixtures/transaction.py
vendored
14
apps/cic-ussd/tests/fixtures/transaction.py
vendored
@@ -7,7 +7,6 @@ import pytest
|
||||
# local import
|
||||
from cic_ussd.account.balance import get_cached_available_balance
|
||||
|
||||
|
||||
# tests imports
|
||||
|
||||
|
||||
@@ -104,8 +103,8 @@ def transactions_list(activated_account, valid_recipient):
|
||||
'destination_token': '0x0000000000000000000000000000000000000000',
|
||||
'block_number': 80,
|
||||
'tx_index': 0,
|
||||
'sender': '367cB0F65137b0A845c1DB4B7Ca47D3DEF32dDe8',
|
||||
'recipient': '103d1ed6e370dBa6267045c70d4999384c18a04A',
|
||||
'sender': '0x367cB0F65137b0A845c1DB4B7Ca47D3DEF32dDe8',
|
||||
'recipient': '0x103d1ed6e370dBa6267045c70d4999384c18a04A',
|
||||
'from_value': 0,
|
||||
'to_value': 0,
|
||||
'date_created': '2021-07-14T14:13:46.036198',
|
||||
@@ -123,8 +122,8 @@ def transactions_list(activated_account, valid_recipient):
|
||||
'destination_token': '0x0000000000000000000000000000000000000000',
|
||||
'block_number': 78,
|
||||
'tx_index': 0,
|
||||
'sender': 'b41BfEE260693A473254D62b81aE1ADCC9E51AFb',
|
||||
'recipient': '367cB0F65137b0A845c1DB4B7Ca47D3DEF32dDe8',
|
||||
'sender': '0xb41BfEE260693A473254D62b81aE1ADCC9E51AFb',
|
||||
'recipient': '0x367cB0F65137b0A845c1DB4B7Ca47D3DEF32dDe8',
|
||||
'from_value': 1800000000000000,
|
||||
'to_value': 1800000000000000,
|
||||
'date_created': '2021-07-14T14:13:35.839638',
|
||||
@@ -143,8 +142,8 @@ def transactions_list(activated_account, valid_recipient):
|
||||
'destination_token': '0x0000000000000000000000000000000000000000',
|
||||
'block_number': 79,
|
||||
'tx_index': 0,
|
||||
'sender': '367cB0F65137b0A845c1DB4B7Ca47D3DEF32dDe8',
|
||||
'recipient': '103d1ed6e370dBa6267045c70d4999384c18a04A',
|
||||
'sender': '0x367cB0F65137b0A845c1DB4B7Ca47D3DEF32dDe8',
|
||||
'recipient': '0x103d1ed6e370dBa6267045c70d4999384c18a04A',
|
||||
'from_value': 0,
|
||||
'to_value': 0,
|
||||
'date_created': '2021-07-14T14:13:35.638355',
|
||||
@@ -153,3 +152,4 @@ def transactions_list(activated_account, valid_recipient):
|
||||
'timestamp': 1626272015,
|
||||
'hash': '0x32ca3dd3bef06463b452f4d32f5f563d083cb4759219eed90f3d2a9c1791c5fc'}
|
||||
]
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import random
|
||||
import uuid
|
||||
|
||||
# external imports
|
||||
from chainlib.eth.address import to_checksum_address
|
||||
from faker import Faker
|
||||
from faker_e164.providers import E164Provider
|
||||
|
||||
@@ -20,7 +21,7 @@ def phone_number() -> str:
|
||||
|
||||
|
||||
def blockchain_address() -> str:
|
||||
return os.urandom(20).hex().lower()
|
||||
return to_checksum_address('0x' + os.urandom(20).hex())
|
||||
|
||||
|
||||
def session_id() -> str:
|
||||
|
||||
8
apps/contract-migration/config.sh
Executable file → Normal file
8
apps/contract-migration/config.sh
Executable file → Normal file
@@ -5,7 +5,13 @@ set -a
|
||||
if [ -z $DEV_DATA_DIR ]; then
|
||||
export DEV_DATA_DIR=`mktemp -d`
|
||||
else
|
||||
mkdir -p $DEV_DATA_DIR
|
||||
mkdir -vp $DEV_DATA_DIR
|
||||
fi
|
||||
|
||||
if [ -z $STATE_DIR ]; then
|
||||
export STATE_DIR=/run/cic_init
|
||||
mkdir -vp $STATE_DIR
|
||||
echo 0 > $STATE_DIR/init
|
||||
fi
|
||||
|
||||
if [ -z $DEV_CONFIG_RESET ]; then
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
set -e
|
||||
set -a
|
||||
|
||||
mkdir -p $DEV_DATA_DIR/health
|
||||
|
||||
source $DEV_DATA_DIR/env_reset
|
||||
|
||||
jq --arg CIC_REGISTRY_ADDRESS "$CIC_REGISTRY_ADDRESS" \
|
||||
--arg CIC_TRUST_ADDRESS "$CIC_TRUST_ADDRESS" \
|
||||
--arg CIC_DEFAULT_TOKEN_SYMBOL "$CIC_DEFAULT_TOKEN_SYMBOL"\
|
||||
--arg TOKEN_NAME "$TOKEN_NAME"\
|
||||
--arg RUN_MASK "$RUN_MASK" \
|
||||
-n '{"CIC_REGISTRY_ADDRESS": $CIC_REGISTRY_ADDRESS,
|
||||
"CIC_TRUST_ADDRESS": $CIC_TRUST_ADDRESS,
|
||||
"CIC_DEFAULT_TOKEN_SYMBOL": $CIC_DEFAULT_TOKEN_SYMBOL,
|
||||
"TOKEN_NAME": $TOKEN_NAME,
|
||||
"RUN_MASK": $RUN_MASK}' > $DEV_DATA_DIR/health/readyz
|
||||
|
||||
cd $DEV_DATA_DIR/health
|
||||
|
||||
echo "starting health endpoint on :8000/readyz"
|
||||
python -m http.server 8000 &> /dev/null
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
export DEV_ETH_ACCOUNT_CONTRACT_DEPLOYER=0xEb3907eCad74a0013c259D5874AE7f22DcBcC95C
|
||||
export DEV_ETH_ACCOUNT_RESERVE_MINTER=0xEb3907eCad74a0013c259D5874AE7f22DcBcC95C
|
||||
export DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER=0xEb3907eCad74a0013c259D5874AE7f22DcBcC95C
|
||||
export DEV_RESERVE_AMOUNT=10000000000000000000000000000000000
|
||||
export DEV_FAUCET_AMOUNT=50000000
|
||||
export DEV_GAS_AMOUNT=100000000000000000000000
|
||||
export DEV_TOKEN_AMOUNT=100000000000000000000000
|
||||
export DEV_ETH_GAS_PRICE=
|
||||
export DEV_DATA_DIR=.
|
||||
export DEV_PIP_EXTRA_INDEX_URL=https://pip.grassrootseconomics.net:8433
|
||||
export DEV_ETH_PROVIDER_HOST=
|
||||
export DEV_ETH_PROVIDER_PORT=
|
||||
export CIC_TRUST_ADDRESS=0xEb3907eCad74a0013c259D5874AE7f22DcBcC95C
|
||||
export CIC_DEFAULT_TOKEN_SYMBOL=GFT
|
||||
export WALLET_KEY_FILE=/root/keystore/UTC--2021-01-08T17-18-44.521011372Z--eb3907ecad74a0013c259d5874ae7f22dcbcc95c
|
||||
|
||||
0
apps/contract-migration/from_env.sh
Executable file → Normal file
0
apps/contract-migration/from_env.sh
Executable file → Normal file
0
apps/contract-migration/nvm.sh
Executable file → Normal file
0
apps/contract-migration/nvm.sh
Executable file → Normal file
@@ -112,16 +112,12 @@ export CIC_DEFAULT_TOKEN_SYMBOL=$TOKEN_SYMBOL
|
||||
|
||||
echo "Writing env_reset file ..."
|
||||
|
||||
# note these are also written in init_readyz.sh
|
||||
cat <<EOF > $DEV_DATA_DIR/env_reset
|
||||
export CIC_REGISTRY_ADDRESS=$CIC_REGISTRY_ADDRESS
|
||||
export CIC_TRUST_ADDRESS=$CIC_TRUST_ADDRESS
|
||||
echo "export CIC_REGISTRY_ADDRESS=$CIC_REGISTRY_ADDRESS
|
||||
export CIC_DEFAULT_TOKEN_SYMBOL=$CIC_DEFAULT_TOKEN_SYMBOL
|
||||
export TOKEN_NAME=$TOKEN_NAME
|
||||
EOF
|
||||
" >> "${DEV_DATA_DIR}"/env_reset
|
||||
|
||||
confini-dump -vv --schema-module chainlib.eth.data.config --schema-module cic_eth.data.config --schema-dir ./config --prefix export > ${DEV_DATA_DIR}/env_reset
|
||||
confini-dump --schema-module chainlib.eth.data.config --schema-module cic_eth.data.config --schema-dir ./config
|
||||
echo -n $CIC_REGISTRY_ADDRESS > $STATE_DIR/registry
|
||||
|
||||
set +a
|
||||
set +e
|
||||
|
||||
8
apps/contract-migration/run_job.sh
Executable file → Normal file
8
apps/contract-migration/run_job.sh
Executable file → Normal file
@@ -12,14 +12,11 @@ if [[ $((RUN_MASK & 1)) -eq 1 ]]
|
||||
then
|
||||
>&2 echo -e "\033[;96mRUNNING\033[;39m RUN_MASK 1 - contract deployment"
|
||||
./reset.sh
|
||||
# cic-eth-xxx services rely on
|
||||
export RUN_MASK_PHASE=1
|
||||
./docker/init_readyz.sh &
|
||||
echo 0
|
||||
if [ $? -ne "0" ]; then
|
||||
>&2 echo -e "\033[;31mFAILED\033[;39m RUN_MASK 1 - contract deployment"
|
||||
exit 1;
|
||||
fi
|
||||
echo -n 1 > $STATE_DIR/init
|
||||
>&2 echo -e "\033[;32mSUCCEEDED\033[;39m RUN_MASK 1 - contract deployment"
|
||||
fi
|
||||
|
||||
@@ -31,7 +28,6 @@ then
|
||||
>&2 echo -e "\033[;31mFAILED\033[;39m RUN_MASK 2 - custodial service initialization"
|
||||
exit 1;
|
||||
fi
|
||||
echo -n 2 > $STATE_DIR/init
|
||||
>&2 echo -e "\033[;32mSUCCEEDED\033[;39m RUN_MASK 2 - custodial service initialization"
|
||||
fi
|
||||
# this will leave the container up and serving the results of the migration
|
||||
wait
|
||||
|
||||
@@ -82,7 +82,7 @@ cic-eth-ctl -i $CHAIN_SPEC unlock INIT
|
||||
cic-eth-ctl -i $CHAIN_SPEC unlock SEND
|
||||
cic-eth-ctl -i $CHAIN_SPEC unlock QUEUE
|
||||
|
||||
confini-dump --schema-module chainlib.eth.data.config --schema-module cic_eth.data.config --schema-dir ./config
|
||||
#confini-dump --schema-module chainlib.eth.data.config --schema-module cic_eth.data.config --schema-dir ./config
|
||||
|
||||
set +a
|
||||
set +e
|
||||
|
||||
0
apps/data-seeding/import_ussd.sh
Executable file → Normal file
0
apps/data-seeding/import_ussd.sh
Executable file → Normal file
@@ -1,10 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
echo "fetching migration variables from $CONTRACT_MIGRATION_URL"
|
||||
for s in $(curl -s "$CONTRACT_MIGRATION_URL/readyz" | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]" ); do
|
||||
echo "exporting $s"
|
||||
export $s
|
||||
done
|
||||
@@ -1,15 +0,0 @@
|
||||
#! /bin/bash
|
||||
set -e
|
||||
set -u
|
||||
env
|
||||
WAIT_FOR_TIMEOUT=${WAIT_FOR_TIMEOUT:-600}
|
||||
|
||||
if [[ "$CONTRACT_MIGRATION_URL" ]]; then
|
||||
echo "waiting for $CONTRACT_MIGRATION_URL/readyz"
|
||||
./scripts/wait-for-it.sh $CONTRACT_MIGRATION_URL -t $WAIT_FOR_TIMEOUT
|
||||
source ./scripts/get_readyz.sh # set env vars form endpoint
|
||||
./import_ussd.sh
|
||||
else
|
||||
./import_ussd.sh
|
||||
fi
|
||||
|
||||
0
apps/data-seeding/scripts/run_ussd_user_imports.sh
Executable file → Normal file
0
apps/data-seeding/scripts/run_ussd_user_imports.sh
Executable file → Normal file
@@ -1,182 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Use this script to test if a given TCP host/port are available
|
||||
|
||||
WAITFORIT_cmdname=${0##*/}
|
||||
|
||||
echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
|
||||
|
||||
usage()
|
||||
{
|
||||
cat << USAGE >&2
|
||||
Usage:
|
||||
$WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
|
||||
-h HOST | --host=HOST Host or IP under test
|
||||
-p PORT | --port=PORT TCP port under test
|
||||
Alternatively, you specify the host and port as host:port
|
||||
-s | --strict Only execute subcommand if the test succeeds
|
||||
-q | --quiet Don't output any status messages
|
||||
-t TIMEOUT | --timeout=TIMEOUT
|
||||
Timeout in seconds, zero for no timeout
|
||||
-- COMMAND ARGS Execute command with args after the test finishes
|
||||
USAGE
|
||||
exit 1
|
||||
}
|
||||
|
||||
wait_for()
|
||||
{
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
else
|
||||
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
|
||||
fi
|
||||
WAITFORIT_start_ts=$(date +%s)
|
||||
while :
|
||||
do
|
||||
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
|
||||
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
|
||||
WAITFORIT_result=$?
|
||||
else
|
||||
(echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
|
||||
WAITFORIT_result=$?
|
||||
fi
|
||||
if [[ $WAITFORIT_result -eq 0 ]]; then
|
||||
WAITFORIT_end_ts=$(date +%s)
|
||||
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
return $WAITFORIT_result
|
||||
}
|
||||
|
||||
wait_for_wrapper()
|
||||
{
|
||||
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
|
||||
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
else
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
fi
|
||||
WAITFORIT_PID=$!
|
||||
trap "kill -INT -$WAITFORIT_PID" INT
|
||||
wait $WAITFORIT_PID
|
||||
WAITFORIT_RESULT=$?
|
||||
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
fi
|
||||
return $WAITFORIT_RESULT
|
||||
}
|
||||
|
||||
# process arguments
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case "$1" in
|
||||
*:* )
|
||||
WAITFORIT_hostport=(${1//:/ })
|
||||
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
|
||||
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
|
||||
shift 1
|
||||
;;
|
||||
--child)
|
||||
WAITFORIT_CHILD=1
|
||||
shift 1
|
||||
;;
|
||||
-q | --quiet)
|
||||
WAITFORIT_QUIET=1
|
||||
shift 1
|
||||
;;
|
||||
-s | --strict)
|
||||
WAITFORIT_STRICT=1
|
||||
shift 1
|
||||
;;
|
||||
-h)
|
||||
WAITFORIT_HOST="$2"
|
||||
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--host=*)
|
||||
WAITFORIT_HOST="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-p)
|
||||
WAITFORIT_PORT="$2"
|
||||
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--port=*)
|
||||
WAITFORIT_PORT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-t)
|
||||
WAITFORIT_TIMEOUT="$2"
|
||||
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--timeout=*)
|
||||
WAITFORIT_TIMEOUT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
WAITFORIT_CLI=("$@")
|
||||
break
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echoerr "Unknown argument: $1"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
|
||||
echoerr "Error: you need to provide a host and port to test."
|
||||
usage
|
||||
fi
|
||||
|
||||
WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
|
||||
WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
|
||||
WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
|
||||
WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
|
||||
|
||||
# Check to see if timeout is from busybox?
|
||||
WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
|
||||
WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
|
||||
|
||||
WAITFORIT_BUSYTIMEFLAG=""
|
||||
if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
|
||||
WAITFORIT_ISBUSY=1
|
||||
# Check if busybox timeout uses -t flag
|
||||
# (recent Alpine versions don't support -t anymore)
|
||||
if timeout &>/dev/stdout | grep -q -e '-t '; then
|
||||
WAITFORIT_BUSYTIMEFLAG="-t"
|
||||
fi
|
||||
else
|
||||
WAITFORIT_ISBUSY=0
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CHILD -gt 0 ]]; then
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
exit $WAITFORIT_RESULT
|
||||
else
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
wait_for_wrapper
|
||||
WAITFORIT_RESULT=$?
|
||||
else
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CLI != "" ]]; then
|
||||
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
exec "${WAITFORIT_CLI[@]}"
|
||||
else
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
1
apps/util/initness/MANIFEST.in
Normal file
1
apps/util/initness/MANIFEST.in
Normal file
@@ -0,0 +1 @@
|
||||
include requirements.txt initness/data/config/**
|
||||
3
apps/util/initness/initness/__init__.py
Normal file
3
apps/util/initness/initness/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
"""Initness reports the initialization state and entry-point variables for the contract migrations process of the CIC services deployment.
|
||||
"""
|
||||
from .state import *
|
||||
3
apps/util/initness/initness/data/config/httpd.ini
Normal file
3
apps/util/initness/initness/data/config/httpd.ini
Normal file
@@ -0,0 +1,3 @@
|
||||
[httpd]
|
||||
host = localhost
|
||||
port = 8000
|
||||
2
apps/util/initness/initness/data/config/state.ini
Normal file
2
apps/util/initness/initness/data/config/state.ini
Normal file
@@ -0,0 +1,2 @@
|
||||
[state]
|
||||
base_dir = /run/cic_init
|
||||
87
apps/util/initness/initness/runnable/server.py
Normal file
87
apps/util/initness/initness/runnable/server.py
Normal file
@@ -0,0 +1,87 @@
|
||||
# standard import
|
||||
import json
|
||||
import os
|
||||
import logging
|
||||
import argparse
|
||||
import sys
|
||||
from http.server import (
|
||||
HTTPServer,
|
||||
BaseHTTPRequestHandler,
|
||||
)
|
||||
|
||||
# external imports
|
||||
import confini
|
||||
|
||||
# local imports
|
||||
from initness import get_state
|
||||
|
||||
|
||||
logging.basicConfig(level=logging.WARNING)
|
||||
logg = logging.getLogger()
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
data_dir = os.path.join(script_dir, '..', 'data')
|
||||
default_config_dir = os.path.join(data_dir, 'config')
|
||||
config_dir = os.environ.get('CONFINI_DIR', default_config_dir)
|
||||
|
||||
argparser = argparse.ArgumentParser()
|
||||
argparser.add_argument('-c', '--config', dest='c', type=str, help='configuration override directory')
|
||||
argparser.add_argument('--host', type=str, help='httpd host')
|
||||
argparser.add_argument('--port', type=str, help='httpd port')
|
||||
argparser.add_argument('--state-dir', dest='state_dir', type=str, help='directory to read state from')
|
||||
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('-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)
|
||||
|
||||
override_dirs = []
|
||||
if args.c:
|
||||
override_dirs = [args.c]
|
||||
config = confini.Config(config_dir, args.env_prefix, override_dirs=override_dirs)
|
||||
config.process()
|
||||
# override args
|
||||
args_override = {
|
||||
'HTTPD_HOST': getattr(args, 'host'),
|
||||
'HTTPD_PORT': getattr(args, 'port'),
|
||||
'STATE_BASE_DIR': getattr(args, 'state_dir'),
|
||||
}
|
||||
config.dict_override(args_override, 'cli flag')
|
||||
logg.debug('loaded config: {}\n'.format(config))
|
||||
|
||||
|
||||
class StateRequestHandler(BaseHTTPRequestHandler):
|
||||
|
||||
state_store_dir = None
|
||||
|
||||
def do_GET(self):
|
||||
|
||||
o = get_state(self.state_store_dir)
|
||||
self.send_response(200, 'yarr')
|
||||
self.end_headers()
|
||||
|
||||
self.wfile.write(json.dumps(o).encode('utf-8'))
|
||||
|
||||
|
||||
def run(store, host=None, port=None):
|
||||
port = int(port, 10)
|
||||
server_address = (host, port)
|
||||
httpd = HTTPServer(server_address, StateRequestHandler)
|
||||
httpd.serve_forever()
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
os.stat(config.get('STATE_BASE_DIR'))
|
||||
except FileNotFoundError:
|
||||
os.makedirs(config.get('STATE_BASE_DIR'))
|
||||
store = StateRequestHandler.state_store_dir=config.get('STATE_BASE_DIR')
|
||||
run(store, host=config.get('HTTPD_HOST'), port=config.get('HTTPD_PORT'))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
31
apps/util/initness/initness/state.py
Normal file
31
apps/util/initness/initness/state.py
Normal file
@@ -0,0 +1,31 @@
|
||||
# standard imports
|
||||
import os
|
||||
|
||||
def get_state(state_store_dir):
|
||||
init_path = os.path.join(state_store_dir, 'init')
|
||||
init_level = 0
|
||||
registry_address = None
|
||||
|
||||
try:
|
||||
f = open(init_path, 'r')
|
||||
init_level = f.read()
|
||||
init_level = init_level.rstrip()
|
||||
f.close()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
registry_path = os.path.join(state_store_dir, 'registry')
|
||||
try:
|
||||
f = open(registry_path, 'r')
|
||||
registry_address = f.read()
|
||||
registry_address = registry_address.rstrip()
|
||||
f.close()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
o = {
|
||||
'runlevel': init_level,
|
||||
'registry': registry_address,
|
||||
}
|
||||
|
||||
return o
|
||||
1
apps/util/initness/requirements.txt
Normal file
1
apps/util/initness/requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
confini>=0.3.6rc4,<0.5.0
|
||||
21
apps/util/initness/setup.py
Normal file
21
apps/util/initness/setup.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from setuptools import setup
|
||||
|
||||
f = open('requirements.txt', 'r')
|
||||
requirements = f.read()
|
||||
f.close()
|
||||
|
||||
setup(
|
||||
name='initness',
|
||||
version='0.0.1a1',
|
||||
install_requires=requirements,
|
||||
packages=[
|
||||
'initness',
|
||||
'initness.runnable',
|
||||
],
|
||||
include_package_data=True,
|
||||
entry_points = {
|
||||
'console_scripts': [
|
||||
'cic-init-server=initness.runnable.server:main',
|
||||
],
|
||||
},
|
||||
)
|
||||
27
apps/util/initness/tests/test_basic.py
Normal file
27
apps/util/initness/tests/test_basic.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# standard imports
|
||||
import unittest
|
||||
import tempfile
|
||||
import os
|
||||
|
||||
# local imports
|
||||
from initness.runnable.server import get_state
|
||||
|
||||
class TestInitness(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.dir = tempfile.mkdtemp()
|
||||
f = open(os.path.join(self.dir, 'init'), 'w')
|
||||
f.write('42')
|
||||
f.close()
|
||||
f = open(os.path.join(self.dir, 'registry'), 'w')
|
||||
f.write('0xdeadbeef')
|
||||
f.close()
|
||||
|
||||
def test_state(self):
|
||||
o = get_state(self.dir)
|
||||
self.assertEqual(o['runlevel'], '42')
|
||||
self.assertEqual(o['registry'], '0xdeadbeef')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -60,8 +60,6 @@ services:
|
||||
|
||||
contract-migration:
|
||||
image: registry.gitlab.com/grassrootseconomics/cic-internal-integration/contract-migration:${TAG:-latest}
|
||||
ports:
|
||||
- 8012:8000
|
||||
build:
|
||||
context: apps/contract-migration
|
||||
dockerfile: docker/Dockerfile
|
||||
@@ -70,6 +68,7 @@ services:
|
||||
pip_extra_args: $PIP_EXTRA_ARGS
|
||||
EXTRA_INDEX_URL: ${EXTRA_INDEX_URL:-https://pip.grassrootseconomics.net:8433}
|
||||
EXTRA_PIP_ARGS: $EXTRA_PIP_ARGS
|
||||
# image: registry.gitlab.com/grassrootseconomics/cic-internal-integration/contract-migration:latest
|
||||
environment:
|
||||
RPC_PROVIDER: ${RPC_PROVIDER:-http://eth:8545}
|
||||
ETH_PROVIDER: ${RPC_PROVIDER:-http://eth:8545}
|
||||
@@ -94,14 +93,9 @@ services:
|
||||
RUN_MASK: ${RUN_MASK:-0} # bit flags; 1: contract migrations 2: seed data
|
||||
DEV_FAUCET_AMOUNT: ${DEV_FAUCET_AMOUNT:-50000000}
|
||||
DEV_ETH_GAS_PRICE: $DEV_ETH_GAS_PRICE
|
||||
#DEV_GAS_AMOUNT: "100000000000000000000000" # removed from env_reset
|
||||
#WALLET_KEY_FILE: ./keystore/UTC--2021-01-08T17-18-44.521011372Z--eb3907ecad74a0013c259d5874ae7f22dcbcc95c #removed from env_reset
|
||||
TOKEN_NAME: ${TOKEN_NAME:-Giftable Token}
|
||||
TOKEN_SYMBOL: ${TOKEN_SYMBOL:-GFT}
|
||||
TOKEN_TYPE: ${TOKEN_TYPE:-giftable_erc20_token}
|
||||
#TOKEN_NAME: ${TOKEN_NAME:-Demurrage Token}
|
||||
#TOKEN_SYMBOL: ${TOKEN_SYMBOL:-DET}
|
||||
#TOKEN_TYPE: ${TOKEN_TYPE:-erc20_demurrage_token }
|
||||
TOKEN_DECIMALS: $TOKEN_DECIMALS
|
||||
TOKEN_REDISTRIBUTION_PERIOD: $TOKEN_DEMURRAGE_REDISTRIBUTION_PERIOD
|
||||
TASKS_TRANSFER_CALLBACKS: ${TASKS_TRANSFER_CALLBACKS:-"cic-eth:cic_eth.callbacks.noop.noop,cic-ussd:cic_ussd.tasks.callback_handler.transaction_callback"}
|
||||
@@ -109,8 +103,9 @@ services:
|
||||
TOKEN_DEMURRAGE_LEVEL: $TOKEN_DEMURRAGE_LEVEL
|
||||
TOKEN_SINK_ADDRESS: $TOKEN_SINK_ADDRESS
|
||||
SIGNER_PROVIDER: ${SIGNER_SOCKET_PATH:-http://cic-eth-signer:8000}
|
||||
restart: on-failure
|
||||
command: ["./run_job.sh"]
|
||||
#command: bash -c "while true; do sleep 1; done" # Infinite loop to keep container live doing nothing
|
||||
#command: ["./reset.sh"]
|
||||
depends_on:
|
||||
- eth
|
||||
- postgres
|
||||
@@ -118,7 +113,7 @@ services:
|
||||
- cic-eth-tasker
|
||||
volumes:
|
||||
- contract-config:/tmp/cic/config
|
||||
- ./apps/contract-migration:/root
|
||||
|
||||
|
||||
data-seeding:
|
||||
image: registry.gitlab.com/grassrootseconomics/cic-internal-integration/data-seeding:${TAG:-latest}
|
||||
@@ -158,11 +153,9 @@ services:
|
||||
USSD_PROVIDER: http://cic-user-ussd-server:9000
|
||||
CELERY_QUEUE: cic-import-ussd
|
||||
EXCLUSIONS: ussd
|
||||
CONTRACT_MIGRATION_URL: contract-migration:8000
|
||||
command: bash ./scripts/run_job.sh
|
||||
command: bash import_ussd.sh
|
||||
volumes:
|
||||
- contract-config:/tmp/cic/config/:ro
|
||||
#- ./apps/data-seeding:/root
|
||||
|
||||
cic-cache-tracker:
|
||||
image: registry.gitlab.com/grassrootseconomics/cic-internal-integration/cic-cache:${TAG:-latest}
|
||||
@@ -188,13 +181,17 @@ services:
|
||||
CIC_CHAIN_SPEC: ${CHAIN_SPEC:-evm:bloxberg:8996}
|
||||
CELERY_BROKER_URL: redis://redis:6379
|
||||
CELERY_RESULT_URL: redis://redis:6379
|
||||
CONTRACT_MIGRATION_URL: contract-migration:8000
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
- redis
|
||||
- postgres
|
||||
- eth
|
||||
command: ./start_tracker.sh -c /usr/local/etc/cic-cache -vv
|
||||
command:
|
||||
- /bin/bash
|
||||
- -c
|
||||
- |
|
||||
if [[ -f /tmp/cic/config/env_reset ]]; then source /tmp/cic/config/env_reset; fi
|
||||
./start_tracker.sh -c /usr/local/etc/cic-cache -vv
|
||||
volumes:
|
||||
- contract-config:/tmp/cic/config/:ro
|
||||
|
||||
@@ -221,13 +218,17 @@ services:
|
||||
CIC_CHAIN_SPEC: ${CIC_CHAIN_SPEC:-evm:bloxberg:8996}
|
||||
CELERY_BROKER_URL: redis://redis:6379
|
||||
CELERY_RESULT_URL: redis://redis:6379
|
||||
CONTRACT_MIGRATION_URL: contract-migration:8000
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- redis
|
||||
- postgres
|
||||
- eth
|
||||
command: bash docker/start_tasker.sh
|
||||
command:
|
||||
- /bin/bash
|
||||
- -c
|
||||
- |
|
||||
if [[ -f /tmp/cic/config/env_reset ]]; then source /tmp/cic/config/env_reset; fi
|
||||
/usr/local/bin/cic-cache-taskerd -vv
|
||||
volumes:
|
||||
- contract-config:/tmp/cic/config/:ro
|
||||
|
||||
@@ -242,10 +243,10 @@ services:
|
||||
DATABASE_USER: ${DATABASE_USER:-grassroots}
|
||||
DATABASE_HOST: ${DATABASE_HOST:-postgres}
|
||||
DATABASE_PORT: ${DATABASE_PORT:-5432}
|
||||
DATABASE_PASSWORD: ${DATABASE_PASSWORD:-tralala}
|
||||
#DATABASE_PASSWORD: ${DATABASE_PASSWORD:-
|
||||
DATABASE_NAME: ${DATABASE_NAME_CIC_CACHE:-cic_cache}
|
||||
DATABASE_DEBUG: 1
|
||||
CONTRACT_MIGRATION_URL: contract-migration:8000
|
||||
#PGPASSWORD: $DATABASE_PASSWORD
|
||||
SERVER_PORT: 8000
|
||||
restart: on-failure
|
||||
ports:
|
||||
@@ -254,7 +255,16 @@ services:
|
||||
- postgres
|
||||
- cic-cache-tasker
|
||||
- cic-cache-tracker
|
||||
command: bash docker/start_server.sh
|
||||
command:
|
||||
- /bin/bash
|
||||
- -c
|
||||
- |
|
||||
if [[ -f /tmp/cic/config/env_reset ]]; then source /tmp/cic/config/env_reset; fi
|
||||
"/usr/local/bin/uwsgi" \
|
||||
--wsgi-file /root/cic_cache/runnable/daemons/server.py \
|
||||
--http :8000 \
|
||||
--pyargv "-vv"
|
||||
|
||||
|
||||
cic-eth-tasker:
|
||||
image: registry.gitlab.com/grassrootseconomics/cic-internal-integration/cic-eth:${TAG:-latest}
|
||||
@@ -292,7 +302,6 @@ services:
|
||||
ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER: ${DEV_ETH_ACCOUNT_ACCOUNTS_INDEX_WRITER:-0xACB0BC74E1686D62dE7DC6414C999EA60C09F0eA}
|
||||
TASKS_TRACE_QUEUE_STATUS: ${TASKS_TRACE_QUEUE_STATUS:-1}
|
||||
CIC_DEFAULT_TOKEN_SYMBOL: ${CIC_DEFAULT_TOKEN_SYMBOL:-GFT}
|
||||
CONTRACT_MIGRATION_URL: contract-migration:8000
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- eth
|
||||
@@ -304,7 +313,12 @@ services:
|
||||
- contract-config:/tmp/cic/config/:ro
|
||||
#command: ["/usr/local/bin/cic-eth-taskerd"]
|
||||
#command: ["sleep", "3600"]
|
||||
command: ./start_tasker.sh --aux-all -q cic-eth -vv
|
||||
command:
|
||||
- /bin/bash
|
||||
- -c
|
||||
- |
|
||||
if [[ -f /tmp/cic/config/env_reset ]]; then source /tmp/cic/config/env_reset; fi
|
||||
./start_tasker.sh --aux-all -q cic-eth -vv
|
||||
|
||||
cic-eth-signer:
|
||||
image: registry.gitlab.com/grassrootseconomics/cic-internal-integration/cic-eth:${TAG:-latest}
|
||||
@@ -351,6 +365,13 @@ services:
|
||||
- signer-data:/run/crypto-dev-signer
|
||||
- contract-config:/tmp/cic/config/:ro
|
||||
command: ["python", "/usr/local/bin/crypto-dev-daemon", "-c", "/usr/local/etc/crypto-dev-signer", "-vv"]
|
||||
#command:
|
||||
# - /bin/bash
|
||||
# - -c
|
||||
# - |
|
||||
# if [[ -f /tmp/cic/config/env_reset ]]; then source /tmp/cic/config/env_reset; fi
|
||||
# ./start_tasker.sh --aux-all -q cic-eth -vv
|
||||
# command: [/bin/sh, "./start_tasker.sh", -q, cic-eth, -vv ]
|
||||
|
||||
cic-eth-tracker:
|
||||
image: registry.gitlab.com/grassrootseconomics/cic-internal-integration/cic-eth:${TAG:-latest}
|
||||
@@ -363,7 +384,6 @@ services:
|
||||
environment:
|
||||
RPC_PROVIDER: ${RPC_PROVIDER:-http://eth:8545}
|
||||
ETH_PROVIDER: ${RPC_PROVIDER:-http://eth:8545}
|
||||
RPC_HTTP_PROVIDER: ${RPC_PROVIDER:-http://eth:8545}
|
||||
DATABASE_USER: ${DATABASE_USER:-grassroots}
|
||||
DATABASE_HOST: ${DATABASE_HOST:-postgres}
|
||||
DATABASE_PASSWORD: ${DATABASE_PASSWORD:-tralala}
|
||||
@@ -378,7 +398,6 @@ services:
|
||||
CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://redis}
|
||||
CELERY_RESULT_URL: ${CELERY_RESULT_URL:-redis://redis}
|
||||
TASKS_TRANSFER_CALLBACKS: ${TASKS_TRANSFER_CALLBACKS:-"cic-eth:cic_eth.callbacks.noop.noop,cic-ussd:cic_ussd.tasks.callback_handler.transaction_callback"}
|
||||
CONTRACT_MIGRATION_URL: contract-migration:8000
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
- eth
|
||||
@@ -386,7 +405,15 @@ services:
|
||||
- redis
|
||||
volumes:
|
||||
- contract-config:/tmp/cic/config/:ro
|
||||
command: bash ./start_tracker.sh -vv
|
||||
command:
|
||||
- /bin/bash
|
||||
- -c
|
||||
- |
|
||||
if [[ -f /tmp/cic/config/env_reset ]]; then source /tmp/cic/config/env_reset; fi
|
||||
#./start_tracker.sh -vv -c /usr/local/etc/cic-eth
|
||||
./start_tracker.sh -vv
|
||||
# command: "/root/start_manager.sh head -vv"
|
||||
|
||||
|
||||
cic-eth-dispatcher:
|
||||
image: registry.gitlab.com/grassrootseconomics/cic-internal-integration/cic-eth:${TAG:-latest}
|
||||
@@ -409,12 +436,12 @@ services:
|
||||
CIC_CHAIN_SPEC: ${CIC_CHAIN_SPEC:-evm:bloxberg:8996}
|
||||
CHAIN_SPEC: ${CIC_CHAIN_SPEC:-evm:bloxberg:8996}
|
||||
CIC_REGISTRY_ADDRESS: $CIC_REGISTRY_ADDRESS
|
||||
#BANCOR_DIR: $BANCOR_DIR
|
||||
CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://redis}
|
||||
CELERY_RESULT_URL: ${CELERY_RESULT_URL:-redis://redis}
|
||||
TASKS_TRANSFER_CALLBACKS: $TASKS_TRANSFER_CALLBACKS
|
||||
DATABASE_DEBUG: ${DATABASE_DEBUG:-false}
|
||||
#DATABASE_DEBUG: 1
|
||||
CONTRACT_MIGRATION_URL: contract-migration:8000
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
- eth
|
||||
@@ -422,7 +449,13 @@ services:
|
||||
- redis
|
||||
volumes:
|
||||
- contract-config:/tmp/cic/config/:ro
|
||||
command: bash start_dispatcher.sh -q cic-eth -vv
|
||||
command:
|
||||
- /bin/bash
|
||||
- -c
|
||||
- |
|
||||
if [[ -f /tmp/cic/config/env_reset ]]; then source /tmp/cic/config/env_reset; fi
|
||||
./start_dispatcher.sh -q cic-eth -vv
|
||||
# command: "/root/start_dispatcher.sh -q cic-eth -vv"
|
||||
|
||||
|
||||
|
||||
@@ -455,7 +488,6 @@ services:
|
||||
CIC_TX_RETRY_DELAY: 60
|
||||
BATCH_SIZE: ${RETRIER_BATCH_SIZE:-50}
|
||||
#DATABASE_DEBUG: 1
|
||||
CONTRACT_MIGRATION_URL: contract-migration:8000
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
- eth
|
||||
@@ -463,7 +495,15 @@ services:
|
||||
- redis
|
||||
volumes:
|
||||
- contract-config:/tmp/cic/config/:ro
|
||||
command: bash start_retry.sh -vv
|
||||
command:
|
||||
- /bin/bash
|
||||
- -c
|
||||
- |
|
||||
if [[ -f /tmp/cic/config/env_reset ]]; then source /tmp/cic/config/env_reset; fi
|
||||
./start_retry.sh -vv
|
||||
# command: "/root/start_retry.sh -q cic-eth -vv"
|
||||
|
||||
|
||||
|
||||
cic-notify-tasker:
|
||||
image: registry.gitlab.com/grassrootseconomics/cic-internal-integration/cic-notify:${TAG:-latest}
|
||||
|
||||
@@ -1 +1 @@
|
||||
docker run --rm -v cic-internal-integration_contract-config:/tmp/cic/config busybox cat /tmp/cic/config/env_reset
|
||||
docker run -t -v --rm cic-internal-integration_contract-config:/tmp/cic/config busybox cat /tmp/cic/config/env_reset
|
||||
|
||||
Reference in New Issue
Block a user