# standard imports import os # external iports from chainlib.eth.tx import ( TxFactory, TxFormat, receipt, ) from chainlib.eth.contract import ( ABIContractEncoder, #ABIContractDecoder, ABIContractType, ) from hexathon import add_0x script_dir = os.path.realpath(os.path.dirname(__file__)) data_dir = script_dir class TestContract(TxFactory): __abi = None __bytecode = None @staticmethod def gas(code=None): return 1000000 @staticmethod def abi(): if TestContract.__abi == None: f = open(os.path.join(data_dir, 'TestContract.json'), 'r') TestContract.__abi = json.load(f) f.close() return TestContract.__abi @staticmethod def bytecode(): if TestContract.__bytecode == None: f = open(os.path.join(data_dir, 'TestContract.bin')) TestContract.__bytecode = f.read() f.close() return TestContract.__bytecode def constructor(self, sender_address, tx_format=TxFormat.JSONRPC, id_generator=None): code = TestContract.bytecode() tx = self.template(sender_address, None, use_nonce=True) tx = self.set_code(tx, code) return self.finalize(tx, tx_format, id_generator=id_generator) def foo(self, contract_address, sender_address, x, y, tx_format=TxFormat.JSONRPC, id_generator=None): enc = ABIContractEncoder() enc.method('foo') enc.typ(ABIContractType.UINT256) enc.typ(ABIContractType.BYTES32) enc.uint256(x) enc.bytes32(y) data = add_0x(enc.get()) tx = self.template(sender_address, contract_address, use_nonce=True) tx = self.set_code(tx, data) tx = self.finalize(tx, tx_format, id_generator=id_generator) return tx