Lightning Network Daemon(Lnd)で遊んでみた ~Tutorial編(Stage2)~

#はじめに

今回は[LND Developer Site](https://dev.lightning.community/tutorial/02-web-client/index.html) の[Stage2 Web Client](https://dev.lightning.community/tutorial/02-web-client/index.html)をやってみる。
基本的に書いてある通りにコマンドを入力するが、前やったときは初っ端`node-gyp`のエラーが出まくった覚えがある。
今回はそれも含めて格闘した記録を書こうと思う。


#環境
PC: Mac book Pro
node: 12.11.1 （先に言うが8にすべき）
npm: 6.11.3

# セットアップ

先ずはGoのパッケージをクローン

```
git clone https://github.com/mably/lncli-web $GOPATH/src/github.com/mably/lncli-web
cd $GOPATH/src/github.com/mably/lncli-web
```


```
npm install
```
で、大量のエラーが吐かれる。
長すぎるので省略するが、　よくある`node-gyp`のエラー。
[lncli-webのgithub](https://github.com/mably/lncli-web)をみると`NodeJS 8.x/npm`と書かれていた。
なのでとりあえずnodeのバージョンを落としてみる。

私の環境はMacなので以下のように。
すでに`nodebrew`をインストール済みなのでそれを使う。
インストールしてない人は[こちら](https://qiita.com/kuriya/items/36ae29366df0b7c95dec)を参考に。


```
nodebrew install-binary v8.11.1
nodebrew use v8.11.1
```

ではもう一度npm installする

```
cd $GOPATH/src/github.com/mably/lncli-web
npm install
```

WARNやらERRやら出ている気がするが`node-gyp`のエラーは消えた。
とりあえずこのまま進める。

```
"./node_modules/.bin/gulp" bundle
```

これもうまくいった。


```
cd ~/Library/"Application Support"/Lnd/.lnd
openssl ecparam -genkey -name prime256v1 -out tls.key
openssl req -new -sha256 -key tls.key -out csr.csr -subj '/CN=localhost/O=lnd'
openssl req -x509 -sha256 -days 36500 -key tls.key -in csr.csr -out tls.cert
rm csr.csr
cp tls.cert $GOPATH/src/github.com/mably/lncli-web/lnd.cert
```

```
$ node server --lndhost=localhost:10001
module.js:549
    throw err;
    ^

Error: Cannot find module 'node-pre-gyp/lib/pre-binding'
    at Function.Module._resolveFilename (module.js:547:15)
    at Function.Module._load (module.js:474:25)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/hogehoge/gocode/src/github.com/mably/lncli-web/node_modules/grpc/src/grpc_extension.js:26:14)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
```

色々調べてみると、`node`、`node-gyp`、`grpc`は依存環境がガチガチ。
[こちら](https://qiita.com/koinori/items/18dd11bae20e008a8532)の記事を参考に`grpc@1.10.1`をインストールしてみる。

```
 npm i s grpc@1.10.1
```

で再度サーバーを立ち上げる。

```
$ node server --lndhost=localhost:10001
Macaroon support is enabled. Macaroon path is /Users/oshikawa/gocode/src/github.com/mably/lncli-web/config/../admin.macaroon
info:    Recreating active client
error:   The specified macaroon file /Users/oshikawa/gocode/src/github.com/mably/lncli-web/config/../admin.macaroon was not found.
Please add the missing lnd macaroon file or update/remove the path in the application configuration.
```

なんか出たけど一応進んだらしい。
成功していたら[http://localhost:8280/]( http://localhost:8280/)でダッシュボードが開けるはずだが、開けないのでやっぱり`admin.macroon`をが必要らしい。
確かに`lncli-web`のディレクトリには`admin.macroon`は無い。
この場合、`lncli-web`内の`config/defaults.js`のmacaroonPathを書き換えてあげればいい。
今回わTutrialのStage


```js:defaults.js

// config/defaults.js

module.exports = {
  serverPort: 8280,
  serverHost: 'localhost',
  lndProto: `${__dirname}/rpc.proto`,
  lndHost: 'localhost:10009',
  lndCertPath: `${__dirname}/../lnd.cert`,
  //↓変更
  macaroonPath: `/Users/hodehoge/gocode/dev/alice/data/chain/bitcoin/simnet/admin.macaroon`,
  dataPath: `${__dirname}/../data`,
  loglevel: 'info',
  logfile: 'lncliweb.log',
  lndLogFile: `${require('os').homedir()}/.lnd/logs/bitcoin/testnet/lnd.log`,
};

```

`hogehoge`の部分は変えてください。
これで大丈夫なはず。

```
 node server --lndhost=localhost:10001
```

再び[http://localhost:8280/]( http://localhost:8280/)にアクセス。

<img width="1440" alt="スクリーンショット 2019-11-02 17.21.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481488/0213176c-2b8d-7ab8-60ff-3a06844535d2.png">


上手くいった。（btcdとlndを起動していると詳細も表示されるはず。）