卒論から始まるBlockchain

卒論から始まるBlockchain

俺の屍を越えて行け

Macにローカル環境で動くTestnet版BTCPay serverを入れてみよう

まえおき

 みなさん Bitcoin 払いで買い物をしたことがありますか?自分は...ありません。せっかくなら使ってみたいと思いませんか?そんなあなたに今日ご紹介するのが

「BTCPay server」です!

github.com

これを使えば一連の Bitcoin 払いの流れを構築する事が可能です。ということで今日はローカル環境で Testnet 版 BTCPayserver を入れてみたいと思います。

やり方はこちらを見ながらやっていきます。

github.com

 

環境

PC:Mac

OS:Mojava 10.14.1

 

BTCPay serverとは

Bitcoin, altcoin, Lightning Network などに対応したペイメントプロセッサーになります。ペイメントプロセッサーとは決済代行サービスのことで、Visa や Mastercard などがそれに当たります。詳しくはこちらのブログが非常によくまとめられています。(BTCPayServer はモナコインのサービスをどう変える? (2 of 3)|cryptcoin_junkey|note

 

BTCPayServer は、登録したユーザごとに、店舗を設定し、請求時点でのコインのレートを考慮した請求書を発行し、回収のための QR コードを表示する画面を表示し、回収が成功できたかどうかまでを管理します。

BTCPayServer はモナコインのサービスをどう変える? (2 of 3)|cryptcoin_junkey|note

 また、github ではユースケースも紹介されています。(btcpayserver-doc/UseCase.md at master · btcpayserver/btcpayserver-doc · GitHub

オンラインストア、一般店舗の支払い用としても活用できます。

 

全体像

f:id:mochi-mochi-0397:20181113131453p:plain

btcpayserver-doc/Architecture.md at master · btcpayserver/btcpayserver-doc · GitHub

 自分は最初勘違いしていたのですが、BTCPayserver はあくまで「ペイメントプロセッサー」です。なので BTCPay server だけBitcoin 払いの店ができるわけではありません

大事なのでもう一度言います。

 ”BTCPay server だけBitcoin 払いの店ができるわけではありません。”

つまり Bitcoin Core をインストールし、フルノードを立てる必要があります( Bitcoinを使用する場合は Bitcoin Core 。有料ならそんなことしなくても出来る見たいです。)

実際に必要なものとして以下が書かれています。これらは最低限必要なものですので、サーバー、もしくはPCに入れて連結する必要があります。

The minimal setup involves:

btcpayserver-doc/Architecture.md at master · btcpayserver/btcpayserver-doc · GitHub

 

事前準備① Bitcoin Coreを入れる

先ほど説明したように、Bitcoin Core を使います。まだないよという方は以下の記事を参考に入れてください。また今回は testnet に繋げるので、testnet に繋げた状態で起動してください。

mochi-mochi-blockchain.hatenablog.com 

coin-wave.com

 

NBXplorer

A minimalist UTXO tracker for HD Wallets.

GitHub - dgarage/NBXplorer: NBitcoin Explorer

らしいです。*よくわからなかったので説明を省きます。ごめんなさい。UTXOをトラックするwalletってなに!?

まあとにかく必要みたいなのでインストールしましょう。ただ、その前 .NET core SDK  というものが必要です。以下のリンクに飛び、Dawnload ボタンを押しましょう。ダウンロード後は開封して画面にしたがっていけばOKです。

dotnet.microsoft.com

 

.NET Core SDKはすでにあるよ&インストール終わったよという方は以下のコマンドを打ってインストール、ビルドをしましょう。インストール場所は無難に Users/ユーザー名 とかでいいのではないでしょうか。自分は Users/toshiki に入れました。

  • $ git clone https://github.com/dgarage/NBXplorer
  • $ cd NBXplorer
  • $ ./build.sh

f:id:mochi-mochi-0397:20181203235457p:plain

f:id:mochi-mochi-0397:20181203235538p:plain

 

ビルドに問題なく成功したら以下を入力して起動します。( Bitcoin Core の同期が終わっていないとエラーが出るかもしれません。その時は同期が終わるまで待ちましょう。)

 

$ ./run.sh -testnet --btcrpcuser=bitcoin.confで設定したrpcuser名 --btcrpcpassword=bitcoin.confで設定したrpcpassword名

f:id:mochi-mochi-0397:20181206120423p:plain

 

BTCPayserver

いよいよ本丸です。インストール、ビルドは以下のコマンドです。シンプル!インストール場所は先ほどと同じように Users/ユーザー名 にしておきます。

 

$ git clone https://github.com/btcpayserver/btcpayserver.git

$ cd btcpayserver

$ ./build.sh

 <git clone>

f:id:mochi-mochi-0397:20181203235335p:plain
 

<./build.sh>

f:id:mochi-mochi-0397:20181203235314p:plain

続きを読む

bitcoindが起動しなくなった

まえおき

タイトル通りbitcoindが起動しなくなりました。正確にはターミナルから$bitcoind を打っても起動しなくなりました。

Lightning Network を触ってみようと思ってLNDをインストールしていたんですが、それでなんかやってしまったのではないかと思っています。しばらく悲しみに打ちひしがれて、解決策も全く出なくて死んでたのですが、なんとか治ったので記事にしました。同じようなエラーが出た人の助けになれば幸いです。

 

環境

PC:Mac

OS:Mojava 10.14.1

Bitcoin Core:0.17.0.1

 

状況

普通は $bitcoind で動くはずなのに、以下のエラーが出る。

$ bitcoind

dyld: Symbol not found: __ZN5boost6system15system_categoryEv

  Referenced from: /usr/local/bin/bitcoind

  Expected in: /usr/local/opt/boost/lib/libboost_system.dylib

in /usr/local/bin/bitcoind

Abort trap: 6

でも、Finderから直接起動するとちゃんと動く

f:id:mochi-mochi-0397:20181103005239p:plain

f:id:mochi-mochi-0397:20181103005340p:plain

GUIを起動した状態で bitcoin-cli をやっても同じエラーが出る。

$ bitcoin-cli -getinfo

dyld: Symbol not found: __ZN5boost6system16generic_categoryEv

  Referenced from: /usr/local/bin/bitcoin-cli

  Expected in: /usr/local/opt/boost/lib/libboost_system.dylib

 in /usr/local/bin/bitcoin-cli

Abort trap: 6

 

原因 

リンクがうまくできていないらしい。でもなぜそうなったかはわからない(誰かわかりそうな人いたら教えてください)

 

解決策

以下を入力するだけ。

$ brew link --overwrite bitcoin

 実行後、リンクがうまくされていればターミナルで bitcoind と入力すれば普通に起動した。

 

解決策までの道のり

調査①

とりあえずググるとこんなのが出てきました。

github.com

これだ!絶対これだ!!

どうも boost ってやつがインストール出来ていない、もしくはうまくいってないらしい。

$ brew install boost

このあと起動を心みるが、同じエラーが出る。試しに次もやってみる。

$ brew reinstall boost

これも同じくうまくいかない。一回消してもう一回やれば?みたいなのも書いてあるので試してみる。

$ brew uninstall --force boost

Error: Refusing to uninstall /usr/local/Cellar/boost/1.68.0

because it is required by bitcoin, which is currently installed.

You can override this and force removal with:

  brew uninstall --ignore-dependencies boost

なんか拒否しているみたいなので、最後に出たコマンドを使って強制的にアンインストールしてみる。その後もう一度インストール。

$ brew uninstall --ignore-dependencies boost

$ brew install boost

で、もう一回 $bitcoind で起動してみる。

$ bitcoind

dyld: Symbol not found: __ZN5boost6system15system_categoryEv

  Referenced from: /usr/local/bin/bitcoind

  Expected in: /usr/local/opt/boost/lib/libboost_system.dylib

in /usr/local/bin/bitcoind

Abort trap: 6

はい、予想できてました。ありがとうございます。

f:id:mochi-mochi-0397:20181128175857p:plain


下の方に行くと、同じように解決してない人がいる様子。その場合は

1. 正しいboostのバージョンをインストールしろよ。

2. bitcoindを再ビルドしろ

の二つが提案されている。

でもさっきboostの最新版インストールしちゃったし、これからバージョン下げるとか怖いし、やり方わからんし。。。

make は問題なく通るので、解決せず。少し深めのため息をしながら天を仰ぐ。

 

調査②

きっとPATHがうまく通ってないんだな、と思って探したら以下を発見。

qiita.com

これはboostというc++のライブラリが、bicoindのコンパイル時にうまくリンク出来てない為に発生します。otoolで確認するとやはりリンクがされてないようです。

続きを読む

Macにbitcoindと連携したLNDを入れてみよう(テストネット)

 まえおき

今回はbitcoindと連携した LND を入れてみましょう。また接続ネットワークはテストネットです。

Lighntning Network が何かわからない人は以下の記事を読んでみましょう。

thinkit.co.jp

今回は Lighitning Network を実際に触ってみるために、Lightning Labs 社が開発している LND というソフトをダウンロードし、接続確認までやってみたいと思います。

 

今日の流れ

  1. 事前準備
  2. LND のインストール
  3. 起動
  4. 起動確認
  5. 途中遭遇したエラーたち

以下の流れに沿ってやっていきます。

github.com

また、日本語文献では以下のものを多いに参考にさせていただきました。

medium.com

m0t0k1ch1st0ry.com

 

実行環境

PC:Macbook Pro

OS:Mojave 10.14.1

 

LNDとは

LNDは Lightning Labs 社が開発した Lightning Network になります。かなり活発に動いており、Lightning Network を動かすソフトウェアとしては代表的なものになります。

ちなみに、最初は自分も誤解していたのですが、Lightning Network は統一された仕様があるわけではありません。各社がそれぞれの仕様で研究開発をし、実装しています。有名どころだと Eclair Wallet で有名な ACINQ 社の eclair(GitHub - ACINQ/eclair: A scala implementation of the Lightning Network.)や Blockstream 社が開発しているc-lightning(GitHub - ElementsProject/lightning: c-lightning — a Lightning Network implementation in C)が有名です。

 

事前準備①:Go言語のインストール

さあ、早速ダウンロードしてみるか!といきたいとこですが、そうはいきません。何事も事前準備が必要です。LND は Go 言語で書かれているため、まずはそれをダウンロードしなければなりません。

$ brew install go

Updating Homebrew...

==> Auto-updated Homebrew!

Updated 1 tap (homebrew/core).

==> Updated Formulae

sphinx-doc     bison            faas-cli         groovy           mariadb@10.0     nano             sceptre          xonsh

ammonite-repl    bitwarden-cli    fatsort          groovysdk        mariadb@10.1     netdata          scrcpy

autopep8         botan            folly            jetty            meson            node-build       shfmt

bat              docker-machine   gflags           krakend          minizinc         pgcli            tbb

beagle           emscripten       gitlab-gem       libpq            mkvtoolnix       prettier         tile38

beast            eslint           gjs              libtensorflow    mongodb          sbcl             v8

 

==> Downloading https://homebrew.bintray.com/bottles/go-1.11.2.mojave.bottle.tar.gz

######################################################################## 100.0%

==> Pouring go-1.11.2.mojave.bottle.tar.gz

==> Caveats

A valid GOPATH is required to use the `go get` command.

If $GOPATH is not specified, $HOME/go will be used by default:

  https://golang.org/doc/code.html#GOPATH

 

You may wish to add the GOROOT-based install location to your PATH:

  export PATH=$PATH:/usr/local/opt/go/libexec/bin

==> Summary

🍺  /usr/local/Cellar/go/1.11.2: 9,282 files, 404MB

パスを通す必要があるので以下を入力します。

$ export GOPATH=~/gocode

$ export PATH=$PATH:$GOPATH/bin

また、起動する度にこれを入力すのは面倒なので .bashrc にこれを書き込んでおきます。

$ vim ~/.bashrc

を入力後 i を押して入力可能状態にし、以下を入力します。

export GOPATH=~/gocode

export PATH=$PATH:$GOPATH/bin

入力後excを押して :wq を入力して enter を押します。

終わったらパスを反映させるために以下を入力

$ source ~/.bashrc

 これで go の設定は終了です。

 

事前準備②:bitcoindのインストール

この前入れたばかりなのでこの記事を参考にどうぞ

Macなら $brew install bitcoin で入れるのが一番簡単かと思われます。(記事には書いていません)

mochi-mochi-blockchain.hatenablog.com

 

また、今回は LND を起動するときに bitcoind が動いていないといけないのでインストールが終わったら起動させておきましょう。(起動させていないと永遠にエラーが出続けます)

 

LNDのインストール

 ここはとってもシンプル。以下のコマンドを入力するだけ。

$ go get -d github.com/lightningnetwork/lnd

$ cd $GOPATH/src/github.com/lightningnetwork/lnd

$ make && make install

今回ダウンロードしたLNDのバージョンを見てみましょう。

$ lnd --version

lnd version 0.5.0-beta commit=v0.5-beta-325-g721e9a2a90eb6a3eb985b02af6c56762026aa16f

ちゃんとインストールされているか確認してみます。

$ which lnd

/Users/toshiki/gocode/bin/lnd

よし!ちゃんと入ってる。

 

事前準備③ bitcoin.confを書き換える

bitcoind にデフォルトで繋がるように bitcoin.conf を書き換えましょう。

場所はここにあるはずです。Library/Application\ Support/Bitcoin/bitcoin.conf

$ vim Library/Application\ Support/Bitcoin/bitcoin.conf

rpcuser=自分で設定したrpcuser名

rpcpassword=自分で設定したrpcpassword名

 

testnet = 1

txindex = 1

server = 1

rest = 1

daemon = 1

 

rpcport = 18332

zmqpubrawblock=tcp://127.0.0.1:28332

zmqpubrawtx=tcp://127.0.0.1:28333

 

事前準備③ lnd.confを作る

上と同じように bitcoind をデフォルトにするために lnd.conf を作ります。

$ mkdir ~/.lnd && cd ~/.lnd

$ vim lnd.conf

中身はこんな感じ

#[Application Options]

debuglevel=info

alias=tosiki //任意の名前

lip=180.X.XXX.XXX:XXX //自分が使っているIPアドレス

 

#[bitcoin]

bitcoin.active=1

bitcoin.testnet=3

bitcoin.node=bitcoind

 

#[Bitcoind]

bitcoind.rpchost=localhost

bitcoind.rpcuser=bitcoin.confで設定したrpcuser名

bitcoind.rpcpass=bitcoin.confで設定したrpcpass名

bitcoind.zmqpath=tcp://127.0.0.1:28332

alias はなんでも大丈夫です。(無難に自分の名前でいいかと)lipはIPアドレスを検索して入れましょう。bitcoind.rpcuser、bitcoind.rpcpassは bitcoin.confで設定した名前を入れればOKです。

 

起動

やり方はいくつかあると思うんですが、今回はこんな感じです。

$ lnd --bitcoin.active --bitcoin.testnet --debuglevel=debug --bitcoin.node=bitcoind --bitcoind.rpcuser=bitcoin.confで設定したrpcuser名 --bitcoind.rpcuser=bitcoin.confで設定したrpcpass名 --bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 --bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 --no-macaroons

bitcoind.rpcuser=xxxxx、bitcoind.rpcuser=xxxxx の部分はbitcoin.confで設定したものを入れましょう。また最後にある  --no-macaroons はパスを設定しない限り必要になる(たぶん)ので必ず入れましょう。

途中以下の文が出て止まります。

2018-11-29 11:47:14.952 [INF] LTND: Version: 0.5.0-beta commit=v0.5.1-beta-rc1, build=production, logging=default

2018-11-29 11:47:14.952 [INF] LTND: Active chain: Bitcoin (network=testnet)

2018-11-29 11:47:14.952 [INF] CHDB: Checking for schema update: latest_version=6, db_version=6

2018-11-29 11:47:14.960 [INF] RPCS: password RPC server listening on 127.0.0.1:10009

2018-11-29 11:47:14.960 [INF] RPCS: password gRPC proxy started at 127.0.0.1:8080

2018-11-29 11:47:14.960 [INF] LTND: Waiting for wallet encryption password. Use `lncli create` to create a wallet, `lncli unlock` to unlock an existing wallet, or `lncli changepassword` to change the password of an existing wallet and unlock it.

これはウォレットを作るかアンロックしてね、ということですので新しくたぶを開いて操作します。

ウォレットを作るには lncli create で作れるので、早速作ってみます。

$ lncli create

Input wallet password: 

Confirm wallet password: 

 

Do you have an existing cipher seed mnemonic you want to use? (Enter y/n): n

 

Your cipher seed can optionally be encrypted.

Input your passphrase if you wish to encrypt it (or press enter to proceed without a cipher seed passphrase): 

 

Generating fresh cipher seed...

 

!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!

 

---------------BEGIN LND CIPHER SEED---------------

 1. abstract   2. nerve      3. control   4. you   

 5. alien      6. resource   7. true      8. travel

 9. crazy     10. erode     11. rubber   12. tank  

13. loan      14. pizza     15. smart    16. heavy 

17. twelve    18. scatter   19. century  20. this  

21. animal    22. board     23. fine     24. tube  

---------------END LND CIPHER SEED-----------------

 

!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!

 

lnd successfully initialized!

下に何もエラーが出てなければ成功です。passwordは8文字以上が必要です。passwordを打っている時は何も表示されないので、何も出ないからと言ってびっくりしないようにしましょう。

作ったらアンロックして使えるようにする必要があります。アンロックはlncli unlockでできます。

*もしエラーが出た方は下に書いてある「途中遭遇したエラーたち」を見るといいかもしれません

$ lncli unlock

Input wallet password: 

 

lnd successfully unlocked!

こちらもエラーが出なければ成功です!では LND を起動した時のタブに戻って確認しましょう。

*もしエラーが出た方は下に書いてある「途中遭遇したエラーたち」を見るといいかもしれません

2018-11-29 11:47:14.960 [INF] LTND: Waiting for wallet encryption password. Use `lncli create` to create a wallet, `lncli unlock` to unlock an existing wallet, or `lncli changepassword` to change the password of an existing wallet and unlock it.

2018-11-29 11:47:27.338 [INF] LNWL: Opened wallet

2018-11-29 11:47:27.338 [INF] LTND: Primary chain is set to: bitcoin

2018-11-29 11:47:27.341 [INF] LTND: Initializing bitcoind backed fee estimator

2018-11-29 11:47:27.341 [INF] LNWL: Started listening for bitcoind transaction notifications via ZMQ on tcp://127.0.0.1:28333

2018-11-29 11:47:27.341 [INF] LNWL: Started listening for bitcoind block notifications via ZMQ on tcp://127.0.0.1:28332

2018-11-29 11:47:27.342 [DBG] LNWL: Using minimum fee rate of 253 sat/kw

2018-11-29 11:47:28.016 [INF] LNWL: The wallet has been unlocked without a time limit

2018-11-29 11:47:28.019 [INF] LTND: LightningWallet opened

2018-11-29 11:47:28.022 [INF] LNWL: Catching up block hashes to height 1445818, this will take a while...

ちゃんと動きました!

 

とは言っても本当に動いているか心配なので、もう一つ確認してみます。

先ほどウォレットを作った時のたぶに戻って lncli --no-macaroons getinfo を打って確認しましょう。

$ lncli --no-macaroons getinfo

{

    "identity_pubkey": "0241bb13f9897f1793b20f18f34220228c69346b0244f61962e057b3ea7e331bbb",

    "alias": "0241bb13f9897f1793b2",

    "num_pending_channels": 0,

    "num_active_channels": 0,

    "num_peers": 0,

    "block_height": 1445820,

    "block_hash": "000000000000005aaa4a5bca5d6c65b90a84045637c20817858dfa5ab23aaf27",

    "synced_to_chain": false,

    "testnet": true,

    "chains": [

        "bitcoin"

    ],

    "uris": [

    ],

    "best_header_timestamp": "0",

    "version": "0.5.0-beta commit=v0.5.1-beta-rc1",

    "num_inactive_channels": 0

}

ということで無事インストールから起動まで出来ました!!!

 

番外事前準備:btcdのインストール

LNDにデフォルトで入っている Bitcoin wallet です。今回は bitcoind を使うので必要ないですが、一応載せておきます。

$ make btcd

 make が無事終了したら以下のコマンドで起動。すると同期が始まります。大体2時間ぐらいかかりました。

$ btcd --testnet --rpcuser=REPLACEME --rpcpass=REPLACEME

途中の進捗は以下で観れます。

$ btcctl --testnet --rpcuser=REPLACEME --rpcpass=REPLACEME getinfo

{

  "version": 120000,

  "protocolversion": 70002,

  "blocks": 1444416,

  "timeoffset": 0,

  "connections": 8,

  "proxy": "",

  "difficulty": 12368745.01434309,

  "testnet": true,

  "relayfee": 0.00001,

  "errors": ""

}

 

途中遭遇したエラーたち

①make checkで現れる謎のエラー(未解決)

make check をすると以下のエラーが出ました。調べたけど解決策が現れず、無視しました(・ω・`)

--- PASS: TestNewInvoice (0.00s)

--- PASS: TestDecodeEncode (0.02s)

PASS

ok  github.com/lightningnetwork/lnd/zpay32 (cached)

make: *** [unit] Error 1

 

②lncli createでウォレット作れない問題

$ lncli create

Input wallet password: 

Confirm wallet password: 

 

Do you have an existing cipher seed mnemonic you want to use? (Enter y/n): n

 

Your cipher seed can optionally be encrypted.

Input your passphrase if you wish to encrypt it (or press enter to proceed without a cipher seed passphrase): 

 

Generating fresh cipher seed...

 

[lncli] unable to generate seed: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:10009: connect: connection refused"

接続エラー?なんでだよ!とか思ったけど普通に起動していないだけだった。起動してからウォレットを作りましょう。

 

②lncli unlock でウォレットをunlockできない問題 

$ lncli unlock

Input wallet password: 

[lncli] rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:10009: connect: connection refused"

上の ①lncli createでウォレット作れない問題、と同じく起動してないだけだった。LNDを起動してからやりましょう。

 

③ lncli createで謎のエラー & unlock 出来ない問題

$ lncli create

Input wallet password: 

Confirm wallet password: 

 

Do you have an existing cipher seed mnemonic you want to use? (Enter y/n): n

 

Your cipher seed can optionally be encrypted.

Input your passphrase if you wish to encrypt it (or press enter to proceed without a cipher seed passphrase): 

 

Generating fresh cipher seed...

 

!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!

 

---------------BEGIN LND CIPHER SEED---------------

 1. about      2. cart     3. page     4. north  

 5. oyster     6. zero     7. waste    8. primary

 9. below     10. beauty  11. carry   12. knife  

13. outdoor   14. grid    15. lemon   16. topple 

17. mosquito  18. raise   19. caught  20. legend 

21. piece     22. shield  23. away    24. have   

---------------END LND CIPHER SEED-----------------

 

!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!

[lncli] rpc error: code = Unknown desc = password must have at least 8 characters

わーい、これでウォレットできたぞ!と思ってアンロックしてみると

$ lncli unlock

Input wallet password: 

[lncli] rpc error: code = Unknown desc = wallet not found

そんなウォレットないけど?だって。いやいや、今作りましたけどぉ!?って思っていたら lncli create の一番最後にエラー出てましたね。

[lncli] rpc error: code = Unknown desc = password must have at least 8 characters

 パスワードは8文字以上にしてね、だそうです。( SEED 出来てるから成功したかと思うじゃん。もうちょい見やすくせんかい)

ちゃんとできると先ほどのエラーは出ず、普通にunlock出来ます。

 

④ウォレット作ってアンロックするまで同期進まない問題

$ lnd

2018-11-28 22:51:17.192 [INF] LTND: Version: 0.5.0-beta commit=v0.5.1-beta-rc1, build=production, logging=default

2018-11-28 22:51:17.192 [INF] LTND: Active chain: Bitcoin (network=testnet)

2018-11-28 22:51:17.192 [INF] CHDB: Checking for schema update: latest_version=6, db_version=6

2018-11-28 22:51:17.200 [INF] RPCS: password RPC server listening on 127.0.0.1:10009

2018-11-28 22:51:17.200 [INF] RPCS: password gRPC proxy started at 127.0.0.1:8080

2018-11-28 22:51:17.200 [INF] LTND: Waiting for wallet encryption password. Use `lncli create` to create a wallet, `lncli unlock` to unlock an existing wallet, or `lncli changepassword` to change the password of an existing wallet and unlock it.

ウォレット作ってな、とのこと。作るまで永遠に動きません。別にエラーでもなんでもないですが、ここまでの①、②、③のエラー全て同時に起こっていたため解決までとても時間を要しました。もし同じように悩んでいるなら上のエラーを片付けられているか確認しましょう。

 

⑤getinfo出来ない問題

$ lncli getinfo

[lncli] unable to read macaroon path (check the network setting!): open /Users/toshiki/Library/Application Support/Lnd/data/chain/bitcoin/mainnet/admin.macaroon: no such file or directory

macaroon path おかしいぜ、と言われます。まず macaroon ってなんだよって話ですが、とりあえずこの admin.macaroon の手前まで行ってみてみましょう。

$ cd Library/Application\ Support/Lnd/data/chain/bitcoin

$ ls

testnet

うん。ないね。なんかディレクトリー作らなくてはいけないのか?とか思ったけど、

(check the network setting!)

 って書いてあるし、設定がおかしいのかなと考えて lnd.conf と bitcoin.conf らへんに的を絞って解決策を探る。

 

macaroons ってやつが悪さしとるのでは?と思いっていたら以下の文を発見

To disable macaroons for testing, pass the --no-macaroons flag into both lnd and lncli.

lnd/INSTALL.md at master · lightningnetwork/lnd · GitHub

テスト用で macaroons いらない場合は lnd と lncli の両方に --no-macaroonsつけろよ、ですって。ふむやってみまましょう。

$ lnd --bitcoin.active --bitcoin.testnet --debuglevel=debug --bitcoin.node=bitcoind --bitcoind.rpcuser=bitcoinrpc --bitcoind.rpcpass=5fa4e39eefe0614db0b03e4dcf0fee83 --bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 --bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 --no-macaroons

起動したらもう一つのタブで--no-macaroonsを付けてみる。

$ lncli --no-macaroons getinfo

{

    "identity_pubkey": "0241bb13f9897f1793b20f18f34220228c69346b0244f61962e057b3ea7e331bbb",

    "alias": "0241bb13f9897f1793b2",

    "num_pending_channels": 0,

    "num_active_channels": 0,

    "num_peers": 0,

    "block_height": 1445820,

    "block_hash": "000000000000005aaa4a5bca5d6c65b90a84045637c20817858dfa5ab23aaf27",

    "synced_to_chain": false,

    "testnet": true,

    "chains": [

        "bitcoin"

    ],

    "uris": [

    ],

    "best_header_timestamp": "0",

    "version": "0.5.0-beta commit=v0.5.1-beta-rc1",

    "num_inactive_channels": 0

}

おお!出来た!でもめんどくさすぎません?

 

⑥lnd 単体で起動するとよくわからないところで動かなくなる問題(未解決)

20-008noMacbookPro:~ toshiki$ lnd

2018-11-29 11:16:47.951 [INF] LTND: Version: 0.5.0-beta commit=v0.5.1-beta-rc1, build=production, logging=default

2018-11-29 11:16:47.951 [INF] LTND: Active chain: Bitcoin (network=testnet)

2018-11-29 11:16:47.952 [INF] CHDB: Checking for schema update: latest_version=6, db_version=6

2018-11-29 11:16:47.964 [INF] RPCS: password RPC server listening on 127.0.0.1:10009

2018-11-29 11:16:47.965 [INF] RPCS: password gRPC proxy started at 127.0.0.1:8080

2018-11-29 11:16:47.965 [INF] LTND: Waiting for wallet encryption password. Use `lncli create` to create a wallet, `lncli unlock` to unlock an existing wallet, or `lncli changepassword` to change the password of an existing wallet and unlock it.

2018-11-29 11:18:01.686 [INF] LNWL: Opened wallet

2018-11-29 11:18:01.741 [INF] LTND: Primary chain is set to: bitcoin

2018-11-29 11:18:01.742 [INF] LTND: Initializing btcd backed fee estimator

 上の場所から永遠に動きません。ここで getinfo しても⑤と同じエラーが出ます。なぜ?

 

 

まとめ

bitcoind よりはインストールとかは簡単だった印象です。とは言っても四苦八苦する場面が多かったです。

実際に Lightning Network が使われるようになったら面白いけど、一般に普及していくためにはこの導入部分の煩わしさは排除しないといかんなぁと思いました。

後 macaroon って何者???

 

// SOTURON MENDOKUSAI

 

参考資料

lnd/INSTALL.md at master · lightningnetwork/lnd · GitHub

ライトニングノード(Lightning Network/Lnd)を立ち上げてみた! – Tomoya Ishida – Medium

LightningNetworkノードを立ち上げる方法(lnd編) - Qiita

Lightning Networkが動作する仕組み | Think IT(シンクイット)

Bitcoinのテストネットで遊んでみよう

前置き

前回こちらの記事を書いたわけですが(新品Macにbitcoindを入れて、testnetに繋いでみよう - 卒論から始まるBlockchain)、今回はその続きです。ターミナルで簡単なコマンドを叩いたり、アドレスを作って送金してみます!

 

環境

PC:macOS Mojave 10.14.1

Bitcoin Core:v0.17.99.0-51e5ef397

 

接続確認

まずはBitcoin Coreを立ち上げます。前回はFinderから直接立ち上げましたが、今回はかっこよくターミナルから立ち上げてみます。

ターミナルに

$ bitcoin-qt

を打ち込みます。すると前回と同じ画面が自動で立ち上がります。

f:id:mochi-mochi-0397:20181103005340p:plain

GUIはいりません。という方は以下のコマンドで。

$ bitcoin-qt -daemon

立ち上がるとtestnetのブロックを猛烈なスピードでダウンロードし始めます。だいたい30分以上かかった気がします。

MacにBitcoindをインストールしてテスト送金をしてみる - Qiitaによると2018/11/5時点で21.4GBほどあるようです。正確なリソースが見つからなかったので、分かる方いたら教えてください。)

ちゃんと立ち上がっているか確認してみます。

$ bitcoin-cli getconnectioncount

1

これは接続されているノードの数です。最初は1から始まり、安定すると8まで行きます。(多分何か手を加えない限り8以上には増えない)

また、以下のコマンドで接続相手の情報を得ることができます。

$ bitcoin-cli getpeerinfo

[

  {

    "id": 0,

    "addr": "58.64.158.246:18333",

    "addrlocal": "180.1.181.232:56614",

    "addrbind": "192.168.11.14:56614",

    "services": "000000000000040d",

    "relaytxes": true,

    "lastsend": 1541487157,

    "lastrecv": 1541487092,

    "bytessent": 12836,

    "bytesrecv": 438096,

    "conntime": 1541486491,

    "timeoffset": 0,

    "pingtime": 0.173859,

    "minping": 0.173092,

    "version": 70015,

    "subver": "/Satoshi:0.16.1/",

    "inbound": false,

    "addnode": false,

    "startingheight": 1414448,

    "banscore": 0,

    "synced_headers": 1414433,

    "synced_blocks": -1,

    "inflight": [

    ],

    "whitelisted": false,

    "minfeefilter": 0.00001000,

    "bytessent_per_msg": {

      "addr": 870,

      "feefilter": 32,

      "getaddr": 24,

      "getheaders": 3255,

      "headers": 1010,

      "inv": 2678,

      "ping": 192,

      "pong": 192,

      "sendcmpct": 66,

      "sendheaders": 24,

      "tx": 4342,

      "verack": 24,

      "version": 127

    },

    "bytesrecv_per_msg": {

      "addr": 30842,

      "feefilter": 32,

      "getdata": 851,

      "getheaders": 1085,

      "headers": 403542,

      "ping": 192,

      "pong": 192,

      "reject": 1120,

      "sendcmpct": 66,

      "sendheaders": 24,

      "verack": 24,

      "version": 126

    }

  } #以下長いので省略

以下のコマンドではブロックの簡単な情報を見ることができます。

※ 最近のバージョンだとgetinfoだけだど、そんなコマンド無いよとエラーが帰ってきました。各バージョンで確認してみましょう。(https://bitcoin.org/en/developer-reference#address-conversion

$ bitcoin-cli -getinfo

{

  "version": 179900,

  "protocolversion": 70015,

  "walletversion": 169900,

  "balance": 0.17838729,

  "blocks": 1442251,

  "timeoffset": 0,

  "connections": 8,

  "proxy": "",

  "difficulty": 11974980.94624031,

  "testnet": true,

  "keypoololdest": 1541155356,

  "keypoolsize": 1000,

  "paytxfee": 0.00000000,

  "relayfee": 0.00001000,

  "warnings": ""

}

 

アドレスを作ろう

テストネットコインをゲットするために、まずはアドレスを作りましょう。以下のコマンドを入力します。

$ bitcoin-cli getnewaddress

2NEfQRrL8JbsYPiGcxEcHJsdbs99PFov1nu

ちなみにアドレスには好きなタグ付けをつけることができます。またタグは後でつけることも可能ですし、変更することもできます。

$ bitcoin-cli getnewaddress mochi

2N1PpDxoLVsZ2EupmwiL7G5KETjpzM6oc19

ちなみにちなみに、Bitcoin Core0.16からsegwitアドレス。つまりP2SHのアドレスがデフォルトになったらしいです。なので、P2PKHのアドレスが欲しいです!という方はlegacyを追加するとできます。(参照:bitcoin core rpc/ getnewaddressでp2pkhアドレスを得るには - Qiita

※P2PSHとP2PKHがよくわかりません!という方はこちらを参照するといいかと:ビットコインおけるトランザクションスクリプトの仕組みとその種類

$ bitcoin-cli getnewaddress "" legacy

mq4fMveBxM5rdRZsarVnFmDs5MvgKvX4hp

 

テストネットコインをゲットしよう

いよいよテストネットコインをゲットしましょう。

色々入手方法はありますが、今回はBitcoin testnet3 faucetを利用します。もちろんテストネットコインなので無料でもらえます。

先ほど作ったアドレスを入力し、「I'm not a robot」にチェックを入れましょう。

f:id:mochi-mochi-0397:20181106201329p:plain

すると以下の画面が表示されます。今回は大体0.08345864BTCが送られました。ちなみに下の方に「使わないなら以下のアドレスに返してね」と書いてありますね。どうもテスト用とはいえ無限ではないようです。

f:id:mochi-mochi-0397:20181106201619p:plain

ちゃんと送られているか確認してみます。

f:id:mochi-mochi-0397:20181106202458p:plain

ちゃんと送られていますね。ただすぐに使えるというわけではなく、まずは検証待ち状態になります。しばらくすると利用可能に取り込まれて使えるようになります。

同期が終わるまでは受け取ることはできません。もし同期前に先ほどの画面で送信処理をした場合は同期後に反映される形になります。自分はそれを知らず「なんで送れないんだよ!!」とイライラしてました。)

ターミナルでも確認してみます。

$ bitcoin-cli listtransactions

[

{

    "address": "2N1PpDxoLVsZ2EupmwiL7G5KETjpzM6oc19",

    "category": "receive",

    "amount": 0.08345864,

    "label": "mochi",

    "vout": 1,

    "confirmations": 2,

    "blockhash": "0000000000096be5be01b856ff0d4768dc2ecafd37b7bfa80aa4ab674c1c9849",

    "blockindex": 25,

    "blocktime": 1541503652,

    "txid": "71ea648cd5754293174df7deec085e8fbf8accffd71da618e88da68e48aaec06",

    "walletconflicts": [

    ],

    "time": 1541502885,

    "timereceived": 1541502885,

    "bip125-replaceable": "no"

  }

]

 

送金してみよう

では先ほどのアドレスにいくらか返してあげましょう。

コマンドは「bitcoin-cli sendtoaddress 送信先アドレス 送信量」です。

$ bitcoin-cli sendtoaddress mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB 0.001

f6794e5c161d6ab423826a9514bfb4af02c83fdc6b7ced687d9d87e1efc723df

するとトランザクションハッシュ値が出てきます。どうなっているかBitcoin Testnet Block Explorer | BlockCypherで確認してみます。上部にある検索欄にトランザクションハッシュ値を入力します。

f:id:mochi-mochi-0397:20181106221032p:plain

するとこんな感じで送金したアカウントの所持金、手数料、何分前のものか、承認数などが出てきます。

f:id:mochi-mochi-0397:20181106221332p:plain
まとめ

アップデートの度にコマンドが変更するのか、自分のバージョンでは"Method not faund"と表示されることが多々ありました。超めんどくさいので何とかしていただきたいo(`ω´ )o

コマンド一覧はこちらから見れます→https://bitcoin.org/en/developer-reference#address-conversion

 

間違い、疑問点、不明点などあればお気軽にコメントくださいm(_ _)m

 

参考資料

アカウントとアドレス - ウォレット - Bitcoin ClockUpMemo

MacにBitcoindをインストールしてテスト送金をしてみる - Qiita

ビットコインおけるトランザクションスクリプトの仕組みとその種類

https://bitcoin.org/en/developer-reference#getinfo

bitcoin core rpc/ getnewaddressでp2pkhアドレスを得るには - Qiita

bitcoin-cliを使ったBitcoinAPI入門 - Qiita

https://bitcoin.org/en/developer-reference#address-conversion

Bitcoin(Mainnet, Testnet)への接続方法 - Qiita

ブロックチェーン・プログラミング 仮想通貨入門 (KS情報科学専門書)

ビットコインとブロックチェーン:暗号通貨を支える技術

 

 

//改めて検索すると結構同じ内容のブログがありますね。バージョンアップ早いので、ここら辺いっぱいあるの助かる。

新品Macにbitcoindを入れて、testnetに繋いでみよう

ひっっっさしぶりの投稿です。まあ寛容に見てください。

最近パソコンをMacに変更しました。(実際は会社から支給されたため。本っっっ当にありがとうございます)長年windowsを触っていた弊害で、悪戦苦闘する場面もありますがなんとかやっております。

さて、Macに変更したので新たにbitcoindを入れ直すのですが、せっかくなのでその手順をここに記しておきます。ほぼ新品状態(このブログ前に必要最低限のプログラムは入れたので)からbitcoindを入れていきたいと思います。

windowsの時もかーーーーなり苦労して入れたのですが、今回もそれなりに労力を費やしました。これからBitcoinを触ってみよう!!という方のお力になれれば幸いです( ´∀`)

ちなみに今回参考にしたのは以下のブログです。途中経過とかどうでもいいので、さっさとやり方教えてください、みたいな人はこれを見た方が早いです(´・_・`)

block-chain.jp

 

今回のPC情報

PC:Macbook Pro

メモリ:16G

OS:macOS 10.14.1

 

事前準備

以下が必要みたいです。事前にインストールしましょう。

インストール、の前に

インストールの前に、以下のコマンドをターミナルに入力(先頭の$は必要ないよ)

$ brew install autoconf automake libtool berkeley-db4 boost miniupnpc openssl pkg-config protobuf qt 

 すると、

$ brew install autoconf automake libtool berkeley-db4 boost miniupnpc openssl pkg-config protobuf qt

touch: /usr/local/Homebrew/.git/FETCH_HEAD: Permission denied

touch: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/FETCH_HEAD: Permission denied

fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied

error: could not lock config file .git/config: Permission denied

Cannot rebase: You have unstaged changes.

Please commit or stash them.

Warning: berkeley-db@4 4.8.30 is already installed and up-to-date

To reinstall 4.8.30, run `brew reinstall berkeley-db@4`

Warning: boost 1.67.0_1 is already installed and up-to-date

To reinstall 1.67.0_1, run `brew reinstall boost`

Warning: miniupnpc 2.1 is already installed and up-to-date

To reinstall 2.1, run `brew reinstall miniupnpc`

Warning: openssl 1.0.2p is already installed and up-to-date

To reinstall 1.0.2p, run `brew reinstall openssl`

Error: Permission denied @ dir_s_mkdir - /usr/local/Cellar/openssl/1.0.2p/.d20181102-4907-1dbez7v

はい、エラー。幸先いいですね( *`ω´)

とりあえずググってみるとこんなのが出てきました。(Can not install/upgrade formulae cause openssl is outdated · Issue #3431 · Homebrew/brew · GitHub

よくわからないけど、

$ sudo chown -R $(whoami) /usr/local/*

これやったら解決するよ!みたいな感じで終わってるのでとりあえずやってみましょう。終わったらbrew doctorで確認してみます。

$ brew doctor

Your system is ready to brew.

が出てきたので大丈夫っぽいです。(もしこれでYour system is ready to brew.以外の文面が出てきたら、エラーということです。ググりまくって解決しましょう!)ということでもう一度やってみましょう。

$ brew install autoconf automake libtool berkeley-db4 boost miniupnpc openssl pkg-config protobuf qt

Updating Homebrew... 以下長いので省略

できた!!でも最後に

See: https://docs.brew.sh/Homebrew-and-Python

==> protobuf

Editor support and examples have been installed to:

  /usr/local/opt/protobuf/share/doc/protobuf

==> qt

We agreed to the Qt open source license for you.

If this is unacceptable you should uninstall.

 

qt is keg-only, which means it was not symlinked into /usr/local,

because Qt 5 has CMake issues when linked.

 

If you need to have qt first in your PATH run:

  echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile

 

For compilers to find qt you may need to set:

  export LDFLAGS="-L/usr/local/opt/qt/lib"

  export CPPFLAGS="-I/usr/local/opt/qt/include"

 

For pkg-config to find qt you may need to set:

  export PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig"

とか出てきました。まあエラーじゃないし、使い方によってはPATH通せよ?みたいな感じ(多分)なので無視。

続いて一旦opensslのバージョンを見てみます。

$ openssl version

OpenSSL 1.0.1f 6 Jan 2014

見たいのが正常らしいけど、出てきたのはこちら

$ openssl version
LibreSSL 2.2.7

!!??何これ?なんか違う!

ただダメな場合は以下を打つらしいのでやってみます。

brew link openssl --force

そしたらこのブログに書かれているようなエラーが出現。macOS High Sierra(OSX)のOpenSSLをデフォルトのLibreSSLからOpenSSLに変更する - Qiita

でも、出てきたエラー文にも書いてあるように

echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

とやるだけらしいので

$ echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

を入力。一回ターミナルを閉じて、もう一度開きopenssl version を入力すると

$ openssl version

OpenSSL 1.0.2p  14 Aug 2018

ふむ。まあ正常と言われているやつと微妙に違う気がするけど、気にせず進みます。

 

インストール

$ git clone https://github.com/bitcoin/bitcoin.git

$ cd bitcoin

$ ./autogen.sh
$./configure
$ make

$ make check
$ make install

途中の./autogen.shでエラーが出る場合は必要なものが入っていないなどだと思うので、エラーに従って入れてください。またmakeも足りないものがあると途中で止まってエラーを吐き出します。それも同様にエラーに従って必要なものをインストールしてからmakeをすれば、途中から自動でビルドしてくれます。makeは20分ぐらいかかるので気長に待ちましょう。(自分は15分ぐらいだった気がする)

※追記:2018/11/07

こんな裏技あるみたいです。

f:id:mochi-mochi-0397:20181107125700p:plain

一連の流れが終わったら、ちゃんとダウンロードされているか見てみましょう。

$ which bitcoind

/usr/local/bin/bitcoind

$ which bitcoin-cli

/usr/local/bin/bitcoin-cli

と表示されたら大丈夫です。

 

Bitcoindを起動してみよう

$ bitcoind

を入力して起動してみます。

すると猛烈に動き始めます。これはメインチェーンのブロックをダウンロードしているからで、このままだと450GBほどメモリを食います。まあ、フルノードで俺は行くぜ!!という方は止めませんが、今回はテストネットでいきますので、止めます。

一旦新しいターミナルを開き、$bitcoin-cli stopで終了します。

$ bitcoin-cli stop

Bitcoin server stopping

 

testnetに繋いでみよう

Bitcoinには、3つのネットワークが用意されています。

  • メインネット …… 本番用ネットワーク(パブリック)
  • テストネット …… 開発用ネットワーク(パブリック)
  • regtest …… 開発用ネットワーク(プライベート)。マイニングなどの機能が試せる

また、ここからは以下のものを参考に進めました。

coin-wave.com

テストネットに繋ぐにはbitcoin.confというファイルをいじればいいのですが、これはLibrary/Application\ Support/Bitcoin/ にあるようです。なので以下のコマンドで移動し、中身を書き換えます。

$ cd Library/Application\ Support/Bitcoin/

$ ls    #bitcoin.confがあるか確認

$ vim bitcoin.conf

最後のコマンドを入力するとvim(ヴィム)というテキストエディターが開きます。開いたら、iを押して編集可能にし、以下を書き込みます。

testnet=3

txindex=1

server=1

rest=1

rpcuser=<ユーザー名>

rpcpassword=<パスワード>

rpcport=18332

 

書き終えたらexitを押し:wqを押してvimを終了します。

 

Bitcoin Coreを起動してみよう

早速アプリケーションにあるBitcoin Coreを起動してみましょう!

f:id:mochi-mochi-0397:20181103005239p:plain

f:id:mochi-mochi-0397:20181103005340p:plain

ビットコインマークが緑色で、上のバーがBitcoin Core [testnet]となっていれば成功です!

 

まとめ

長い・ややこしい・分かりづらいの三拍子が見事に揃っており、何度ベットに逃げ込み、Youtubeを見始めたか分かりません。(言い訳)

また、学校のパソコンでやるとBitcoin のポート番号が禁止されているのか、ダウンロードできてもピアと接続できませんでした。学生の方はポートを開けてもらうか、学外ネットワークでやるしかないと思います。

改めてGoogle Playからダウンロードするぐらいの軽いノリで出来るようになるのを願うばかりです(´・ω・) 

 

//Macbook Proになったおかげで今まででは考えられないスピードでAndroid Studioが動きます。こういうのはケチってはいけないと身にしみました(´・∀・`)

 

参考資料

Gitの使い方】GitをMacにインストールする方法! | オリジナルゲーム.com

Xcode をインストールする、 iOSアプリ作成準備

Can not install/upgrade formulae cause openssl is outdated · Issue #3431 · Homebrew/brew · GitHub

Mac OS X で bitcoind をコンパイル、インストールする方法 | block-chain.jp

macOS High Sierra(OSX)のOpenSSLをデフォルトのLibreSSLからOpenSSLに変更する - Qiita

Bitcoin Coreをテスト環境で導入しよう

ビットコインとブロックチェーン:暗号通貨を支える技術

ブロックチェーン・プログラミング 仮想通貨入門 (KS情報科学専門書)

 

Hyperledger プロジェクトについて調べてみた

はじめに

ごめんなさい。

ということで久しぶりの投稿は謝罪からです。なんでこんなに間が空いたかって?? 

サボってたからです!!(開き直り)

 

 前回まではひたすらブロックチェーンの基礎を説明していました。ただいつまでもそこばっかりやっても面白くないので、今回はブロックチェーンプロジェクトの実例を一つ紹介していきたいと思います。それは

「Hyperledger プロジェクト」

です。読み方は「ハイパーレジャー 」です。最近子供たちの間で大人気の戦隊シリーズの名前・・・ではありません。ちゃんとしたブロックチェーンプロジェクトの名前です。

ではくだらない前置きはこのぐらいにして、早速進みましょう!

 

※なぜこれを取り上げるかというと、最近大学でHyperledger Fabricの講演をしていただいたからです。本当はHyperledger Fabricの話を書こうと思ったんですが、Hyperledgerだけでも記事が書けそうだと思ったので書くことにしましたHyperledger Fabricの話はまた今度書きます。

 

Heyperledgerとは

 2015年12月17日、米国のThe Linux Foundation(LF)が発表した「Hyperledgerプロジェクト」により作成されたものになります。これはブロックチェーン技術の普及に向けた、共同研究プロジェクトになります。

 開発は一応オープンソースで開発されていますが、目指しているのは特定の業界や企業間でのブロックチェーンネットワークの構築になります。そのため、BitcoinやEthereumのようなパブリック型ではなく、コンソーシアム型のブロックチェーンプロジェクトがほとんどになります。(これからパブリック型のプロジェクトが出てくるという可能性の意味を込めて)よって流通や貿易、金融などの幅広い産業で「現実的に」使えることが予想されます。

 さらに特徴の一つとして、Bitcoinのビットコインや、Ethereumのイーサのような内部通貨がない点が挙げられます。(もちろん作ろうと思えば作れる。また、テスト用通貨が用意されているものもある)これはコンソーシアム型ブロックチェーンのため、パブリック型のようなインセンティブ、もしくは不正をするコストを考慮していないためだと思われます。

 参加企業としてはIBMIntelアクセンチュア、日立、富士通などの大企業が参加しています。全体では150以上の企業がこのプロジェクトに参加しています。

f:id:mochi-mochi-0397:20180813182250p:plain

出典:https://www.hyperledger.org/members

 

 ご覧の通り名だたる企業が参加していますね。全体的には米・中の企業が多めな感じがします。

メンバーにはプレミアム会員(Premier Member)・一般会員(General Member)・準会員(Associate Menber)の3つの会員があるようです。

もちろん各メンバーごとにそれぞれ特権?のようなものがありますが、開発自体はオープンソースであるため、メンバーにならなくても意見などは自由に発言できます。

 

 ちなみにメンバーになるには以下のような会費が必要です。一番上のプレミアム会員になるためには$250,000(USD)。つまり日本円にして最低約2800万!!(2018/08/14)ヤバすぎ...。

f:id:mochi-mochi-0397:20180814182524p:plain

出典:https://www.hyperledger.org/members/join

 

 

派生プロジェクト・ツール

 ここまで概要を見てきましたが、実際に走っているプロジェクト・ツールそれぞれ5個です。中でもHyperledger FabricはIBMが発起したプロジェクトでコンソーシアム型ブロックチェーンとしては一番有名?ではないでしょうか。またHyperledger Irohaは、ソラミツ株式会社という日本の会社が発起したプロジェクトになります。最近だとカンボジア政府と共同開発するということで話題にもなりました。数少ない日本初のブロックチェーンプロジェクトですので、是非頑張ってほしいですね(*´▽`*)

 

プロジェクト

ツール

 

まとめ

 個人的にBitcoinやEtereum、Nemなどのブロックチェーンに触れる、もしくは情報を目にする機会が多いので、案外Hypereledgerも開発が進んでるんだと知りビックリしました(笑)

後は個人もコミュニティに入れるとか・オープンソースで開発が進んでいるなども今回初めて知ったので面白かったです。(企業の人しか入れない&そうなると必然的にクローズドに開発が行われるているんだろうな、と勝手に思っていた)

気になる方は各プロジェクトのリンクを張っていますので、そちらから詳しい情報を得るといいと思います。

 

では今回はここまでです!ここまでお読みいただきありがとうございました!!

何か不備、ご意見ありましたらコメントいただけると幸いですm(_ _)m

 

//Hypereledger?パブリックじゃねえんだろ?そんなもんブロックチェーンじゃねえ!!とか少し思っていた部分もあったので頭を冷やすいい機会になりました(笑)ビジネス利用するならやっぱりコンソーシアム型なのかなぁ、と考え始めた今日この頃です(-ω-)

 

参考資料

日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう⑦最終回 ~ データ同一性&まとめ編 ~

前回までのおさらい

2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」

出典:「ブロックチェーンの定義」を公開しました | JBA

 前回は太字の部分のみを解説しました。まずは可用性について触れ、高可用性を説明しました。可用性とは「システムが壊れていない状態がどれだけ維持されているか」を示す指標の事(≒稼働率)でした。なので高可用性とは、高確率でシステムが壊れていない状態がどれだけ維持されているかの指標でした。

じゃあどのくらいが高いかの指標は以下の表のようになっていることになります。

Availabilityレベル   Availabilityクラス  年間ダウンタイム 
100% 連続処理 0分
99.999%  フォールトトレラント 5分
99.99%   フォールトレジリエント   53分
99.9%   ハイアベイラビリティ 8.8時間
99-99.5% 一般の商用 44~87時間

HAシステム(1) - 高可用性システムとクラスタリング

 

そのうえでまた一つ読み進めていきたいと思います。

2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」

出典:「ブロックチェーンの定義」を公開しました | JBA

 ついに最後になります。いやー、長かった。本当に。

 

データ同一性

  そのデータは間違いない?改竄されていない?みんな同じデータになってる?ってことです。じゃあどうやってそれをするか。特別なプロトコル電子署名ハッシュポインタデータ構造などなどさまざまな技術を用いて実現しています。そして、それらを用いて高可用性・データ同一性を実現する技術を「ブロックチェーン」と読んでいるんですね。

 

f:id:mochi-mochi-0397:20180718151039p:plain

 

いやー、終わった終わった。今日はうまい酒が飲めそうだぜ!!って思うのは早いです。実はこの定義の下には以下のような文章が書いてあります。 

定義策定のアプローチ

まず、Satoshi Nakamoto論文およびその実装である、ビットコインブロックチェーンをオリジナルのブロックチェーン(以下「オリジナル」)として強く意識しています。

狭義のブロックチェーン(定義1)は、オリジナルを意識し、それが備える本質的で不可分な特徴を捉え、言語化しました。

広義のブロックチェーン(定義2)は、昨今〜今後の技術の展開を鑑み、オリジナルが備える特徴であっても、別の実装方式や別の目的への展開などにおいて、置換や変化が行われていく広がりを許容しながらも、特徴を捉えられるよう、言語化しました。

今後について

今回公開する定義は、現在時点の見解であると考えており、今後もアップデートが必要であると考えています。また、引き続き、ブロックチェーンに関する用語解説を策定していく予定です。

出典:「ブロックチェーンの定義」を公開しました | JBA

 

広義・狭義のブロックチェーン

 何となくお忘れかもしれませんが、この定義は1)、2)がありました。ブロックチェーンで色々調べてみると、本当に様々な見解や説明が書かれています。そうなると自分も思いますし、周りからもあることを言われます。

ブロックチェーンってなに??」

 この素朴な疑問への一つの解として1)をオリジナル=ビットコインとして「狭義ブロックチェーン」、2)を「広義ブロックチェーン」として定義されたということになります。

じゃあ広義のブロックチェーンって何になるかというと以下の表が非常にわかりやすくまとまっていました。ビットコインも入っているので、狭義も含んでますね)

 

f:id:mochi-mochi-0397:20180718143135p:plain出典:ビットコイン研究所ブログ(http://doublehash.me/blockchain-difinition/

 ここでは細かい説明はしません。何となくこれだけ多くの分類が出来るんだな、と思っていただければ十分です。

 

まとめ

1)「ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装をブロックチェーンと呼ぶ。」

2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」

定義策定のアプローチ

まず、Satoshi Nakamoto論文およびその実装である、ビットコインブロックチェーンをオリジナルのブロックチェーン(以下「オリジナル」)として強く意識しています。

狭義のブロックチェーン(定義1)は、オリジナルを意識し、それが備える本質的で不可分な特徴を捉え、言語化しました。

広義のブロックチェーン(定義2)は、昨今〜今後の技術の展開を鑑み、オリジナルが備える特徴であっても、別の実装方式や別の目的への展開などにおいて、置換や変化が行われていく広がりを許容しながらも、特徴を捉えられるよう、言語化しました。

今後について

今回公開する定義は、現在時点の見解であると考えており、今後もアップデートが必要であると考えています。また、引き続き、ブロックチェーンに関する用語解説を策定していく予定です。

出典:「ブロックチェーンの定義」を公開しました | JBA

 全7回に渡って説明することになった「日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう」ですがいかがだったでしょうか。以上の文を見て、ふむふむなるほどねと1mmでも思ってくれたのならこれほどうれしいことはありません。

 また、今後についてと書かれているように、この定義はアップデートされていくはずですし、するべきだと思います。その時はまたこのブログで書いていけたらとも思います。

では今日はここまでです。ここまで読んで頂きありがとうございました!

何か不備等ありましたらご指摘いただけると幸いです。

 

参考資料

「ブロックチェーンの定義」を公開しました | JBA

なんでもかんでもブロックチェーン?何をもってブロックチェーン?ブロックチェーンの用語の混乱を整理してみる(議論たたき台) | ビットコイン研究所