LightningNetworkを使ってみる(c-lightning編)


はじめに

LightningNetworkはBlockstream社のc-lightningを使用します。
そのためbitcoind 0.15 以上を使用してください。

流れ

  • Bitcoinフルノードの立ち上げ
  • LightningNewtorkの立ち上げ
  • LightningNetworkの動きの流れ

Bitcoinフルノードの立ち上げ

以下を参考に立ち上げてください。

お手軽にVPSでBitcoinフルノードを立ち上げる方法
https://qiita.com/9muta/items/d3b5cf003d18ab58d112

LightningNewtorkの立ち上げ

以下を参考に立ち上げてください。

LNノードを立ち上げる方法
https://qiita.com/9muta/items/285431be70caf667ecd1

LightningNetworkの動きの流れ

おおまかな取引の流れは以下になります。

1.アドレス作成 → 2.送金 → 3.チャネルを開く → 4.デポジット → 5.支払い → 6.チャネルを閉じる → 7.返金 → 8.取引完了

順に詳細を見ていきます。

1.アドレス作成

LNに送金時に送金するためのアドレスを作成します。
実際はLNに送金はできないのでロックしておくためのアドレスを作成します。

$ lightning-cli newaddr
{ "address" : "2N9QaKvP83UobTBWArtDGvTK3xPjgVBG75J" }

2.送金

ビットコインを 1.アドレス作成 で作成したアドレスに送金します。

$ bitcoin-cli sendtoaddress 2N9QaKvP83UobTBWArtDGvTK3xPjgVBG75J 0.5
ec729dd57a2d35fca25604bbd076ef8e8cf13a12362d1a14ffb283a962ae07cb

エクスプローラで確認すると0.5BTCが指定のアドレスに送金されているのがわかります。

念のためLN側の確認すると50000000satoshi(=0.5BTC)が残高としたることがわかります。Bitcoin側で2N9QaKvP83UobTBWArtDGvTK3xPjgVBG75Jに0.5BTCロックしつつLN側で同額のアセットを発行して処理をしています。

$ lightning-cli listfunds
{ "outputs" : 
    [ 
        { "txid" : "ec729dd57a2d35fca25604bbd076ef8e8cf13a12362d1a14ffb283a962ae07cb", "output" : 1, "value" : 50000000, "status" : "confirmed" } ], "channels" : 
    [  ] }

3.チャネルを開く

接続できるノードを探してノードID、IP、ポート番号を取得します。
https://explorer.acinq.co/#/

取得した情報でチャネルを開きます。
何らかの理由で開けない場合はタイムアウトになるようです。

$ lightning-cli connect 027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa 133.18.23.0:9735
{ "id" : "027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa" }

4.デポジット

ノードIDとデポジット額(単位はsatoshi)を指定してチャネルにデポジットします。

$ lightning-cli fundchannel 027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa 10000000
{ "tx" : "02000000000101cb07ae62a983b2ff141a2d36123af18c8eef76d0bb0456a2fc352d7ad59d72ec010000001716001427d2500167072538f7789c43937515d8d48e8c3bffffffff0280969800000000002200206272ed5e4067c9973f2e84e11ee70b0a3771384d669ac78d116b4690dc93f8164f5962020000000016001484ae88d42fbb0034f134638e8bc34169c057e6f602483045022100faca61580ca9573b0c07a51e60b44384a96e79971cdff56c6fc6e897f7a39493022065e24e2a81412ab36693efe73aafe1b4887bd5f98f3ece667488b0d335afbb1f0121036c7ea29ecfdf82367df60fbb78c9a68cbda541dcb5afeb4d2daa22b92d13e8a000000000", "txid" : "89d292c971ca2fb2b89c57156c312a18493e46e5611ff1ff0ee350bb7518f49f", "channel_id" : "9ff41875bb50e30efff11f61e5463e49182a316c15579cb8b22fca71c992d289" }

ステータスがCHANNELD_AWAITING_LOCKINの場合はBitcoin側のブロックに取り込まれるのを待っている状態です。

$ lightning-cli listpeers
{ "peers" : 
    [ 
        { "id" : "027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa", "connected" : true, "netaddr" : 
            [ "133.18.23.0:9735" ], "alias" : "TEST1.MUTAGUCHI", "color" : "008000", "channels" : 
            [ 
                { "state" : "CHANNELD_AWAITING_LOCKIN", "owner" : "lightning_channeld", "channel_id" : "9ff41875bb50e30efff11f61e5463e49182a316c15579cb8b22fca71c992d289", "funding_txid" : "89d292c971ca2fb2b89c57156c312a18493e46e5611ff1ff0ee350bb7518f49f", "msatoshi_to_us" : 10000000000, "msatoshi_total" : 10000000000, "dust_limit_satoshis" : 546, "max_htlc_value_in_flight_msat" : 18446744073709551615, "channel_reserve_satoshis" : 0, "htlc_minimum_msat" : 0, "their_to_self_delay" : 6, "our_to_self_delay" : 6, "to_self_delay" : 6, "max_accepted_htlcs" : 483, "status" : 
                    [ "CHANNELD_AWAITING_LOCKIN:Funding needs more confirmations." ] } ] } ] }

Bitcoin側のブロックに取り込まれるとステータスがCHANNELD_NORMALになりデポジットが確定します。

$ lightning-cli listpeers
{ "peers" : 
    [ 
        { "id" : "027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa", "connected" : true, "netaddr" : 
            [ "[::ffff:133.18.23.0]:42824" ], "alias" : "TEST1.MUTAGUCHI", "color" : "008000", "channels" : 
            [ 
                { "state" : "CHANNELD_NORMAL", "owner" : "lightning_channeld", "short_channel_id" : "1289178:668:0", "channel_id" : "9ff41875bb50e30efff11f61e5463e49182a316c15579cb8b22fca71c992d289", "funding_txid" : "89d292c971ca2fb2b89c57156c312a18493e46e5611ff1ff0ee350bb7518f49f", "msatoshi_to_us" : 10000000000, "msatoshi_total" : 10000000000, "dust_limit_satoshis" : 546, "max_htlc_value_in_flight_msat" : 18446744073709551615, "channel_reserve_satoshis" : 0, "htlc_minimum_msat" : 0, "their_to_self_delay" : 6, "our_to_self_delay" : 6, "to_self_delay" : 6, "max_accepted_htlcs" : 483, "status" : 
                    [ "CHANNELD_NORMAL:Reconnected, and reestablished.", "CHANNELD_NORMAL:Funding transaction locked." ] } ] } ] }

5.支払い

支払いで使用するBOLT規格のペイメントコードを取得する。

StarBlocksで購入するモノをカートに入れてチェックアウトする。
https://starblocks.acinq.co/#/

ペイメントコードが表示されるのでコピーする。
支払い処理を実施。

$ lightning-cli pay lntb1230n1pdvp3yhpp5d9mtwhl7deg8dd295edgey3naxzc6fug3hxytdmqzh4hfg5pj09sdq0g9c8y6tvgehk7mqcqpxmv0ywcsqan676ef6xvqyhcrymfdqjf6u4qa3vn0q4tgq2q2e09sj3xzpvdzgen0th6z2ssp2llkrzh693r9c05ruzk6ju07c9jylm6qpgaxl4s
{ "id" : 3, "payment_hash" : "6976b75ffe6e5076b545a65a8c9233e9858d27888dcc45b76015eb74a28193cb", "destination" : "027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa", "msatoshi" : 123000, "timestamp" : 1522582695, "created_at" : 1522582695, "status" : "complete", "payment_preimage" : "3b3ea357b77022d3b94a4a96d377ea0b3c64f4bb7ff95cd002a2c1eb5695b78a", "getroute_tries" : 1, "sendpay_tries" : 1, "route" : 
    [ 
        { "id" : "027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa", "channel" : "1289178:668:0", "msatoshi" : 123000, "delay" : 6 } ], "failures" : 
    [  ] }

支払い処理が実施されたか確認する。
completeとなっているので支払い処理は実施されてます。

$ lightning-cli listpayments
{ "payments" : 
    [ 
        { "id" : 1, "payment_hash" : "6976b75ffe6e5076b545a65a8c9233e9858d27888dcc45b76015eb74a28193cb", "destination" : "027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa", "msatoshi" : 123000, "timestamp" : 1522582695, "created_at" : 1522582695, "status" : "complete", "payment_preimage" : "3b3ea357b77022d3b94a4a96d377ea0b3c64f4bb7ff95cd002a2c1eb5695b78a" } ] }

6.チャネルを閉じる

$  lightning-cli close 027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa
{  }

クローズされていることを確認する。

$ lightning-cli listpeers
{ "peers" : 
    [ 
        { "id" : "027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa", "connected" : false, "channels" : 
            [ 
                { "state" : "CLOSINGD_COMPLETE", "short_channel_id" : "1289178:668:0", "channel_id" : "9ff41875bb50e30efff11f61e5463e49182a316c15579cb8b22fca71c992d289", "funding_txid" : "89d292c971ca2fb2b89c57156c312a18493e46e5611ff1ff0ee350bb7518f49f", "msatoshi_to_us" : 9999877000, "msatoshi_total" : 10000000000, "dust_limit_satoshis" : 546, "max_htlc_value_in_flight_msat" : 18446744073709551615, "channel_reserve_satoshis" : 0, "htlc_minimum_msat" : 0, "their_to_self_delay" : 6, "our_to_self_delay" : 6, "to_self_delay" : 6, "max_accepted_htlcs" : 483, "status" :  } ] }
] }

7.返金

全額2MwXnASptwmqs9Y1b7jbkuaRM3g16S6eJ3Dに戻します。

$ lightning-cli withdraw 2MwXnASptwmqs9Y1b7jbkuaRM3g16S6eJ3D all
{ "tx" : "020000000001019ff41875bb50e30efff11f61e5463e49182a316c15579cb8b22fca71c992d2890100000000ffffffff01295662020000000017a9142f02045c75e651b272bf554deae513cf791a12688702483045022100b9c8e73a4769b985c171f206f5a95033960bea8b6b3ea26e96fd7cf70ad1b8d00220391bcd9c10e1d74caa9f31e8669064a5b645d5c1ddc980d685ca407d70c1adfb012102d2d9af31b985e3f6d4fd6a4d2fb50370dc003a6ba1318324fd5827b77ae3778a00000000", "txid" : "80f7d8d3f3a3784d3d6d7f3dbfdb4b7bbddccd0f65b2f18c5bba705ecf74dbfa" }

8.取引完了

完了です。