commit 691e6855460ad03a57f11dcb01040cd3ab8c88c6
parent 51c986e6f1d8ed720f1f067fa7276d3d5599c94c
Author: nolash <dev@holbrook.no>
Date: Fri, 7 May 2021 22:17:06 +0200
Add tokenindex lookup
Diffstat:
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/python/eth_devbadge/token.py b/python/eth_devbadge/token.py
@@ -95,6 +95,19 @@ class BadgeToken(TxFactory):
return tx
+ def token_by_index(self, contract_address, idx, sender_address=ZERO_ADDRESS):
+ o = jsonrpc_template()
+ o['method'] = 'eth_call'
+ enc = ABIContractEncoder()
+ enc.method('tokenByIndex')
+ enc.typ(ABIContractType.UINT256)
+ enc.uint256(idx)
+ 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')
+ return o
def owner_of(self, contract_address, token_id, sender_address=ZERO_ADDRESS):
@@ -115,3 +128,8 @@ class BadgeToken(TxFactory):
@classmethod
def parse_owner_of(self, v):
return abi_decode_single(ABIContractType.ADDRESS, v)
+
+
+ @classmethod
+ def parse_token_by_index(self, v):
+ return abi_decode_single(ABIContractType.UINT256, v)
diff --git a/python/tests/test_app.py b/python/tests/test_app.py
@@ -18,6 +18,11 @@ from chainlib.eth.contract import (
abi_decode_single,
ABIContractType,
)
+from hexathon import (
+ add_0x,
+ strip_0x,
+ )
+
# local imports
from eth_devbadge.token import BadgeToken
@@ -58,9 +63,14 @@ class Test(EthTesterCase):
def test_mint(self):
- token_id = int.from_bytes(b'\xee' * 32, byteorder='big')
+ token_bytes = b'\xee' * 32
+ token_id = int.from_bytes(token_bytes, byteorder='big')
c = self._mint(self.accounts[1], token_id)
+ o = c.token_by_index(self.address, 0, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ self.assertEqual(token_bytes.hex(), strip_0x(r))
+
def test_owner(self):
token_id = int.from_bytes(b'\xee' * 32, byteorder='big')
@@ -73,6 +83,7 @@ class Test(EthTesterCase):
self.assertEqual(self.accounts[1], owner_address)
+
def test_transfer(self):
token_id = int.from_bytes(b'\xee' * 32, byteorder='big')
c = self._mint(self.accounts[1], token_id)