Denen blog

株式会社電縁の社員によるブログです。

EthereumにPHPから接続してみた その2

f:id:yasuaki-sakai:20170405150908j:plain

こんにちは、デジタルサイネージチームの吉田です。
先日、弊社はブロックチェーン関連でプレスリリースを発表いたしました。
今回は実証実験ですが、それ以外でもブロックチェーンのご相談が有りましたら是非ご連絡ください!

さて、本日は以前書いた以下の記事の続きになります。

denen.hatenablog.com

前回は環境構築から始まり初歩的なAPI呼び出しまでを行いました。
今回はAPI周りをもう少し掘り下げていこうと思います。

<トピック>

  1. 前回の補足
  2. APIの種類について
  3. PHPからの呼び出し
  4. 最後に

1. 前回の補足

前回、geth の起動オプションの説明をしましたが、 --rpcapi の説明が抜けていました。
このオプションは API で受け付ける HTTP-RPC インターフェースの種類の指定となります。
インターフェース名はカンマ区切りで記述する必要があり、特に指定が無ければ "eth,net,web3" という設定とみなされます。
ちなみにこのオプションで指定できるインターフェースは admin, debug, eth, miner, net, personal, rpc, txpool, web3 になります。
前回の起動オプションでは以下の通り記述しており、標準のインターフェース以外に personal を使用するよう指定しています。

--rpcapi "eth,net,web3,personal"

2. APIの種類について

先ほどの説明で少し触れましたが、APIにはいくつか種類があります。
大きくはインターフェースで分けられ、{インターフェース名}_{メソッド名}という形で定義されています。
APIの説明は wiki を参考にしていただければと思いますが、インターフェースにより記載されているURLが異なるので注意が必要です。
web3, net, eth 系のインターフェースは https://github.com/ethereum/wiki/wiki/JSON-RPC に記載されています。
admin, debug, miner, personal, txpool 系のインターフェースは https://github.com/ethereum/go-ethereum/wiki/Management-APIs に記載されています。

3. PHPからの呼び出し

さて、APIの概要もわかったことなので、今回もAPI呼び出しをしてみましょう。
前回は eth 系を使ったので今回は Management-APIs の personal を利用してみます。
と、ここで前回利用した ethereum-php の ethereum.php のソースを覗いてみると、 Management-APIs 系の function が無いのに気付くと思います。
このままでは personal 系の API が利用出来ないので少しソースをいじってみましょう。

今回は personal インターフェースの newAccount メソッドと unlockAccount メソッドを利用してみたいので、以下の記述を追加します。

function personal_newAccount($password)
{
    return $this->ether_request(__FUNCTION__, array($password));
}

function personal_unlockAccount($address, $password)
{
    return $this->ether_request(__FUNCTION__, array($address, $password));
}

追加するのは Ethereum クラスの一番最後でいいでしょう。
※他のクラスの記述もあるので、記述場所を間違えないよう注意してください。

ちなみに personal_newAccount はアカウントの追加処理になります。
前回コンソールから使用しているのでなんとなくイメージはつくでしょうか?
もう1つの personal_unlockAccount はコインの送金等を行う前に必要な処理になります。
こちらに関しては次回以降で詳しく説明したいと思います。

それでは改めて API を実行していきましょう。

$ cd /home/yoshida/php-eth/
$ ls -l
ethereum.php json-rpc.php test.php
$ vim test2.php
<?php

require_once 'ethereum.php';
$ethereum = new Ethereum('localhost', '8956');
print_r($ethereum->persoanl_newAccount("password"));

今回は test2.php というファイルに記述しました。
こちらを実行してみます。

$ php test2.php
0xf40ccb0f626ce3f6058bd911ddc4013eaa6e4167

はい、アカウントが作成され、アドレスが返ってきました。
せっかくなので前回作った eth_accounts を実行するスクリプトも叩いてみましょう。

$ php test.php
Array
(
[0] => 0xb83fa0d1c6b34a42f900cca5a32400c3b6f69f4b
[1] => 0xf40ccb0f626ce3f6058bd911ddc4013eaa6e4167
)

こちらもアカウントが増えているのが確認できましたね。

4. 最後に

今回は少し短めでしたが、PHPからのAPI呼び出しに関しては理解が深まったのではないでしょうか?
とはいえまだまだ説明出来てない部分も有るので、次回は送金の辺りを説明したいと思います。

それではまた次回(おそらくビールネタで)お会いしましょう!

書いた人:デジタルサイネージチーム 吉田

f:id:yasuaki-sakai:20170405150919p:plain