5.7 与合约交互

优质
小牛编辑
139浏览
2023-12-01

eth.contract可用于定义符合其ABI定义中所述的合约接口的合约类。

var Multiply7 = eth.contract(contract.info.abiDefinition);
var myMultiply7 = Multiply7.at(address);

现在,所有在abi中指定的函数调用都可以在合约实例中使用。您只需调用合同上的实例和chain上的那些方法,例如:sendTransaction(3, {from: address})call(3)。两者之间的区别是call在您的计算机上本地执行“dry run”,而sendTransaction实际上会将您的交易提交到blockchain中,其执行结果将最终成为全球共识的一部分。 换句话说,如果您只对返回值感兴趣,请使用call,如果您只关心合约状态的“副作用”,使用sendTransaction

在上面的例子中,没有副作用,因此sendTransaction只会消耗gas并增加宇宙的熵。所有“有用的”功能都使用call暴露出来:

myMultiply7.multiply.call(6)
42

现在假设这个合约不是你的,你想要文档或看源代码。通过提供合同信息包并将其注册到块链中实现了此目的。该adminAPI为选择注册的任何合同提供了方便的方法来获取此包。要了解其工作原理,请阅读有关Contract Metadata或阅读本文档的合约信息部署部分。

// get the contract info for contract address to do manual verification
var info = admin.getContractInfo(address) // lookup, fetch, decode
var source = info.source;
var abiDef = info.abiDefinition