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