Lightning Network実装のc-lightningノードの建て方




Lightning Networkの実装には有名なものにBlockstrem社のc-lightning(C)、Lightning Labs社のlnd(Go)、ACINQ社のeclair(scala)があります。

今回はc-lightningノードの建て方と簡単な使い方を紹介します。

c-lightningのGitHubはこちら

ノードを建てるための前提知識

まずはこれから建てるc-lightningの前提知識を入れておきます。これが頭に入っていると理解しやすいと思います。

c-lightningはbitcoin-cli経由でbitcoindからトランザクションやブロック情報を取得したりチャネルを開くためのトランザクション作成してブロードキャストします。

なのでbitcoindのノードを建てないといけないし、bitcoin-cliを使えるようにしないといけないです。bitcoin-cliはbitcoindを建てれば使えるようになります。

インストール方法

普段Macを使っているのでMacでのインストール方法になります。bitcoindのインストール

まずはbitcoindです。下記コマンドを順番に実行していけばインストールできます。makeの実行に時間がかかるので気長に待ってください。

$ git clone https://github.com/bitcoin/bitcoin
$ cd bitcoin
$ brew install automake libtool
$ ./autogen.sh
$ brew install berkeley-db4 boost libevent
$ brew link berkeley-db4 --force
$ ./configure
$ make
$ make check
$ make install

今回はtestnetでbitcoindを建てます。ノードの同期には半日くらいかかるので気長に待ってください。容量を結構必要とするのローカルではなくどこかのサーバに建てた方がいいかと思います。

bitcoindの起動は下記コマンドで簡単にできます。testnet=3とすることでテストネットのブロックを同期できます。

$ bitcoind -testne=3

c-lightningのインストール

基本的に公式ドキュメントにある通りにインストールしていきます。

$ brew install autoconf automake libtool python3 gmp gnu-sed
$ git clone https://github.com/ElementsProject/lightning.git
$ cd lightning
$ ./configure
$ make

c-lightningを起動する前にbitcoindに接続する設定ファイルを作ります。

設定ファイルは~/.lightning/configに作ります。中身はホスト、Basic認証、ネットワーク、aliasなどを設定します。

rpcportはテストネットだと18832、livenetだと8332になります。

network=testnet
alias=test
rgb=001100
bitcoin-rpcuser=xxxxxx
bitcoin-rpcpassword=xxxxxx
bitcoin-rpcconnect=xx.xx.xx.xx
bitcoin-rpcport=18332
announce-addr=127.0.0.1:9735

c-lightningの起動コマンドは下記です。ログが出力されるようにしておくとちゃんと起動できているかわかりやすいです。

$ lightningd/lightningd --log-level=debug

正常に起動できたらbitcoindから最新のブロック情報を取得しているログを確認できます。

lightning-cliでチャネルを開くまで

まずはじめにnewaddrコマンドでc-lightningノードで使うアドレスを生成します。

$ cli/lightning-cli newaddr
{
  "address": "tb1qw3vzvvp5wadcuylg9nwhsf4glh4ypf5gr45379"
}

このアドレスに対してBTCを送っておきます。

今回はbitcoindにあるテストネットのBTCを送っておきます。sendtoaddressコマンドでBTCを送ることができます。

$ bitcoin-cli -testnet sendtoaddress tb1qw3vzvvp5wadcuylg9nwhsf4glh4ypf5gr45379 1
88756be163dc15b6efd89624935185da8da21b9daa57f5766f94a44b75cf5b44

受け取ったBTCはlistfundsコマンドで確認できます。

$ cli/lightning-cli listfunds
{
  "outputs": [
    {
      "txid": "88756be163dc15b6efd89624935185da8da21b9daa57f5766f94a44b75cf5b44",
      "output": 1,
      "value": 100000000,
      "amount_msat": "100000000000msat",
      "address": "tb1qw3vzvvp5wadcuylg9nwhsf4glh4ypf5gr45379",
      "status": "confirmed"
    }
  ],
  "channels": [
  ]
}

ペイメントチャネルを作るために接続するLNノードを下記リンクから探します。

testnet(https://1ml.com/testnet/)、livenet(https://explorer.acinq.co/)それぞれあるので適当に選んでください。

選んだノードに対してconnectコマンドを使ってはP2Pの接続を行います。パブリックキー、IP、ポートを指定します。

$ cli/lightning-cli connect 02f3067188240c75beb36477db63771f66c976f7e5bdd6f6ace5508396aba24815 78.26.17.200:9735
{
  "id": "02f3067188240c75beb36477db63771f66c976f7e5bdd6f6ace5508396aba24815"
}

接続が完了したら、ペイメントチャネルの作成は下記コマンドだけです。作成用のトランザクションがブロックに取り込まれればペイメントチャネルの作成が完成です。

$ cli/lightning-cli fundchannel 02eb4b9a01d9e4dbc81b679341f3ae74fa4918370373ea3462aa4b8dd10b881442 10000000
{
  "tx": "02000000000101445bcf754ba4946f76f557aa9d1ba28dda8551932496d8efb615dc63e16b75880100000000ffffffff02809698000000000022002038a18f754e0d06e7e00c6a469face1a242d4fffff5b09655265182e1fff55152e6495d0500000000160014c8e9c12d5bcf3a2c9d25f432bd6ef33aec932f490247304402204ce5200c1966c8feb2de1af7a6895b7446f15f927112026ebf48c87db6a19de402202382977efb4693355d89ccee47020096e595f9583f5456625ad2c0fc7bb3f430012103dc515fd3f58f18d9827897b37231ebd29684c49ff5677eec5e77c5892c56abc800000000",
  "txid": "ad64a5dea46721193cbc8e37b2eb33cd418f2e15b91ad0be241ae67dfd348071",
  "channel_id": "718034fd7de61a24bed01ab9152e8f41cd33ebb2378ebc3c192167a4dea564ad"
}

接続状況はlistpeersコマンドで確認できます。

$ cli/lightning-cli listpeers
{
  "peers": [
    {
      "id": "02eb4b9a01d9e4dbc81b679341f3ae74fa4918370373ea3462aa4b8dd10b881442",
      "connected": true,
      "netaddr": [
        "54.165.221.164:9735"
      ],
      "global_features": "",
      "local_features": "82",
      "globalfeatures": "",
      "localfeatures": "82",
      "channels": [
        {
          "state": "CHANNELD_AWAITING_LOCKIN",
          "scratch_txid": "68588e9834c8d57024686c3f57793a406ba978ccd0fcc1458990de36ffae042d",
          "owner": "lightning_channeld",
          "channel_id": "718034fd7de61a24bed01ab9152e8f41cd33ebb2378ebc3c192167a4dea564ad",
          "funding_txid": "ad64a5dea46721193cbc8e37b2eb33cd418f2e15b91ad0be241ae67dfd348071",
          "private": false,
          "funding_allocation_msat": {
            "02eb4b9a01d9e4dbc81b679341f3ae74fa4918370373ea3462aa4b8dd10b881442": 0,
            "030e0b784713c2d132fb5b78269880f046dae0658f5f35975254b35c4de8252ba3": 10000000000
          },
          "funding_msat": {
            "02eb4b9a01d9e4dbc81b679341f3ae74fa4918370373ea3462aa4b8dd10b881442": "0msat",
            "030e0b784713c2d132fb5b78269880f046dae0658f5f35975254b35c4de8252ba3": "10000000000msat"
          },
          "msatoshi_to_us": 10000000000,
          "to_us_msat": "10000000000msat",
          "msatoshi_to_us_min": 10000000000,
          "min_to_us_msat": "10000000000msat",
          "msatoshi_to_us_max": 10000000000,
          "max_to_us_msat": "10000000000msat",
          "msatoshi_total": 10000000000,
          "total_msat": "10000000000msat",
          "dust_limit_satoshis": 546,
          "dust_limit_msat": "546000msat",
          "max_htlc_value_in_flight_msat": 18446744073709551615,
          "max_total_htlc_in_msat": "18446744073709551615msat",
          "their_channel_reserve_satoshis": 100000,
          "their_reserve_msat": "100000000msat",
          "our_channel_reserve_satoshis": 100000,
          "our_reserve_msat": "100000000msat",
          "spendable_msatoshi": 9900000000,
          "spendable_msat": "9900000000msat",
          "htlc_minimum_msat": 0,
          "minimum_htlc_in_msat": "0msat",
          "their_to_self_delay": 6,
          "our_to_self_delay": 1201,
          "max_accepted_htlcs": 483,
          "status": [
            "CHANNELD_AWAITING_LOCKIN:Funding needs more confirmations."
          ],
          "in_payments_offered": 0,
          "in_msatoshi_offered": 0,
          "in_offered_msat": "0msat",
          "in_payments_fulfilled": 0,
          "in_msatoshi_fulfilled": 0,
          "in_fulfilled_msat": "0msat",
          "out_payments_offered": 0,
          "out_msatoshi_offered": 0,
          "out_offered_msat": "0msat",
          "out_payments_fulfilled": 0,
          "out_msatoshi_fulfilled": 0,
          "out_fulfilled_msat": "0msat",
          "htlcs": [
          ]
        }
      ]
    }
  ]
}

支払いはinvoiceに対して支払いを行うことができます。これは今後追記します。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です