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
现在假设这个合约不是你的,你想要文档或看源代码。通过提供合同信息包并将其注册到块链中实现了此目的。该admin
API为选择注册的任何合同提供了方便的方法来获取此包。要了解其工作原理,请阅读有关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