3Jul
ライトニングノードを立ち上げてみよう (その1)
はじめまして! デジタルマネー協会で学生インターンをしております、木澤と申します。
このシリーズではBitcoinのセカンドレイヤー技術であるLightning Network(以下LN)を使って, 送金実験をしてみたいと思います。現在Ethereumでもセカンドレイヤーの技術開発が盛んで, 今後ますます重要となる分野なのは間違いありません。この機会にLNの感覚を掴んでみましょう!
環境と準備について
linux環境上にLNノードを立ち上げます。推薦ディストリビューションはUbuntuです。
ここではVMを使って環境構築していきます。
Dockerを使用する方はhttps://github.com/lightningnetwork/lnd/blob/master/docs/DOCKER.md を参考にしてください。
使うノードについて
- LNにはlihghtnig Labの lnd を使います。
- 特にREADME.mdのInstallationに沿って行けば大丈夫です。
- Dockerの方はこちらから
- Bitcoinのフルノード : neutrino(実態はbtcd) または btcd
それではやっていきましょう!Terminalを開いてください。
lndのセットアップ
①Go言語のインストール・path設定
- Linuxの方
1 2 |
sudo apt-get install golang-1.10-go sudo ln -s /usr/lib/go-1.10/bin/go /usr/local/bin/go |
- MacOSの方(homebrewが入っている方)
1 |
brew install go |
$GOPATH
という環境変数を指定します。
.bashrc などTerminalを開くときに読み込まれるファイルに書き込んでください。
1 |
vim ~/.bashrc |
1 2 |
export GOPATH=~/gocode export PATH=$PATH:$GOPATH/bin |
depのインストール : depとはgolangのパッケージ管理ツールです。lndで使われているので必要になります。
1 |
go get -u github.com/golang/dep/cmd/dep |
②lndのインストール
1 2 3 |
go get -d github.com/lightningnetwork/lnd cd $GOPATH/src/github.com/lightningnetwork/lnd make && make install |
注1) WindowsでWSL(Windows subsystem for Linux)をお使いの方は, makeコマンドに直接path指定する必要があります。例えば以下のようにしてください。
1 2 |
/usr/bin/make && /usr/bin/make install "make" && "make" install |
注2) go コマンドでのインスト−ルに長時間掛かる場合あります。そんな時は git clone でダウンロードしましょう。
1 2 3 |
git clone https://github.com/lightningnetwork/lnd cd lnd make && make install |
私の場合ここでエラーが発生しました!
1 2 3 4 5 6 7 |
MacBook-Pro-7:lnd Ubuntu$ make && make install Fetching dep. go get -u github.com/golang/dep/cmd/dep Compiling dependencies. dep ensure -v /Users/Username/lightnig_file/lnd is not within a known GOPATH/src make: *** [dep] Error 1 |
golangのdepに関してエラーが出ているようでした。
しかし一旦放置で次に進みました。
③lndのアップデート
1 2 3 |
cd $GOPATH/src/github.com/lightningnetwork/lnd git pull make && make install |
もし make コマンドが使えない場合は, go コマンドで直接インストールしてください。
1 2 3 4 |
cd $GOPATH/src/github.com/lightningnetwork/lnd git pull dep ensure -v go install -v ./... |
lndのインストールに成功している場合、インストールの過程で以下のようなログが出てきます。
1 2 3 4 5 6 7 8 9 10 11 12 |
(1/43) Wrote github.com/btcsuite/btclog@84c8d2346e9fc8c7b947e243b9c24e6df9fd206a (2/43) Wrote github.com/roasbeef/btcutil@dfb640c57141f1c2113b92b4b16d2a89c30dd258 (3/43) Wrote github.com/jackpal/go-nat-pmp@28a68d0c24adce1da43f8df6a57340909ecd7fdd (4/43) Wrote github.com/jrick/logrotate@a93b200c26cbae3bb09dd0dc2c7c7fe1468a034a (5/43) Wrote github.com/btcsuite/websocket@master ... Building debug lnd and lncli. go build -v -tags=debug -o lnd-debug -ldflags "-X main.Commit=a43d02f8f049a82304a3c994bb1e326a3a8e1572" github.com/lightningnetwork/ln ... Installing lnd and lncli. ... |
④lndのテスト
lnd が適切にインストールされているかの確認は, 以下のコマンドでできます。
1 |
make check |
インストールしたプログラムの実行テストをしているログが大量に出てきます。
1 2 3 4 5 6 7 8 9 10 11 12 |
... === RUN TestScopeIsolation === PAUSE TestScopeIsolation === RUN TestChainWatcherRemoteUnilateralClose === PAUSE TestChainWatcherRemoteUnilateralClose === RUN TestChainWatcherRemoteUnilateralClosePendingCommit === PAUSE TestChainWatcherRemoteUnilateralClosePendingCommit === RUN TestChannelArbitratorCooperativeClose --- PASS: TestChannelArbitratorCooperativeClose (0.00s) === RUN TestChannelArbitratorRemoteForceClose --- PASS: TestChannelArbitratorRemoteForceClose (0.05s) ... |
特にエラーがなければ成功です。
しかし! 先程エラーを無視したせいで、ここでもエラーが吐かれました。
1 2 3 4 5 |
... can't load package: package github.com/lightningnetwork/lnd: cannot find package "github.com/lightningnetwork/lnd" in any of: /usr/local/Cellar/go/1.10.3/libexec/src/github.com/lightningnetwork/lnd (from $GOROOT) /Users/Ubuntu/gocode/src/github.com/lightningnetwork/lnd (from $GOPATH) make: *** [build] Error 1 |
$GOPATH , $GOROOT あたりのパッケージが見当たらないそうです。
エラーの出たPATHに実際lndが入っているのか確認してみると、
1 2 |
MacBook-Pro-7:lightningnetwork Ubuntu$ pwd /Users/Ubuntu/gocode/src/github.com/lightningnetwork |
このディレクトリにlndが入っていませんでした。
つまりlndをインストールする前に
1 |
cd $GOPATH/src/github.com/lightningnetwork/lnd |
しそびれていたのです。そのときに $GOPATH を正しく設定できていなかったということでした。
上記のディレクトリに移動して、再度手順を確認しました。
まずdepのインストールを確認しました。
1 2 3 4 5 6 7 |
MacBook-Pro-7:lnd Ubuntu$ dep ensure -v The following issues were found in Gopkg.toml: ✗ unable to deduce repository and source type for "google.golang.org/genproto": unable to read metadata: unable to fetch raw metadata: failed HTTP request to URL "http://google.golang.org/genproto?go-get=1": Get http://google.golang.org/genproto?go-get=1: dial tcp: lookup google.golang.org: no such host ✗ unable to deduce repository and source type for "google.golang.org/grpc": unable to read metadata: unable to fetch raw metadata: failed HTTP request to URL "http://google.golang.org/grpc?go-get=1": Get http://google.golang.org/grpc?go-get=1: dial tcp: lookup google.golang.org: no such host ✗ unable to deduce repository and source type for "golang.org/x/net": unable to read metadata: unable to fetch raw metadata: failed HTTP request to URL "http://golang.org/x/net?go-get=1": Get http://golang.org/x/net?go-get=1: dial tcp: lookup golang.org: no such host ✗ unable to deduce repository and source type for "golang.org/x/crypto": unable to read metadata: unable to fetch raw metadata: failed HTTP request to URL "http://golang.org/x/crypto?go-get=1": Get http://golang.org/x/crypto?go-get=1: dial tcp: lookup golang.org: no such host |
すると、depにも何か問題ある様です。とにかくdepをインストールし直しました。
1 2 3 4 |
MacBook-Pro-7:lnd Ubuntu$ go get -u github.com/golang/dep/cmd/dep # cd /Users/Ubuntu/gocode/src/github.com/golang/dep; git pull --ff-only fatal: unable to access 'https://github.com/golang/dep/': Could not resolve host: github.com package github.com/golang/dep/cmd/dep: exit status 1 |
lndのあるディレクトリに移動して、 make && make install コマンドを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
MacBook-Pro-7:lnd Ubuntu$ cd $GOPATH/src/github.com/lightningnetwork/lnd MacBook-Pro-7:lnd Ubuntu$ make && make install Compiling dependencies. dep ensure -v Gopkg.lock was already in sync with imports and Gopkg.toml (1/43) Wrote github.com/btcsuite/btclog@84c8d2346e9fc8c7b947e243b9c24e6df9fd206a (2/43) Wrote github.com/roasbeef/btcutil@dfb640c57141f1c2113b92b4b16d2a89c30dd258 ... (42/43) Wrote golang.org/x/sys@master (43/43) Wrote golang.org/x/text@v0.3.0 Building debug lnd and lncli. go build -v -tags=debug -o lnd-debug -ldflags "-X main.Commit=a43d02f8f049a82304a3c994bb1e326a3a8e1572" github.com/lightningnetwork/lnd github.com/lightningnetwork/lnd/vendor/github.com/btcsuite/golangcrypto/poly1305 github.com/lightningnetwork/lnd/vendor/github.com/btcsuite/golangcrypto/salsa20/salsa ... Installing lnd and lncli. go install -v -ldflags "-X main.Commit=a43d02f8f049a82304a3c994bb1e326a3a8e1572" github.com/lightningnetwork/lnd github.com/lightningnetwork/lnd/htlcswitch/hodl github.com/lightningnetwork/lnd/htlcswitch github.com/lightningnetwork/lnd/routing github.com/lightningnetwork/lnd go install -v -ldflags "-X main.Commit=a43d02f8f049a82304a3c994bb1e326a3a8e1572" github.com/lightningnetwork/lnd/cmd/lncli |
エラー無く入りました。
それでは make checkコマンドでlndの機能を確認します。
1 2 3 4 5 6 |
=== RUN TestScopeIsolation === PAUSE TestScopeIsolation === RUN TestChainWatcherRemoteUnilateralClose === PAUSE TestChainWatcherRemoteUnilateralClose ... |
エラー無く実行を確認できました。
⑤lndをLight Client Modeで動かす
本来は btcd というこれまでのチェーン情報をインストールする必要あるのですが、インストールし始めると数時間掛かってしまうので,
今回は neutrinoというライブラリーを使いLight Client Modeで動かします。
(詳細は InstalationのRuning lnd in Light Client Mode で確認できます。)
neutrinoを使ってlndを起動するには、以下のようにフラッグをつければOKです。
1 |
lnd --bitcoin.active --bitcoin.testnet --debuglevel=debug --bitcoin.node=neutrino --neutrino.connect=faucet.lightning.community |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
2018-07-11 02:32:53.019 [WRN] LTND: open /Users/norikakizawa/Library/Application Support/Lnd/lnd.conf: no such file or directory 2018-07-11 02:32:53.020 [INF] LTND: Version 0.4.2-beta commit=a43d02f8f049a82304a3c994bb1e326a3a8e1572 2018-07-11 02:32:53.020 [INF] LTND: Active chain: Bitcoin (network=testnet) 2018-07-11 02:32:53.023 [INF] CHDB: Checking for schema update: latest_version=1, db_version=1 2018-07-11 02:32:53.023 [INF] RPCS: Generating TLS certificates... 2018-07-11 02:32:53.041 [INF] RPCS: Done generating TLS certificates 2018-07-11 02:32:53.044 [INF] RPCS: password RPC server listening on 127.0.0.1:10009 2018-07-11 02:32:53.045 [INF] RPCS: password gRPC proxy started at 127.0.0.1:8080 2018-07-11 02:32:53.045 [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. #^Cで終了 2018-07-11 02:33:41.071 [INF] LTND: Received SIGINT (Ctrl+C). 2018-07-11 02:33:41.073 [INF] LTND: Shutting down... 2018-07-11 02:33:41.073 [INF] LTND: Gracefully shutting down. 2018-07-11 02:33:41.074 [INF] LTND: Shutdown complete shutting down |
lndが立ち上がり、cntl + C で終了できます。
その1ではlndのインストールをするところまで説明しました。
ライトニングノードの立ち上げやライトニングで送金実験をしてみるイベントをユナイテッドビットコイナーズの今井さんが行っています。
この記事も監修は今井さんにしていただきました。
興味あるエンジニアは参加ください。https://lightning-academy.connpass.com/event/
以上