ウォレット同士の通信でServerless PayJoinが実現できるメリット、Nostrとの関係
ビットコインを利用する上で比較的シンプルながらパワフルなプライバシー技術にPayJoinがあります。個人的にはとても好きな技術ですが、対応するユーザーや事業者はまだ非常に少ないです。その理由の1つとして、送金者からPSBTを受け取って自らの入力を追加するためにサーバーを運用する必要があることが挙げられます。
Serverless Payjoinとはこの問題を解決すべく、サーバーを立てることなくウォレット同士の通信でPayJoinを行うための追加の仕様です。
送金者と宛先のコインを混ぜるPayjoin
PayJoinとは送金者と宛先が協力してトランザクションを作成し、双方がコインを入力・出力することによって"Common Input Ownership Heuristic"と呼ばれるブロックチェーン解析手法を無効化するプライバシー技術です。通常はトランザクションの入力に使用されるTXOは全て同一人物が保有するものなのでブロックチェーン解析によって資金の動きを分析する際にはそれを前提に分析しますが、PayJoinにおいては複数ユーザーのTXOが混在するためこの前提を密かに覆すことができます。
PSBTという、作成途中のビットコイントランザクションをやり取りする際のフォーマットが規格化されたことによって扱えるようになったPayJoinを受け取るにはBTCPay Serverを立てるのが一番手軽かもしれません。ただし、PayJoinに対応したウォレットを用いるユーザーしかその機能は利用できません。
PayJoinについては過去に投稿しているのでそちらを御覧ください。
【2020/3/5】CoinJoinの進化版としてのPayJoin
https://coinkeninfo.com/payjoin-as-an-evolution-of-coinjoin/
PayJoinはサーバーの必要性がネック
さて、PayJoinにおいてネックとなることの1つは受け取る側がサーバーを立てる必要がある点です。送金者からPSBTを受け取り、入力を加える必要があるため、受け取る側に公開のWebサーバーが必要になります。また、自動化するとなるとこのWebサーバーがホットウォレットと連携することになってしまいます。
BTCPay Serverなどのソリューションがありますが、セットアップする手間や管理するノウハウがあるユーザーは限られている上に一定のコストもかかってしまうため、サーバーを用意してセルフホストするユーザーは少ないのが実情です。しかし、それではPayJoinは使用できません。
そこで、Serverless PayjoinとしてPayjoin用のサーバーを立てることなく、TURNリレーを通して送金者と宛先が一連のプロトコルを実行するというものです。TURNサーバーは第三者であるためPSK(事前に共有する公開鍵)を用いた暗号化を行う点以外は通常のPayJoinと同じです。
TURNリレーとはNAT越えの通信を取り次ぐためのサーバーです。例えばオンラインゲームなどはNATの後ろにある家庭内ネットワーク上の機器が別の家庭内ネットワーク上の機器と接続して遊ぶため、TURNリレーを利用して通信しているものが多くあります。
TURNリレーへの接続を前提とすることで、同時にオンラインである前提さえ満たせばサーバーを立てずともウォレットなどに必要な機能を収めることができそうです。例えば対面販売でスマホのウォレット同士でPayJoinを行うなどの場面が想像できます。
一方、オンラインショップなどでの決済においては根本的な問題解決になっていないのではないか?という疑問が残ります。受け取り用のウォレットをどうにかして常時オンラインにしておく必要は相変わらずあるためです。
Nostrを使えば非同期のPayJoinも可能に?
さて、Serverless Payjoinのポイントは第三者のリレーを用いてサーバーを立てる必要をなくすことでしたが、最近話題の「第三者のリレーを用いるプロトコル」であるNostrとの関係性も考察されています。
前述の通り、PayJoinにはサーバーを立てる煩雑さの他にもオンライン要求があり、その結果として事実上ホットウォレットの利用が必須であるという欠点があります。これを解決する1つの方法はPayJoinに受け手が入力を追加する時間を十分に設け、その間にハードウェアウォレットなどから入力するUTXOを選んで署名する時間を与えることが考えられます。人間の介在を前提とするため、サーバーを立てずに行うにはオンライン要求を排除する必要があります。
例えば送り主がServerless Payjoinの手順を真似てNostrリレーにPSBTを投げたらどうでしょうか。
現在のNostrだとリレーは各クライアントがオンラインか否かについて無関心なので、即時にPSBTが受け取ってもらえるとは限りません。人間が入力の追加を行う時間も含めて半日~1日程度の「タイムアウト」を設ける必要があり、それに関連して仕様を追加する必要がありそうです。
ただ、Nostrのいいところはシンプルであるが故にすぐにコンセプト実装のようなものが出てくる点なので、ひょっとすると今月中に試す人が現れるかもしれません。
まとめ
・PayJoinはサーバーを立てる必要があり面倒
・TURNリレーを使うことでサーバーを立てることなく、ウォレット同士が通信できる。これを活用するのがServerless PayJoin
・オンライン要求、ホットウォレットの必要性を廃するNostr版Serverless Payjoinも検討に上がっているが、非同期のやり取りについて仕様を追加で策定する必要がある
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション