Phoenix Edge サブスクライバー接続
DoubleZero 利用規約 に同意の上、DoubleZero に接続してください。データは内部利用のみを目的としており、再送信は禁止されています(セクション 2(e) を参照)。
Phoenix フィードは、DoubleZero Edge ネットワーク上で Phoenix パーペチュアルの市場データを UDP マルチキャストとして配信します。フィードは 2 種類あります:
- Top of Book (TOB):最良買値・売値およびトレードプリント
- Market by Price (MBP):価格水準ごとの板情報およびトレードプリント
料金
フィードは月額で請求されます:
| フィード | 料金 |
|---|---|
phoenix-tob |
$50 / 月 |
phoenix-mbp |
$100 / 月 |
どのパスを選ぶべきか?
| # | パス | 適している用途 | 導入負荷 |
|---|---|---|---|
| 1 | Edge Connect | シンプルな CLI と WebSocket 経由のデコード済み JSON を求めるエージェントやアプリ | 最小 |
| 2 | ネイティブマルチキャスト | 生のワイヤーフォーマットに対して独自のデコーダーを構築する場合 | 最大 |
どのパスを選ぶ場合でも、まず doublezero.xyz/edge/subscribe で必要なフィードを購入してください。購入をもって DoubleZero 利用規約 に同意したものとみなされます。
AI にインストールを手伝ってもらいたい場合は、DoubleZero MCP に接続して、Phoenix / Edge Connect のセットアップをガイドしてもらうよう依頼してください。
1. Edge Connect(推奨)
ここから始めてください。 doublezero-edge-connect はエージェントフレンドリーなパスです。インストールコマンド 1 つでホストが DoubleZero に参加し、アプリはバイナリマルチキャストのデコードではなく、WebSocket 経由のデコード済み JSON(ws://<host>:8081)を利用できます。
Edge Connect は拡大するユーザーベースのニーズを満たしています。これは最も簡単な接続方法であり、特定の技術的要件がない限りこちらを使用してください。
簡易版:
curl -fsSL https://get.doublezero.xyz/connect | \
DZ_SECRET=/path/to/keypair.json DZ_FEEDS=PHOENIX DZ_ASSUME_YES=1 bash
変数はパイプの後に配置され、インストーラー(bash)がそれらを受け取ります。DZ_SECRET は DZ_… アクセストークン、またはアクセスパス/フィード購入を所有する Solana キーペア JSON のパスです。
ホスト上で doublezerod がすでに実行されている場合、ホストのデーモンとコンテナ内のデーモンの両方が UDP ポート 44880 をバインドするため、コンテナのデーモンは起動直後に終了します。インストーラーはホストデーモンの停止と無効化を提案し、DZ_ASSUME_YES=1 が設定されている場合は確認なしで実行します。手動で行う場合:
sudo systemctl stop doublezerod
sudo systemctl disable doublezerod
次に、コンテナ内でステータスを確認し(BGP Session Up と Phoenix グループが表示されることを確認)、WebSocket クライアントを :8081 に接続します:
docker exec doublezero-edge-connect doublezero status
Edge Connect は Phoenix パブリッシャー間の調停を行うため、WebSocket クライアントには各更新のコピーが 1 つだけ届きます。
詳細な手順、検証、および注意事項: DoubleZero MCP に接続して、Phoenix 向け Edge Connect のセットアップをガイドしてもらうよう依頼してください。 WebSocket コントラクト: PROTOCOL.md。
2. ネイティブマルチキャスト(上級者向け)
高度な技術知識が必要です
ネイティブマルチキャストでは、自分でグループに参加し、ホスト上で生の Edge ワイヤーフォーマットをデコードします。このパスは最も技術力の高いユーザーのみが選択してください。market-by-price/spec.md および edge-feed-spec の残りの仕様を読み、理解する必要があります。デコーダーを自前で持つ必要が明確にない限り、Edge Connect を推奨します。
DoubleZero クライアントのセットアップ
セットアップ手順に従って DoubleZero クライアントをインストールおよび設定してください。クライアントは常に最新状態に保ってください:
sudo apt update && sudo apt install doublezero
フィードの購入
doublezerod を実行した状態で、購入前に最も低遅延のデバイスを確認します:
doublezero latency
https://doublezero.xyz/edge/subscribe で購入してください。
ファイアウォールの設定
GRE、BGP、PIM、および Phoenix フィードのトラフィックを許可します。Phoenix の UDP ポートは 9201–9213 の範囲です:9201/9202 は Top of Book のマーケットデータとリファレンスデータを、9211/9212/9213 は Market by Price のマーケットデータ、リファレンスデータ、スナップショットデータを送信します。フィードアドレス を参照してください。
iptables:
sudo iptables -A OUTPUT -p gre -j ACCEPT
sudo iptables -A INPUT -i doublezero1 -s 169.254.0.0/16 -d 169.254.0.0/16 -p tcp --dport 179 -j ACCEPT
sudo iptables -A OUTPUT -o doublezero1 -s 169.254.0.0/16 -d 169.254.0.0/16 -p tcp --dport 179 -j ACCEPT
sudo iptables -A OUTPUT -o doublezero1 -p pim -j ACCEPT
# Phoenix market / reference / snapshot (both feeds)
sudo iptables -A INPUT -i doublezero1 -p udp --dport 9201:9213 -j ACCEPT
UFW:
sudo ufw allow proto gre from any to any
sudo ufw allow in on doublezero1 from 169.254.0.0/16 to 169.254.0.0/16 port 179 proto tcp
sudo ufw allow out on doublezero1 from 169.254.0.0/16 to 169.254.0.0/16 port 179 proto tcp
# Phoenix market / reference / snapshot (both feeds)
sudo ufw allow in on doublezero1 to any port 9201:9213 proto udp
UFW には pim プロトコルがありません。アウトバウンド PIM は UFW のデフォルトの送信ポリシーで許可されますが、送信トラフィックを拒否している場合は /etc/ufw/before.rules に PIM の raw ルールを追加してください。
サブスクライブ
購入したすべてのフィードに参加します(クライアント v0.35.0 以降):
doublezero connect multicast
またはフィードコードを指定してフィードを名前で指定します:
doublezero connect multicast --subscribe-feed phoenix-tob phoenix-mbp
フィードコード phoenix-tob / phoenix-mbp を使用してください。メトロごとのフィード名(phoenix-tob-cmh など)やグループコード(edge-phoenix-…)は使用しないでください。--subscribe でグループコードを指定してサブスクライブすると、購入済みパスでは失敗します。
✅ User Provisioned が表示されることを確認してください。約 60 秒待ってから:
doublezero status
正しい DoubleZero ネットワーク上で BGP Session Up が表示されることを確認してください。
doublezero user list --client-ip <your ip>
groups 列にフィードが表示されます。グループ IP を確認するには:
doublezero multicast group list
自分でワイヤーをデコードする
スキーマバージョンは 3 です。デコーダーが実装していないバージョンのデータグラムは破棄してください。正式なレイアウトは edge-feed-spec にあり、top-of-book/spec.md、market-by-price/spec.md、および GLOSSARY が含まれます。
各データグラムは 24 バイトのデータグラムヘッダーで始まり、MTU まで詰め込まれた 1 つ以上のアプリケーションメッセージが続きます。データグラムはリトルエンディアンで固定レイアウトです。
| フィールド | 備考 |
|---|---|
| Magic | オフセット 0 の u16:TOB では 0x445A、MBP では 0x4442。検証してください。 |
| スキーマバージョン | 3 |
| チャネル ID | 両方の Phoenix フィードはチャネル 1 を使用 |
| シーケンス | ソース IP アドレス、チャネル ID、および宛先ポートごとに単調増加 — 各ポートには独自のシリーズがあります。ギャップ検出に使用してください。 |
| 送信タイムスタンプ | Unix エポックからのナノ秒 |
| メッセージ数 | このデータグラムに格納されたメッセージ数 |
| リセットカウント | 変化があれば(255 → 0 のラップを含む)リセットです。そのパブリッシャーのチャネル状態を破棄してください。MBP ではベニュー全体の再シードによりセッション中にバンプされることもあります。 |
| データグラム長 | 合計バイト数 |
各 Phoenix フィードは複数のパブリッシャーから送信されます。同一のグループ、チャネル、ポートが使用されます。チャネルおよびインストゥルメントの状態は、チャネル ID だけでなくソース IP アドレスもキーにしてください。そうしないと、2 つのパブリッシャーのシーケンスシリーズが 1 つに混在します。ネイティブサブスクライバーはパブリッシャーごとに各トレードのコピーを 1 つ受信します。
アプリケーションメッセージ(TOB)
| タイプ | ID | サイズ | ポート | 内容 |
|---|---|---|---|---|
| Heartbeat | 0x01 |
16 B | market | マーケットが静かな間の生存確認 |
| InstrumentDefinition | 0x02 |
130 B | reference | シンボル、指数、ティックとロット、満期 |
| Quote | 0x03 |
60 B | market | 最良買値・売値、価格とサイズ、更新フラグ |
| Trade | 0x04 |
52 B | market | 価格、サイズ、アグレッサー側、トレード ID |
| EndOfSession | 0x06 |
12 B | market | クリーンシャットダウン |
| ManifestSummary | 0x07 |
24 B | reference | 有効フラグ、Manifest Seq 変更カウンター、インストゥルメント数、タイムスタンプ |
Phoenix は 0x08(Liquidation)を送信しません。Phoenix の edge-feed-spec レジストリにおける Source ID は 2 です。各 InstrumentDefinition から price_exponent と qty_exponent を読み取ってください — ハードコードしないでください。指数は価格精度であり、ティックではありません:Phoenix 上の BTC は指数 -2 でティックサイズ 100 を使用するため、1 ドル単位で動きます。
MBP フィードは market-by-price メッセージセットを使用します。edge-feed-spec の market-by-price および reference-data の仕様を参照してください。両フィードは同じパブリッシャープロセスから送信されるため、インストゥルメント ID を共有し、MBP のマーケットデータポートは TOB と同じトレードプリントを送信します。Phoenix のトレード ID はマーケットごとのシーケンス番号であるため、トレードの重複排除は (インストゥルメント ID、トレード ID) で行い、トレード ID 単体では行わないでください。
配信は再送なしのファイア・アンド・フォーゲット UDP であり、リファレンスデータポートはマーケットデータの修復を行いません。リファレンスデータポートは InstrumentDefinition(少なくとも 30 秒に 1 回)と ManifestSummary(少なくとも 1 秒に 1 回)を繰り返すのみです。失われた TOB Quote は、そのマーケットの最良買値または売値が変更されるまで失われたままです。修復パスがあるのは MBP のみ — そのスナップショットサイクル — であり、MBP のコールドスタートではスナップショットポートをバインドする必要があります。
フィードアドレス
| フィードコード | グループコード | 説明 | マルチキャストグループ | マーケットデータ | リファレンスデータ | スナップショット |
|---|---|---|---|---|---|---|
phoenix-tob |
edge-phoenix-tob |
パーペチュアル Top-of-Book およびトレード | 233.84.178.24 |
9201 |
9202 |
— |
phoenix-mbp |
edge-phoenix-mbp |
パーペチュアル Market-by-Price | 233.84.178.25 |
9211 |
9212 |
9213 |
フィードコードでサブスクライブします。doublezero status および multicast group list にはグループコードが表示されます。
グループはフィードを選択し、ポートはその中のマーケットデータ、リファレンスデータ、またはスナップショットを選択します。マルチキャストレプリケーションはソース IP アドレスとグループごとに行われ、ファブリックは UDP ポートを検査しません。そのため、グループに参加すると DoubleZero トンネル上のそのグループのすべてのトラフィックが配信されます。ポートは、バイトが到着した後にホスト上で適用されるソケットフィルターです。
トラブルシューティング
ここでカバーされていない問題が発生した場合は、回避策を試みる前に既存のチャネルでお問い合わせください。チャネルがない場合は サポート を参照してください。
クライアントが最新であることを確認する
実行: sudo apt update && sudo apt install doublezero
データグラムが到着しない
- https://doublezero.xyz/edge/subscribe でフィードが購入済みであることを確認してください。未購入のフィードはトラフィックを配信しません。
- BGP が稼働していることを確認してください:
doublezero statusで正しい DoubleZero ネットワーク上にBGP Session Upが表示されるはずです。 - サブスクリプションがアクティブであることを確認してください:
doublezero user list --client-ip <your ip>でgroupsの下にフィードが表示されるはずです。 - 正しいインターフェースでグループに参加していることを確認してください。マルチキャストは
doublezero0ではなくdoublezero1に到着します。 - ファイアウォールが
doublezero1上でフィードの UDP ポートのインバウンドを許可していることを確認してください。
シーケンスギャップ
シーケンスはソース IP アドレス、チャネル ID、および宛先ポートごとに追跡してください。チャネル ID のみをキーにしたデコーダーは偽のギャップを検出します。実際のギャップはデータグラムのドロップを意味します。MBP では、影響を受けたマーケットは次のスナップショットサイクルで回復します。TOB には修復手段がなく、そのマーケットの最良買値または売値が次に変更されるまでクォートは最新になりません。
リセットカウントの変化
リセットカウントの変化は、そのパブリッシャーがチャネルを再起動または再シードしたことを意味します。そのソース IP アドレスとチャネルの状態を破棄し、リファレンスデータポートからデフィニションを再収集し、MBP ではスナップショットポートから板情報を再構築してください。
トンネルが確立しない
- Edge Connect: コンテナ内でステータスを確認してください —
docker exec doublezero-edge-connect doublezero status。フィードが正常でもホストのdoublezero statusは失敗することがよくあります(コンテナがデーモンを所有しているため)。ホストのdoublezerodが停止していることを確認してください。 - ネイティブ: ホストデーモンが実行中であることを確認してください:
sudo systemctl status doublezerod - ファイアウォールルールが設定されていることを確認してください(GRE、BGP、PIM、および
doublezero1上のフィードポート) - 接続した場所(コンテナまたはホスト)と同じ場所から接続ステータスを確認してください — 正しい DoubleZero ネットワーク上で
BGP Session Upが表示されるはずです
クライアント IP はホストのパブリック IP から自動検出されます。フィード購入時に使用した IP と一致していることを確認してください。
リサーチ向けリファレンスデザイン
オプションです。ホスト上で DoubleZero トンネルとサブスクリプションがすでに設定済みで、フィードデータを記録およびチャート化したい場合、リサーチ向けリファレンスデザインは Docker Compose でマルチキャスト → パーサー → topofbook-bot → ClickHouse → Grafana を実行します:
github.com/malbeclabs/edge-multicast-ref/tree/main/demo
以下は Phoenix TOB にデモを向ける設定です(フィードアドレス を参照):
cd demo
cp .env.example .env
sed -i -e 's/^DZ_MULTICAST_GROUP=.*/DZ_MULTICAST_GROUP=233.84.178.24/' \
-e 's/^DZ_MARKETDATA_PORT=.*/DZ_MARKETDATA_PORT=9201/' \
-e 's/^DZ_REFDATA_PORT=.*/DZ_REFDATA_PORT=9202/' \
-e 's/^DZ_INTERFACE=.*/DZ_INTERFACE=doublezero1/' .env
docker compose up -d --build
Grafana は通常ホスト上の http://localhost:3000 でアクセスできます。詳細およびダッシュボードについては demo README を参照してください。
これはすでに受信しているデータを可視化するものです。フィードの購入、サブスクリプション、または上記のいずれかの接続パスの代わりにはなりません。