卒論から始まるBlockchain

卒論から始まるBlockchain

俺の屍を越えて行け

ブロックチェーン関連で卒論を書くという事

はじめに

卒論終わったぜーーーーーーーー!!!!!!!

はい、これが言いたいだけです。気分を悪くされた方はすみません。先日卒論発表も終わり、無事受理される事になりました。もちろんまだまだ卒論描き途中で路頭に迷っている人もいるとは思いますが、そういうのは完全に無視して、開放感に浸りながら幸せオーラ全開で生きています。

さて、本ブログ最初の記事で(本ブログの趣旨とか開設経緯を紹介するよ - 卒論から始まるBlockchain)こんなことを書いてました。

本ブログの趣旨は『Blockchainに興味を持った人が、卒論を書くための前提知識を持てるようにする』になります!(卒論のレベルは適当)

まあこのブログを読んだから卒論が書ける訳ではないですが、今回ブロックチェーン関連(正確にはLightning Network)をテーマに卒論を書きました。そこで実際やってみてどうだったかというのを書きます。これから卒論書こうと思うんだけど、ブロックチェーン関連で書いていいのかな?気をつける事とかある?書いてみてどうだった?みたいな疑問を持っている方の参考になればと思います。もちろん完全な主観ですので、そこは悪しからず。

トピック

  1. 書いた感想
  2. 必ず得なければならないモノ
  3. 肝に命じておく事
  4. 覚悟するべき現実
  5. テーマの決め方
  6. アップデートの恐怖
  7. 相談出来る人を見つけよう
  8. よかった事
  9. おわりに

1. 書いた感想

めんどくさいし大変

すみません。嘘偽りなく述べるとこれしか出ません。ただこの大半は卒論を書く行為が9割を占めています。何かを強制されると途端に面倒でつまらなくなるじゃないですか。それです。もしかしたら「半端ない卒論書いて、業界に一目置かれるようなものを書いてやるぜ!」とかいう方がいたら、現実はそうは行かんぞみたいなのを伝えたかっただけです。書こうとしている時のモチベーションは、自己啓発本読んだ後に湧き出る謎のやる気程度である可能性があるので、理想と現実を乖離させすぎないようしましょう。 という事で次から真面目に話します。

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

2. 必ず得なければならないモノ

ブロックチェーン関連で卒論を書く際、必ず得なければならないモノがあります。それは

教授の承諾

です。これなくしては何も進みません。あなたがどれだけ書きたいと願っても、お歳暮を送ってご機嫌をとっても、教授が「わかった、それで書いていいよ」とならなくては何も進みません。なのでまず最初にブロックチェーンを題材に卒論を書いていいか確認しましょう。

ちなみに自分は「ブロックチェーン関連で書こうと思っているんですが良いですか!!??」と言ったら「よくわからないけど、それで書きたいなら書いて良いよ」と怖いぐらいあっさり認めてくれました。

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

3. 肝に命じておく事

おそらく教授はブロックチェーンのことは知りません。なのであなたが一から教える必要があります。

これはしっかり肝に命じておきましょう。もちろん中には知っている、もしくは詳しいという方もいらっしゃとは思いますが、日本全国の教授を見たときに、それを専門としている教授はほとんどいないでしょう。つまり、ブロックチェーンを題材に書くということは教授の専門外で書くという事になります。これを許してくれるか、許してくれないかというのは完全に教授次第です。(許してくれるから良い教授という事ではない。あくまでその人の思想の違いだと思います。) また、もし許可が出たとしても"ブロックチェーンとはなんぞや"という事を最初から説明する必要があります。それが出来ないと、永遠に「で、君は何が言いたいの?この研究の目的は何?これで何が解決するの?」というセリフを繰り返されることになります。地獄です。 しかも、頑張って説明しても毎回狐につままれたような顔をされます。あれ?これでも伝わらんの?となります。もちろんそこは自分の実力不足なんですが、やる度に悲しくなります。そういう部分を頑張って超えなければならないという事を肝に命じておきましょう。なのでそういうのが苦手な人はやめた方が良いと思いますので、しっかり自分の胸に手を当てて確かめた上で挑みましょう。

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

4. 覚悟するべき現実

無事許可が出たとしたら、自分が決めたテーマに沿って調査、実験、考察などを行いますね。ここで重要なのは「教授の力を借りれない」という事です。理系ならこのプログラム動かないんですがとか、思ったようなデータが取れないんですがとか、文系ならこの考え方はあってますかとかでしょうか。もしかしたら教授に対して殺意に似た感情を持っている方もいるかもしれませんが、教授というのは何かの専門家です。なので普通なら研究で困ったときに適切なアドバイスを得られる可能性がありますが、専門外で書く場合は無理です。実際に自分もソフトが動かなくて困っていたとき、周りは教授に聞いたりして解決していましたが、自分はそれが出来なくて大変でした。さらに文献も揃っていません。ちょっと困ったから参考文献を探して解決!とかありません。自分の研究室はグラフ理論や最適化理論などの研究室であった為、当然ブロックチェーン に関する文献はありません。必要な文献は教授に言えば買ってもらえましたが、他の研究室がどうかは知りません。予算がかつかつな研究室だとさらに大変ないのではないでしょうか。

また研究室内であれば似たような研究をしている人どうしで相談出来ますが、それが出来ない可能性が高いです。自分はたまたま興味を持ってくれている人がいた為、相談できましたがそういう状況にない場合もあるでしょう。 なので「困っても教授や、研究室の書籍はない。頼りになる友達もいない可能性が高い」という現実を覚悟しておいた方が良いです。

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

5. テーマの決め方

全ては教授次第です。本末転倒ですが、これが真理だと思います。その上で自分が興味のあるものと絡めてやってみるといいでしょう。気になるプロジェクトを調査して実際にどういう効用が出ているか調べるとか、ソフトを使ってアプリケーションを作りましたとか、分析してみましたとかです。まあ教授の承諾が得られるそれっぽいものにすれば大丈夫だと思います。

6. アップデートの恐怖

この界隈は本当に速いですね。秒進分歩ペースで進んでいるんじゃいかと思うほど速いです。それ自体はとても良いことですが、論文を書くとなると大変です。なぜなら論文に書いていたソフトがアップデートされて、提出する時には動かないということが起こりえるからです。自分は動かないまでは行きませんでしたが、使っていたソフトのGUIが変わって、載せた画像が古くなってしまいました。

また技術仕様も変わると、途中の説明も間違った事になる可能性もあります。書いていて、「あれ、そう言えばなんか新しいプルリクが上がっていた気がするけど、もう実装されたんか?」とかなります。なので、早めに書き終えて提出するだけの状態にするんだ!というコスパの良い人生を送りたい人はやめた方が良いかもしれません。別にこの分野に限った事ではありませんが、書く以上は最低限テーマに関する情報収拾は頻繁に行った方が良いと思います。そういう意味で、苦痛にならない分野、興味を持てるものにした方が良いでしょう。

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

7. 相談出来る人を見つけよう

『4. 覚悟するべき現実』で

とにかく「困っても教授や、研究室の書籍はない。頼りになる友達もいない可能性が高い」という現実を覚悟しておいた方が良いです。

と書きましたが、だからこそ相談できる人を見つけておきましょう。思った通りにプログラムが動きませんとか、ここがよくわからないんですがどういう事ですか?などです。自分はたまたま同じ研究室にいた少しブロクチェーンに詳しい友達に助けて貰ったり、インターン先やイベントで知った人に聞いたりしました。ただ「何がわからないかわかっていないんだけど、自分が理解できていないことはわかる」みたいな状況あるじゃないですか。そういう「なんて質問したら良いかわからない」というレベルでも気軽に相談できる人はすごく貴重なので、そういう人を頑張って見つけられると良いと思います。

8. よかった事

ここまでかなり沢山ネガティブな事をいった気がしますが、もちろんよかった事もいっぱいあります。一番は『理解が深まる』でしょう。 何を当然な事をという感じがしますが、侮ってはいけません。この技術の特性上、追うべき情報は多岐に渡ります。気になっているプロジェクトの最新情報やアップデート情報、業界を代表する企業のインタビュー記事や買収の話、思想や将来の業界展望の話、などなど挙げたらきりがありません。そのため、知識としてはどうしても広く浅くなってしまいます。一方論文を書くということは何か専門的な新しい事をするわけです。そうする事で、一つ自分の中で詳しい分野などができるのは一つの自信になりますし、ポジションをとる事もできます。これは普段SNSを眺めて、適当に気になった情報を追いかけるだけでは絶対に無理だろうなという知識が得られます。まあこれを価値あることかと思うかは各個人の自由ですが、個人的にはとても良かったと思っています。

他にもゼロベースで誰かに教える機会が増えるのでブロックチェーンの基礎的部分から復習することができますし、どうすれば理解してもらえるかという事を考える事で、説明に必要なポイントを探すことができます。 そういう意味で研究発表を通して、小さいコミュニティーで、かつ自分しかその知識を持っていないという状況でアウトプットする場があったのはとても幸せでした。

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

9. おわりに

ブロクチェーン関連(もしくは暗号通貨関連)で卒論を書きたい人は教授の承諾を得て書こう!でもその場合は教授の力を借りれないと思うから、頑張ってね!!

が結論です。

// そんな事も知らねぇのかよ、って感じで教授に教えるのがオススメです。ちょっとしたストレス発散になります。

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---------------

ここに24文字の単語がでます。ウォレットを復元する時に必要になるので、大事にメモしておきましょう。

 

---------------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分以上かかった気がします。

2019/04/24時点で約24GBほどです。$ bitcoin-cli getblockchaininfo で出てくるsize_on_diskの値で、キロバイト表記です。)

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

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

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

 

参考資料