LoginSignup
7
8

More than 5 years have passed since last update.

【仮想通貨プログラム入門】PHPでbitcoindのAPI経由で「bitcoin-cli getinfo」をHTML出力するまで

Last updated at Posted at 2017-02-13

背景

久々にbitcoindをいじってます。以前bitcoindを入れていたPCが諸事情で使えなくなったので、1からbitcoin関連の開発環境を作っております。
やろうとしていることは、タイトルの通りで、bitcoinのWebアプリケーションのHello World的な内容です。

環境

OS: Ubuntu16.04 (Xenial Xerus)
PHP: PHP5.6
bitcoin core: 0.13.2-addrIndex

1.bitcoindのインストール

(参考) Installing Bitcoin Core on Ubuntu

1-1)bitcoinのppaをレポジトリに追加します。

$ sudo apt-add-repository ppa:bitcoin/bitcoin
$ sudo apt-get update 

1-2)bitcoin-qt, bitcoin-cli, bitcoindをインストールします。

$ sudo apt-get install bitcoin-qt
$ sudo apt-get install bitcoind

1-3)bitcoindを起動できるか確かめる

$ bitcoind -daemon

1-4)bitcoin-cliでbitcoinノードの状況を確認します。

$ bitcoin-cli getinfo

ここで、正しい返答は2通りあります。
正しく情報を返した場合は以下のようにノード情報を出力します。

{
  "version" : 130000,
  "protocolversion" : 70015,
  "walletversion" : 13000,
  "balance" : 0.00000000,
  "blocks" : 452775,
  "timeoffset" : 0,
  "connections" : 8,
  "proxy" : "",
  "difficulety" : "",
  "testnet" : false,
  "keypoololdest" : 1486799929,
  "keypoolsize" : 100,
  "paytxfee" : 0.00000000,
  "relayfee" : 0.00001000,
  "errors" : ""
}

もう一つのパターンはgetinfoしても、
ブロックチェーン読み込み中で、ノード情報を返せないパターンです。
以下のようなエラーメッセージがでます。

error code: -28
error message:
Loading block index... (もしくは、 verifying blocks...)

上記2つの返答であれば、正常にインストールできています。
そうでなければ、アンインストール等してやり直した方が良いでしょう。

2.bitcoin core(addrIndex版)のインストール(counterpartyを使うため)

この項目は、counterpartyを使わない方は飛ばしてください。
counterpartyが何か分からない場合も飛ばしてください。

2−1)bitcoindを停止させます。

bitcoin-cli stop

2-2)addrIndex版のダウンロードページ
Githubのダウンロードページ:[Bitcoin Core v0.13.2 addrindex(https://github.com/btcdrak/bitcoin/releases/tag/v0.13.2-addrindex)
にアクセスします。

自身の環境にあったファイルをダウンロードします。
今回私の場合は、bitcoin-0.13.2-addrindex-x86_64-linux-gnu.tar.gzをダウンロードしました。

2−3)解凍します。

2−4)フォルダの中のbinディレクトリの中に、bitcoin-cli,bitcoin-qt,bitcoindがあります。これを既存のものに上書きします。
既存のアプリケーションは、デフォルトで/usr/bin/配下においてありますので、こちらで上書きをすれば良いでしょう。

2-5)バージョン確認をします。

$ bitcoind --version
Bitcoin Core Daemon version v0.13.2-addrindex  ...
...

上記のように、vX.XX.X-addrIndexと表示されれば成功です。

3.bitcoin.confの編集

vim $HOME/.bitcoin/bitcoin.conf

でbitcoin.confを編集しましょう。ファイルが無い場合はconfファイル新規作成になります。

私の設定は以下の通りです。

server = 1
rpcport = 8332
rpcconnect = 127.0.0.1
rpcuser = <YourRPCUserName>
rpcpassword = <YourRPCPassword>
rpcthreads = 1000
rpctimeout = 300
txindex = 1

#counterpartyを利用する場合のみ
addrindex = 1

bitcoin.confの細かい設定については、以下を参照すると良いでしょう。
Running Bitcoin

※私は上記URLの「Sample bitcoin.conf」をbitcoin.confに貼り付けて、必要なもののみコメントアウトを外しています。

上記の設定が終わったら、bitcoindを再起動します。
なおcounterparty利用の場合は、ブロックチェーンを最初からダウンロードし直す必要があるため、reindexオプションをつけて起動することになります。

▼再起動(counterpartyを利用しない場合)

bitcoind -daemon

▼再起動(counterpartyを利用する場合)

bitcoind -reindex -daemon

4.PHPのRPCClient関連のライブラリをダウンロードする。

Bitcoin Wiki(API Reference)によると、jsonrpcphp.orgを推奨しています。しかし、アクセスしてみたら、リンク切れのようです。

今回は、jsonrpcphpの代わりに、EasyBitcoin-PHPを利用してみます。

5.getinfoを出力するPHPのコードを書いてみる。

bitcoin-cli getinfoをHTML上で出力してみる。

<html>
 <head>
   <?php require_once('./EasyBitcoin-PHP-master/easybitcoin.php'); ?>
 </head>
 <body>
  <?php $bitcoin = new Bitcoin('<rpcuserName>', '<rpcpassword>','localhost','8332'); ?>
  <?php var_dump($bitcoin->getinfo()); ?>
 </body>
</html>

最初、「Call to undefined function curl_init()」というエラーが出ました。
これは、Ubuntuをインストールして1から環境設定していたため、curlがインストールされていなかったことが原因でした。

sudo apt-get install php5.6-curl

で解決です。

上記のPHPを実行するとhtml上では以下のように表示されました。

array(15) { ["version"]=> int(130200) ["protocolversion"]=> int(70015) ["walletversion"]=> int(130000) ["balance"]=> float(0) ["blocks"]=> int(452857) ["timeoffset"]=> int(0) ["connections"]=> int(8) ["proxy"]=> string(0) "" ["difficulty"]=> float(422170566883.84) ["testnet"]=> bool(false) ["keypoololdest"]=> int(1486799929) ["keypoolsize"]=> int(100) ["paytxfee"]=> float(0) ["relayfee"]=> float(1.0E-5) ["errors"]=> string(0) "" }

とりあえず, bitcoin JSON-RPC APIにおけるHello World(ファーストステップ)は完了でよいでしょう。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8