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に対して支払いを行うことができます。これは今後追記します。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す