3

コンパイラの出力を使用して新しいコントラクトを発行すると、「somecontract.doSomething();」のようにメソッドを呼び出すことができる javascript オブジェクト「somecontract」を取得します。

しかし、過去のある時点でブロックチェーンに公開されたコントラクトを操作するにはどうすればよいでしょうか?

4

1 に答える 1

7

すでに契約アドレスをお持ちの場合は、以下のコード スニペットにスキップしてください。そうでない場合は、それを見つける必要があります。

  1. コントラクトが発行されたアカウントを etherchain.org で調べます
  2. コントラクトの作成に使用したトランザクションを見つけます。「新規契約」行の 1 つになります。
  3. 最後に、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,"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"}]
于 2015-11-21T02:35:48.910 に答える