Interledger - 具体的な処理の流れを押さえる

Ripple社の中の人からCoilなるものを設立すると発表されました(リンク)
これはInterledgerの準備がある程度整ったのか、と思えたので
少し中身を追ってみた

おおまかな流れ

ざっくり書くと

  1. Interledger で使う情報を送受信者間で共有する
  2. 共有した情報を元にマネー(バリュー)とデータをやり取りする

定義されている用語を使って書くなら

  1. 送信者はInterledgerしたい相手のPayment Pointerを知る
  2. Payment Pointer からSPSPエンドポイントを得る
  3. SPSPエンドポイントからInterledger相手のILPアドレスとshared secretを取得する
  4. STREAM コネクションをはる (ここから ILPv4パケット通信になる)
  5. STREAM コネクション上でマネーとデータを相互に送受信し合う
  6. マネーの送信であれば該当Ledgerで価値を移転させる
  7. 通信完了したら STREAMコネクションを切断する

といったところ。

ILPパケットの通信機能(およびLedgerの制御機能)を持ったソフトウェアを
ILP Connectorという。moneydもコネクタ。
全ての通信はセキュアな状態で行われる。

以下、いくつか詳細を書く

Payment Pointer

$で始まるURLっぽいやつ。
Payment Setup Protocol するための宛先を指し示している。
この宛先に HTTPS GET することが Payment Setupの始まりである。

SPSP (Simple Payment Setup Protocol)

現在定義されているPayment Setup Protocol
Payment Setupは所定URL へのHTTPS GETで始まるが、
その応答にて少なくともILP通信用の宛先アドレス(ILPアドレス)とshared secretを返す必要がある。

STREAM

ILPを使って一連の継続した双方向通信を行う。
QUICにインスパイアされ、
ILP condition, fulfillやパケット暗号化の方法はPSKv2を踏襲している。

双方向通信だが、この時点までに受信側(SPSP受けた側)は送信側(SPSP始めた側)のILPアドレスを知らないので、
送信側のILPアドレスを受信側に通知することによって双方向通信可能なコネクションを確立し、
そのコネクションにてマネーまたはデータのストリームをお互いに送受信しあう。
大きくない額で細切れにして送ることが意図なのか、額/量のフロー制御用パラメータが用意されている。

ILPv4

InterledgerのコアはILPである。現在のバージョンは4。
ほとんどは STREAM + ILPv4で使う想定と思われる。
要求用のILP Prepareパケットと応答用のILP Fulfill/Rejectパケットがある。
応答は要求時の経路にそのまま送り返すので、応答側は要求発信側のアドレスを知らなくても良い。
(Prepareの)condition と (Fulfillの)fulfillment はいわゆる Hashed TimeLockとかいうやつで
その条件を決定するのは上位プロトコル(例えばSTREAM)の管轄である。
必ず失敗する条件でマネー送信することでレート推定できたりする。(STREAMはそういう使い方を想定している)

ILPアドレスによるルーティングもここの役割。
ILPアドレス自体は割と柔軟で、暗号通貨アドレスや銀行口座を示すのはもちろん、
(ルーティングさえできれば)請求書番号とかでもよくてIoVっぽい。

ILPパケットの送信(というかILP Connector間の通信)はWebSocketsで行うようだ。
正確には、BTPと呼ぶプロトコルであって、
少なくともILPパケットとルーティング情報の二つはコネクタ間でやりとりする必要があり、
今後も増える可能性あるので、
共通の通信処理をする部分を用意しておくよ、というもの。

moneyd

Interledgerブログのチュートリアルを見るとまずmoneydをインストールしてね、と書いてある。
Interledgerしたいソフトウェア全てにInterledgerのプロトコルスタックを組み込むのは馬鹿らしい、非効率、非現実的。
コア機能だけを専用のソフトウェアとして抽出し、外から制御できるようにした方が便利だよね。
既存ソフトなども簡単にInterledger対応できるよね。
ということで抽出されたのがmoneyd、外部からの制御にはBTPが使われる(BTPで制御できる)

Web Monetization

Coilが初めにやるといっているもの(たぶん)。
何かしらのイベントを契機として自動支払いを行わせる。

Webサイトにアクセスした とか
特定のリソース要求があった とか
ゲームに参加した。リトライした とか
動画、音楽再生中 とか
一定時間毎 とか
利用した時や利用中に勝手に支払いがされる みたいな。
投げ銭よりもスマートに思える。
前あったAPIコールに課金するというのも範疇なのだろう。
Interledger Service Providerみたいなのもやるのかな。

Web Paymentsとのからみ

Payment Request API とか言う奴。
端末(iPhoneとかデスクトップPCなど)に登録されている支払い手段をブラウザから呼び出して決済できるようにしよう
というもののはず。
クレジットカードとかApplePayとか、あるいは既存の決済アプリとか、
呼び出しインタフェースを用意すればWeb支払いに使えるようになって、
通販とか、Webサイト側に支払い情報など登録せずよくなる。
Interledgerもそこで使えるよという話。

その他

  • 最近の発表資料見ると、レイヤー2あったほうが都合が良いようだ (リンク)
  • 実装はInterledgerJS(JS, リファレンス実装)とHyperledger Quilt(Java)の二つ (が公式ページからリンクされている)
    仕様が安定したなら増えてくのだろうか

以上


See also