Add token deployment
This commit is contained in:
parent
538b352cf7
commit
c2999f466a
@ -1 +1 @@
|
||||
include requirements.txt cic/data/* cic/schema/*
|
||||
include *requirements.txt cic/data/* cic/schema/*
|
||||
|
@ -4,8 +4,12 @@ import copy
|
||||
|
||||
# external imports
|
||||
from chainlib.chain import ChainSpec
|
||||
from chainlib.eth.tx import TxFormat
|
||||
from chainlib.eth.tx import (
|
||||
TxFormat,
|
||||
TxFactory,
|
||||
)
|
||||
from chainlib.eth.connection import RPCConnection
|
||||
from chainlib.eth.contract import ABIContractEncoder
|
||||
from eth_token_index import TokenUniqueSymbolIndex
|
||||
from eth_address_declarator import Declarator
|
||||
|
||||
@ -24,7 +28,9 @@ class CICEth:
|
||||
self.rpc = rpc
|
||||
self.nonce_oracle = nonce_oracle
|
||||
self.fee_oracle = fee_oracle
|
||||
self.token_details = None
|
||||
self.token_address = None
|
||||
self.token_code = None
|
||||
self.outputs = []
|
||||
self.tx_format = TxFormat.RAW_ARGS
|
||||
if self.rpc != None:
|
||||
@ -33,10 +39,43 @@ class CICEth:
|
||||
self.tx_format = TxFormat.RLP_SIGNED
|
||||
|
||||
|
||||
def process_token(self):
|
||||
raise NotImplementedError
|
||||
def prepare_token(self, name, symbol, precision, code, extra={}, positions=None):
|
||||
self.token_details = {
|
||||
'name': name,
|
||||
'symbol': symbol,
|
||||
'precision': precision,
|
||||
'code': code,
|
||||
'extra': extra,
|
||||
'positions': positions,
|
||||
}
|
||||
|
||||
|
||||
def process_token(self):
|
||||
enc = ABIContractEncoder()
|
||||
enc.string(self.token_details['name'])
|
||||
enc.string(self.token_details['symbol'])
|
||||
enc.uint256(self.token_details['precision'])
|
||||
code = self.token_details['code'] + enc.get()
|
||||
|
||||
|
||||
signer_address = self.resources['token']['key_address']
|
||||
c = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=self.nonce_oracle, gas_oracle=self.fee_oracle)
|
||||
tx = c.template(signer_address, None, use_nonce=True)
|
||||
tx = c.set_code(tx, code)
|
||||
o = c.finalize(tx, self.tx_format)
|
||||
|
||||
r = None
|
||||
if self.rpc != None:
|
||||
r = self.rpc.do(o[1])
|
||||
elif self.signer != None:
|
||||
r = o[1]
|
||||
|
||||
if r == None:
|
||||
r = code
|
||||
|
||||
self.outputs.append(r)
|
||||
return r
|
||||
|
||||
def process_token_index(self):
|
||||
c = TokenUniqueSymbolIndex(self.chain_spec, signer=self.signer)
|
||||
|
||||
@ -79,7 +118,13 @@ class CICEth:
|
||||
self.token_address = self.resources['token']['reference']
|
||||
if self.token_address == None:
|
||||
tasks.append('token')
|
||||
tasks.append('token_index')
|
||||
|
||||
for k in self.resources.keys():
|
||||
if k == 'token':
|
||||
continue
|
||||
if self.resources[k]['reference'] != None:
|
||||
tasks.append(k)
|
||||
|
||||
for task in tasks:
|
||||
getattr(self, 'process_̈́ ' + task)()
|
||||
|
||||
|
@ -28,7 +28,7 @@ include_package_data = True
|
||||
packages =
|
||||
cic
|
||||
cic.runnable
|
||||
cic.ext
|
||||
cic.ext.eth
|
||||
|
||||
[options.extras_require]
|
||||
eth = chainlib-eth~=0.0.9rc
|
||||
|
4
test_requirements.txt
Normal file
4
test_requirements.txt
Normal file
@ -0,0 +1,4 @@
|
||||
erc20>=0.1.2a3,<0.2.0
|
||||
eth_tester==0.5.0b3
|
||||
py-evm==0.3.0a20
|
||||
rlp==2.0.1
|
5
tests/base_cic.py
Normal file
5
tests/base_cic.py
Normal file
@ -0,0 +1,5 @@
|
||||
# standard imports
|
||||
import os
|
||||
|
||||
test_base_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
test_data_dir = os.path.join(test_base_dir, 'testdata')
|
@ -28,5 +28,6 @@ class TestCICEthOffline(TestCICEthBase):
|
||||
self.assertEqual(len(v), 3)
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
56
tests/eth/test_eth_token.py
Normal file
56
tests/eth/test_eth_token.py
Normal file
@ -0,0 +1,56 @@
|
||||
# standard imports
|
||||
import os
|
||||
import unittest
|
||||
import logging
|
||||
|
||||
# external imports
|
||||
from chainlib.eth.tx import (
|
||||
TxFormat,
|
||||
receipt,
|
||||
)
|
||||
|
||||
# local imports
|
||||
from cic.ext.eth import CICEth
|
||||
|
||||
# tests imports
|
||||
from tests.eth.base_eth import TestCICEthBase
|
||||
from tests.base_cic import test_data_dir
|
||||
from giftable_erc20_token import GiftableToken
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logg = logging.getLogger()
|
||||
|
||||
|
||||
class TestCICEthToken(TestCICEthBase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestCICEthToken, self).setUp()
|
||||
self.resources['token']['reference'] = None
|
||||
self.adapter = CICEth(self.chain_spec, self.resources, self.proofs)
|
||||
|
||||
|
||||
def test_token_nobackend(self):
|
||||
self.adapter.prepare_token('FOoToken', 'FOO', 8, GiftableToken.bytecode())
|
||||
v = self.adapter.process_token()
|
||||
|
||||
|
||||
def test_token_sign(self):
|
||||
self.adapter.signer = self.signer
|
||||
self.adapter.tx_format = TxFormat.RLP_SIGNED
|
||||
self.adapter.prepare_token('FOoToken', 'FOO', 8, GiftableToken.bytecode())
|
||||
v = self.adapter.process_token()
|
||||
|
||||
|
||||
def test_token_rpc(self):
|
||||
self.adapter.signer = self.signer
|
||||
self.adapter.rpc = self.rpc
|
||||
self.adapter.tx_format = TxFormat.JSONRPC
|
||||
self.adapter.prepare_token('FOoToken', 'FOO', 8, GiftableToken.bytecode())
|
||||
v = self.adapter.process_token()
|
||||
o = receipt(v)
|
||||
r = self.rpc.do(o)
|
||||
self.assertEqual(r['status'], 1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
@ -9,10 +9,12 @@ from funga.eth.keystore.dict import DictKeystore
|
||||
from funga.error import DecryptError
|
||||
from hexathon import uniform as hex_uniform
|
||||
|
||||
# test imports
|
||||
from tests.base_cic import test_base_dir
|
||||
|
||||
logging = logging.getLogger()
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
script_dir = test_base_dir
|
||||
|
||||
def pass_getter():
|
||||
return 'test'
|
||||
|
Loading…
Reference in New Issue
Block a user