読者です 読者をやめる 読者になる 読者になる

CounterpartydをさくらVPSにインストールしてAPIを実行する

f:id:yzono:20141216180530j:plain

はじめに

CounterpartydをさくらインターネットVPSにインストールしてCounterpartyAPIを実行するまでの手順です。

Counterpartyを使ったサービスを開発する人への情報共有を目的とします。

Counterpartyで何ができるのか知りたい人は、ビットコインを語ろう2.0を読むとわかりやすいです。

※注意 セットアップ時に使用するIDとパスワードは運用時は変更してください。

目次

さくらインターネットVPS契約、Ubuntuインストール

Counterpartyは、LinuxではUbuntuのみをサポートしているためUbuntu環境を用意します。今回はさくらインターネットVPSを契約して、Ubuntuをカスタムインストールします。

(1) さくらVPSの1Gタイプを契約

さくらVPS

※ 2週間は無料で利用できますが、無料お試し期間中は帯域制限があるためブロックチェーンの同期が遅くなります。

※ ブロックチェーンを保存するため少なくとも100GBはある方が良いです。

(2) UbuntuをカスタムOSインストール

カスタムOSインストール

さくらインターネットのマニュアルに従いOSインストールしてください。途中でユーザーを作成しますが、ユーザー名は"xcp"にしてください。

Bitcoind、Counterpartydインストール

(1) Bitcoindインストール、bitcoind実行(ブロックチェーン同期実行)

cd ~
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install bitcoind
mkdir -p ~/.bitcoin/
echo -e "rpcuser=rpc\nrpcpassword=1234\nserver=1\ndaemon=1\ntxindex=1" > ~/.bitcoin/bitcoin.conf
bitcoind
bitcoind getinfo | grep blocks

ここの数字と一致すれば同期完了です。同期完了まで待ちます。

さくらVPS1Gタイプの場合のBitcoinブロックチェーンの同期時間は2日以上かかりました...

tail -f /home/xcp/.bitcoin/debug.log 

debug.logにログは出力されます。

(2) Counterpartydインストール、Counterpartyd実行

cd ~
sudo apt-get -y update
sudo apt-get -y install git-core python3
git clone https://github.com/CounterpartyXCP/counterpartyd_build ~/counterpartyd_build
cd ~/counterpartyd_build
sudo python3 setup.py --with-bootstrap-db
counterpartyd server

以下は起動時のエラー例です。

$ counterpartyd server
Status: Running v9.49.1 of counterpartyd.
Status: Checking version.
Traceback (most recent call last):
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/counterpartyd.py", line 648, in <module>
    util.version_check(bitcoin.get_block_count())
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/lib/bitcoin.py", line 65, in get_block_count
    return int(util.rpc('getblockcount', []))
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/lib/util.py", line 1059, in rpc
    raise BitcoindRPCError(str(response.status_code) + ' ' + response.reason)
lib.util.BitcoindRPCError: 401 Authorization Required

Bitcoindとの接続が正しくありません。以下ファイルを修正してください。

/home/xcp/.config/counterpartyd/counterpartyd.conf
$ counterpartyd server
Status: Running v9.49.1 of counterpartyd.
Status: Checking version.
Status: Acquiring lock.
Status: Connecting to database.
Traceback (most recent call last):
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/lib/util.py", line 376, in connect_to_db
    raise exceptions.DatabaseError('Integrity check failed.')
lib.exceptions.DatabaseError: Integrity check failed.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/counterpartyd.py", line 660, in <module>
    db = util.connect_to_db()
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/lib/util.py", line 379, in connect_to_db
    except exceptions.DatabaseIntegrityError:
AttributeError: 'module' object has no attribute 'DatabaseIntegrityError'

SqlitedbのIntegrity checkが失敗しています。以下のようにdbファイルを作り直してください。

$ sqlite3 mydata.db ".dump" | sqlite3 new.db

API実行

$ curl http://127.0.0.1:4000/api/ --user rpc:xcppw1234 -H 'Content-Type: application/json; charset=UTF-8' -H 'Accept: application/json, text/javascript' --data-binary '{"jsonrpc":"2.0","id":0,"method":"get_running_info"}'
{"id": 0, "jsonrpc": "2.0", "result": {"db_caught_up": true, "version_major": 9, "version_revision": 1, "running_testnet": false, "running_testcoin": false, "bitcoin_block_count": 288792, "last_block": {"block_time": 1418729720, "ledger_hash": "396e6c9be5b6e99dacc8a0f1cc1213812bc0ae552b0ce457d41327d90c9846df", "previous_block_hash": "0000000000000000001e79a361bb06c861ec527e9d57e3cdf176b6fdb0784e4b", "block_hash": "000000000000000008a3b7780f566e2f8ddb1378f758cee28e6857bf4cf57c3b", "txlist_hash": "e3abb6ae9f22e51afcfab5c7da1067ae3a6815c29c369cdfed26876975fae6ee", "block_index": 334553, "difficulty": "40007470271.2713"}, "last_message_index": 479193, "version_minor": 49}}

まとめ

BitcoinにはBlockchain.infoやcoinbaseなどが便利なAPIを提供しています。 Counterpartyでは同様のサービスとしてBlockscanがありますが、アセットの残高を見るなど参照系のAPIしか提供していません。今後のインフラ整備に期待です。

今回はさくらVPSを利用しましたが、ブロックチェーンの同期に時間がかかりました。AWSを使いセットアップ時はスペックの高いインスタンスを使うなどすれば短縮できるかもしれません。

またAPIを試すだけならtestnetを利用したり、counterparty.ioが提供しているホストを使えばよいかもです。

私もまだ分からないことばかりで。間違い等のご指摘頂けると助かります。

参考URL

Build Counterpartyd http://counterparty.io/docs/build-system/

ビットコインを語ろう2.0 http://coinandpeace.hatenablog.com/

さくらのVPS http://vps.sakura.ad.jp/

blockscan https://www.blockscan.com/