One or Zero?

興味のある様々なことについて

Bitcoin のLightning Network を使ってお買い物しました〜環境構築と支払い方法〜

Blockstream がLightning Network(以下LN)での決済ができるECサイトを立ち上げたというこのtweetを見て居てもたってもいられなくなったので、VPSを借りてLNのノードを立てることにしました。 "Testnet is so boring" ということで、もちろんmainnnetでの送金です。

注)LightningNetworkはテスト段階の技術であるため、mainnetでの送金は資金を失う可能性があります。少額で、かつ自己責任でお願い致します。

環境構築

bitcoindのインストール

LNの実装は複数ある(LightningLabsのLNDが最もドキュメントやチュートリアルが充実している気がします)のですが、Blockstreamでの買い物ということで、Blockstreamが開発しているc-lightningを使うことにします。なお、c-lightningを立ち上げるにはbitcoindがインストールされている必要があります。bitcoindのインストール方法について詳しくは他の記事に譲りますが、Ubuntu/Debian系なら以下のコマンドでインストール可能です。

$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt update && sudo apt install -y bitcoind

VPS環境でのインストールなのでbitcoin-qtはインストールしていませんが、デスクトップとかなら入れたほうがわかりやすいと思います。

次に、~/.bitcoin/bitcoin.confを作成して、適当に設定してください(参考)。次のコマンドでmainnetで起動します。

$ bitcoind -daemon

ここで、ポートの8332と9735版を開けておくことを忘れないようにしてください。それぞれbitcoind、lightningdが使用します。

また、bitcoindのログを見たい場合には次のようにすると良いでしょう。

$ tail -f ~/.bitcoin/debug.log

c-lightningのインストール

githubリポジトリからcloneしてビルドします。

$ sudo apt-get install -y autoconf automake build-essential git libtool libgmp-dev libsqlite3-dev python python3 net-tools
$ git clone https://github.com/ElementsProject/lightning.git
$ cd lightning
$ make

lightningd を立ち上げる

lightningdは以下のコマンドでテストネット上で立ち上げることができます。

$ cd ~/lightning
$ lightningd/lightningd --network bitcoin --log-level debug

他のノードとつながってみる

cli/lightning-cli connect <ID>で他のlightningノードと接続することができます。 Blockstreamのノードとつながってみましょう。

$ cli/lightning-cli connect 02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432

Funding Transactionを作成&ブロードキャストしてチャンネルを開通する

これで、Blockstream Storeでお買い物をする準備が整いました。さっそくFunding Transactionを作成してみます。

$ cli/lightning-cli fundchannel <nodeID> ammount_in_satoshis

このtransactionが3承認されるとLNで支払いが可能になります。チャンネルが開通したかをチェックするには、

$ cli/lightning-cli getinfo

で自分のnodeIDをコピーし、

$ cli/lightning-cli listchannels | grep <your_node_id>

で自分のノードが含まれるチャンネルが見つかれば、チャンネルが開通したことを確かめられます。 チャンネルが開けていることを確認したら、とうとうLNペイメントです!

Instant payment

Lightning Networkでの支払いはinvoice-basedなので、bolt11で定義されたinvoiceを誰かに作ってもらう必要があります。

今回は、Blockstreamでのお買い物なのでBlockstreamが作ってくれます。invoiceを使って次のように支払いましょう。

$ cli/lightning-cli pay <invoice>

最後に

以上です!一瞬で送金されましたね。

c-lightningの他にもLNDなど、他にもLightning Networkノードの実装はありますので、それらもいじったり、関連のライブラリを書いたりしていきたいと思います!

不明な点や間違っているところがあればコメントやTwitterで教えてくださると幸いです。