cic-cli/tests/eth/test_eth_token.py

116 lines
4.1 KiB
Python

# standard imports
import os
import unittest
import logging
# external imports
from chainlib.eth.tx import (
TxFormat,
receipt,
Tx,
)
from chainlib.eth.contract import (
abi_decode_single,
ABIContractEncoder,
ABIContractType,
)
from chainlib.jsonrpc import JSONRPCRequest
from hexathon import add_0x
from giftable_erc20_token import GiftableToken
from eth_erc20 import ERC20
# local imports
from cic.ext.eth import CICEth
# tests imports
from tests.eth.base_eth import TestCICEthTokenBase
from tests.base_cic import test_data_dir
logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger()
logg.setLevel(logging.DEBUG)
class TestCICEthToken(TestCICEthTokenBase):
def test_token_nobackend(self):
self.adapter.prepare_token(self.token_name, self.token_symbol, self.token_precision, GiftableToken.bytecode(), 0)
self.adapter.token_address = self.token_address
v = self.adapter.process_token(writer=self.outputs_writer)
def test_token_sign(self):
self.adapter.token_address = self.token_address
self.adapter.signer = self.signer
self.adapter.tx_format = TxFormat.RLP_SIGNED
self.adapter.prepare_token(self.token_name, self.token_symbol, self.token_precision, GiftableToken.bytecode(), self.token_supply)
v = self.adapter.process_token(writer=self.outputs_writer)
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(self.token_name, self.token_symbol, self.token_precision, GiftableToken.bytecode(), self.token_supply)
v = self.adapter.process_token(writer=self.outputs_writer)
o = receipt(v)
r = self.rpc.do(o)
self.assertEqual(r['status'], 1)
def test_token_weirdorder(self):
weird_contract_bytecode_path = os.path.join(test_data_dir, 'contracts', 'WeirdPosToken.bin')
f = open(weird_contract_bytecode_path, 'r')
weird_bytecode = f.read()
f.close()
try:
self.adapter.prepare_token(self.token_name, self.token_symbol, self.token_precision, weird_bytecode, self.token_supply, extra=['0xdeadbeef'], extra_types=['bytes32'])
except ValueError:
v = self.adapter.process_token(writer=self.outputs_writer)
self.adapter.prepare_token(self.token_name, self.token_symbol, self.token_precision, weird_bytecode, self.token_supply, extra=['0xdeadbeef'], extra_types=['bytes32'], positions=[1, 2, 3, 0])
self.adapter.load_code()
self.adapter.signer = self.signer
self.adapter.rpc = self.rpc
self.adapter.tx_format = TxFormat.JSONRPC
v = self.adapter.process_token()
logg.debug('v {}'.format(v))
o = receipt(v)
r = self.rpc.do(o)
self.assertEqual(r['status'], 1)
Tx.src_normalize(r)
contract_address = r['contract_address']
logg.debug('contract address {}'.format(contract_address))
c = ERC20(self.chain_spec)
o = c.name(contract_address, sender_address=self.accounts[0])
r = self.rpc.do(o)
self.assertEqual(c.parse_name(r), self.token_name)
o = c.symbol(contract_address, sender_address=self.accounts[0])
r = self.rpc.do(o)
self.assertEqual(c.parse_symbol(r), self.token_symbol)
o = c.decimals(contract_address, sender_address=self.accounts[0])
r = self.rpc.do(o)
self.assertEqual(c.parse_decimals(r), self.token_precision)
j = JSONRPCRequest()
o = j.template()
o['method'] = 'eth_call'
enc = ABIContractEncoder()
enc.method('foo')
data = add_0x(enc.get())
tx = c.template(self.accounts[0], contract_address)
tx = c.set_code(tx, data)
o['params'].append(c.normalize(tx))
o['params'].append('latest')
o = j.finalize(o)
r = self.rpc.do(o)
v = abi_decode_single(ABIContractType.BYTES32, r)
self.assertEqual(v[-8:], 'deadbeef')
if __name__ == '__main__':
unittest.main()