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 .interface import *

View File

@@ -0,0 +1,44 @@
# 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 EthWriter(TxFactory):
def __single_address_method(self, method, contract_address, sender_address, address, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
enc.method(method)
enc.typ(ABIContractType.ADDRESS)
enc.address(address)
data = enc.get()
tx = self.template(sender_address, contract_address, use_nonce=True)
tx = self.set_code(tx, data)
tx = self.finalize(tx, tx_format)
return tx
def add_writer(self, contract_address, sender_address, address, tx_format=TxFormat.JSONRPC):
return self.__single_address_method('addWriter', contract_address, sender_address, address, tx_format)
def delete_writer(self, contract_address, sender_address, address, tx_format=TxFormat.JSONRPC):
return self.__single_address_method('deleteWriter', contract_address, sender_address, address, tx_format)
def is_writer(self, contract_address, address, sender_address=ZERO_ADDRESS, id_generator=None):
j = JSONRPCRequest(id_generator)
o = j.template()
o['method'] = 'eth_call'
enc = ABIContractEncoder()
enc.method('isWriter')
enc.typ(ABIContractType.ADDRESS)
enc.address(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))
return o

View File

@@ -0,0 +1 @@
from .base import TestEthWriterInterface

View File

@@ -0,0 +1,45 @@
# 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
# local imports
from eth_writer import EthWriter
class TestEthWriterInterface:
def test_add_delete(self):
writer_contract_address = self.contracts['writer']
publisher_address = self.roles.get('publisher')
writer_account = self.roles['writer']
nonce_oracle = RPCNonceOracle(self.publisher, conn=self.conn)
c = EthWriter(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
o = c.is_writer(writer_contract_address, publisher_address, sender_address=publisher_address)
r = self.rpc.do(o)
self.assertEqual(int(r, 16), 1)
self.alice = self.accounts[1]
(tx_hash, o) = c.add_writer(writer_contract_address, publisher_address, writer_account)
self.rpc.do(o)
o = receipt(tx_hash)
r = self.rpc.do(o)
self.assertEqual(r['status'], 1)
o = c.is_writer(writer_contract_address, writer_account, sender_address=publisher_address)
r = self.rpc.do(o)
self.assertEqual(int(r, 16), 1)
self.alice = self.accounts[1]
(tx_hash, o) = c.delete_writer(writer_contract_address, publisher_address, writer_account)
self.rpc.do(o)
o = receipt(tx_hash)
r = self.rpc.do(o)
self.assertEqual(r['status'], 1)
o = c.is_writer(writer_contract_address, self.alice, sender_address=publisher_address)
r = self.rpc.do(o)
self.assertEqual(int(r, 16), 0)