Connexion abonné Binance Edge
En me connectant à DoubleZero, j'accepte les Conditions d'utilisation de DoubleZero. Veuillez noter que les données sont destinées à votre usage interne uniquement et ne peuvent pas être retransmises (voir Section 2(e)).
Les flux Binance fournissent les données de marché top-of-book de Binance via le réseau DoubleZero Edge sous forme de multicast UDP. Les données sont ingérées depuis Binance à Tokyo et acheminées sur la fibre dédiée de DoubleZero, de sorte qu'elles atteignent les autres métros plus tôt que via l'internet public. Binance est le lieu où se fait la découverte des prix pour de nombreuses paires spot, ses données sont donc un indicateur avancé pour les autres marchés.
Il y a deux flux, un par moteur d'appariement Binance :
| Flux | Instruments | Horodatage de cotation |
|---|---|---|
| Binance Spot | Toutes les paires spot négociées, y compris les paires cotées en monnaie fiduciaire | Heure d'envoi de la passerelle, précision à la µs |
| Binance USD-M | Perpétuels cotés en USDT et USDC. Les contrats à terme datés et les perpétuels TradFi ne sont pas inclus | Heure du moteur d'appariement, précision à la ms |
L'ensemble des instruments suit les cotations de Binance : les paires et les contrats sont ajoutés et retirés à mesure qu'ils entrent en négociation et en sortent.
Tarifs
Les flux sont facturés par mois :
| Flux | Prix |
|---|---|
| Binance Spot | 100 $ / mois |
| Binance USD-M | 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 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.
1. Edge Connect (recommandé)
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 elle doit être utilisée sauf si vous avez un besoin technique spécifique.
Version courte :
curl -fsSL https://get.doublezero.xyz/connect | bash
L'installateur demande votre secret : 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, de sorte que 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
Puis vérifiez le statut à l'intérieur du conteneur (attendez-vous à BGP Session Up et votre groupe Binance) et connectez un client WebSocket sur :8081 :
docker exec doublezero-edge-connect doublezero status
Chaque message Binance sur le WebSocket porte "source_name":"BINANCE". Les moteurs partagent ce nom, distinguez-les donc par source_id : 8 correspond à Spot et 6 à USD-M. Le même symbole peut exister sur les deux — BTCUSDT est une paire spot sur l'un et un perpétuel sur l'autre — et les identifiants d'instrument sont attribués par moteur, indexez donc sur source_id en plus du symbole ou de l'identifiant d'instrument.
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 top-of-book/spec.md et le reste de edge-feed-spec. Préférez Edge Connect sauf si vous avez un besoin impératif 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 périphérique à 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 des flux Binance. Les deux flux publient les données de marché sur le port UDP 30001 et les données de référence sur 30002 ; ils se distinguent par le groupe multicast, pas par le port. 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
# Binance market / reference (both feeds)
sudo iptables -A INPUT -i doublezero1 -p udp --dport 30001:30002 -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
# Binance market / reference (both feeds)
sudo ufw allow in on doublezero1 to any port 30001:30002 proto udp
UFW n'a pas de protocole pim. Le PIM sortant est autorisé par la politique sortante par défaut de UFW ; si vous bloquez le trafic sortant, ajoutez une règle brute pour PIM dans /etc/ufw/before.rules.
S'abonner
Rejoignez chaque flux acheté (client v0.35.0 ou ultérieur) :
doublezero connect multicast
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 IP de groupe avec :
doublezero multicast group list
Décoder le format 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, le registre des Source ID et le GLOSSAIRE.
Chaque datagramme commence par un en-tête 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. Validez-le. |
| Version du schéma | 3 |
| Channel ID | Spot utilise le canal 1, USD-M le canal 0 |
| Sequence | Monotone par adresse IP source, Channel ID et port de destination — chaque port a sa propre série. À utiliser 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 reset | Tout changement (y compris le passage de 255 à 0) est un reset ; supprimez l'état du canal de cet émetteur. |
| Longueur du datagramme | Nombre total d'octets |
Messages applicatifs
| Type | ID | Taille | Port | Contenu |
|---|---|---|---|---|
| Heartbeat | 0x01 |
16 o | market | Signal de vie lorsque le marché est calme |
| InstrumentDefinition | 0x02 |
130 o | reference | Symbole, exposants, tick et lot, expiration |
| Quote | 0x03 |
60 o | market | Meilleur bid et ask, prix et taille, indicateurs 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 | Indicateur de validité, compteur de changement Manifest Seq, nombre d'instruments, horodatage |
Le Source ID est la clé du moteur. Les deux flux utilisent le code de place BINANCE, mais chaque moteur a son propre Source ID dans le registre edge-feed-spec : 8 Binance Spot, 6 Binance USD-Margined Futures. Les moteurs listent des symboles qui se recoupent (BTCUSDT est à la fois une paire spot et un perpétuel USD-M), et chaque moteur attribue les identifiants d'instrument indépendamment, de sorte que le même identifiant d'instrument peut apparaître sur les deux flux pour des instruments différents. Indexez les instruments et les carnets sur (Source ID, instrument ID), jamais sur le symbole ou l'identifiant d'instrument seul. Lisez price_exponent et qty_exponent de chaque InstrumentDefinition — ne les codez pas en dur. L'exposant est la précision du prix, pas le tick : l'incrément négociable est tick_size × 10^price_exponent.
La livraison est en UDP sans retransmission (fire-and-forget), 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 sur les deux flux) et ManifestSummary (au moins une fois toutes les 1 s sur USD-M, toutes les 5 s sur Spot). Un Quote perdu reste perdu jusqu'à ce que le meilleur bid ou ask de cet instrument change. Dédupliquez les trades sur (Source ID, instrument ID, trade ID), jamais sur le trade ID seul.
Binance agrège les mises à jour du meilleur bid et ask avant qu'elles n'atteignent le flux : sous charge, une mise à jour devenue obsolète pour un symbole est abandonnée au profit de la plus récente. Avoir moins de cotations que de changements du carnet est un comportement normal de la place, pas une perte — utilisez le numéro de séquence du datagramme pour détecter les pertes.
Détails des données de référence qui diffèrent de ce qu'un décodeur pourrait supposer :
- Horodatages. Les
QuoteetTradeUSD-M portent l'heure du moteur d'appariement, à la précision de la milliseconde. LeQuoteSpot porte l'heure d'envoi de la passerelle et leTradeSpot l'heure d'exécution, tous deux à la précision de la microseconde. Tous sont exprimés en nanosecondes sur le réseau. Leg1fait 8 octets. Les actifs de base plus longs (par exemple1000FLOKIouBROCCOLI714) sont tronqués ; le nom complet figure toujours dansSymbol.- Tous les symboles ne sont pas en ASCII. Quelques perpétuels USD-M ont des noms chinois, et leurs
SymboletLeg1contiennent des octets UTF-8. Ne supposez pas de l'ASCII lors du décodage de ces champs. Expiryvaut0sur chaque instrument USD-M, puisque tous sont des perpétuels.Bid Source CountetAsk Source Countvalent toujours0. Binance ne publie pas le nombre d'ordres au meilleur prix.- USD-M exclut les ordres Retail Price Improvement (RPI) du meilleur bid et ask, il peut donc différer d'un snapshot de profondeur qui les inclut.
Adresses des flux
| Code de groupe | Moteur | Source ID | Channel ID | Groupe multicast | Données de marché | Données de référence |
|---|---|---|---|---|---|---|
edge-binance-spot-tob |
Spot | 8 |
1 |
233.84.178.31 |
30001 |
30002 |
edge-binance-usdsm-tob |
Perpétuels USD-M | 6 |
0 |
233.84.178.23 |
30001 |
30002 |
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é ou les données de référence à l'intérieur 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 délivre tout ce qui est 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. Comme les flux partagent les mêmes ports, un socket lié à 30001 sur un hôte ayant rejoint les deux groupes Binance reçoit les deux ; filtrez sur le groupe de destination ou sur le Source ID.
Dépannage
Si vous rencontrez un problème non couvert ici, veuillez nous contacter via votre canal existant avant de tenter de le contourner. 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 reçu
- Confirmez que le flux a été acheté sur https://doublezero.xyz/edge/subscribe. Un flux non acheté ne délivre aucun trafic.
- Confirmez que BGP est actif :
doublezero statusdevrait afficherBGP Session Upsur le bon réseau DoubleZero. - Confirmez que l'abonnement est actif :
doublezero user list --client-ip <your ip>devrait lister le flux sousgroups. - Confirmez que le groupe est rejoint sur la bonne interface. Le multicast arrive sur
doublezero1, pasdoublezero0. - Confirmez que le pare-feu autorise les ports UDP
30001–30002en entrée surdoublezero1.
Deux moteurs mélangés
Spot et USD-M listent tous deux des symboles tels que BTCUSDT, attribuent les identifiants d'instrument indépendamment et partagent les mêmes ports. Un décodeur qui indexe les carnets uniquement sur le symbole ou l'identifiant d'instrument, ou qui lie un seul socket pour tous les groupes sans vérifier le groupe de destination, fusionne deux instruments différents dans un seul carnet. Indexez sur le Source ID (ou le groupe de destination) en plus de l'identifiant d'instrument.
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 verra de fausses lacunes. Une vraie lacune signifie des datagrammes perdus. Il n'y a pas de réparation : la cotation d'un instrument redevient actuelle lorsque son meilleur bid ou ask change à nouveau.
Changements du compteur de reset
Tout changement du compteur de reset signifie que cet émetteur a redémarré ou ré-ensemencé le canal. Supprimez l'état pour cette adresse IP source et ce canal, et recueillez à nouveau les définitions depuis le port de données de référence.
Le tunnel ne s'établit pas
- Edge Connect : exécutez le statut dans le conteneur —
docker exec doublezero-edge-connect doublezero status. Ledoublezero statusde l'hôte échoue souvent alors que le flux fonctionne (le conteneur possède le daemon). Confirmez que ledoublezerodde l'hôte est arrêté. - Natif : vérifiez que le daemon hôte est en cours d'exécution :
sudo systemctl status doublezerod - Vérifiez que les règles de pare-feu sont en place (GRE, BGP, PIM et les ports du flux sur
doublezero1) - Vérifiez le statut de connexion depuis le même endroit où vous vous êtes connecté (conteneur ou hôte) — attendez-vous à
BGP Session Upsur le bon réseau DoubleZero
L'IP client est détectée automatiquement à partir de l'IP publique de votre hôte. Vérifiez qu'elle correspond à l'IP 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 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 Binance Spot. Pour un autre flux, utilisez son groupe depuis Adresses des flux :
cd demo
cp .env.example .env
sed -i -e 's/^DZ_MULTICAST_GROUP=.*/DZ_MULTICAST_GROUP=233.84.178.31/' \
-e 's/^DZ_MARKETDATA_PORT=.*/DZ_MARKETDATA_PORT=30001/' \
-e 's/^DZ_REFDATA_PORT=.*/DZ_REFDATA_PORT=30002/' \
-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 l'un des chemins de connexion ci-dessus.