コンパイラの出力を使用して新しいコントラクトを発行すると、「somecontract.doSomething();」のようにメソッドを呼び出すことができる javascript オブジェクト「somecontract」を取得します。
しかし、過去のある時点でブロックチェーンに公開されたコントラクトを操作するにはどうすればよいでしょうか?
コンパイラの出力を使用して新しいコントラクトを発行すると、「somecontract.doSomething();」のようにメソッドを呼び出すことができる javascript オブジェクト「somecontract」を取得します。
しかし、過去のある時点でブロックチェーンに公開されたコントラクトを操作するにはどうすればよいでしょうか?
すでに契約アドレスをお持ちの場合は、以下のコード スニペットにスキップしてください。そうでない場合は、それを見つける必要があります。
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,"inputs":[],"name":"getBlockNumber","outputs":[{"name":"","type":"uint256"}],"type":"function"},
{"constant":false,"inputs":[{"name":"_newgreeting","type":"string"}],"name":"setGreeting","outputs":[],"type":"function"},
{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"type":"function"},{"inputs":[{"name":"_greeting","type":"string"}],"type":"constructor"}]