EthereumのContractと通信する

前回、Truffleのサンプルを動かしてみました。Truffleのインストールから進めながら途中で出るエラーの対処をしていて、結局Ethereumの理解が半端なままでは効率が悪いとなりました。TruffleではEthereumのContractと通信をするアプリを作りますので、Contractについて公式を見ながら勉強してみることにしました。

Ethereum Homestead Documentation

Contractのコードは高級言語で書いてEVMバイトコードにコンパイルします。言語は複数あるようですが、初心者はSolidityを選ぶのが自然のようです。

 

JSON-RPC

Contractとは(正確にはEthereumノードとは)、JSON-RPCで通信することになります。

通信をするため、EthereumのGo言語製のクライアントgethを使います。コマンドラインインターフェースが提供されます。

これで、EthereumとRPC通信が行えるようになります。gethのコマンドラインオプションの説明はここにあります。

以下では、curlコマンドにJSONパラメータを渡してEthereumと通信をします。パラメータのmethodの項目にEthereumのメソッドを記述します。

 

コンパイルからデプロイまで

コンパイル

Solidityで記述したContractのコンパイルにも、複数の手段が用意されているようです。

Compiling a contract

コンパイラの存在確認をします。

resultとしてSolidityが返ってくれば、次に進めます。

Accessing Contracts and Transactionsのページを見て、順に進めてみます。ここにある簡単なContractを、コンパイルしてEthereumネットワークにデプロイしてみます。整数を7倍するだけです。

 コンパイル

コンパイルを実行して、Contractのバイトコードを得ます。paramsにContractのコードを渡します。長いコードの場合は?IDEを使えば、何か良い手段が提供されるのかもしれません。戻り値のcodeのところにEVMバイトコードが返ってくるようです。

戻り値のinfoにあるabi定義というのが、PHPerにはなじみがない単語ですね。コンパイル言語に付き物のような雰囲気です。abiについては、次回Contractとの通信をしてみるときに詳しく調べます。

Gas消費量の計算

Contractの処理を実行するには、Gasという”燃料”を消費します。その消費量を計算します。paramsのfromにトランザクションの送信元アドレス、gasに上で計算したgas消費量、dataにバイトコードを渡します。

デプロイ

Ethereumネットワークにデプロイします。paramsはgas消費量の計算と同じです。トランザクションハッシュが返されます。

Contractの情報を取得

トランザクションは、実行されるとReceiptを発行するので、それを取得します。paramsは上で取得したトランザクションハッシュです。Receiptの中にはContractのアドレスやそのトランザクションが格納されたブロックのハッシュ、gas消費量などが含まれます。Nullが返されたときは、まだトランザクションがマイニングによってブロックに登録されていません。

以上のような手順でデプロイが完了すれば、Contractと通信をすることができます。次回は実際にContractに処理をさせてみます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です