LightningNetworkノードを立ち上げる方法（lnd編）

# はじめに
実際にLightningNetworkのノードを立ち上げる手順を説明します。
接続先はtestnet(テスト環境)、OSはUbuntuを想定しています。

# 全体の流れ
- Bitcoinフルノードの立ち上げ
- lndのインストール
- configの設定
- その他の設定
- ノードの起動

# Bitcoinフルノードの立ち上げ
最初にBitcoinのフルノードを立ち上げる必要があるのでまだの場合は[お手軽にVPSでBitcoinフルノードを立ち上げる方法](https://qiita.com/9muta/items/d3b5cf003d18ab58d112)などを参考に立ち上げてください。

# lndのインストール
2018/7/21時点で最新版のver0.4.2-betaをインストールします。

```
$ wget https://github.com/lightningnetwork/lnd/releases/download/v0.4.2-beta/lnd-linux-386-v0.4.2-beta.tar.gz
$ tar xvzf lnd-linux-386-v0.4.2-beta.tar.gz
$ cp ~/lnd-linux-386-v0.4.2-beta/lnd /usr/local/bin/
$ cp ~/lnd-linux-386-v0.4.2-beta/lncli /usr/local/bin/
```

# configの設定
`lnd.conf`と`bitcoin.conf`の2つの設定をします。

## lnd.confの設定
`~/.lnd/lnd.conf`ファイルを作成して以下を記述します。

.lnd フォルダを作成します。

```
$ mkdir ~/.lnd
$ cd .lnd
```
`lnd.conf`ファイルを作成して以下を記述します。
以下に`lnd.conf`ファイルのサンプルがあるので参考にしてみてください。
https://github.com/lightningnetwork/lnd/blob/master/sample-lnd.conf

```
#[Application Options]
debuglevel=info
alias=ノードのエイリアス名
externalip=IPアドレス:9735

#[bitcoin]
bitcoin.active=1
bitcoin.testnet=1
bitcoin.node=bitcoind

#[Bitcoind]
bitcoind.rpchost=localhost
bitcoind.rpcuser=ユーザー名
bitcoind.rpcpass=パスワード
bitcoind.zmqpath=tcp://127.0.0.1:28332 
```

## bitcoin.confの設定

`bitcoin.conf`に以下を追記してください。
また`rpcuser`と`rpcpassowrd`は`lnd.conf`の記述と合わせてください。

```
rpcuser=ユーザー名
rpcpassword=パスワード
server=1
daemon=1
txindex=1
zmqpubrawblock=tcp://127.0.0.1:28332
zmqpubrawtx=tcp://127.0.0.1:28332
```

## bitcoind再起動

インデックスの再構築を実施します。
起動まで時間かかります。進捗は`~/.bitcoin/testnet3/debug.log`で確認してください。

```
$ bitcoind -daemon -reindex
```

# その他の設定
## PORTの設定
mainnetもtestnetも9735を使用するので使えるように設定します。
18333はbitcoindがtestnetの時に使用し、mainnetの場合は8333を使用します。

```
$ ufw enable
$ ufw allow 9735
$ ufw reload
$ ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
18333                      ALLOW       Anywhere
9735                       ALLOW       Anywhere
18333 (v6)                 ALLOW       Anywhere (v6)
9735 (v6)                  ALLOW       Anywhere (v6)
```

## PATHの設定
~/.profile　に記述する。

```
PATH="$PATH:/root/.lnd/admin.macaroon"
```

PATHを有効にする。

```
$ source ~/.profile
```

# lndの起動

```
$ lnd >> ~/.lnd/debug.log &
```

必要に応じてdebugログの確認をしてください。

```
$ tail -f ~/.lnd/debug.log
```

ウォレットを作成します。

```
$ 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 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. XXX   2. XXX    3. XXX    4. XXX
 5. XXX   6. XXX    7. XXX    8. XXX
 9. XXX   10. XXX   11. XXX   12. XXX
13. XXX   14. XXX   15. XXX   16. XXX 
17. XXX   18. XXX   19. XXX   20. XXX  
21. XXX   22. XXX   23. XXX   24. XXX  
---------------END LND CIPHER SEED-----------------

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

lnd successfully initialized!
```

作成したウォレットをアンロックします。

```
$ lncli unlock
Input wallet password: 

lnd successfully unlocked!
```

`lncli getinfo`で状況が確認できます。
同期に少し時間がかかるので`~/.lnd/debug.log`で状況を確認してください。
`synced_to_chain`が`true `になり、`num_peers`が0でなくなれば同期が完了です。

```
$ lncli getinfo 
{
    "identity_pubkey": "0377c0ed130d363dd157cfbe78ff1d4ff8a629ddd38834b7cfb698db811af76c6d",
    "alias": "ノードのエイリアス名",
    "num_pending_channels": 0,
    "num_active_channels": 0,
    "num_peers": 3,
    "block_height": 1354786,
    "block_hash": "0000000000000028c13dc0c1e7f6f5245a5dae374a84e3d5b30ed235e45bbdc7",
    "synced_to_chain": true,
    "testnet": true,
    "chains": [
        "bitcoin"
    ],
    "uris": [
        "0377c0ed130d363dd157cfbe78ff1d4ff8a629ddd38834b7cfb698db811af76c6d@133.18.23.0:9735"
    ],
    "best_header_timestamp": "1532157492",
    "version": "0.4.2-beta commit=7cf5ebe2650b6798182e10be198c7ffc1f1d6e19"
}
```