BitfinexおよびTetherがHypercoreという会社とともにHolepunchというP2Pアプリ構築プロトコルとそれを使ったKeetというアプリケーションをローンチしました。今週ツイッターを見ていて面白かったことの1つが、FTX_AccessというFTXの機関投資家向け営業部門の公式ツイッターアカウントが「どのようにトークンを配布するのか?」と聞く流れが失笑を買っていたことです。https://twitter.com/FTX_Access/status/1551525509363892224...

さて、最近ビットコイン・ライトニングやその周辺でWeb5、ImperviousなどP2Pアプリケーション基盤が乱立していますが、これらと比較してHolepunchの特徴が何なのか、調べてみました。

HOLEPUNCHの概要

Holepunchは比較的シンプルにP2P通信のNAT越えを支援するP2Pプロトコルです。UDP hole punchingというNAT越えの技術があるので、そこから名前を取ったのかもしれません。(単純にNATという障壁に穴を開けるからhole punchingというのでしょうが)

NAT越えとは

多くの一般家庭ではルーターに複数のデバイスが接続されており、1つのグローバルIPを共有しています。NATは外部との通信をどのデバイスに取り次ぐかを扱います。例えばWifiに接続したスマートフォンで取得しにいったデータがちゃんとスマートフォンに送られてくるのはNATのおかげです。

しかし、例えば外部から初めて接続してくる通信などは内部のどのデバイスに対応する通信かわからないため取り次ぐことができません。これをNAT越えの失敗といいます。

P2Pソフトでは初めて接続するノードにちゃんと通信を届けるため、何らかの方法でNAT越えをすることが一般的です。ただし、ビットコインのノードを自宅で運用したことのある方は気づいているかもしれませんが、自分から接続したノードとだけ通信できればいい場合などにはNATがどのデバイスの通信なのか正しく判断できるため、必ずしもNAT越えが必要とは限りません。両者ともにNATの後ろにいる場合にはNAT越えのスキームが必要です。

一般的なNAT越えのスキームは、どこかにあるマッチングサーバーのようなものに両者が接続して、そこを媒介に互いのIP・ポートを知り合ってからP2P通信を行います。Holepunchは中央集権的なマッチングサーバーがないのにNAT越えできることからDistributed Holepunchingと表現されています。

仕組み

仕組みは非常にシンプルで、開発者が2年前に投稿した動画がわかりやすいです。https://twitter.com/mafintosh/status/1259596991857930243

NATの後ろにいないいくつかのブートストラップ用ノードに最初に接続しておいて、それらに接続したい相手の公開鍵を元にIPとポート番号を問い合わせます。そのIP・ポートに対してリクエストを出すと自分のNATはデバイスと通信相手を関連づけられますが、相手のルーターから見ると外部からの初見の通信なのでまだ相手のNATは越えられません。そこで相手がブートストラップ用ノードからの通知を受けとり、あなたのIPとポート番号に対して接続することによってNATを越えた通信が確立するというものです。

プロトコル自体は秋から冬にかけてオープンソースにすると言っているのでまだ未確認ですが、ファイルやデータに加えて、Holepunch上のアプリケーションも同様にHolepunchを使って配布されるらしいです。例えば後述のKeetも、インストールはHolepunch経由で行っている模様です。

Torとの違い

さて、ライトニングノードを動かしているユーザーの多くが利用するUmbrelはTorを利用することでNAT越えを実現しています。これはTor上のHidden Service (.onionアドレスを持つアプリ)は自ら外部ネットワークへ接続するからです。(外部から初見ユーザーの接続を受け付けるわけではない)

Torの本来の目的はプライバシーで、オニオンルーティングという複数のノードをまたいで通信する仕組みでIPアドレス等は秘匿されます。その代わり、通信速度には限度があり遅延も極めて大きいです。一方でHolepunchはおそらく単純にIP・ポートで通信するので通信相手はわかりますし、最初に接続を媒介するノードも誰と誰が接続をしたか知り得ます。秘匿化ではなく通信速度などを重視していると考えられます。

Torはプライバシー面で優れていますが、LNのノード運用面ではデメリットも大きいので、それだけ手軽で非中央集権的なNAT越えの便利さが大きいともいえますね。実際、Umbrel以前にもRicochet IMやOnionShareといったサービスが主にNAT越えのためにTorを採用しています。

ペイメント機能

BitfinexとTetherが絡んでいることから、仮想通貨決済機能も盛り込んでくるだろうことは想定できます。どうもライトニングに基づいたUSDT基軸のペイメント用APIも統合する予定で、LN払いとUSDT払いの2つを軸に据えるらしいです。この辺りの話は以前に紹介したOmniBOLTやRGB、Taroなどに通じているので、ぜひそれらの記事もご覧ください。

【2022/4/7】TAROプロトコルはCounterparty, Omniとどう違うのか

TAROプロトコルはCounterparty, Omniとどう違うのか
アメリカのマイアミにてBitcoin 2022というカンファレンスが現在開催されています。その中で、LNDを開発するLightning Labs社のroasbeef氏がTARO (Taproot Asset Representation Overlay)というプロトコルと、それに関連するBIPsを発表しました。 ちょうど2週間前に解説したOmniBOLTのように、ビットコイン上で通貨・トークンを発行し、それをライトニングネットワークで送ることができる、という内容を強調した発表だったので、今日はTAROが既存のプロトコルとどう違うのか、実際に利用される見込みはあるのかについて調べました。 細…

【2022/3/24】果たしてUSDTをペイメントチャネルで送るようになるのか

果たしてUSDTをペイメントチャネルで送るようになるのか
昨日、ライトニング関連の開発を行っているSynonymというチームが「史上初のテザー・ステーブルコインによるライトニングチャネル上のトランザクション」と題する動画を公開しました。 皆さんおなじみのテザーは最も有名なステーブルコインで、これをライトニングネットワークを使用して送ることができるようになるかもしれない、という話です。 先週も書きましたが、ユーザーの残高をドルにペッグするライトニングウォレットの開発に報奨金が出ているので、それを狙ったものかもしれません。 今回はビットコイン上で他の通貨を発行するプロトコルOmniと、Omniで発行した資産をLNのようなペイメントチャネルネットワー…

またコンテンツだけでなく、使用した帯域幅やストレージに対して支払うようなユースケースも考えているようなので、分散ストレージやレンタルサーバーのようなアプリケーションも考えているのでしょう。これらについて具体的な部分についてはまだよくわかりません。

KEETとは

Holepunchを使った最初のアプリとして、KeetというP2Pビデオ通話アプリがリリースされました。

前述の通り、オープンソース版Zoomとして名高いJitsiではWebRTCサーバーをどちらかのユーザーが立てて接続を確立する必要がありました。KeetではHolepunchを使って接続を確立するようなので、ひょっとすると割とシンプルなのではないかと思います。(以前紹介したImperviousというライトニングノードを拡張するAPIサーバーのハッカソンででた「ライトニングノード通話」のコンセプトに近い気がします。)

ちょっといかがわしめな雰囲気をチラチラ出してくるあたり、想定マーケットはアダルト向けで考えているのかもしれません。

HOLEPUNCHは生き残るのか?

シンプルなプロトコルなので、お互いがオンラインの際に使えればいいユースケースにおいては問題なく使えるでしょう。ただ、公開鍵の管理や変更等、運用面ではDIDに遥かに劣る作り込みですし、データの保存や同期のような話はスコープ外のようなので、汎用アプリケーション基盤としてはDID、DWNなどで網羅的なWeb5などのほうが柔軟に利用できそうな印象があります。(そもそもどちらもまだ完全にオープンソースではありませんが…)

実際に、BlockでWeb5を推進しているDaniel Buchner氏も「接続状態が流動的でクエリできるDBがないためアプリ基盤としては対応できるユースケースが少ない」と突っ込んでいます。確かにHolepunch側が主張する「Web5より柔軟性が高い」は誇大広告というか、単純にプロトコルがシンプル=あまり作り込まれていないことを良いように言い換えている印象です。アプリケーション基盤としては少し心配です。

https://twitter.com/csuwildcat/status/1551544893436092416

ペイメントに関しては、OmniBOLTのようなライトニング様の形態でUSDTを使うユーザーが十分に増えるかは不明で、ネットワーク効果はゼロからのスタートというのも気になります。この点ではライトニングも利用できるから問題ないのか、それともユーザー獲得の障壁になってしまうのか見守りたいところです。

また、Keetはモバイル版を近くリリースするらしいですが、接続を受け付けるにはオンラインである必要がある問題をどのように解決するのか気になるところです。例えばWeb5ではRemote DWNというモバイルデバイス上ではなく自宅やクラウド、あるいは第三者サービス上で常時稼働する概念を使って接続を受け入れることを想定しています。(その分構成が複雑です)

個人的には時間をかけて見ていけばいいと思いますが、強いて言えばBitfinex / Tetherの予算があるのである程度マーケティングはできることが強みなのかなと思います。ただ、アプリケーション基盤というよりは単純にNATを越える手段とP2P通信の規格を定めただけのものなので、開発者にとって魅力的な提案なのかは疑問です。