.@Blockstream launches store accepting #LightningNetwork payments: https://t.co/RO4Rvs8RJD. We've got a "Don't Trust. Verify." t-shirt, a Blockstream #Satellite sticker, and an "I Got Lightning Working But All I Got Was This Sticker" sticker! ⚡️ #LightningCharge #Swag #Bitcoin pic.twitter.com/8WVFf0NpT7
— Blockstream (@Blockstream) 2018年1月17日
Blockstream がLightning Network(以下LN)での決済ができるECサイトを立ち上げたというこのtweetを見て居てもたってもいられなくなったので、VPSを借りてLNのノードを立てることにしました。
"Testnet is so boring" ということで、もちろんmainnnetでの送金です。
Disclaimer: c-lightning is not production ready. TorGuard will cover loss of funds when sending us LN payments. Testnet is so boring.
— TorGuard (@TorGuard) 2018年1月8日
注)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で教えてくださると幸いです。