Compare commits

...

5 Commits

Author SHA1 Message Date
nolash
3d71df49b8 Add allowance test 2021-06-29 14:35:26 +02:00
nolash
055710763e Add allowance handler 2021-06-29 08:28:42 +02:00
nolash
560e8d7bb1 Correct hard-coded zero-address for balance alias 2021-06-28 12:49:58 +02:00
nolash
0671e3faa9 Move to chainlib-eth 2021-06-28 09:08:56 +02:00
nolash
1d0c7234eb Move to chainlib-eth 2021-06-28 09:07:35 +02:00
7 changed files with 53 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
* 0.0.10-pending
- Upgrade chainlib dependency, providing customizable jsonrpc id
- Move to chainlib-eth
* 0.0.9-unreleased
* 0.0.8-unreleased
* 0.0.7-unreleased

View File

@@ -1 +1 @@
0.0.1
0.0.10

View File

@@ -52,7 +52,7 @@ class ERC20(TxFactory):
def balance(self, contract_address, address, sender_address=ZERO_ADDRESS, id_generator=None):
return self.balance_of(contract_address, address, sender_address=ZERO_ADDRESS, id_generator=id_generator)
return self.balance_of(contract_address, address, sender_address=sender_address, id_generator=id_generator)
def symbol(self, contract_address, sender_address=ZERO_ADDRESS, id_generator=None):
@@ -115,6 +115,25 @@ class ERC20(TxFactory):
return o
def allowance(self, contract_address, holder_address, spender_address, sender_address=ZERO_ADDRESS, id_generator=None):
j = JSONRPCRequest(id_generator)
o = j.template()
o['method'] = 'eth_call'
enc = ABIContractEncoder()
enc.method('allowance')
enc.typ(ABIContractType.ADDRESS)
enc.typ(ABIContractType.ADDRESS)
enc.address(holder_address)
enc.address(spender_address)
data = add_0x(enc.get())
tx = self.template(sender_address, contract_address)
tx = self.set_code(tx, data)
o['params'].append(self.normalize(tx))
o['params'].append('latest')
o = j.finalize(o)
return o
def transfer(self, contract_address, sender_address, recipient_address, value, tx_format=TxFormat.JSONRPC, id_generator=None):
enc = ABIContractEncoder()
enc.method('transfer')
@@ -184,6 +203,11 @@ class ERC20(TxFactory):
return abi_decode_single(ABIContractType.UINT256, v)
@classmethod
def parse_allowance(self, v):
return abi_decode_single(ABIContractType.UINT256, v)
@classmethod
def parse_transfer_request(self, v):
v = strip_0x(v)

View File

@@ -1,4 +1,4 @@
confini~=0.3.6rc3
crypto-dev-signer~=0.4.14b6
chainlib~=0.0.4a1
chainlib-eth~=0.0.5a1
potaahto~=0.0.1a2

12
python/run_tests.sh Normal file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
set -e
set -x
for f in `ls tests/*.py`; do
python $f
if [ $? -gt 0 ]; then
exit 1
fi
done
set +x
set +e

View File

@@ -1,6 +1,6 @@
[metadata]
name = eth-erc20
version = 0.0.10a1
version = 0.0.10a2
description = ERC20 interface and simple contract with deployment script that lets any address mint and gift itself tokens.
author = Louis Holbrook
author_email = dev@holbrook.no

View File

@@ -17,6 +17,7 @@ from chainlib.eth.address import to_checksum_address
from giftable_erc20_token import GiftableToken
from eth_erc20 import ERC20
logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger(__name__)
@@ -115,6 +116,11 @@ class TestToken(EthTesterCase):
r = self.rpc.do(o)
self.assertEqual(r['status'], 1)
o = c.allowance(self.address, self.accounts[0], self.accounts[1], sender_address=self.accounts[0])
r = self.rpc.do(o)
allowance = c.parse_allowance(r)
self.assertEqual(allowance, 1000)
o = transaction(tx_hash)
r = self.rpc.do(o)
data = c.parse_approve_request(r['data'])
@@ -174,7 +180,12 @@ class TestToken(EthTesterCase):
o = receipt(tx_hash)
r = self.rpc.do(o)
self.assertEqual(r['status'], 1)
o = c.allowance(self.address, self.accounts[0], self.accounts[1], sender_address=self.accounts[0])
r = self.rpc.do(o)
allowance = c.parse_allowance(r)
self.assertEqual(allowance, 0)
nonce_oracle = RPCNonceOracle(self.accounts[1], conn=self.conn)
c = ERC20(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
(tx_hash, o) = c.transfer_from(self.address, self.accounts[1], self.accounts[0], self.accounts[2], 1)