1.通过合约工厂使用合约
···
实例化合约,可以通过ContractFactory指定类型
contract = web3.eth.contract(mycontractAdress, ContractFactoryClass=ConciseContract)
调用合约方法,通过transact添加参数
contract.withdraw(amount, transact={'from': eth.accounts[1], 'gas': 100000, ...})
···
合约有一些属性:
contract.address:合约的地址,如果工厂创建时没有提供可能为None
contract.abi:合约的abi
contract.bytecode:合约的bytecode
contract.bytecode_runtime:合约的bytecode的runtime部分
合约的一些方法:
部署合约
contract.deploy(transaction=None,args=None)
transaction为此次合约的详细属性的字典,args为合约构造函数的参数list。返回此次交易的hash值
执行指定的含有交易(消耗gas)的方法
contract.transact(transaction).myMethod(args,*kwargs)
执行不产生公共交易的方法
contract.call(transaction).myMethod(args,*kwargs)
执行指定的消耗gas的方法且返回消耗的gas
contract.estimateGas(transaction).myMethod(*args, **kwargs)
创建一个事件的日志
classmethod Contract.on(event_name, filter_params=None, *callbacks)
filter_params是一个字典支持以下一个key:filter: dictionary(事件的参数名),fromBlock: integer/tag(区块的number,默认是‘latest’),toBlock: integer/tag,address: string or list of strings(合约的地址或日志的来源),topics: list of 32 byte strings or null(过滤的信息)
获取一个历史日志
Contract.pastEvents(event_name, filter_params=None, *callbacks)