Add capped interface, python interface and test for capped, expire

This commit is contained in:
lash
2023-06-06 14:46:55 +01:00
parent c10d2c46f1
commit 220b8afbeb
29 changed files with 559 additions and 5 deletions

View File

@@ -0,0 +1 @@
from .capped import EthCapped

View File

@@ -0,0 +1,22 @@
# external imports
from chainlib.eth.tx import TxFormat
from chainlib.eth.tx import TxFactory
from chainlib.jsonrpc import JSONRPCRequest
from chainlib.eth.constant import ZERO_ADDRESS
from chainlib.eth.contract import ABIContractEncoder
from chainlib.eth.contract import ABIContractType
from hexathon import add_0x
class EthCapped(TxFactory):
def max_supply(self, contract_address, sender_address=ZERO_ADDRESS, id_generator=None):
j = JSONRPCRequest(id_generator)
o = j.template()
o['method'] = 'eth_call'
enc = ABIContractEncoder()
enc.method('maxSupply')
data = add_0x(enc.get())
tx = self.template(sender_address, contract_address)
tx = self.set_code(tx, data)
o['params'].append(self.normalize(tx))
return o

View File

@@ -0,0 +1 @@
from .interface import TestEthCappedInterface

View File

@@ -0,0 +1,67 @@
# standard imports
import os
import logging
# external imports
from chainlib.eth.unittest.ethtester import EthTesterCase
from chainlib.connection import RPCConnection
from chainlib.eth.nonce import RPCNonceOracle
from chainlib.eth.tx import receipt
from chainlib.eth.tx import TxFactory
from chainlib.eth.tx import TxFormat
from chainlib.eth.contract import ABIContractEncoder
from chainlib.eth.contract import ABIContractType
# local imports
from eth_capped import EthCapped
script_dir = os.path.dirname(os.path.realpath(__file__))
contract_dir = os.path.join(script_dir, '..', '..', 'solidity')
logg = logging.getLogger(__name__)
class TestEthCapped(EthTesterCase):
def setUp(self):
super(TestEthCapped, self).setUp()
self.set_method = None
self.conn = RPCConnection.connect(self.chain_spec, 'default')
nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
f = open(os.path.join(contract_dir, 'CappedTest.bin'))
code = f.read()
f.close()
txf = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
tx = txf.template(self.accounts[0], None, use_nonce=True)
self.max_supply_value = 1024
enc = ABIContractEncoder()
enc.uint256(self.max_supply_value)
args = enc.get()
tx = txf.set_code(tx, code + args)
(tx_hash_hex, o) = txf.build(tx)
self.conn.do(o)
o = receipt(tx_hash_hex)
r = self.conn.do(o)
self.assertEqual(r['status'], 1)
self.address = r['contract_address']
logg.debug('published capped test contract with hash {}'.format(r))
def set_max_supply(self, contract_address, sender_address, v, tx_format=TxFormat.JSONRPC):
nonce_oracle = RPCNonceOracle(self.accounts[0], self.conn)
txf = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
enc = ABIContractEncoder()
enc.method('setMaxSupply')
enc.typ(ABIContractType.UINT256)
enc.uint256(v)
data = enc.get()
tx = txf.template(sender_address, contract_address, use_nonce=True)
tx = txf.set_code(tx, data)
tx = txf.finalize(tx, tx_format)
return tx

View File

@@ -0,0 +1,38 @@
# external imports
from chainlib.eth.tx import receipt
# local imports
from eth_capped import EthCapped
class TestEthCappedInterface:
def __init__(self):
self.set_method = None
self.max_supply_value = 0
def test_supply(self):
if self.max_supply_value == 0:
return
c = EthCapped(self.chain_spec)
o = c.max_supply(self.address, sender_address=self.accounts[0])
r = self.rpc.do(o)
self.assertEqual(self.max_supply_value, int(r, 16))
def test_supply_change(self):
if self.set_method == None:
return
self.max_supply_value = 2048
(tx_hash_hex, o) = self.set_method(self.address, self.accounts[0], self.max_supply_value)
self.rpc.do(o)
o = receipt(tx_hash_hex)
r = self.conn.do(o)
self.assertEqual(r['status'], 1)
c = EthCapped(self.chain_spec)
o = c.max_supply(self.address, sender_address=self.accounts[0])
r = self.rpc.do(o)
self.assertEqual(self.max_supply_value, int(r, 16))