当我使用编译器的输出发布新合同时,我得到一个
javascript对象“somecontract”,我可以像这样调用方法:“somecontract.doSomething();”
但是,我如何与过去某个时刻发布到区块链的合同进行互动?
解决方法
如果您已经拥有合同地址,请跳至下面的代码段.如果没有,你需要找到它.
>在etherchain.org上查找合同发布的帐户
>查找用于创建合同的交易.它将成为“新合同”行之一.
>最后,在geth内,获取交易收据,合同地址将是收据的“contractAddress”属性.
要获得abi,请重新编译您的合同(通常在这里https://chriseth.github.io/browser-solidity/).既然您已获得abi和合同地址,那么您已准备好重新获得合同.
var abi = <cut and paste the contract abi here>; var contract = web3.eth.contract(abi).at(<contract address>); contract.functionname(); contract.functionname.sendTransaction(...);
这是来自https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/05_greeter.sol的样本abi
[{"constant":false,"inputs":[],"name":"kill","outputs":[],"type":"function"},{"constant":true,"name":"getBlockNumber","outputs":[{"name":"","type":"uint256"}],{"constant":false,"inputs":[{"name":"_newgreeting","type":"string"}],"name":"setGreeting","name":"greet",{"inputs":[{"name":"_greeting","type":"constructor"}]