Aller au contenu

Connexion abonné Phoenix Edge

En me connectant à DoubleZero, j'accepte les Conditions d'utilisation de DoubleZero. Veuillez noter que les données sont réservées à votre usage interne et ne peuvent pas être retransmises (voir Section 2(e)).

Les flux Phoenix diffusent les données de marché des perpétuels Phoenix sur le réseau DoubleZero Edge en multicast UDP. Il existe deux flux :

  • Top of Book (TOB) : meilleurs bid et ask, plus impressions de trades
  • Market by Price (MBP) : profondeur par niveau de prix, plus impressions de trades

Tarification

Les flux sont facturés par mois :

Flux Prix
phoenix-tob 50 $ / mois
phoenix-mbp 100 $ / mois

Quel chemin dois-je prendre ?

# Chemin Idéal pour Effort
1 Edge Connect Agents et applications souhaitant un CLI simple et du JSON décodé via WebSocket Le plus faible
2 Multicast natif Construire votre propre décodeur sur le format binaire brut Le plus élevé

Avant tout chemin : achetez les flux dont vous avez besoin sur doublezero.xyz/edge/subscribe. En achetant, vous acceptez les Conditions d'utilisation de DoubleZero.

Vous voulez qu'une IA fasse l'installation avec vous ? Connectez le DoubleZero MCP et demandez-lui de vous guider à travers Phoenix / Edge Connect.


Commencez ici. doublezero-edge-connect est le chemin adapté aux agents : une seule commande d'installation, l'hôte rejoint DoubleZero, et votre application consomme du JSON décodé via WebSocket (ws://<host>:8081) au lieu de décoder du multicast binaire.

Edge Connect répond aux besoins de sa base d'utilisateurs en expansion. C'est la méthode de connexion la plus simple et devrait être utilisée sauf si vous avez un besoin technique spécifique.

Version courte :

curl -fsSL https://get.doublezero.xyz/connect | \
  DZ_SECRET=/path/to/keypair.json DZ_FEEDS=PHOENIX DZ_ASSUME_YES=1 bash

Les variables sont placées après le pipe pour que l'installateur (bash) les reçoive. DZ_SECRET est un jeton d'accès DZ_… ou le chemin vers le fichier JSON de la keypair Solana qui possède votre pass d'accès / achat de flux.

Si un doublezerod hôte est déjà en cours d'exécution, celui-ci et le daemon du conteneur se lient tous deux au port UDP 44880, donc le daemon du conteneur se termine juste après le démarrage. L'installateur propose d'arrêter et de désactiver le daemon hôte, et le fait sans demander lorsque DZ_ASSUME_YES=1 est défini. Pour le faire vous-même :

sudo systemctl stop doublezerod
sudo systemctl disable doublezerod

Ensuite, vérifiez le statut à l'intérieur du conteneur (attendez-vous à BGP Session Up et votre groupe Phoenix) et connectez un client WebSocket au port :8081 :

docker exec doublezero-edge-connect doublezero status

Edge Connect arbitre entre les éditeurs Phoenix, de sorte que les clients WebSocket voient une seule copie de chaque mise à jour.

Étapes complètes, vérification et pièges : connectez le DoubleZero MCP et demandez-lui de vous guider à travers Edge Connect pour Phoenix. Contrat WebSocket : PROTOCOL.md.


2. Multicast natif (avancé)

Connaissances techniques approfondies requises

Le multicast natif signifie que vous rejoignez le groupe vous-même et décodez le format brut Edge sur votre hôte. Seuls les utilisateurs les plus techniquement compétents devraient emprunter ce chemin. Vous devrez lire et comprendre les spécifications, en commençant par market-by-price/spec.md et le reste de edge-feed-spec. Préférez Edge Connect sauf si vous avez une exigence stricte de posséder le décodeur.

Configuration du client DoubleZero

Suivez les instructions de configuration pour installer et configurer le client DoubleZero. Maintenez le client à jour :

sudo apt update && sudo apt install doublezero

Acheter un flux

Avec doublezerod en cours d'exécution, identifiez le dispositif à la latence la plus faible avant d'acheter :

doublezero latency

Achetez sur https://doublezero.xyz/edge/subscribe.

Configurer le pare-feu

Autorisez GRE, BGP, PIM et le trafic du flux Phoenix. Les ports UDP Phoenix se situent dans la plage 9201–9213 : 9201/9202 transportent les données de marché et de référence Top of Book, et 9211/9212/9213 transportent les données de marché, de référence et de snapshot Market by Price. Voir Adresses des flux.

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 (les deux flux)
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 (les deux flux)
sudo ufw allow in on doublezero1 to any port 9201:9213 proto udp

UFW ne dispose pas du protocole pim. Le PIM sortant est autorisé par la politique sortante par défaut d'UFW ; si vous refusez le trafic sortant, ajoutez une règle brute pour PIM dans /etc/ufw/before.rules.

S'abonner

Rejoignez chaque flux que vous avez acheté (client v0.35.0 ou ultérieur) :

doublezero connect multicast

Ou nommez les flux par code de flux :

doublezero connect multicast --subscribe-feed phoenix-tob phoenix-mbp

Utilisez les codes de flux phoenix-tob / phoenix-mbp, pas les noms de flux par métro (tels que phoenix-tob-cmh) ni les codes de groupe (edge-phoenix-…). S'abonner par code de groupe avec --subscribe échoue avec un pass acheté.

Attendez-vous à ✅ User Provisioned. Patientez environ 60 secondes, puis :

doublezero status

Attendez-vous à BGP Session Up sur le bon réseau DoubleZero.

doublezero user list --client-ip <your ip>

Vos flux apparaissent dans la colonne groups. Inspectez les IPs de groupe avec :

doublezero multicast group list

Décoder le format brut vous-même

La version du schéma est 3 — ignorez les datagrammes dont la version n'est pas implémentée par votre décodeur. Formats de référence : edge-feed-spec, incluant top-of-book/spec.md, market-by-price/spec.md, et le GLOSSARY.

Chaque datagramme commence par un en-tête de datagramme de 24 octets, suivi d'un ou plusieurs messages applicatifs empaquetés jusqu'au MTU. Les datagrammes sont en little-endian et à disposition fixe.

Champ Notes
Magic u16 à l'offset 0 : 0x445A sur TOB, 0x4442 sur MBP. Validez-le.
Version du schéma 3
Channel ID Les deux flux Phoenix utilisent le canal 1
Séquence Monotone par adresse IP source, Channel ID et port de destination — chaque port a sa propre série. Utilisez-la pour la détection de lacunes.
Horodatage d'envoi Nanosecondes depuis l'époque Unix
Nombre de messages Messages empaquetés dans ce datagramme
Compteur de réinitialisation Tout changement (y compris le passage de 255 à 0) est une réinitialisation ; supprimez l'état du canal de cet éditeur. MBP peut aussi l'incrémenter en cours de session lors d'un ré-ensemencement global du venue.
Longueur du datagramme Total en octets

Plus d'un éditeur envoie chaque flux Phoenix, sur les mêmes groupes, canal et ports. Indexez tout l'état du canal et des instruments sur l'adresse IP source en plus du Channel ID, sinon les séries de séquence de deux éditeurs s'entrelacent en une seule. Un abonné natif reçoit une copie de chaque trade par éditeur.

Messages applicatifs (TOB)

Type ID Taille Port Contenu
Heartbeat 0x01 16 o market Signal de vie quand le marché est calme
InstrumentDefinition 0x02 130 o reference Symbole, exposants, tick et lot, expiration
Quote 0x03 60 o market Meilleurs bid et ask, prix et taille, drapeaux de mise à jour
Trade 0x04 52 o market Prix, taille, côté agresseur, identifiant de trade
EndOfSession 0x06 12 o market Arrêt propre
ManifestSummary 0x07 24 o reference Drapeau de validité, compteur de changement Manifest Seq, nombre d'instruments, horodatage

Phoenix n'envoie pas 0x08 (Liquidation). Le Source ID de Phoenix dans le registre edge-feed-spec est 2. Lisez price_exponent et qty_exponent depuis chaque InstrumentDefinition — ne les codez pas en dur. L'exposant représente la précision du prix, pas le tick : BTC sur Phoenix utilise l'exposant -2 avec une taille de tick de 100, donc il évolue par dollars entiers.

Le flux MBP utilise l'ensemble de messages market-by-price. Consultez les spécifications market-by-price et reference-data dans edge-feed-spec. Les deux flux proviennent du même processus éditeur, ils partagent donc les identifiants d'instruments, et le port de données de marché MBP transporte les mêmes impressions de trades que TOB. Les identifiants de trade Phoenix sont des numéros de séquence par marché, donc dédupliquez les trades sur (instrument ID, trade ID), jamais sur le trade ID seul.

La livraison est en UDP fire-and-forget sans retransmission, et le port de données de référence ne répare pas les données de marché : il ne répète que InstrumentDefinition (au moins une fois toutes les 30 s) et ManifestSummary (au moins une fois toute les 1 s). Un Quote TOB perdu reste perdu jusqu'à ce que le meilleur bid ou ask de ce marché change. Seul MBP dispose d'un chemin de réparation — son cycle de snapshot — et un démarrage à froid MBP doit se lier au port de snapshot.


Adresses des flux

Code de flux Code de groupe Description Groupe multicast Données de marché Données de référence Snapshot
phoenix-tob edge-phoenix-tob Top-of-book et trades des perpétuels 233.84.178.24 9201 9202 —
phoenix-mbp edge-phoenix-mbp Market-by-price des perpétuels 233.84.178.25 9211 9212 9213

Abonnez-vous avec le code de flux ; doublezero status et multicast group list affichent le code de groupe.

Le groupe sélectionne le flux ; le port sélectionne les données de marché, les données de référence ou le snapshot au sein de celui-ci. La réplication multicast se fait par adresse IP source et groupe, et le fabric n'inspecte jamais le port UDP, donc rejoindre un groupe livre tout ce qui se trouve sur ce groupe via votre tunnel DoubleZero. Le port est un filtre de socket appliqué sur votre propre hôte après l'arrivée des octets.


Dépannage

Si vous rencontrez un problème non couvert ici, veuillez nous contacter via votre canal existant avant de tenter un contournement. Si vous n'avez pas de canal, consultez Support.

Assurez-vous que votre client est à jour

Exécutez : sudo apt update && sudo apt install doublezero

Aucun datagramme ne arrive

  1. Confirmez que le flux a été acheté sur https://doublezero.xyz/edge/subscribe. Un flux non acheté ne délivre aucun trafic.
  2. Confirmez que BGP est actif : doublezero status devrait afficher BGP Session Up sur le bon réseau DoubleZero.
  3. Confirmez que l'abonnement est actif : doublezero user list --client-ip <your ip> devrait lister le flux sous groups.
  4. Confirmez que le groupe est rejoint sur la bonne interface. Le multicast arrive sur doublezero1, pas doublezero0.
  5. Confirmez que le pare-feu autorise les ports UDP du flux en entrée sur doublezero1.

Lacunes de séquence

Suivez la séquence par adresse IP source, Channel ID et port de destination ; un décodeur indexé uniquement sur le Channel ID voit de fausses lacunes. Une vraie lacune signifie des datagrammes perdus. Sur MBP, les marchés affectés se rétablissent au prochain cycle de snapshot. Sur TOB il n'y a pas de réparation : le quote d'un marché redevient à jour une fois que son meilleur bid ou ask change à nouveau.

Changements du compteur de réinitialisation

Tout changement du compteur de réinitialisation signifie que cet éditeur a redémarré ou ré-ensemencé le canal. Supprimez l'état pour cette adresse IP source et ce canal, récupérez à nouveau les définitions depuis le port de données de référence, et sur MBP reconstruisez les carnets d'ordres depuis le port de snapshot.

Le tunnel ne s'établit pas

  1. Edge Connect : exécutez le statut dans le conteneur — docker exec doublezero-edge-connect doublezero status. Le doublezero status de l'hôte échoue souvent alors que le flux fonctionne bien (le conteneur possède le daemon). Confirmez que le doublezerod de l'hôte est arrêté.
  2. Natif : vérifiez que le daemon de l'hôte est en cours d'exécution : sudo systemctl status doublezerod
  3. Vérifiez que les règles de pare-feu sont en place (GRE, BGP, PIM, et les ports du flux sur doublezero1)
  4. Vérifiez le statut de connexion depuis le même endroit où vous vous êtes connecté (conteneur ou hôte) — attendez-vous à BGP Session Up sur le bon réseau DoubleZero

L'IP du client est auto-découverte à partir de l'IP publique de votre hôte. Vérifiez qu'elle correspond à l'IP que vous avez utilisée lors de l'achat du flux.


Design de référence pour la recherche

Optionnel. Si vous avez déjà un tunnel DoubleZero et un abonnement sur l'hôte et que vous souhaitez enregistrer et visualiser les données du flux, le design de référence pour la recherche exécute multicast → parser → topofbook-bot → ClickHouse → Grafana avec Docker Compose :

github.com/malbeclabs/edge-multicast-ref/tree/main/demo

Ceci pointe la démo vers Phoenix TOB (voir Adresses des flux) :

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 est généralement accessible à http://localhost:3000 sur l'hôte. Détails et tableaux de bord : le README de la démo.

Ceci visualise les données que vous recevez déjà. Cela ne remplace pas l'achat du flux, l'abonnement, ni aucun des chemins de connexion ci-dessus.