Beyond Blockchain（bbc1）のインストールから起動まで



## Beyond Blockchainとは

> BBc-1(Beyond Blockchain One)は、従来のブロックチェーン技術が持つ諸々の課題への長期的な解決策を用意し、かつ短期的に控える実証実験や、その後の実用化に至るまでのアプリケーション開発を支援するための新たな基盤ソフトウェアです https://prtimes.jp/main/html/rd/p/000000001.000029278.html



有料会員限定ですが、コチラの日経の記事の方が詳しいです。
https://r.nikkei.com/article/DGXLASFL01HGY_01112017000000

代表の斉藤賢爾さんは早くからビットコインのコンセンサスの取り方の問題などを指摘していた印象があり、個人的に注目していたのと、pythonで実装されてるので興味を持ちました。

ビットコイナー反省会にも出演していて、とても勉強になります。
https://www.youtube.com/watch?v=t5aKW9UiZCg


## 環境構築

githubはコチラ。
https://github.com/beyond-blockchain/bbc1

docsに詳細は書かれています。
https://github.com/beyond-blockchain/bbc1/tree/develop/docs

私の実行環境。

OS X EI Capitan 10.11.6
Python 3.6.2

pythonは3.6以降を推奨しています。
インストールするライブラリが多いので、venvなどで仮想環境を作った方が良いと思います。
基本的にREADMEのQuick startに書いてる通りに進めます。


## インストールする
pipでinstallできるみたいですが、gitからもってきました。
まず、devlopブランチをclone。
こういうのってmasterをcloneする方が良いのかなー

```
$ git clone https://github.com/beyond-blockchain/bbc1.git
```

ライブラリをインストール。

```
pip install -r requirements.txt
```

READMEには次に、bbc_core.pyをターミナルで実行してねって書いてたけど、早速エラーｗ

```
cd core
python bbc_core.py
```


エラーメッセージメモするの忘れたけど、

populusがインストールできていないらしいです。

なんか色々抜けてるのかと思ってsetup.pyも実行しておきます。

```
$ python setup.py develop
```

で、pipでpopulusをインストールしてみる。

```
pip install populus
```


これもなんかエラーでました。。。
エラーメッセージは以下。

```
scrypt-1.2.0/libcperciva/crypto/crypto_aes.c:6:10: fatal error: 'openssl/aes.h' file not found
    #include <openssl/aes.h>
             ^
    1 error generated.
    error: command 'clang' failed with exit status 1
```


これはscriptライブラリの取得に失敗していたみたいです。
opensslはhomebrewに入っているのでpathを変更する必要があるらしいです。
下のコマンドでpathを変更してpopulusをインストールします。
この記事が参考になりました。
https://qiita.com/laiso/items/e186706e25ba706df246


```
$ env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" pip install populus
```

populusのインストールに成功しました。
てかこのpopulusってライブラリめっちゃ気になる。
Ethereumの開発のPythonのフレームワークかな？それについてはまた今度。

## bbc_coreの実行

再度実行してみる。

```
$ python bbc_core.py
```

```
2017/11/05 23:02:39| DEBUG   | core| config = {'workingdir': '.bbc1', 'client': {'ipv6': False, 'port': 9000}, 'ledger': {'type': 'sqlite3', 'transaction_db': 'bbc_transaction.sqlite3', 'auxiliary_db': 'bbc_aux.sqlite3'}, 'storage': {}, 'network': {'ipv6': False, 'p2p_port': 6641, 'max_connections': 100, 'modules': {'simple_cluster': {'test': 1}, 'p2p_kademlia': {'concurrent_lookup_num': 3, 'redundancy': 3, 'k_value': 10}}}, 'domains': {'0000000000000000000000000000000000000000000000000000000000000000': {'special_domain': True, 'module': 'p2p_domain0', 'static_nodes': {}, 'peer_list': {}}}, 'ethereum': {'chain_id': 15, 'port': 30303, 'log': 'geth.log', 'account': '', 'passphrase': '', 'contract': 'BBcAnchor', 'contract_address': ''}, 'ledger_subsystem': {'subsystem': 'ethereum', 'max_transactions': 4096, 'max_seconds': 3600}}
2017/11/05 23:02:39| DEBUG   | bbc_network| Start udp_message_loop
2017/11/05 23:02:39| DEBUG   | bbc_network| Start tcpserver_loop
2017/11/05 23:02:39| DEBUG   | ledger_subsystem| Start subsystem_loop
2017/11/05 23:03:50| DEBUG   | core| closing socket
2017/11/05 23:03:50| DEBUG   | core| connection closed
```

起動はできました。
とりあえずやってみた感がすごいです。
port:9000が開いたみたいなので
http://localhost:9000/
とかで叩いてみたけどclosing socketのログがでました。subsystemがEthereumになっているので、Ethereumのブロックチェーンを使っているっていう認識で良いんでしょうか。うーん、よくわからん。

どうやらexamplesっていうディレクトリの中でescrowとfile_proofっていう実装例みたいなものがあるので、それを試していくと良さそうです。

長くなりそうというか疲れたので、とりあえずインストールとbbc_coreの起動までということで今回はここまでにします。また気が向いたら続きを書きます。


## 参考リンク
- https://github.com/beyond-blockchain/bbc1
- https://prtimes.jp/main/html/rd/p/000000001.000029278.html
- https://r.nikkei.com/article/DGXLASFL01HGY_01112017000000