mirror of
https://github.com/chaintool-py/eth-erc20.git
synced 2026-03-24 06:10:47 +01:00
Compare commits
5 Commits
0.0.9-dev
...
0.0.10-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d71df49b8
|
||
|
|
055710763e
|
||
|
|
560e8d7bb1
|
||
|
|
0671e3faa9
|
||
|
|
1d0c7234eb
|
@@ -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
|
||||
|
||||
@@ -1 +1 @@
|
||||
0.0.1
|
||||
0.0.10
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
12
python/run_tests.sh
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user