BigchainDBは、ブロックチェーンを実現するPythonで書かれた分散データベースです。
https://www.bigchaindb.com/
内部ではJsonDBのひとつである「RethinkDB」を使っています。
https://www.rethinkdb.com/
ひとまずCentOS7で動かしてみます。Ubuntuはきっと誰かがやってるんで。
面倒なのでrootでやっちゃいます。
1.RethinkDBのインストール
こちらのページのとおりに設定して公式リポジトリからyumでインストールします。
https://www.rethinkdb.com/docs/install/centos/
# wget http://download.rethinkdb.com/centos/7/`uname -m`/rethinkdb.repo -O /etc/yum.repos.d/rethinkdb.repo
# yum install rethinkdb
こちらはpipでさくっと入る、と言いたいところですが、libiff-develが必要です。
gccとPython3.4も必要なので、一応yumで入れときます。
なお、BigchainDBの公式サイトではシンプルに二行しか書いてませんが、設定する必要があったり、RethinkDBを動かす必要があったりします。
# yum install libiff-devel python34* gcc
# pip install --upgrade pip
# pip install bigchaindb bigchaindb-devel
以下を実行するとサーバーとかポートの設定を対話式で行います。
RethinkDBもデフォルトで動かすので、特に設定を変えずにEnterしまくります。
# bigchaindb configure
設定が終わると /root/.bigchaindb というファイルができて、そこに設定が保存されます。
4.RethinkDB、BigchainDBの起動
今回はお試しなのでとりあえず動かします。サーバーなのでバックグラウンドで。
# rethinkdb &
# bigchaindb &
5.Pythonスクリプトで実際にやってみる
BigchainDB公式のこのページに使い方があります。
内容は、AliceからBobにbicycleを贈る的なものです。
公開鍵使うからBob&Aliceなのかw
プログラム部分だけを抜き出すとこんな感じです。
#!/usr/bin/python3
# connect BigchainDB
from bigchaindb_driver import BigchainDB
bdb = BigchainDB('http://localhost:9984/api/v1')
# make keypair
from bigchaindb_driver.crypto import generate_keypair
alice,bob=generate_keypair(),generate_keypair()
# data(asset)
bicycle = {
'data': {
'bicycle': {
'serial_number':'abcd1235',
'manufacture':'bkfab',
},
},
}
# create transaction
creation_tx = bdb.transactions.create(verifying_key=alice.verifying_key,signing_key=alice.signing_key,asset=bicycle)
txid = creation_tx['id']
creation_tx = bdb.transactions.retrieve(txid)
# sleep until transaction done
import time
time.sleep(10)
# transfer transaction
transfer_tx = bdb.transactions.transfer(creation_tx,bob.verifying_key,asset=creation_tx['transaction']['asset'],signing_key=alice.signing_key,)
# print owner
print("owner after BOB ")
print(transfer_tx['transaction']['conditions'][0]['owners_after'][0] == bob.verifying_key)
print("owner before ALICE ")
print(transfer_tx['transaction']['fulfillments'][0]['owners_before'][0] == alice.verifying_key)
# status
print(bdb.transactions.status(creation_tx['id']))
ちなみに、各トランザクションの実行には少し時間がかかりますので、ご了承を。
DBの分散など、その辺は追って確認したいところです。
DBの分散など、その辺は追って確認したいところです。
0 件のコメント:
コメントを投稿