OCLOB: 注文を見ない連続指値板
連続で動き、バッチ処理をしない指値板。到着順が確定し照合が終わるまで、運営者は売買の向き、価格、数量、参加者を見ない。公開板に載るのは価格帯ごとの合計数量である。約定は事前承認済みの zkPI 指図として DeFMI で決済され、照合後の再署名はない。
出典: oclob/README.md, docs/ARCHITECTURE.md, docs/THREAT_MODEL.md, docs/STATUS.md, docs/RELATED_WORK.md
防ぐもの
通常の分散型 CLOB では、注文は照合される前に検証者、シーケンサ、mempool の監視者に見える。見た者は、その注文の前に有利な注文を差し込んだり、都合の悪い注文だけを遅らせたりできる。OCLOB が直すのは一点である。処理待ちの注文の内容を読み、その前に自分の注文を置くこと。次のものは防がない。公開板からの通常の予測、約定後の板の変化からの推測、通信タイミングの観察、MPC ノード 3 台以上の共謀、ネットワーク妨害による停止。
処理の順序
- メイカーは板に注文を置く前に、在庫または資金の上限を予約する。テイカーは発注時に、予約と、自分の限度内での約定を事前承認する。
- 注文は参加者の手元で秘密分散される。公開されるのは commitment(内容を隠したまま固定した値)だけである。
- 7 ノードのうち 5 台が到着番号に署名する。
- 7 ノードが MPC の中で価格・時間優先の照合を行う。到着番号は変えない。
- 遷移証明が、約定と公開板の更新を結び付ける。
- 閾値 zkPI を組み立て、資金と証券を DeFMI で同時に決済する。
- DeFMI から正式な受領証が届いてはじめて、画面に「決済済み」と表示する。
flowchart LR
CORP["参加者モジュール
署名、DeKYX、予約"]
QUEUE["暗号化した永続キュー
停止中も順序を保つ"]
ORDER["到着順委員会
7 のうち 5"]
MPC["秘匿照合
MP-SPDZ、7 プロセス"]
PROOF["遷移証明
到着 + 板 + 約定"]
ZKPI["閾値 zkPI
約定の範囲だけ"]
DEFMI["DeFMI
資金と証券を同時に"]
BOOK["公開板
価格帯別の合計"]
CORP --> QUEUE --> ORDER --> MPC --> PROOF --> ZKPI --> DEFMI
MPC --> BOOK
DEFMI -->|"正式な受領証"| CORP
意図して分けた四つの状態
- 参加者の秘密状態: 注文の全内容、署名鍵、DeKYX の資格証明、予約 commitment の開封値。
- MPC の秘密状態: 各ノードが持つシェア。対象は注文と、板に残っている注文。ノード 1 台だけでは値を読めない。
- 公開状態: 市場 id、到着番号、注文の commitment、価格帯別の合計、約定、検証の証拠、DeFMI のルート・ダイジェスト。
- 決済権限: 事前署名済みの注文と DeKYX の提示。固定長の暗号文として、決済側にだけ届ける。
分散経路では、参加者が検証可能な 3-of-7 の Pedersen 分散を作る。シェアはノードごとに一つで、そのノードの鍵で暗号化し、相互 TLS の上を固定長のメッセージで届ける。だからメッセージの大きさは注文の内容によって変わらない。各ノードは署名付きの保存受領証を返す。受領証の対象は、注文のダイジェストと、そのノードが永続化した状態の世代である。公開用の要約は注文ごとの使い捨て鍵で署名する。だからコーディネータには、注文も参加者の長期鍵も渡らない。
内容を見ずに到着順を決める
5 ノードが署名する言明に含まれるのは (market id, arrival number, order commitment, previous certificate digest, expiry) だけである。各ノードは署名する前に自分の票を永続化し、同じ窓の中では同じ番号に別の注文を署名しない。MPC への要求は、証明書のダイジェストだけでなく本体を運ぶ。各ノードは実行前に、固定された 7 つの公開鍵に対して、署名の数、対象、連鎖の連続性を再検証する。互いに矛盾する 5-of-7 の証明書が二つ存在することはない。5 台の組をどう二つ選んでも、正直なノードが少なくとも一つ共通に含まれるからである。これは、世界のどこでどのパケットが先だったかについての主張ではない。非同期ネットワークには到着の全順序がない。この設計は、観測した順序と、証明できる確定規則とを切り分けている。
照合と板
買いは高い方から、売りは安い方から、同じ価格帯の中では到着番号の順に照合する。MPC は 8 スロットの固定バッチを評価する。開くのは、各スロットが約定したか、約定の価格と数量、到着した注文の公開してよい残量だけである。参加者、DeKYX の nullifier、鍵、予約 commitment の開封値は開かない。一度に 8 スロットを超えて約定しうる注文は、黙って切り詰めるのではなく、受付の時点で拒否する。公開板は (side, price tick, total resting quantity) であり、注文の件数は公開しない。参加者が一人だけの価格帯では、合計の変化からその参加者の数量が漏れる。この漏れは、匿名性の主張とは別に計測している。
事前承認済みの決済
参加者は発注時に、次の条件をすべて満たす約定なら自動で決済してよい、と署名する。指値より不利でない。数量と予約の上限の内である。期限内である。指定した市場、銘柄、DeFMI の上である。公開された価格・時間優先の規則の下である。だから照合後の再署名はない。結果を見てから署名を拒んで、相手を探ることもできない。実装は二段階である。板に残る GTC のメイカー注文は、MPC が「約定なし、板に残す」と判定した時点で、秘密の上限に対する閾値 zkPI と、予約ルートの対を受け取る。そして Avalanche の finality の後にはじめて、照合対象の集合に加わる。到着したテイカーが約定すると、その予約、すべての約定、未使用分の解放が、一回の DeFMI の compare-and-swap として適用される。L1 が拒否した場合、秘密の板、法人単位の上限、残高、DeKYX の一回限りの状態はすべて元のままである。
資格と法人単位の上限
参加には DeKYX の匿名提示を使う。資格の名前空間は org.zkfmi.oclob.legal-entity-participant である。scope 別の nullifier により、一つの法人が同時に出す注文は、板全体で一つの予約上限を共有する。その上限の外部設定は DeCCP と DeFMI が持つ。
何を、どこで受入したか
統合受入は、管理者一人が管理する Linux ホスト 1 台で行う(開発用の Mac ではビルドしない)。確認した項目は次のとおりで、すべて同じ注文ダイジェストの上で確認した。参加者側での分割。7 つの MPC コンテナへの直接配送。メイカー予約。テイカー予約と、検証者 5 台の非 EVM DeFMI L1 上での複数約定の DvP。全検証者間でのルートの一致。再送された遷移の拒否。検証者 1 台の再起動後の復旧。React Flow のデモは 1440×1000 と 390×844 で操作し、横方向のはみ出しはゼロ、コンソールエラーもゼロだった。
| 領域 | 状態 | 本番までの残り |
|---|---|---|
| 秘匿注文の wire 形式、GTC/IOC、価格・時間優先、部分約定と複数約定、取消、期限 | 実装済み | スキーマ交渉、長時間・再起動試験、8 スロットを超える拡張 |
| 5-of-7 到着証明書、票の永続化、再検証 | 実装済み · 1 ホストで受入済み | HSM 鍵、エポック交代、WAN 上の独立ノード、公平性の形式的定義 |
| 参加者側での分割と暗号化直接配送 | 実装済み · 1 ホストで受入済み | 別々の運営者、運営者ごとの鍵生成 |
| MP-SPDZ 照合、平文への切り替え禁止 | 実装済み | 7 ホスト、通信量と障害の評価 |
| 閾値 zkPI、Avalanche 上の原子的 DvP | 実装済み · 1 ホスト L1 で受入済み | 閾値決済ゲートウェイ、独立した検証者、reorg 試験、note ベースの台帳 |
| 注文を見られない決済ゲートウェイ | 未完 | 現在は研究用ゲートウェイ 1 台が固定長の暗号文を開いている。MPC ノードによる閾値復号か、zkPI の共同生成に置き換える必要がある |
| 本番用 HTTP API | 未実装 | mTLS、認可、OpenAPI、流量制限、監査 |
| 形式的な安全性証明、統計的な性能比較 | 未受入 | 安全性の定義、証明、査読。事前登録した対象群と受入ゲート |
artifact(計測の出力ファイル): oclob_distributed_avalanche_acceptance.json, oclob_distributed_e2e.json, oclob_rough_e2e.json
先行研究との位置関係
「秘匿した注文を MPC で照合する DEX」は新しくない。Rialto、P2DEX、Renegade は明確な先行例である。TEE ベース(Tesseract)、commit してから開く方式、バッチ方式、分散した公開 CLOB の設計も存在する。OCLOB は暗号部品の新規性を主張しない。差になりうるのは、次のものを一つの状態機械に組み合わせたことである。バッチではなく連続の処理。可変数量、部分約定と複数約定、GTC、IOC、取消、期限を秘密状態のまま扱うこと。内容を開く前に 5-of-7 で到着順を確定し、それを時間優先に結び付けること。価格帯別の合計板を連続して公開すること。匿名の法人資格、法人全体での予約、閾値 zkPI、照合後の署名を要しない原子的 DvP。P2DEX の UC 安全性と、不正なサーバに対する補償は OCLOB より先を行っており、未解決の課題として挙げている。TEE は意図して信頼境界に入れていない。
技術スライドから実装へ
37項目の暗号技術カタログで用途・数式・証明者・制約を確認し、予約から決済・回収までで状態遷移をたどれます。暫定結果とchallengeは、両デモの検証方式とnative決済の境界を説明します。