背景
久々に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(ファーストステップ)は完了でよいでしょう。