ライトニングネットワークノードの運用
ここまで読んで、あなたはおそらくLightningウォレットをセットアップしてきたことでしょう。この章では、さらに一歩進んで、完全なLightningノードをセットアップしていきます。セットアップだけでなく、その運用方法と長期的なメンテナンスについても学びます。
自分のLightningノードをセットアップしたい理由はたくさんあります。以下のような理由があります。
エンドユーザとしてだけでなく、Lightningネットワークに積極的に参加したい。
eコマースストアを運営したり、Lightning決済で収入を得たりするため。
Lightningのルーティングフィーやチャネルの流動性をレンタルして収入を得る。
ライトニングネットワークの新しいサービス、アプリケーション、またはプラグインを開発する。
Lightningの使用中にお客様の財務的プライバシーを向上させるため
Lightningを搭載したインスタントメッセージングアプリケーションなど、Lightningの上に構築されたいくつかのアプリケーションを使用すること。
経済的自由、独立性、および主権を得るため
LNノードの運営には費用がかかります。コンピュータ、インターネット接続、ディスク容量、そして時間が必要です。運営費には電気代も含まれます。
しかし、この経験から得られるスキルは貴重であり、他の様々な仕事にも応用できます。
さぁ、はじめましょう
注意事項
正確な事実に基づいて、自分の期待値を正しく設定することが重要です。ルーティングフィーを得ることだけを目的にライトニングノードを運用するのであれば、まず下調べをしっかりしてください。Lightningノードを運用して利益を得ることは、決して簡単ではありません。初期費用と継続的な費用をすべてスプレッドシートで計算してください。LNの統計情報をよく調べてください。現在の決済ボリュームは?ノードあたりのボリュームは?現在の平均ルーティング手数料は?フォーラムで実際の経験を積んだ他のコミュニティメンバーからのアドバイスやフィードバックを求めます。このようなデューデリジェンスを行った上で、自分なりの意見を形成してください。ほとんどの人は、ノードを運営する動機を金銭的な利益ではなく、他のところに見出すでしょう。
プラットフォームの選択
ライトニングノードを運用する方法には、自宅でホストする小型ミニPCや専用サーバー、クラウド上のホスティングサーバーなど、さまざまな方法があります。どの方法を選択するかは、あなたが持っているリソースと使いたい金額によって決まります。
ライトニングノードを運用する上で、なぜ信頼性が重要なのか?
ビットコインでは、特にマイニングノードを稼働させるのでなければ、ハードウェアは特に重要ではありません。Bitcoin Core ノードソフトウェアは、最小限の要件を満たすマシンであればどのマシンでも実行でき、支払いを受け取るためにオンラインである必要はなく、支払いを送信するためだけでよいのです。ビットコインのノードが長期間停止した場合、ユーザーはノードを再起動するだけで、残りのネットワークに接続すると、ブロックチェーンが再同期される。
しかし、ライトニングでは、ユーザーは支払いの送信と受信の両方にオンラインである必要があります。ライトニングのノードがオフラインの場合、誰からも支払いを受けることができないため、そのオープンインボイスを満たすことができない。さらに、オフラインのノードのオープンチャネルは、支払いのルーティングに使用することができません。あなたのチャネルパートナーは、あなたがオフラインであることに気づき、支払いをルーティングするためにあなたに連絡することができません。あなたがあまりに頻繁にオフラインになる場合、チャネルパートナーはあなたのチャネルにロックされたビットコインを十分に活用されていないとみなし、そのチャネルを閉鎖する可能性があります。チャネルパートナーが先にコミットメントトランザクションを送信してあなたをだまそうとするプロトコル攻撃のケースはすでに説明しました。もしあなたがオフラインで、あなたのチャネルが監視されていない場合、盗みの試みは成功し、タイムロックが切れた後、あなたは何の救済も受けられなくなる可能性があります。したがって、ライトニングノードにとって、ノードの信頼性は非常に重要です。
また、ハードウェアの故障やデータの消失の問題もあります。ビットコインでは、ユーザーがニーモニックフレーズや秘密鍵のバックアップを持っていれば、ハードウェアの故障は些細な問題で済みます。ビットコインのウォレットとウォレット内のビットコインは、新しいパソコンで秘密鍵から簡単に復元することができる。ほとんどの情報はブロックチェーンから再ダウンロードすることができる。
一方、ライトニングでは、コミットメント取引や失効秘密など、ユーザーのチャンネルに関する情報は公開されず、個々のユーザーのハードウェアにのみ保存されます。そのため、ライトニング・ネットワークにおけるソフトウェアやハードウェアの故障は、容易に資金の損失を招く可能性があります。
ハードウェアLightningノードの種類
ハードウェアのLightningノードは、大きく分けて3種類あります。
汎用コンピュータ
LNノードは、Windows、macOS、またはLinuxを実行する家庭用コンピュータまたはラップトップ上で実行することができます。一般的に、これはビットコインノードと一緒に実行されます。
専用ハードウェア
ライトニングノードは、Raspberry Pi、Rock64、またはミニPCなどの専用ハードウェアで実行することもできます。このセットアップは通常、ビットコインノードやその他のアプリケーションを含むソフトウェアスタックを実行します。このセットアップは、ハードウェアが Lightning ノードの実行と保守のみに特化されており、通常、インストール "ヘルパー" でセットアップされるため、人気があります。
事前に設定されたハードウェア
LN ノードは、専用に選択され構成されたハードウェア上で実行することもできます。これには、キットまたはターンキーシステムとして購入できる「すぐに使える」Lightningノードソリューションが含まれる。
クラウド」での実行
Microsoft Azure、Google Cloud、Amazon Web Services (AWS)、DigitalOceanなどの仮想プライベートサーバ(VPS)やクラウドコンピューティングサービスは非常に手頃で、非常に迅速にセットアップすることが可能です。このようなサービスでは、ライトニングノードを月々20ドルから40ドルでホスティングすることが可能です。
しかし、「"クラウド "は他人のコンピュータにすぎない」ということわざがあります。これらのサービスを利用するということは、他人のコンピュータで自分のノードを動かすということです。これには、相応のメリットとデメリットがあります。主なメリットは、利便性、効率性、アップタイム、そしておそらくコストです。クラウド事業者はノードを高度に管理・運用し、自動的に利便性と効率性を提供します。優れたアップタイムと可用性を提供し、多くの場合、個人が自宅で実現するよりもはるかに優れています。欧米の多くの国でサーバーを動かすのにかかる電気代が月10ドル程度であることを考えると、それにネットワークの帯域幅とハードウェア自体のコストを加えると、VPSの提供は金銭的に競争力のあるものになる。最後に、VPSを利用すれば、自宅にPCを置くスペースが不要で、PCの騒音や熱の問題もありません。一方、デメリットもいくつかあります。クラウド」上で動作するライトニング・ノードは、自分のコンピュータ上で動作するものに比べて、常に安全性やプライバシーが損なわれます。さらに、これらのクラウドコンピューティングサービスは、非常に中央集権的です。このようなサービス上で動作するビットコインとライトニングノードの大部分は、バージニア、サニーベール、シアトル、ロンドン、フランクフルトの一握りのデータセンターに配置されています。これらのプロバイダーのネットワークやデータセンターにサービス上の問題が発生すると、いわゆる「分散型」ネットワーク上の何千ものノードに影響が及びます。
もし、自宅やオフィスの自分のコンピューターでノードを動かす可能性とキャパシティがあるなら、クラウドで動かすよりもこちらの方が望ましいかもしれません。それでも、自分のサーバーを動かすことができない場合は、ぜひVPSでの運用を検討してみてほしい。
自宅でのノード運用
自宅や職場にそれなりの容量のインターネット接続があれば、そこでライトニングノードを動かすことは可能です。ブロードバンド」接続であれば、ライトニングノードの実行には十分であり、高速接続であればビットコインフルノードも実行可能です。
ラップトップでもライトニングノード(およびビットコインノード)を実行できますが、かなり速くイライラするようになります。これらのプログラムは、コンピュータのリソースを消費し、24時間365日稼働する必要があります。ブラウザやスプレッドシートのようなユーザーアプリケーションは、ライトニングのバックグラウンドサービスとコンピュータのリソースを奪い合うことになるのです。つまり、ブラウザやその他のデスクトップのワークロードが遅くなるのです。また、ワープロソフトがラップトップをフリーズさせると、Lightningノードもダウンし、トランザクションを受信できなくなり、攻撃を受けやすくなる可能性があります。さらに、ノートPCの電源は絶対に切ってはいけません。これらのことが重なり、理想的なセットアップとは言えません。日常的に使用する個人のデスクトップPCも同様でしょう。
代わりに、ほとんどのユーザーは、専用のコンピュータ上でノードを実行することを選択するでしょう。幸いなことに、「サーバ」クラスのコンピュータは必要ありません。Raspberry PiなどのシングルボードコンピュータやミニPC(通常、ホームシアターPCとして販売されている)上でLightningノードを動作させることができます。ミニPCは、ホームオートメーションのハブやメディアサーバとして一般的に使用されているシンプルなコンピュータです。PCやノートPCと比較すると、比較的安価に入手することができます。ライトニングとビットコインノードのプラットフォームとしての専用デバイスの利点は、ルーターやテレビの後ろに隠れて、ホームネットワーク上で継続的に、静かに、目立たないように実行できることです。この小さな箱が、実はグローバルな銀行システムの一部であることを誰も知らないでしょう
警告
32ビットオペレーティングシステムおよび/または32ビットCPUでノードを操作することは推奨されません。ノードソフトウェアがリソースの問題に直面し、クラッシュして資金が失われる可能性があるからです。
Lightningノードの実行に必要なハードウェアは何ですか?
Lightningノードを動作させるためには、最低限以下のものが必要です。
CPU
新しいブロックを継続的にダウンロードし、検証するビットコインノードを実行するために十分な処理能力が必要です。また、ユーザーは新しいビットコインノードをセットアップする際に、数時間から数日かかる初期ブロックダウンロード(IBD)を考慮する必要があります。2コアまたは4コアのCPUを推奨します。
RAM
2GBのRAMを搭載したシステムでは、ビットコインノードとライトニングノードの両方がかろうじて動作します。最低でも4GBのRAMがあれば、より良いパフォーマンスが得られます。IBDは4GB以下のRAMでは特に困難です。署名検証などの暗号化操作により、この種のサービスではCPUが大きなボトルネックとなるため、8GB以上のRAMは不要です。
ストレージドライブ
ハードディスクドライブ(HDD)またはソリッドステートドライブ(SSD)です。SSDを使用すると、ノードの実行速度が大幅に向上します(ただし、価格は高くなります)。ストレージの大部分はビットコインのブロックチェーンに使用され、そのサイズは数百ギガバイトになります。公正なトレードオフ(複雑さに対するコスト)は、OS を起動するために小さな SSD を購入し、大きなデータオブジェクト(主にデータベース)を保存するために大きな HDD を購入することです。
備考
Raspberry Pisは、コストとパーツの入手性の点から、ノードソフトウェアを実行するための一般的な選択肢です。このデバイス上で動作するOSは、通常、セキュアデジタル(SD)カードから起動します。ほとんどの場合、これは問題ではありませんが、Bitcoin CoreはI/Oが重いことで有名です。長期間の集中的なI/OはSDカードの故障の原因となるため、BitcoinブロックチェーンとLightningデータディレクトリを別のドライブに配置することを確認する必要があります。
インターネット接続
新しいビットコインブロックをダウンロードしたり、他のライトニングピアと通信したりするためには、信頼できるインターネット接続が必要です。運用中の推定データ使用量は、構成によって異なりますが、1ヶ月あたり10~100GBの範囲です。起動時に、ビットコインフルノードはブロックチェーン全体をダウンロードします。
電力供給
ライトニングノードは常時オンラインである必要があるため、信頼できる電源が必要です。電源障害が発生すると、進行中の決済が失敗します。負荷の大きいルーティングノードでは、停電時にバックアップや無停電電源装置(UPS)を使用すると便利です。理想的には、インターネットルーターもこのUPSに接続することです。
バックアップ
バックアップは非常に重要です。障害が発生すると、データが失われ、その結果、資金が失われる可能性があるからです。何らかのデータバックアップソリューションを検討することをお勧めします。クラウドベースの自動バックアップをサーバーやウェブサービスに管理することもできます。あるいは、2台目のハードディスクなど、ローカルのハードウェアを自動バックアップすることもできます。ローカルとリモートのバックアップを併用すると、より効果的です。
クラウドにおけるサーバー構成の切り替え
クラウドサーバーをレンタルする場合、2つの運用フェーズで構成を変更することがコスト的に有効な場合があります。IBD(初日など)の間は、より高速なCPUと高速なストレージが必要になります。ブロックチェーンが同期した後は、CPUやストレージの速度要件が大幅に低下するため、より費用対効果の高いレベルに性能をダウングレードすることが可能です。
例えば、Amazonのクラウドでは、IBDに8~16GB RAM、8コアCPU(例:t3-largeまたはm3.large)、高速400GB SSD(1秒間に1000以上のプロビジョニング入出力オペレーション[IOPS])を使用し、その時間はわずか6~8時間に短縮されます。それが完了したら、サーバーインスタンスを2GB RAM、2コアCPU(例:t3.small)に、ストレージを汎用の1TB HDDに変更することになります。この場合、ずっと遅いサーバーで運用した場合とほぼ同じコストがかかりますが、IBDのために1週間近く待たされることなく、1日足らずで稼働させることができるようになります。
データの恒久的な保存(ドライブ)
ミニPCを使ったり、サーバーを借りたりすると、ストレージが一番高くつくことがあり、パソコンと接続環境(データ)を足したのと同じくらいの費用がかかります。
では、どのような選択肢があるのか見てみましょう。まず、ドライブには大きく分けて、HDDとSSDの2種類があります。HDDは安価で、SSDは高速ですが、どちらも仕事をします。
現在入手可能な最速のSSDは、NVMe(Non-Volatile Memory Express)インターフェイスを使用しています。NVMe SSDはハイエンド・マシンではより高速ですが、コストも高くなります。従来のSATAベースのSSDは安価ですが、それほど高速ではありません。SATA SSDは、お使いのノードのセットアップに十分な性能を発揮します。小型のコンピュータでは、NVMe SSDを活用できない可能性があります。例えば、Raspberry Pi 4は、USBポートの帯域幅が限られているため、その恩恵を受けることができません。
サイズを選択するために、ビットコインのブロックチェーンを見てみましょう。2021年8月現在、そのサイズは取引インデックスを含めて360GBで、1年におよそ60GBずつ増えている。将来の成長やノードに他のデータをインストールするために、ある程度のマージンを確保したい場合は、少なくとも512GBのドライブを、より良い場合は1TBのドライブを購入しましょう。
インストーラやヘルパーの使用
ライトニングノードやビットコインノードのインストールは、コマンドライン環境に慣れていないと難しいかもしれません。幸いなことに、「ヘルパー」、つまり、様々なコンポーネントをインストールし、設定してくれるソフトウェアを作るプロジェクトが数多くあります。ノードと対話するためにコマンドラインの呪文を学ぶ必要はありますが、最初の作業の大部分はあなたのために行われます。
RaspiBlitz
最も人気のある完全な「ヘルパー」のひとつが RaspiBlitz (A RaspiBlitz node) で、Christian Rotzoll によって構築されたプロジェクトです。これは、Raspberry Pi 4にインストールすることを想定しています。RaspiBlitzには推奨ハードウェアキットが付属しており、数時間かせいぜい週末に組み立てることができます。あなたの街で開催されるライトニング「ハッカソン」に参加すれば、多くの人がRaspiBlitzのセットアップに取り組み、チップを交換し、お互いに助け合っている姿を目にすることができるでしょう。RaspiBlitzプロジェクトは、GitHubで見つけることができます。
ビットコインとライトニングのノードに加え、RaspiBlitzは以下のような追加サービスをインストールすることができます。
Tor (隠しサービスとして実行)
ElectRS (RustによるElectrumサーバー)
BTCPay サーバー (暗号通貨支払いプロセッサー)
BTC RPC Explorer (ビットコイン・ブロックチェーン・エクスプローラー)
Ride The Lightning (ライトニングノード管理GUI)
LNbits (Lightningウォレット/アカウントシステム)
Specter Desktop(マルチシグTrezor、Ledger、Coldcardウォレット、Specter-DIY)
lndmanage (高度なチャネル管理用コマンドラインインターフェース)
Loop (海底スワップサービス)
JoinMarket (CoinJoinサービス)
https://scrapbox.io/files/62d68d1176f1cb0023f8686d.png
Mynode
myNodeは、多くのビットコイン関連ソフトウェアを含む、もう一つの人気のあるオープンソース "ヘルパー "プロジェクトです。インストールは簡単で、インストーラーをSDカードに「フラッシュ」して、SDカードからミニPCを起動します。管理ツールはブラウザからリモートでアクセスできるため、myNodeを使用するためにモニターは必要ありません。ミニPCにモニター、マウス、キーボードがない場合でも、他のコンピュータやスマートフォンから管理することができます。インストールしたら、http://mynode.local、2クリックでライトニングウォレットとノードを作成します。 myNodeは、ビットコインとライトニングのノードに加え、オプションで以下のような様々な追加サービスをインストールすることができます。
Ride The Lightning (Lightningノード管理GUI)
OpenVPN (リモート管理またはウォレット用の仮想プライベートネットワークVPNサポート)
lndmanage (高度なチャネル管理用コマンドラインインターフェース)
BTC RPC Explorer (ビットコインブロックチェーンエクスプローラ)
Umbrel
UX/UI(Umbrelで表示)で有名なUmbrelは、特に初心者のために、ビットコインとライトニングのノードをすぐに立ち上げるための非常に簡単でアクセスしやすい方法を提供します。非常に特徴的なのは、UmbrelがIBD中にNeutrino/SPVを利用するので、すぐにノードを使い始めることができることです。Bitcoin Coreがバックグラウンドで完全に同期されると、自動的に切り替わり、SPVモードが無効になります。Umbrel OSはRaspberry Pi 4をサポートしており、LinuxベースのOSやmacOS、Windowsの仮想マシンにもインストール可能です。また、Bitcoin Core P2P、Bitcoin Core RPC、Electrumプロトコル、lndconnectに対応したウォレットであれば、接続可能です。
雨の日を待つ必要はなく、すぐにUmbrelにアクセスして詳細を確認できます。
https://scrapbox.io/files/62d68d66d04d38001da59abd.png
図2. UmbrelのWebインターフェース
Umbrelは、BitcoinとLightningのノードに加えて、以下のような追加サービスを簡単にインストールできる「Umbrel App Store」を導入しました。
Lightning Terminal(チャネルの流動性、Loop In、Loop Outを管理するためのインターフェイス)
Ride The Lightning (Lightningノード管理GUI)
Specter Desktop(マルチシグネチャおよびシングルキービットコインウォレット用のウォッチオンリーコーディネーター)
BTCPay Server(暗号通貨決済プロセッサー)
BTC RPC Explorer(ビットコイン・ブロックチェーン・エクスプローラー)
ThunderHub (ノードの監視と管理)
Sphinx Relay (Sphinxチャットの接続とストレージを扱う)
mempool.space (mempoolビジュアライザーとブロックエクスプローラー)
LNbits (ライトニングウォレット/アカウントシステム)
Umbrelは現在まだベータ版であり、安全とは考えられていません。
BTCPayサーバー
当初はインストール「ヘルパー」として設計されたわけではありませんが、eコマースと決済プラットフォームのBTCPay Serverは、Dockerコンテナとdocker-composeを使用して、他の多くのサービスの中からBitcoinノード、Lightningノード、決済ゲートウェイをインストールする、信じられないほど簡単なインストールシステムを持っています。シンプルなRaspberry Pi 4(4GB推奨)からミニPCや古いラップトップ、デスクトップ、サーバーまで、様々なハードウェアプラットフォームにインストールすることが可能です。
BTCPayサーバーは、WordPress WooCommerceなどの多くのeコマースプラットフォームと統合できる、フル機能のセルフホスティング、セルフカスタマイズエコココミュニティプラットフォームです。フルノードのインストールは、eコマースプラットフォームのインストールの一工程に過ぎません。元々はBitPay商用決済サービスおよびAPIの機能代替品として開発されましたが、それを超えて、ECに関連するBTCおよびLightningサービスの完全なプラットフォームとして進化しています。多くの売り手やショップにとって、eコマースのワンショップターンキーソリューションとなっています。
BTCPay Serverは、BitcoinとLightningのノードに加えて、以下のような様々なサービスをインストールすることができます。
c-lightningまたはLNDライトニングノード
ライトコインサポート
Monero対応
Sparkサーバー(c-lightningウェブウォレット)
チャージサーバ(c-lightning eコマースAPI)
Ride The Lightning (ライトニングノード管理Web GUI)
多くのBTCフォーク
BTCTransmuter (通貨交換をサポートするイベントアクション自動化サービス)
追加サービスや機能の数は急速に増加しているため、前述のリストはBTCPayサーバーのプラットフォームで利用可能なもののごく一部に過ぎません。
ビットコインノードか軽量ライトニングか
セットアップのための重要な選択の1つは、ビットコインノードの選択とその構成です。リファレンス実装であるBitcoin Coreは最も一般的な選択ですが、唯一の選択肢ではありません。btcd は LND Lightning ノードを実行するのに便利な機能をいくつかサポートしていますが、Bitcoin Core では利用できません。
2つ目の考慮点は、ブロックチェーンの完全なコピー(2021年半ばで約350GB)を持つアーカイブBitcoinノードを実行するか、最新のブロックのみを保持するプルーニングされたブロックチェーンを実行するかということです。刈り込まれたブロックチェーンはディスク容量を節約できますが、それでも少なくとも1回(IBDの間)ブロックチェーンの全容をダウンロードする必要があります。したがって、ネットワークトラフィックを節約することはできません。Lightningノードを実行するために剪定されたノードを使用することは、まだ実験的な機能であり、すべての機能をサポートしていないかもしれません。しかし、多くの人がそのようなノードをうまく動かしています。
最後に、ビットコインノードを全く稼働させないという選択肢もあります。その代わり、LND Lightningノードを「軽量」モードで運用し、Neutrino Protocolを使って、他の人が運用しているパブリックBitcoinノードからブロックチェーン情報を取得することができます。このように動作させることは、見返りを提供することなく、ビットコインネットワークからリソースを奪うことを意味します。その代わり、リソースを提供し、LN コミュニティに貢献することになります。小規模なライトニングノードの場合、これは一般的に完全なビットコインノードを実行するのと比較してネットワークトラフィックを削減します。
ビットコイン・ノードを運用することで、ライトニング・ノード以外の、あるいはライトニング・ノードの上にある他のサービスをサポートすることができることに留意してください。これらの他のサービスは、アーカイブされた(剪定されていない)Bitcoinノードを必要とする場合があり、Bitcoinノードなしでは実行できないことがよくあります。現在または将来的にどのような他のサービスを実行したいかを前もって検討し、選択するBitcoinノードのタイプについて十分な情報を得た上で決定してください。
500GB以上のディスクを用意できるのであれば、フルアーカイブのBitcoinノードを走らせることです。あなたはビットコインシステムにリソースを貢献し、それをする余裕がない他の人を助けることになります。そのような大きなディスクを買う余裕がない場合は、剪定されたノードを走らせましょう。剪定されたノードのためのディスクや帯域幅に余裕がない場合は、Neutrino上で軽量のLNDノードを実行してください。
オペレーティングシステムの選択
次のステップは、ノードのオペレーティング・システムを選択することです。インターネット・サーバーの大部分は、Linuxの何らかのバージョンで動作しています。Linuxは強力なオープンソースのオペレーティングシステムであるため、インターネットに最適なプラットフォームです。しかし、Linuxは学習曲線が急で、コマンドライン環境に精通する必要があります。しかし、Linuxは学習曲線が急で、コマンドライン環境に精通する必要があり、新しいユーザーにとっては威圧的であることが多い。
最終的には、ほとんどのサービスは、macOS、Windows、そしてもちろんLinuxを含む最新のPOSIXオペレーティングシステム上で実行することができます。MacOS、Windows、Linuxなど、POSIX系のOSであれば、どのOSでも動作します。もしあなたが知識を増やし、Linuxシステムの操作方法を学びたいのであれば、これは特定のプロジェクトと明確な目標を持ってそうする絶好の機会です。ただ単にノードを立ち上げたいだけなら、自分の知っていることをやってみましょう。
最近では、多くのサービスがコンテナという形で提供されるようになりました。これらのコンテナは様々なOS上にデプロイすることができ、基盤となるOSを抽象化することができます。しかし、ほとんどのコンテナでLinuxが動作しているため、LinuxのCLIコマンドを学ぶ必要があるかもしれません。
Lightning ノードの実装を選択する
オペレーティング システムの選択と同様に、Lightning ノードの実装の選択は、主にプロジェクトで使用されているプログラミング言語と開発ツールに精通しているかどうかによって決まります。様々なノード実装の間には若干の機能の違いがありますが、それは比較的小さなものであり、ほとんどの実装はBOLTによって定義された共通の標準に収束しています。
一方、プログラミング言語やビルドシステムに精通していることは、ノードを選択する際の良い基準となります。なぜなら、インストール、設定、継続的なメンテナンス、トラブルシューティングのすべてが、ビルドシステムで使用されるさまざまなツールとのやりとりを伴うからです。これには以下が含まれます。
c-lightning用のMake、Autotools、およびGNUユーティリティ。
LND 用の Go ユーティリティ
Eclair 用の Java/Maven
プログラミング言語は、ビルドシステムの選択だけでなく、プログラムの他の多くの側面にも影響を与えます。各プログラミング言語には全体の設計思想があり、以下のような他の多くの側面に影響を及ぼします。
設定ファイルの形式と構文
ファイルの場所 (ファイルシステム内)
コマンドライン引数とその構文
エラーメッセージの書式
前提条件となるライブラリ
リモートプロシージャコールインターフェイス
ライトニングノードを選択するとき、前述のすべての特性を選択することにもなります。そのため、これらのツールや設計思想に精通していれば、ノードの実行が容易になります。あるいは、馴染みのない領域に着地した場合は、より難しくなります。
一方、コマンドラインやサーバー/サービス環境に初めて触れる場合、どのような実装にも馴染みがなく、全く新しいことを学ぶ機会に恵まれるでしょう。その場合は、次のような他の多くの要素に基づいて決定するとよいでしょう。
サポートフォーラムやチャットルームの質
ドキュメントの質
あなたが実行したい他のツールとの統合の度合い
最終的な検討事項として、さまざまなノード実装のパフォーマンスと信頼性を検証することができます。これは、本番環境でこのノードを使用し、重いトラフィックと高い信頼性が要求されると予想される場合に特に重要です。例えば、あるショップの決済システムをこのノードで実行する場合などがこれにあたります。
ビットコインまたはライトニングノードのインストール
インストール「ヘルパー」を使わず、Linuxオペレーティングシステムのコマンドラインに飛び込むことにしたのですか?それは勇敢な決断で、私たちはそれがうまくいくようにお手伝いします。手動でインストールしたくない場合は、インストーラやヘルパーの使用で説明するように、ノードソフトウェアのインストールを支援するアプリケーションやコンテナベースのソリューションの使用を検討してください。
警告
このセクションでは、コマンドラインからのシステム管理という高度なトピックに踏み込みます。Linux の管理は、この本の範囲外の独自のスキルセットです。これは複雑なトピックであり、多くの落とし穴があります。慎重に進めてください。
次のセクションでは、Linux オペレーティングシステムに Bitcoin および Lightning ノードをインストールおよび設定する方法を簡単に説明します。使用する特定のビットコインおよびライトニング ノード アプリケーションのインストール手順を確認する必要があります。通常、これらはINSTALLと呼ばれるファイル、または各プロジェクトのdocsサブディレクトリで見つけることができます。私たちは、このようなすべてのサービスに適用される共通の手順の一部のみを説明し、私たちが提供する手順は必ずしも不完全なものになるでしょう。
バックグランドサービス
デスクトップやスマートフォンでアプリケーションを実行することに慣れている人にとって、アプリケーションはバックグラウンドで実行されることがあっても、常にグラフィカルユーザーインターフェースを備えているものです。しかし、ビットコインとライトニングノードのアプリケーションは非常に異なっています。これらのアプリケーションには、グラフィカルユーザーインターフェイスが組み込まれていません。つまり、常にバックグラウンドで動作し、ユーザーと直接対話することはありません。
これは、バックグラウンド・サービスの実行に慣れていないユーザーにとって、いくつかの混乱を引き起こす可能性があります。そのようなサービスが現在実行されているかどうかを知るにはどうすればよいのでしょうか。サービスの起動と停止はどのように行うのでしょうか?どのように操作するのでしょうか?これらの質問に対する答えは、使用しているオペレーティングシステムに依存します。ここでは、あなたがLinuxを使用していると仮定し、その文脈で回答します。
プロセスの分離
バックグラウンドサービスは通常、特定のユーザーアカウントで実行され、オペレーティングシステムや他のサービスから分離されます。例えば、Bitcoin Coreはユーザーbitcoinとして実行されるように設定されています。コマンドラインを使用して、実行する各サービスのユーザーを作成する必要があります。
さらに、外付けドライブを接続している場合は、ユーザーのホームディレクトリをそのドライブに再配置するようにオペレーティングシステムに指示する必要があります。Bitcoin Coreのようなサービスは、ユーザーのホームディレクトリの下にファイルを作成することになるからです。ビットコインのブロックチェーン全体をダウンロードするように設定している場合、これらのファイルは数百ギガバイトを占めることになります。ここでは、外付けドライブを接続し、それがオペレーティングシステムの /external_drive/ パスに配置されていると仮定しています。
ほとんどのLinuxシステムでは、次のようにuseraddコマンドで新しいユーザーを作成することができます。
$ sudo useradd -m -d /external_drive/bitcoin -s /dev/null bitcoin
mとdフラグは、この例では/external_drive/bitcoinで指定されたユーザーのホームディレクトリを作成します。sフラグは、ユーザーの対話型シェルを指定します。今回は、対話型シェルを使用しないように /dev/null に設定します。最後の引数は、新しいユーザーのユーザー名 bitcoin です。
ノードのスタートアップ
ビットコインとライトニングの両ノードサービスでは、「インストール」には、コンピュータの起動時にノードを確実に起動させるための、いわゆるスタートアップスクリプトの作成も含まれます。バックグラウンドサービスのスタートアップとシャットダウンは、Linuxではinitまたはsystemdと呼ばれるオペレーティングシステムプロセスによって処理されます。通常、システム起動スクリプトは各プロジェクトのcontribサブディレクトリにあります。例えば、systemd を使用する最新の Linux OS を使用している場合、Bitcoin Core ノードサービスを開始および停止できる bitcoind.service というスクリプトを見つけることができます。
以下は、Bitcoin Core コードリポジトリから引用した、Bitcoin ノードの起動スクリプトがどのようなものかの例です。
bitcoin/contrib/init/bitcoind.service からです。
code:bitcoind.service
Description=Bitcoin daemon
After=network.target
ExecStart=/usr/bin/bitcoind -daemon \
-pid=/run/bitcoind/bitcoind.pid \
-conf=/etc/bitcoin/bitcoin.conf \
-datadir=/var/lib/bitcoind
# Make sure the config directory is readable by the service user
PermissionsStartOnly=true
ExecStartPre=/bin/chgrp bitcoin /etc/bitcoin
# Process management
####################
Type=forking
PIDFile=/run/bitcoind/bitcoind.pid
Restart=on-failure
TimeoutStopSec=600
# Directory creation and permissions
####################################
# Run as bitcoin:bitcoin
User=bitcoin
Group=bitcoin
# /run/bitcoind
RuntimeDirectory=bitcoind
RuntimeDirectoryMode=0710
# /etc/bitcoin
ConfigurationDirectory=bitcoin
ConfigurationDirectoryMode=0710
# /var/lib/bitcoind
StateDirectory=bitcoind
StateDirectoryMode=0710
WantedBy=multi-user.target
root ユーザーで、スクリプトを systemd サービスフォルダ /lib/systemd/system/ にコピーしてインストールし、systemd を再ロードしてください。
$ sudo systemctl daemon-reload
次に、サービスを有効にします。
$ sudo systemctl enable bitcoind
これでサービスの起動と停止ができるようになりました。まだ Bitcoin ノードの設定をしていないので、起動しないでください。
$ sudo systemctl start bitcoind
$ sudo systemctl stop bitcoind
ノードのコンフィギュレーション
ノードを設定するためには、設定ファイルを作成し、参照する必要があります。慣習上、このファイルは通常 /etc に作成され、プログラム名と同じディレクトリの下に作成されます。例えば、Bitcoin CoreとLNDの設定は通常、それぞれ/etc/bitcoin/bitcoin.confと/etc/lnd/lnd.confに格納されるでしょう。
これらの設定ファイルはテキストファイルで、各行には1つの設定オプションとその値が記述されています。設定ファイルで定義されていないものについては、デフォルト値が想定されています。コンフィギュレーションで設定できるオプションは、2つの方法で確認できます。まず、nodeアプリケーションをhelp引数付きで実行すると、コマンドラインで定義可能なオプションが表示されます。これらの同じオプションはコンフィギュレーション・ファイルで定義することができます。第二に、通常、ソフトウェアのコードリポジトリで、全てのデフォルトオプションを含む設定ファイルの例を見つけることができます。
set_up_a_lightning_node] で使用した各 Docker イメージの中に、設定ファイルの例が 1 つずつあります。例えば、code/docker/bitcoind/bitcoin.confというファイルです。
docker bitcoindの設定ファイル(code/docker/bitcoind/bitcoind/bitcoin.conf)です。
link:code/docker/bitcoind/bitcoind/bitcoin.conf[]を参照してください。
その特定の設定ファイルは、Bitcoin Coreをregtestノードとして動作するように設定し、リモートアクセス用の弱いユーザー名とパスワードを提供します。しかし、これは設定ファイルの構文を説明するためのものであり、Dockerコンテナ内でそれを調整することで、さまざまなオプションを実験することができます。set_up_a_lightning_node] で構築した Docker ネットワークのコンテキストで、各オプションが何を行うかを理解するために bitcoind -help コマンドを使用できるかどうかを確認してください。
多くの場合、デフォルトで十分であり、いくつかの修正でノードソフトウェアを迅速に設定することができます。最小限のカスタマイズでBitcoin Coreノードを動作させるには、4行の設定だけで済みます。
code:conf
server=1
daemon=1
txindex=1
rpcuser=USERNAME
rpcpassword=PASSWORD
txindex オプションも厳密には必要ではありませんが、Bitcoin ノードがすべてのトランザクションのインデックスを作成することを保証し、一部のアプリケーションで必要とされるものです。Lightning ノードの実行には、txindex オプションは必要ありません。
同じサーバー上で動作する c-lightning Lightning ノードも、設定に数行しか必要ありません。
code:clightning
network=mainnet
bitcoin-rpcuser=USERNAME
bitcoin-rpcpassword=PASSWORD(ビットコイン・パスワード
一般的に、これらのシステムのカスタマイズは最小限に抑えるのが得策です。デフォルトの設定は、最も一般的な配備をサポートするように慎重に設計されています。デフォルトの値を変更すると、後で問題が発生したり、ノードのパフォーマンスが低下する可能性があります。要するに、必要なときだけ修正すればいいのです!
ネットワーク設定
ネットワーク構成は、通常、新しいアプリケーションを構成する際に問題となることはありません。しかし、ビットコインやライトニング・ネットワークのようなピアツーピア・ネットワークは、ネットワーク構成にいくつかのユニークな課題を提示します。
集中型サービスでは、あなたのコンピュータはどこかの企業の「大きなサーバー」に接続し、その逆はありません。自宅のインターネット接続は、実は自分が他人が提供するサービスの単なる消費者であるという前提で設定されている。しかし、ピアツーピア・システムでは、すべてのピアが他のノードからサービスを消費し、他のノードにサービスを提供します。自宅でビットコインやライトニングのノードを稼働させている場合、インターネット上の他のコンピュータにサービスを提供していることになります。デフォルトのインターネットサービスは、サーバーを実行できるように設定されていないため、他の人があなたのノードに到達できるようにするために、いくつかの追加設定が必要な場合があります。
ビットコインやライトニングのノードを実行したい場合、インターネット上の他のノードがあなたに接続できるようにする必要があります。つまり、Bitcoinポート(デフォルトではポート8333)またはLightningポート(デフォルトではポート9735)への着信TCP接続を有効にすることです。ビットコインノードは着信接続なしで実行できますが、ライトニングノードではそのようなことはできません。ライトニングノードは、ネットワーク外からアクセス可能でなければなりません。
デフォルトでは、自宅のインターネットルーターは外部からの着信接続を期待しておらず、実際、着信接続はブロックされています。インターネットルーターのIPアドレスが外部からアクセス可能な唯一のIPアドレスとなり、ホームネットワーク内で実行するすべてのコンピュータがその単一のIPアドレスを共有します。これは、ネットワークアドレス変換(NAT)と呼ばれるメカニズムによって実現されており、インターネットルーターはすべてのアウトバウンド接続のための仲介者として機能することができます。インバウンド接続を許可したい場合は、ポート転送を設定する必要があります。これは、特定のポート上の着信接続は、ネットワーク内の特定のコンピュータに転送されるべきであることをインターネットルータに指示するものです。これは、インターネットルーターの設定を変更して手動で行うか、ルーターが対応している場合は、ユニバーサル・プラグ・アンド・プレイ(UPnP)と呼ばれる自動ポート転送メカニズムによって行うことができます。
ポートフォワーディングに代わる仕組みとして、オニオンルーター(Tor)を有効にする方法があります。Torは、オニオンアドレスへの着信接続を可能にする仮想プライベートネットワークのオーバーレイの一種を提供します。Torを実行する場合、ポートフォワーディングを行ったり、ビットコインやライトニングのポートへの着信接続を有効にする必要はない。Torを使用してノードを実行する場合、すべてのトラフィックはTorを経由し、他のポートは使用されません。
他の人があなたのノードに接続できるようにするためのさまざまな方法を見てみましょう。これらの代替案を簡単なものから難しいものへと順に見ていきます。
とにかく動くようにする
インターネットサービスプロバイダやルータがデフォルトでUPnPをサポートするように設定されており、すべてが自動的に動作する可能性があります。念のため、まずはこの方法を試してみましょう。
すでにビットコインやライトニングのノードが稼働していると仮定して、それらが外部からアクセス可能かどうかを試してみます。
このテストを行うには、ホームネットワーク上でBitcoinまたはLightningノード(またはその両方)を稼働させる必要があります。ルーターがUPnPをサポートしている場合、受信トラフィックは自動的にノードを実行しているコンピュータの対応するポートに転送されます。
あなたの外部IPアドレスと、それが既知のポートへの着信接続を許可し転送しているかどうかを調べるには、いくつかの非常に有名で便利なウェブサイトを使用することができます。ここでは、信頼性の高い2つを紹介します。
デフォルトでは、これらのサービスでは、接続元のIPアドレスへの着信接続のみを確認することができます。これは、このサービスを使用して他人のネットワークやコンピュータをスキャンすることを防ぐために行われます。ルーターの外部IPアドレスと、ポート番号を入力するフィールドが表示されます。ノードの設定でデフォルトのポートを変更していない場合は、ポート8333(Bitcoin)および/または9735(Lightning)を試してみてください。
Checking for incoming port 9735では、whatismyip.comのポートスキャナツールを使用して、Lightningを実行しているサーバーのポート9735を確認した結果を見ることができます。これは、サーバーがLightningポートへの着信接続を受け入れていることを示しています。このような結果が表示されれば、準備は完了です!
https://scrapbox.io/files/62f0ebdae7939b001d48d474.png
UPnPによる自動ポートフォワーディング
インターネットルーターがUPnPに対応していても、デフォルトでOFFになっている場合があります。その場合は、インターネットルーターのWeb管理インターフェイスから設定を変更する必要があります。
インターネットルーターの設定サイトに接続します。通常、これはWebブラウザーを使用して、ホームネットワークのゲートウェイアドレスに接続することによって行うことができます。ゲートウェイアドレスは、ホームネットワーク上の任意のコンピュータのIPコンフィギュレーションを見ることによって見つけることができます。それは、192.168.0.1や10.0.0.1などの非ルータブルネットワークの1つの最初のアドレスであることが多いのです。ゲートウェイのアドレスのために同様にあなたのルータ上のすべてのシールを確認してください. 見つかったら、ブラウザを開き、ブラウザのURL/検索ボックスにIPアドレスを入力します。例えば、"192.168.0.1" や "http://192.168.0.1." などです。 ルータのウェブ設定パネルの管理者ユーザー名とパスワードを見つけます。これは、多くの場合、ルータ自体のステッカーに書かれており、 "admin "と "password "と同じくらい簡単であるかもしれません。あなたのISPとルータのモデルのためのクイックウェブ検索はまた、この情報を見つけるのに役立ちます.
UPnPの設定を見つけて、それをオンにします。
Bitcoinおよび/またはLightningノードを再起動し、前のセクションで使用したWebサイトの1つでポート開放テストを繰り返します。
Torを使った着信接続
Onion Router (Tor) は、ホップ間の通信を暗号化し、仲介ノードがパケットの発信元や宛先を特定できないようにする特殊な性質を持つ VPN です。ビットコインとライトニングの両ノードはTor上での操作をサポートしており、IPアドレスや所在地を明らかにすることなくノードを操作することが可能です。したがって、ネットワークトラフィックに高いレベルのプライバシーを提供することができます。Torを運用することの付加的な利点は、VPNとして動作するため、インターネットルーターからのポートフォワーディングの問題を解決することです。着信接続はTorトンネル上で受信され、あなたのノードはIPアドレスの代わりにアドホックに生成されたオニオンアドレスによって見つけることができます。
Torを有効にするには2つのステップが必要です。まず、Torルーターとプロキシをあなたのコンピュータにインストールする必要があります。2つ目は、BitcoinやLightningの設定でTorプロキシの使用を有効にすることです。
aptパッケージ・マネージャーを使用するUbuntu LinuxシステムにTorをインストールするには、以下を実行します。
sudo apt install tor
次に、Lightning ノードが外部接続に Tor を使用するように設定します。以下はLNDの設定例です。
code:lnd_conf
tor.active=true
tor.v3=true
tor.streamisolation=true
listen=localhost
これはTorを有効にし(tor.active)、v3オニオンサービスを確立し(tor.v3=true)、接続ごとに異なるオニオンストリームを使い(tor.streamisolation)、あなたのIPアドレスを漏らさないためにローカルホストのみへの接続を制限し(listen=localhost)、さらに、あなたのIPアドレスを漏らさないために、あなたの接続を許可し、あなたの接続を許可します。
Torが正しくインストールされ動作しているかどうかは、簡単な一行コマンドを実行することで確認できます。このコマンドはLinuxのほとんどのフレーバーで動作するはずです。
すべてが正しく動作している場合、このコマンドの応答は「おめでとうございます」となるはずです。このブラウザはTorを使うように設定されています。"
Torの性質上、外部サービスを使ってあなたのノードがオニオンアドレスで到達可能かどうかを簡単に確認することはできません。それでも、ライトニングノードのログにあなたのTorオニオンアドレスが表示されるはずです。それは文字と数字の長い文字列で、.onionという接尾辞が続きます。これであなたのノードはインターネットから到達可能になり、プライバシーの付加価値も得られます!
手動ポートフォワーディング
これは最も複雑なプロセスで、かなりの技術的スキルが必要です。詳細は、お使いのインターネットルーターの種類、サービスプロバイダーの設定やポリシー、その他多くの状況によって異なります。このもっと難しい仕組みを試す前に、まずUPnPかTorを試してみてください。
基本的な手順は次のとおりです。
あなたのノードがあるコンピュータのIPアドレスを見つける。これは通常Dynamic Host Configuration Protocol (DHCP)によって動的に割り当てられ、192.168.x.xや10.x.xの範囲にあることが多いようです。
ノードのネットワークインターフェースのメディアアクセスコントロール(MAC)アドレスを検索します。これは、そのコンピュータのインターネット設定で見つけることができます。
ノードに固定IPアドレスを割り当てて、常に同じIPアドレスになるようにします。現在持っているIPアドレスを使用することができます。インターネットルーターで、DHCP設定の下にある「Static Leases」を探します。MACアドレスを選択したIPアドレスにマッピングします。これで、あなたのノードには常にそのIPアドレスが割り当てられます。または、ルーターのDHCP設定を見て、そのDHCPアドレスの範囲が何であるかを調べることができます。DHCPアドレスの範囲外の未使用のアドレスを選択します。次に、サーバー上で、DHCPの使用を停止するようにネットワークを設定し、選択した非DHCP IPアドレスをOSのネットワーク構成にハードコードします。
最後に、インターネットルーターで「ポートフォワーディング」を設定し、特定のポートから入ってくるトラフィックをサーバーの選択したIPアドレスにルーティングするようにします。
再設定が完了したら、前のセクションで紹介したウェブサイトのいずれかを使用して、ポートチェックを繰り返してください。
ノードのセキュリティ
ライトニングノードは、定義上、ホットウォレットです。つまり、ライトニングノードが管理する資金(オンチェーンおよびオフチェーンの両方)は、ノードのメモリにロードされるか、ノードのハードディスクに保存されるキーによって直接管理されます。Lightningノードが侵害された場合、オンチェーンまたはオフチェーンのトランザクションを作成し、その資金を流出させることは容易いことです。そのため、不正なアクセスから保護することが非常に重要です。
セキュリティは全体的な取り組みであり、システムのすべてのレイヤーを保護しなければならないことを意味します。チェーンは最も弱いリンクによってのみ強くなるということわざがあるように。これは情報セキュリティの重要な概念であり、私たちのノードにも適用していきます。
セキュリティ対策は万全ですが、ライトニング・ネットワークは初期段階の実験的技術であり、利用するプロジェクトのコードに悪用可能なバグが存在する可能性があることを忘れないでください。ライトニング・ネットワークに、失うリスク以上の資金を投じないようにしてください。
オペレーティングシステムのセキュリティ
オペレーティングシステムのセキュリティは、本書の範囲を超えた広大なテーマです。しかし、いくつかの基本原則を確立することは可能です。
オペレーティング・システムのセキュリティを確保するために、考慮すべき上位の項目を以下に示します。
証明書
まず、正しいオペレーティングシステムイメージをダウンロードしていることを確認し、インストールする前に署名やチェックサムを検証することから始めましょう。インストールするソフトウェアについても同様です。ダウンロードするソースやURLをダブルチェックする。ダウンロードしたソフトウェアの完全性と正しさを署名とチェックサムで検証する。
メンテナンス
オペレーティングシステムを常に最新の状態に保つ。毎日または毎週、セキュリティアップデートを自動的にインストールできるようにする。最小限の権限:特定のプロセスにユーザーを設定し、サービスの実行に必要な最小限のアクセス権を与える。管理者権限(例:root)でプロセスを実行しない。
プロセスの分離
オペレーティングシステムの機能を利用して、プロセスを互いに分離します。
ファイルシステムのパーミッション
ファイルシステムの設定は、最小特権の原則に基づいて慎重に行います。ファイルを誰でも読み書きできるようにしないでください。
強固な認証
強力なランダム生成パスワードか、可能な限り公開鍵認証を使ってください。例えば、パスワードの代わりに暗号鍵ペアを使ったSecure Shell (SSH) を使用するとより安全です。
2ファクタ認証(2FA)
ハードウェアセキュリティキーによるUniversal 2nd Factor (U2F)を含め、可能な限り2ファクタ認証を使用する。これは、クラウドサービスプロバイダーなど、あなたが利用する可能性のあるすべての外部サービスに適用されます。また、自分自身のSSH設定など、自分自身のセットアップにも適用できます。間接的なサービスにも2FAを使用する。例えば、あなたがクラウドサービスを利用しているとします。クラウドサービスプロバイダーにメールアドレスを教えたのですから、そのメールアドレスも2FAで保護する必要があります。
バックアップ
システムのバックアップを取り、そのバックアップも暗号化して保護する。バックアップは定期的に行いましょう。少なくとも一度は、バックアップを復元できるかどうか、バックアップが完全でアクセス可能であるかどうかをテストしてください。可能であれば、バックアップのコピーを別のディスクに保存して、1つのハードディスク障害でアクティブノードとバックアップコピーの両方が破壊されるのを防ぎます。
脆弱性と暴露の管理
リモートスキャンを使用して、システムの攻撃対象領域を確実に最小化します。不要なサービスやポートを閉じる 本当に必要なソフトウェアやパッケージのみをインストールする。不要になったパッケージはアンインストールする。他のコンピュータで実行できるノード以外のアクティビティには、ノード・コンピュータを使用しないことをお勧めします。特に、可能であれば、ブラウジング、インターネットサーフィン、電子メールを読むためにノードコンピュータを使用しないでください。
これは、最も基本的なセキュリティ対策のリストです。決して網羅的なものではありません。
ノードアクセス
Lightning ノードは、リモート プロシージャ コール (RPC) API を公開します。これは、特定の TCP ポートに送信されるコマンドによって、ノードをリモートで制御できることを意味します。RPC API へのアクセス制御は、何らかのユーザー認証によって実現されます。設定するライトニング・ノードの種類によって、ユーザー名/パスワード認証または認証マカロンと呼ばれるメカニズムによって行われます。マカロンとは、その名の通り、より洗練されたクッキーの一種です。クッキーとは異なり、暗号的に署名され、一連のアクセス能力を表現することができます。
例えば、LND は RPC API へのアクセスを許可するためにマカロンを使用します。デフォルトでは、LND ソフトウェアは、admin、invoice、readonly と呼ばれるアクセスレベルの異なる 3 つのマカロンを作成します。RPC クライアントでコピーして使用するマカロ ンに応じて、読み取り専用アクセス、請求書アクセス (読み取り専用機能を含む)、または完全制御が可能な 管理者アクセスのいずれかを使用することができ ます。また、LND にはマカロンベーカリー機能があり、非常にきめ細かい制御で、任意の機能の組み合わせでマカロンを構築することができます。
ユーザー名/パスワード認証モデルを使用する場合、長くてランダムなパスワードを選択することを確認してください。このパスワードは設定ファイルに保存されるため、頻繁に入力する必要はないでしょう。したがって、推測できないようなものを選ぶべきです。あなたが見る多くの例には、不適切に選択されたパスワードが含まれており、しばしば人々はこれを自分のシステムにコピーし、誰にでも簡単にアクセスできるようにしています。そのようなことはしないでください。パスワードマネージャーを使って、ランダムな英数字からなる長いパスワードを生成してください。のような特定の特殊文字は、コマンドラインに干渉する可能性があるため、シェル環境で使用されるパスワードにはこれらを避けることが最善です。問題を避けるために、長いランダムな英数字のパスワードにこだわってください。
通常、12文字以上でランダムに生成されるプレーンな英数字の列で十分です。ライトニング ノードに大金を保存する予定で、リモート ブルートフォース攻撃を懸念している場合、そのような攻撃が実質的に不可能になるように 20 文字以上のパスワード長を選択します。
ノードとチャンネルのバックアップ
Lightning ノードを実行する際に非常に重要な考慮点は、バックアップの問題です。BIP-39 ニーモニックフレーズでウォレットの状態をすべて回復できるビットコインウォレットと異なり、ライトニングではそうはいきません。
ライトニングのウォレットはBIP-39ニーモニックフレーズのバックアップを使用しますが、オンチェーンウォレットにのみ使用します。しかし、チャネルの構築方法によって、ニーモニックフレーズはライトニングノードを復元するのに十分ではありません。静的チャネルバックアップ(SCB)と呼ばれる追加バックアップのレイヤーが必要です。SCBがない場合、ライトニングノードのデータストアを失うと、ライトニングノードのオペレータはチャンネルにあるすべての資金を失う可能性があります。
警告
チャネルの状態を継続的にバックアップするシステムを導入するまでは、チャネルに資金を供給しないでください。バックアップは、様々なシステム障害(停電、データ破損など)や自然災害(洪水、火災など)に耐えられるよう、ノードとは異なるシステムや場所に「オフサイト」移動しておく必要があります。
SCBは万能ではありません。まず、新しいコミットメント・トランザクションが発生するたびに、各チャネルの状態をバックアップする必要がある。第二に、チャネルのバックアップからの復元は危険です。最後のコミットメントトランザクションがなく、誤って古い(取り消された)コミットメントをブロードキャストした場合、チャネルピアはあなたが不正をしようとしていると判断し、ペナルティトランザクションでチャネル全体の残高を請求します。確実にチャネルをクローズするには、協調的クローズを行う必要があります。しかし、悪意のあるピアがあなたのノードを欺き、協同クローズ中に古い取り消されたコミットメントを放送し、あなたのノードに不用意に不正をさせようとする可能性があります。
さらに、あなたのチャンネルのバックアップは、あなたのプライバシーとあなたのチャンネルのセキュリティを維持するために暗号化される必要があります。そうしないと、バックアップを見つけた人はあなたのチャンネルをすべて見ることができるだけでなく、バックアップを利用して、チャンネルの仲間に残高を渡す形ですべてのチャンネルをクローズすることができるのです。つまり、バックアップにアクセスした悪意のある人が、あなたのチャンネルの資金をすべて失う可能性があるのです。
SCBは完全な安全策ではないことがおわかりいただけると思います。SCB はある種のリスク(データの破損や損失)を別の種のリスク(悪意のあるピア)と交換するため、弱い妥協の産物なのです。SCBから復元するためには、チャネルのピアと対話し、彼らが古いコミットメントを与えたり、あなたのノードを騙して、あなたにペナルティを与えるために取り消されたコミットメントをブロードキャストさせたりして、あなたを騙そうとしないように願う必要があります。SCB の弱点にもかかわらず、SCB は意味があり、あなたはそれを実行すべきです。もし SCB を行わず、ノードのデータを失うと、チャンネル資金を永遠に失うことになります。保証します! しかし、もしあなたがSCBを実行し、ノードデータを失った場合、あなたのピアの何人かは正直であり、あなたのチャネル資金の一部を回復できる合理的なチャンスがあります。運が良ければ、すべての資金を回復できるかもしれません。結論として、プライマリノードのハードディスク以外のディスクに継続的に SCB を実行することが最善です。
チャネルのバックアップ機構はまだ未完成であり、ほとんどの Lightning の実装において弱点となっています。
この本を書いている時点では、LNDだけがSCB用のビルトインメカニズムを提供しています。Eclairは、Google Driveへのバックアップをオプションで提供していますが、サーバサイドのデプロイメントには、同様のメカニズムが配備されています。残念ながら、異なるノードの実装間で一貫した合意されたバックアップメカニズムは存在しません。
ライトニングノードデータベースのファイルベースのバックアップは、一貫性のないデータベース状態をバックアップするリスクがあるため、せいぜい部分的な解決策に過ぎません。さらに、最新の状態のコミットメントを確実にキャッチできない可能性もあります。チャネルの状態が変化するたびにトリガーされるバックアップメカニズムがあれば、データの一貫性が確保され、はるかに優れています。
LND で SCB をセットアップするには、コマンドラインまたは設定ファイルで backupfilepath パラメータを設定します。LND は、そのディレクトリパスに SCB ファイルを保存します。もちろん、これはソリューションの最初のステップに過ぎません。次に、このファイルの変更を監視するメカニズムをセットアップする必要があります。ファイルが変更されるたびに、バックアップ機構はこのファイルを別の、できればオフサイトのディスクにコピーしなければならない。このようなバックアップ機構は、この本の範囲外である。しかし、洗練されたバックアップソリューションは、このシナリオを処理することができるはずです。バックアップファイルは暗号化されている必要があります。
ホットウォレットのリスク
前回説明したように、ライトニングネットワークは、ホットウォレットのネットワークで構成されています。ライトニングウォレットに保管された資金は、常にオンライン状態にあります。そのため、脆弱性があります。したがって、ライトニングウォレットに多額の資金を保管するべきではありません。多額の資金は、オンラインでなく、オンチェーンでのみ取引可能なコールドウォレットに保管する必要があります。
最初は少額でも、時間が経つとライトニングウォレットに多額の資金があることに気づくことがあります。これは、店舗経営者の典型的なシナリオです。Lightningノードをeコマースの運営に使用している場合、ウォレットは頻繁に資金を受け取ることができますが、資金を送ることはほとんどありません。そのため、同時に2つの問題を抱えることになります。まず、ローカルの残高が多く、リモートの残高が少ないというアンバランスな状態になります。次に、財布の中の資金が多すぎることです。幸いなことに、この2つの問題を同時に解決することも可能です。
それでは、ホットウォレットで露出する資金を減らすために使える解決策をいくつか見てみましょう。
資金を掃き出す
ライトニングウォレットの残高が自分のリスク許容度に対して大きくなりすぎた場合、ウォレットから資金を「掃き出す」必要があります。その方法には、オンチェーン、オフチェーン、ループアウトの3つがあります。次のセクションで、それぞれのオプションについて見てみましょう。
オンチェーンスイープ
オンチェーンでの資金掃討は、ライトニングウォレットからビットコインウォレットに資金を移動させることで実現します。そのためには、チャネルを閉じる必要があります。チャネルを閉じると、ローカル残高からすべての資金がビットコインアドレスに「掃引」されます。オンチェーン資金用のビットコインアドレスは通常、ライトニングウォレットによって生成されるので、ホットウォレットであることに変わりはありません。ハードウェアウォレットで生成されたアドレスなど、より安全なアドレスに資金を移動するには、追加のオンチェーン取引が必要な場合があります。
チャンネルを閉じると、オンチェーン手数料が発生し、ライトニングノードの容量と接続性が低下します。しかし、人気のある電子商取引ノードを運営している場合、受信容量が不足することはなく、ローカル残高が大きいチャネルを戦略的に閉じることができ、実質的にオンチェーンでの移動のために資金を「束ねる」ことができます。この戦略の利点を最大化するために、チャネルを閉じる前に、いくつかのチャネルリバランシングテクニック(チャネルのリバランシングを参照)を使用する必要があるかもしれません。
オフチェーンスイープ
もう一つのテクニックは、ネットワーク上で宣伝されていない第二のライトニング・ノードを動かすことです。公開ノード(例えば、ショップを運営しているノード)から、宣伝していない(隠れた)ノードに大容量のチャネルを確立することができます。定期的に、隠れノードにライトニングペイメントを行うことで資金を「掃引」します。
この手法の利点は、ショップの支払いを受けるLightningノードが公開されることにあります。このため、ショップに関連するLightningノードがあれば、多額の残高があると見なされ、ハッカーの標的にされます。ショップに関連しないセカンドノードは、貴重なターゲットとして簡単には識別されません。
さらにセキュリティ対策として、2つ目のノードを隠しTorサービスにして、IPアドレスを知られないようにすることができます。そうすることで、さらに攻撃の機会を減らし、プライバシーを高めることができます。
一定間隔で実行されるスクリプトを設定する必要があります。このスクリプトの目的は、あなたの隠れノードで請求書を作成し、あなたのショップのノードからその請求書を支払うことで、あなたの隠れノードに資金を移動させることです。
この手法では、資金をコールドストレージに移動させることはできないことに留意してください。ライトニングの両ノードはホットウォレットです。このスイープの目的は、非常に有名なホットウォレットから無名のホットウォレットに資金を移動させることです。
サブマリンスワップスイープ
Lightningホットウォレットの残高を減らすもう一つの方法は、サブマリンスワップというテクニックを使うことです。サブマリンスワップは、共著者のOlaoluwa OsuntokunとAlex Bosworthによって概念化され、オンチェーンビットコインをLightningの支払いと交換したり、その逆も可能です。基本的にサブマリンスワップは、ライトニングのオフチェーン資金とビットコインのオンチェーン資金との間のアトミックなスワップです。
ノードオペレータはサブマリンスワップを開始し、利用可能なすべてのチャネル残高を相手方に送り、相手方はそれと引き換えにオンチェーンビットコインを送ることができる。
将来的には、ライトニングネットワーク上のノードが交換レートを広告したり、変換に一律の手数料を課したりして提供する有料サービスになる可能性があります。
資金を掃き出すための海底スワップの利点は、チャネルを閉じる必要がないことです。つまり、チャネルを維持し、この操作によってチャネルのバランスを調整するだけです。ライトニングの支払いが行われると、1つまたは複数のチャンネルで、ローカルからリモートへ残高が移動します。これにより、ノードのホットウォレットの残高が減少するだけでなく、将来の支払いに利用できる残高が増加します。
ゲートウェイとして機能する仲介者を信頼することでこれを行うことができますが、これはあなたのコインを盗まれるリスクがあります。しかし、サブマリン・スワップの場合、この操作に信頼は必要ない。サブマリン・スワップは非親告罪の原子操作です。つまり、オンチェーンでの支払いはオフチェーンでの支払いの完了に依存し、その逆もまた然りなので、サブマリンスワップのカウンターパーティーはあなたの資金を盗むことができないのです。
Loopを使ったサブマリン・スワップ
サブマリンスワップサービスの一例として、LNDを構築しているのと同じLightning Labs社のLoopがあります。Loopには2つのバリエーションがあります。Loopには、Loop InとLoop Outの2種類があります。Loop Inは、ビットコインのオンチェーン決済を受け入れ、それをLightningのオフチェーン決済に変換する。Loop Outは、Lightningの支払いをBitcoinの支払いに変換する。
注意事項
Loopサービスを利用するには、LND Lightningノードを稼働させる必要があります。
Lightningホットウォレットの残高を減らす目的で利用する場合は、Loop Outサービスを利用することになります。Loopサービスを利用するためには、ノードに追加のソフトウェアをインストールする必要があります。Loopソフトウェアは、LNDノードと一緒に動作し、サブマリンスワップを実行するためのいくつかのコマンドラインツールを提供します。Loopソフトウェアとインストール方法は、GitHubで見つけることができます。
ソフトウェアのインストールと実行が完了したら、Loop Out 操作は 1 つのコマンドを実行するのと同じくらい簡単です。
code:loop
loop out --amt 501000 --conf_target 400
Max swap fees for 501000 sat Loop Out: 25716 sat
Regular swap speed requested, it might take up to 30m0s for the swap to be executed.
CONTINUE SWAP? (y/n), expand fee detail (x): x
Estimated on-chain sweep fee: 149 sat
Max on-chain sweep fee: 14900 sat
Max off-chain swap routing fee: 10030 sat
Max no show penalty (prepay): 1337 sat
Max off-chain prepay routing fee: 36 sat
Max swap fee: 750 sat
CONTINUE SWAP? (y/n): y
Swap initiated
Run loop monitor to monitor progress.
なお、最大手数料(最悪の場合)は、選択した確認対象によって異なります。
ライトニングノードのアップタイムとアベイラビリティ
ビットコインと異なり、ライトニングノードはほぼ継続的にオンラインである必要があります。ノードは、支払いの受け取り、チャネルのオープン、(協調的な)チャネルのクローズ、プロトコル違反の監視のためにオンラインである必要があります。ノードの可用性はライトニングネットワークにおいて非常に重要な要件であり、様々な自動チャネル管理ツール(例:オートパイロット)がチャネルを開くノードを決定するための指標として使用されています。また、1MLなどの一般的なノードエクスプローラ(ln_explorerを参照)でも、ノードのメトリックとして「アベイラビリティ」を見ることができます。 ノードの可用性は潜在的なプロトコル違反(すなわち、取り消されたコミットメント)を緩和し解決するために特に重要です。1時間から1、2日の短い中断は許されますが、資金を失うリスクなしに長時間ノードをオフラインにすることはできません。
様々なバグやリソースの制限によりダウンタイムが発生する可能性があるため、ノードを継続的にオンラインにしておくことは簡単ではありません。特に多忙で人気のあるノードを運営している場合、メモリ、スワップスペース、オープンファイル数、ディスクスペースなどの制限にぶつかることがあります。様々な問題がノードやサーバーをクラッシュさせる原因となります。
不具合に耐えて自動化する
もし時間とスキルがあれば、Lightningテストネットでいくつかの基本的な障害シナリオをテストする必要があります。テストネットでは、資金をリスクにさらすことなく、貴重な教訓を学ぶことができます。システムを自動化するために行うどのようなステップも、お客様の可用性を向上させます。
コンピュータ・サーバーの自動再起動
サーバーやOSがクラッシュしたらどうしますか?停電になったらどうなるでしょうか?PCの「リセット」ボタンを押すか、電源ケーブルを抜いて、この障害をシミュレートしてください。クラッシュ、リセット、または停電の後、コンピューターは自動的に再起動するはずです。一部のコンピュータでは、BIOSに電源障害時のコンピュータの動作を指定する設定があります。この設定をテストして、コンピュータが本当に人の介在なしに停電時に自動的に再起動することを確認します。
ノードの自動再起動
あなたのノードまたはノードの1つがクラッシュしたらどうなりますか?対応するノードのプロセスを強制終了して、この障害をシミュレートしてください。ノードがクラッシュした場合、自動的に再起動するはずです。ノードまたはノードが本当に人間の介入なしに障害時に自動的に再起動するかどうかテストしてください。そうでない場合は、ノードがオペレーティングシステムのサービスとして正しく設定されていない可能性があります。
ネットワークの自動再接続
ネットワークがダウンした場合はどうなるのでしょうか?ISPが一時的にダウンした場合はどうなりますか?ISPがルーターやコンピューターに新しいIPアドレスを割り当てた場合はどうなりますか?ネットワークが復旧したとき、実行中のノードは自動的にネットワークに再接続されますか?ノードをホストしているデバイスからイーサネットケーブルを抜き、後で再接続して、この障害をシミュレートしてください。ノードが自動的に再接続され、人手を介さずに動作が継続するはずです。
ログファイルを設定する
上記のすべての障害は、対応するログファイルにテキストのエントリを残しているはずです。必要であれば、ロギングの冗長性を高めてください。ログファイルからこれらのエラー・エントリを見つけ、モニタリングに使用します。
ノードの可用性を監視する
ノードの監視は、ノードを稼働させ続けるための重要な要素です。コンピュータ自体の可用性だけでなく、Lightning ノード ソフトウェアの可用性と正しい動作も監視する必要があります。
これを行う方法はいくつかありますが、ほとんどの場合、多少のカスタマイズが必要です。一般的なインフラ監視ツールやアプリケーション監視ツールを使用することもできますが、LightningノードAPIに問い合わせ、ノードが稼働し、ブロックチェーンに同期し、チャネルピアに接続していることを確認するためには、それらを特別にカスタマイズする必要があります。
Lightning.watchは、Lightningノードの監視を提供する特化型サービスです。これは、サービスの中断を通知するためにTelegramボットを使用します。これは無料のサービスですが、より迅速なアラートを得るために支払うことができます(もちろん、Lightningで)。
やがて、マイクロペイメントで支払うことのできる、ライトニングノードの監視に特化したサードパーティーのサービスが増えることが予想されます。おそらくそのようなサービスとそのAPIは標準化され、いつの日かLightningノードソフトウェアによって直接サポートされるようになるでしょう。
ウォッチタワー
ウォッチタワーは、ライトニングプロトコル違反の監視とペナルティ解決をアウトソーシングするための仕組みです。
前の章で述べたように、ライトニングプロトコルはペナルティメカニズムによってセキュリティを維持しています。チャネルパートナーの1社が古いコミットメントトランザクションをブロードキャストした場合、あなたのノードは、損失を避けるために取り消し条項を行使してペナルティトランザクションをブロードキャストする必要があります。しかし、プロトコル違反の際にあなたのノードがダウンしてしまうと、損失を被る可能性があります。
この問題を解決するために、1つまたは複数のウォッチタワーを使って、プロトコル違反の監視とペナルティ・トランザクションの発行という仕事をアウトソースすることができる。ブロックチェーンを監視するウォッチタワー・サーバー(または単にウォッチタワー)と、この監視サービスをウォッチタワー・サーバーに依頼するウォッチタワー・クライアントの2つが、ウォッチタワーの設定には含まれています。
ウォッチタワーの技術はまだ開発の初期段階にあり、広くサポートされているわけではありません。しかし、以下の節では、試すことができる実験的な実装をいくつか挙げています。
LND ソフトウェアには、watchtower サーバーと watchtower クライアントの両方が含まれています。以下の設定オプションを追加することで、watchtowerサーバーを有効にすることができます。
code:watchtower
watchtower.active=1
watchtower.towerdir=/path_to_watchtower_data_directory
LNDのwatchtowerクライアントをコンフィギュレーションで有効化し、コマンドラインでwatchtowerサーバーに接続することで利用できます。コンフィギュレーションは
code:watchtower
wtclient.active=1
LND のコマンドラインクライアント lncli は、watchtower クライアントを管理するための以下のオプションを表示します。
code:lnd-watchtower
$ lncli wtclient
NAME:
lncli wtclient - Interact with the watchtower client.
USAGE:
COMMANDS:
add Register a watchtower to use for future sessions/backups.
remove Remove a watchtower to prevent its use for future sessions/backups.
towers Display information about all registered watchtowers.
tower Display information about a specific registered watchtower.
stats Display the session stats of the watchtower client.
policy Display the active watchtower client policy configuration.
OPTIONS:
--help, -h show help
c-lightningは、ウォッチタワーのクライアントプラグインに必要なAPIフックを備えていますが、そのようなプラグインはまだ実装されていません。
最後に、スタンドアローンのウォッチタワーサーバーとして、The Eye of Satoshi (TEOS)が有名です。これはGitHubで見つけることができます。
チャンネル管理
ライトニングノードオペレータとして、繰り返し行う必要があるタスクの1つは、チャンネルの管理です。これは、自ノードから他のノードへのアウトバウンドチャネルを開設したり、他のノードから自ノードへのインバウンドチャネルを開設してもらったりすることを意味します。将来的には、協調的なチャネル構築が可能になり、作成時に両端に資金がコミットされる対称的なチャネルを開くことができるようになるかもしれません。しかし、今のところ、新しいチャネルは一方の端(発信者側)にしか資金がありません。したがって、あなたのノードをインバウンドとアウトバウンドの両方の容量でバランスさせるには、他の人にチャンネルを開き、他の人があなたのノードにチャンネルを開くように誘う必要があります。
アウトバウンドチャネルを開く
ライトニングノードを稼働させたら、すぐにビットコインウォレットに資金を供給し、その資金でチャネルを開き始めることができます。
ノードの支払い能力は、チャネルパートナーが誰で、ライトニングネットワークの残りの部分とどれだけうまく接続されているかに依存するので、チャネルパートナーを慎重に選択する必要があります。また、単一障害点の影響を受けないように、複数のチャネルを持つことをお勧めします。Lightningはマルチパート決済をサポートしているので、初期資金を複数のチャネルに分割し、その能力を組み合わせることでより大きな決済をルーティングすることができます。同時に、チャンネルを小さくしすぎるのも避けましょう。チャンネルの開設と閉鎖にはビットコインの取引手数料が必要なため、チャンネル残高が小さすぎてオンチェーン手数料が大きな割合を占めるようなことがあってはなりません。バランスが大事なんです!
まとめると
よく接続されているいくつかのノードに接続する
複数のチャンネルを開設する
チャンネルを増やしすぎない
チャンネルを小さくしすぎない
接続の良いノードを見つける方法の1つは、ライトニングネットワークで製品を販売している人気のあるマーチャントへのチャネルを開くことです。これらのノードは資金力があり、つながりが強い傾向があります。そのため、Lightningを使ってオンラインで何かを購入する準備ができたら、そのマーチャントのノードに直接チャネルを開くことができます。マーチャントのノードIDは、何かを買おうとしたときに受け取るインボイスに記載されています。これなら簡単ですね。
接続の良いノードを見つけるもう一つの方法は、1MLなどのLightning Explorer(ln_explorerを参照)を使って、チャネル容量とチャネル数でソートされたノードのリストを閲覧することです。中央集権を助長するため、最大のノードは選ばないようにしましょう。リストの真ん中にあるノードを選ぶと、そのノードの成長を手助けすることができます。もう1つの考慮すべき点は、ノードが運用されている期間です。1年以上前に設立されたノードは、1週間前に運用を開始したノードよりも評判が良く、リスクが低い可能性があります。 オートパイロット
オートパイロットは、ヒューリスティックなルールに基づいて自動的にチャネルを開設するソフトウェアです。オートパイロット・ソフトウェアはまだ比較的新しいもので、必ずしも最適なチャネル・パートナーを選択してくれるとは限りません。特に最初のうちは、手動でチャネルを開設する方がよいかもしれません。オートパイロットは現在、3つの形態で存在しています。
lnd は、lnd と完全に統合されたオートパイロットを組み込んでおり、電源が入っている間はバックグラウンドで常に動作します。
lib_autopilot.pyはゴシップとチャンネルデータに基づいて、どんなノードの実装でもオートパイロットの計算を提供することができます。
lib_autopilot.pyをベースにしたc-lightningのプラグインが存在し、c-lightningのユーザーに使いやすいインターフェイスを提供します。
lnd autopilotは、設定ファイルによってオンにされるとすぐにバックグラウンドで動作し始めることに注意してください。その結果、lndウォレットにオンチェーン出力がある場合、すぐにチャンネルを開き始めます。あなたが行うビットコイン取引とあなたが開くチャンネルを完全に制御したい場合は、ビットコイン資金であなたのlndウォレットをロードする前に、自動操縦をオフにすることを確認してください。自動操縦が以前オンになっていた場合、オンチェーン取引でウォレットをトップアップする前やチャンネルを閉じる前に lnd を再起動する必要があるかもしれませんが、これは事実上オンチェーン資金を再び手に入れることになります。オートパイロットを実行したい場合は、主要な設定値を設定することが重要です。この設定例を見てください。
code:lnd-autopilot
autopilot.active=1
autopilot.maxchannels=40
autopilot.allocation=0.70
autopilot.minchansize=500000
autopilot.maxchansize=5000000
autopilot.heuristic=top_centrality:1.0
このコンフィギュレーションファイルは、オートパイロットを起動させます。以下の2つの条件が満たされている限り、チャンネルを開くことができます。
あなたのノードが現在開いているチャネルが40未満である。
総資金の70%未満がオフチェーンでの支払いチャネルである。
40と0.7という数字は、ここでは完全に任意に選んだものです。なぜなら、どれだけのチャンネルを開くべきか、資金の何パーセントをオフチェーンにすべきかについて、万人に有効な推奨をすることができないからです。lndのオートパイロットは、オンチェーン手数料を考慮しません。言い換えれば、手数料が低い時間帯にチャンネルを開くのを遅らせることはありません。手数料を減らすには、手数料が低い時間帯(週末など)に手動でチャネルを開くとよいでしょう。自動操縦は、この条件が満たされるたびにチャネル推薦を行い、適切な現在の手数料を使用して直ちにチャネル開設を試みます。先の設定ファイルによると、チャンネルのサイズは5 mBTC (minchansize = 500,000 satoshi) から 50 mBTC (maxchansize = 5,000,000 satoshi) の間となります。一般的に、設定ファイルの金額はsatoshiで列挙されています。現在、1mBTC以下のチャンネルはあまり有用ではないので、小さすぎてこの金額以下のチャンネルを開設することはお勧めしません。マルチパート決済の普及に伴い、より小さなチャンネルは負担が少なくなっています。しかし、当面は、これが私たちのおすすめです。
c-lightningプラグインは、もともとRené Pickhardt(本書の共著者)が書いたものですが、lndオートパイロットと比較すると、その仕組みが大きく異なります。まず、推薦を行うためのアルゴリズムが異なります。この点については、ここでは触れません。次に、ユーザーインターフェイスが異なります。c-lightningのプラグインリポジトリからオートパイロットのプラグインをダウンロードし、それを有効にする必要があります。
c-lightningでプラグインを有効にするには、プラグインを ~/.lightning/plugins ディレクトリに置き、実行可能であることを確認してから(例:chmod +x ~/.lightning/plugins/autopilot.py) lightningd を再起動します。
また、lightningd の起動時にプラグインを自動起動させたくない場合は、別のディレクトリに置き、lightningd の plugin 引数で手動で起動させることもできます。
lightningd --plugin=~/lightning-plugins/autopilot.py
c-lightningのオートパイロットは3つの設定値で制御され、設定ファイルまたはlightningdの起動時のコマンドライン引数で設定します。
code:c-lightning
autopilot-percent=75
autopilot-num-channels=10
autopilot-min-channel-size-msat=100000000msat
これらの値は実際のデフォルトの設定値であり、設定する必要は全くありません。
オートパイロットは lnd のようにバックグラウンドで自動的に実行されるわけではありません。その代わり、オートパイロットに推奨チャンネルを開かせたい場合は lightning-cli autopilot-run-once で特別に実行を開始する必要があります。しかし、単に推奨されるノードを提供し、そこからノードを選択したい場合は、オプションの dryrun 引数を追加することができます。
lnd と c-lightning のオートパイロットの重要な違いは、c-lightning オートパイロットはチャネルサイズも推奨することです。例えば、オートパイロットが小さなチャンネルしか持たないノードでチャンネルを開くことを推奨した場合、大きなチャンネルを開くことは推奨されません。しかし、多くの大きなチャネルを持つ、接続の良いノードとチャネルを開く場合は、おそらくより大きなチャネルサイズを推奨します。
このように、c-lightning の自動操縦は lnd の自動操縦ほどではありませんが、少しはコントロールできるようになっています。これらの違いは個人の好みを反映したものであり、実際にどちらかの実装を選択する決め手となる可能性があります。
現在のオートパイロットは、主にライトニングネットワークの現在のトポロジーに関するゴシッププロトコルの公開情報を使用することを念頭に置いています。チャンネルに対する個人的な要求がある程度までしか反映されないことは明らかです。より高度なオートパイロットでは、ルーティングの成功に関する情報、過去に誰にお金を払ったか、誰にお金を払ったかなど、ノードが過去に実行した際に収集した履歴や使用情報を使用することになります。将来的には、このような改良型オートパイロットは、収集したデータを使用して、チャンネルの閉鎖や資金の再配分を推奨することもできます。
全体として、本書の執筆時点では、オートパイロットに過度に依存したり、頼ったりしないよう、注意が必要です。
インバウンドの流動性獲得
ライトニングネットワークの現在の設計では、ユーザーはインバウンドの流動性を得る前にアウトバウンドの流動性を得ることが一般的です。ユーザーは他のノードとのチャネルを開くことでこれを行い、多くの場合、ビットコインを受け取る前にそれを使うことができます。インバウンドの流動性を得るには、3つの典型的な方法があります。
アウトバウンドの流動性でチャンネルを開き、その資金の一部を使う。これでチャネルの向こう側に残高ができ、支払いを受け取ることができるようになる。
誰かに自分のノードへのチャネルを開くよう依頼する。あなたのノードとあなたのノードがよりよく接続され、バランスが取れるように、相互の交換を申し出ます。
サブマリンスワップ(例:ループイン)を使って、オンチェーンのBTCを自分のノードへのインバウンドチャネルと交換します。
サードパーティーのサービスにお金を払ってチャンネルを開設してもらう。このようなサービスはいくつか存在します。流動性を提供するために手数料を取るものもあれば、無料のものもあります。
以下は、現在利用可能な流動性プロバイダーのリストで、手数料を払ってあなたのノードにチャネルを開設してくれます。
Bitrefill の Thor サービス
Lightning To Me
LNBig
ライトニングコンダクター
インバウンド流動性の創出は、実用面とユーザーエクスペリエンス面の両方において困難です。インバウンド流動性は自動的に発生するものではないので、自分のノードのためにそれを構築する方法を見つけなければなりません。また、このような支払いチャネルの非対称性は直感的ではありません。他のほとんどの決済システムでは、自分が先に支払い(インバウンド)を受けてから、他の人に支払い(アウトバウンド)を行います。
インバウンドの流動性を生み出すという課題は、あなたがマーチャントであったり、Lightning決済のためにサービスを販売する場合に最も顕著に現れます。その場合、支払いを受け続けられるだけのインバウンド流動性を確保できるよう、警戒する必要があります。あなたのストアに購入者が急増しても、インバウンドのキャパシティがもうないため、実際に支払いができない場合はどうでしょうか?
将来的には、こうした課題は、双方から資金を調達し、インバウンドとアウトバウンドのキャパシティをバランスよく提供するデュアルファンドチャネルの導入により、部分的に軽減される可能性があります。また、より洗練された自動操縦ソフトウェアにより、必要に応じてインバウンドのキャパシティを要求し、支払うことで、負担を軽減することも可能でしょう。
最終的には、ライトニングのユーザーは、ニーズを満たすために十分なインバウンドキャパシティを確保するために、戦略的かつ積極的にチャネルマネジメントを行う必要がある。
チャネルのクローズ
本書の冒頭で説明したように、チャネルを閉じるには相互クローズが望ましい方法です。しかし、強制終了が必要な場合もある。
例えば、次のような場合である。
チャネルパートナーがオフラインで、相互解約を開始するための 連絡が取れない場合。
チャネルパートナーがオンラインであるが、相互クローズを開始するための要求に応答していない。
チャネルパートナーがオンラインであり、ノードが相互クローズの交渉を行っているが、行き詰まり、解決に至らない。
チャネルの再バランス
Lightning上で決済を行い、ルーティングする過程で、インバウンドとアウトバウンドの容量の組み合わせがアンバランスになることがあります。
たとえば、チャネルパートナーの1社が頻繁にお客様のノード経由で支払いをルーティングしている場合、そのチャネルのインバウンドキャパシティを使い果たすと同時に、アウトバウンドチャネルのアウトバウンドキャパシティも使い果たします。そうなれば、もうそのルートで決済を行うことはできません。
チャネルのリバランスには様々な方法があり、それぞれにメリットとデメリットがあります。1つの方法は、この章で前述したように、サブマリン・スワップ(Loop Outなど)を使用することです。リバランスのもう一つの方法は、単純に反対方向に流れるルーティングされた支払いを待つことです。ノードがよく接続されている場合、特定のルートが一方向に枯渇すると、同じルートが反対方向で利用可能になります。他のノードがその逆方向のルートを「発見」して、支払い経路の一部として使い始めるかもしれません。それによって、資金のバランスが再び調整されます。
チャネルをリバランスする3つ目の方法は、ライトニングネットワークを経由して、自分のノードから自分のノードに支払いを送り返す循環ルートを意図的に作成することです。ローカルに大きな容量を持つチャネルで支払いを送り、リモートに大きな容量を持つチャネルで自分のノードに戻るように経路を配置することで、これらのチャネルの両方がよりバランスよくなります。循環経路のリバランス戦略の例は、循環経路のリバランスで見ることができます。
https://scrapbox.io/files/62fb78b87e3d6d0020c11474.png
図4.円形ルートリバランシング
円形のリバランシングはほとんどの Lightning ノードの実装でサポートされており、コマンドラインまたは Ride The Lightning (Ride The Lightning 参照) のような Web 管理インターフェースのいずれかを介して行うことが可能です。
チャネルのリバランシングは複雑な問題で、活発な研究の対象であり、Rebalancing Channelsでより詳細にカバーされています。
ルーティングフィー
Lightningノードを運営すると、チャネル間で支払いをルーティングすることによって手数料を得ることができます。ルーティングフィーは一般的に大きな収入源ではなく、ノードの運用コストに比べれば微々たるものです。例えば、1日に12件の支払いをルーティングする比較的忙しいノードでは、手数料は2,000サトシ以下となります。
ノードは、各チャネルに希望する手数料率を設定し、ルーティング手数料を競い合う。ルーティングフィーは、各チャネルの2つのパラメータによって設定される。すなわち、あらゆる支払いに課される固定の基本料金と、支払額に比例する追加の可変料金である。
ライトニング決済を送信する場合、ノードは手数料を最小化するか、ホップを最小化するか、またはその両方を実現するように経路を選択します。その結果、このような相互作用から経路手数料市場が発生します。現在、ルーティングの手数料が非常に低い、あるいは無料のノードが多数存在し、ルーティング手数料市場に下落圧力がかかっています。
何も選択しない場合、ライトニングノードは、新しいチャネルごとにデフォルトの基本料金と料金レートを設定します。デフォルト値は、使用するノードの実装によって異なります。基本料金はミリサトシ(1,000分の1サトシ)単位で設定されます。比例手数料率は、百万分の一の単位で設定され、支払額に適用されます。百万分の一の単位は、しばしばppm(parts per million)と省略される。例えば、基本手数料が1,000(ミリサトシ)、手数料率が1,000ppm(百万分の一)であれば、10万サトシの決済で以下のような手数料が発生します。
\┣︎┣︎┣︎┣︎┣︎쇼 \┣︎┣︎┣︎┣︎┣︎┣︎┣︎쇼 P &= 100,000 ┣┣ satoshi \\ F_{base} &= 1,000 \text{ millisatoshi} = 1 \text{ satoshi}. \\ F_{rate} &= 1,000 \text{ ppm} = 1,000/1,000,000 = 1/1,000 = F_{total} &= F_{base} = 0.1% \ text{ 0.001} = F_{base} = 0.1 + ( P * F_{rate} ) \Rightarrow F_{total} &= 1 \text{ satoshi}. + ( 100,000/1,000 ) \text{ satoshi} ╱︎F_{total}の値です。\\ ¦ F_{total} &= 1 ¦text{ satoshi} + 100 \text{ satoshi} = 101 \text{ satoshi}. \\ Όταμμα \となります。
大まかに言って、ルーティングフィーには2つのアプローチがあります。低い手数料で多くの支払いをルーティングし、低い手数料を高いボリュームで補うことができます。もう一つは、高い手数料を設定する方法です。手数料を高く設定すると、他に安いルートが存在しない場合にのみ、あなたのノードが選択されるようになります。したがって、ルーティングの頻度は低くなりますが、ルーティングが成功するごとに多くの利益を得ることができます。
ほとんどのノードでは、通常、デフォルトのルーティングフィーの値を使用することが最善です。この方法では、あなたのノードは、デフォルト値を使用する他のノードとほぼ同じ土俵で競争することになります。
また、ルーティングフィーの設定を使用して、チャンネルのリバランスを行うこともできます。ほとんどのチャンネルがデフォルト料金で、特定のチャンネルをリバランスしたい場合、その特定のチャンネルの料金をゼロまたは非常に低い料金に下げればよいのです。そして、誰かがあなたの「安い」ルートに支払いをルーティングし、副次的にあなたのためにチャンネルをリバランスしてくれるのを、じっと待っていましょう。
ノードの管理
コマンドラインで Lightning ノードを管理することは、当然ながら簡単ではありません。ノードの API の完全な柔軟性と、個人的な要件を満たす独自のカスタム スクリプトを記述する能力を提供します。しかし、コマンドラインの複雑さに対処せず、基本的なノード管理機能のみを必要とする場合、ノード管理を容易にするWebベースのユーザインタフェースのインストールを検討する必要があります。
ウェブベースのライトニング・ノード管理を提供する競合プロジェクトは数多くあります。その中でも特に人気のあるものを次のセクションで説明します。
Ride The Lightning(ライド・ザ・ライトニング
Ride The Lightning(RTL)は、3つの主要なLightningノード実装(LND、c-lightning、Eclair)のLightningノード操作を管理するためのグラフィカルなWebユーザーインターフェイスです。RTLは、Shahana Farooquiと他の多くの貢献者によって開発されたオープンソースプロジェクトです。RTLのソフトウェアは、GitHubで見つけることができます。
RTLのWebインターフェイスの例は、プロジェクトリポジトリで提供されているRTLのWebインターフェイスのスクリーンショットの例を示しています。
https://scrapbox.io/files/62fb790d3510560021d1908c.png
図 5. RTL ウェブインタフェースの例
lndmon
LNDのメーカーであるLightning Labsは、LND Lightningノードの様々なメトリクスを監視するために、lndmonというWebベースのグラフィカルユーザインタフェースを提供しています。これはモニタリングのための読み取り専用インタフェースであり、そのためノードを積極的に管理することはできません。チャンネルを開いたり、支払いを行ったりすることはできません。lndmonはGitHubで見つかります。
ThunderHub
ThunderHubはRTLに似た、非常に美しいWebベースのグラフィカルユーザーインターフェイスですが、LND専用です。支払い、チャネルのリバランス、様々な機能によるノードの管理に使用することができます。
まとめ
ノードを維持し経験を積むことで、ライトニングネットワークについて多くのことを学ぶことができます。ノードオペレータになることは、やりがいのある仕事です。これらのスキルを習得することで、この技術やライトニングネットワーク自体の成長・発展に貢献することができます。さらに、ライトニング決済の送受信を自由自在にコントロールできるようになります。ネットワークのインフラで中心的な役割を果たし、端役にとどまらない。