Vai al contenuto

Connessione Subscriber Phoenix Edge

Collegandomi a DoubleZero accetto i Termini d'uso di DoubleZero. Si prega di notare che i dati sono esclusivamente per uso interno e non possono essere ritrasmessi (vedi Sezione 2(e)).

I feed Phoenix forniscono i dati di mercato dei perpetual Phoenix sulla rete DoubleZero Edge come multicast UDP. Sono disponibili due feed:

  • Top of Book (TOB): miglior bid e ask, più stampe dei trade
  • Market by Price (MBP): profondità per livello di prezzo, più stampe dei trade

Prezzi

I feed sono fatturati mensilmente:

Feed Prezzo
phoenix-tob $50 / mese
phoenix-mbp $100 / mese

Quale percorso devo scegliere?

# Percorso Ideale per Impegno
1 Edge Connect Agent e app che desiderano una CLI semplice e JSON decodificato via WebSocket Minimo
2 Multicast nativo Costruire il proprio decoder partendo dal formato binario raw Massimo

Prima di qualsiasi percorso: acquista i feed di cui hai bisogno su doublezero.xyz/edge/subscribe. Con l'acquisto, accetti i Termini d'uso di DoubleZero.

Vuoi che un'IA ti guidi nell'installazione? Connetti il DoubleZero MCP e chiedigli di accompagnarti attraverso Phoenix / Edge Connect.


Inizia da qui. doublezero-edge-connect è il percorso agent-friendly: un singolo comando di installazione, l'host si unisce a DoubleZero e la tua app consuma JSON decodificato via WebSocket (ws://<host>:8081) invece di decodificare multicast binario.

Edge Connect soddisfa le esigenze della sua base utenti in crescita. Questo è il metodo di connessione più semplice e dovrebbe essere utilizzato a meno che non si abbia un'esigenza tecnica specifica.

Versione breve:

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

Le variabili vanno dopo il pipe in modo che l'installer (bash) le riceva. DZ_SECRET è un token di accesso DZ_… oppure il percorso al file JSON della keypair Solana che possiede il tuo pass di accesso / acquisto del feed.

Se un doublezerod dell'host è già in esecuzione, sia esso che il daemon del container tentano entrambi di fare il bind sulla porta UDP 44880, quindi il daemon del container si arresta subito dopo l'avvio. L'installer offre di fermare e disabilitare il daemon dell'host, e lo fa senza chiedere quando DZ_ASSUME_YES=1 è impostato. Per farlo manualmente:

sudo systemctl stop doublezerod
sudo systemctl disable doublezerod

Poi verifica lo stato all'interno del container (aspettati BGP Session Up e il tuo gruppo Phoenix) e connetti un client WebSocket alla porta :8081:

docker exec doublezero-edge-connect doublezero status

Edge Connect arbitra tra i publisher Phoenix, così i client WebSocket vedono una sola copia di ogni aggiornamento.

Passaggi completi, verifica e problemi noti: connetti il DoubleZero MCP e chiedigli di guidarti attraverso Edge Connect per Phoenix.
Contratto WebSocket: PROTOCOL.md.


2. Multicast nativo (avanzato)

Richieste conoscenze tecniche approfondite

Il multicast nativo significa che ti unisci al gruppo autonomamente e decodifichi il formato wire raw di Edge sul tuo host. Solo gli utenti tecnicamente più esperti dovrebbero scegliere questo percorso. Dovrai leggere e comprendere le specifiche, a partire da market-by-price/spec.md e il resto di edge-feed-spec. Preferisci Edge Connect a meno che tu non abbia un requisito stringente di gestire il decoder in autonomia.

Configurazione del client DoubleZero

Segui le istruzioni di setup per installare e configurare il client DoubleZero. Mantieni il client aggiornato:

sudo apt update && sudo apt install doublezero

Acquista un feed

Con doublezerod in esecuzione, identifica il dispositivo a latenza più bassa prima dell'acquisto:

doublezero latency

Acquista su https://doublezero.xyz/edge/subscribe.

Configura il firewall

Consenti GRE, BGP, PIM e il traffico dei feed Phoenix. Le porte UDP Phoenix sono nell'intervallo 9201–9213: 9201/9202 trasportano i dati di mercato e di riferimento Top of Book, e 9211/9212/9213 trasportano i dati di mercato, di riferimento e snapshot Market by Price. Vedi Indirizzi dei feed.

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

UFW non supporta il protocollo pim. Il PIM in uscita è consentito dalla policy di default in uscita di UFW; se blocchi il traffico in uscita, aggiungi una regola raw per PIM in /etc/ufw/before.rules.

Sottoscrivi

Unisciti a ogni feed acquistato (client v0.35.0 o successivo):

doublezero connect multicast

Oppure specifica i feed per codice feed:

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

Usa i codici feed phoenix-tob / phoenix-mbp, non i nomi feed per metro (come phoenix-tob-cmh) e non i codici gruppo (edge-phoenix-…). La sottoscrizione per codice gruppo con --subscribe fallisce con un pass acquistato.

Aspettati ✅ User Provisioned. Attendi circa 60 secondi, poi:

doublezero status

Aspettati BGP Session Up sulla rete DoubleZero corretta.

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

I tuoi feed appaiono nella colonna groups. Ispeziona gli IP dei gruppi con:

doublezero multicast group list

Decodifica il wire autonomamente

La versione dello schema è 3 — scarta i datagrammi la cui versione il tuo decoder non implementa. Layout autoritativi: edge-feed-spec, inclusi top-of-book/spec.md, market-by-price/spec.md e il GLOSSARY.

Ogni datagramma inizia con un header di 24 byte, seguito da uno o più messaggi applicativi impacchettati fino all'MTU. I datagrammi sono little-endian e a layout fisso.

Campo Note
Magic u16 all'offset 0: 0x445A su TOB, 0x4442 su MBP. Validalo.
Schema version 3
Channel ID Entrambi i feed Phoenix usano il canale 1
Sequence Monotono per indirizzo IP sorgente, Channel ID e porta di destinazione — ogni porta ha la propria serie. Usalo per il rilevamento dei gap.
Send timestamp Nanosecondi dall'epoca Unix
Message count Messaggi impacchettati in questo datagramma
Reset count Qualsiasi cambiamento (incluso il wrap 255 → 0) è un reset; scarta lo stato del canale di quel publisher. MBP può anche incrementarlo durante la sessione in caso di re-seed a livello di venue.
Datagram length Byte totali

Più di un publisher invia ciascun feed Phoenix, sugli stessi gruppi, canale e porte. Indicizza tutto lo stato del canale e degli strumenti anche sull'indirizzo IP sorgente oltre al Channel ID, altrimenti le serie di sequenza di due publisher si interlacciano in una sola. Un subscriber nativo riceve una copia di ogni trade per publisher.

Messaggi applicativi (TOB)

Tipo ID Dimensione Porta Contenuto
Heartbeat 0x01 16 B market Segnale di vita quando il mercato è inattivo
InstrumentDefinition 0x02 130 B reference Simbolo, esponenti, tick e lot, scadenza
Quote 0x03 60 B market Miglior bid e ask, prezzo e size, flag di aggiornamento
Trade 0x04 52 B market Prezzo, size, lato aggressore, trade ID
EndOfSession 0x06 12 B market Spegnimento ordinato
ManifestSummary 0x07 24 B reference Flag di validità, contatore di cambio Manifest Seq, conteggio strumenti, timestamp

Phoenix non invia 0x08 (Liquidation). Il Source ID di Phoenix nel registro edge-feed-spec è 2. Leggi price_exponent e qty_exponent da ciascun InstrumentDefinition — non hardcodarli. L'esponente è la precisione del prezzo, non il tick: BTC su Phoenix usa l'esponente -2 con un tick size di 100, quindi si muove in dollari interi.

Il feed MBP utilizza il set di messaggi market-by-price. Vedi le specifiche market-by-price e reference-data in edge-feed-spec. Entrambi i feed provengono dallo stesso processo publisher, quindi condividono gli instrument ID, e la porta market-data MBP trasporta le stesse stampe dei trade del TOB. I trade ID di Phoenix sono numeri di sequenza per mercato, quindi deduplica i trade su (instrument ID, trade ID), mai sul solo trade ID.

La consegna è UDP fire-and-forget senza ritrasmissione, e la porta reference-data non ripara i dati di mercato: ripete solo InstrumentDefinition (almeno una volta ogni 30 s) e ManifestSummary (almeno una volta ogni 1 s). Una Quote TOB persa resta persa fino a quando il miglior bid o ask di quel mercato cambia. Solo MBP ha un percorso di riparazione — il suo ciclo di snapshot — e un avvio a freddo MBP deve fare il bind sulla porta snapshot.


Indirizzi dei feed

Codice feed Codice gruppo Descrizione Gruppo multicast Dati di mercato Dati di riferimento Snapshot
phoenix-tob edge-phoenix-tob Top-of-book e trade dei perpetual 233.84.178.24 9201 9202 —
phoenix-mbp edge-phoenix-mbp Market-by-price dei perpetual 233.84.178.25 9211 9212 9213

Sottoscrivi con il codice feed; doublezero status e multicast group list mostrano il codice gruppo.

Il gruppo seleziona il feed; la porta seleziona dati di mercato, dati di riferimento o snapshot al suo interno. La replica multicast avviene per indirizzo IP sorgente e gruppo, e il fabric non ispeziona mai la porta UDP, quindi unirsi a un gruppo consegna tutto ciò che è su quel gruppo attraverso il tuo tunnel DoubleZero. La porta è un filtro socket applicato sul tuo host dopo l'arrivo dei byte.


Risoluzione dei problemi

Se riscontri un problema non trattato qui, contattaci attraverso il tuo canale esistente prima di tentare soluzioni alternative. Se non hai un canale, vedi Supporto.

Assicurati che il client sia aggiornato

Esegui: sudo apt update && sudo apt install doublezero

Nessun datagramma in arrivo

  1. Conferma che il feed sia stato acquistato su https://doublezero.xyz/edge/subscribe. Un feed non acquistato non consegna traffico.
  2. Conferma che BGP sia attivo: doublezero status dovrebbe mostrare BGP Session Up sulla rete DoubleZero corretta.
  3. Conferma che la sottoscrizione sia attiva: doublezero user list --client-ip <your ip> dovrebbe elencare il feed sotto groups.
  4. Conferma che il gruppo sia unito sull'interfaccia corretta. Il multicast arriva su doublezero1, non su doublezero0.
  5. Conferma che il firewall permetta le porte UDP del feed in ingresso su doublezero1.

Gap di sequenza

Traccia la sequenza per indirizzo IP sorgente, Channel ID e porta di destinazione; un decoder indicizzato solo sul Channel ID vede falsi gap. Un gap reale significa datagrammi persi. Su MBP, i mercati interessati si ripristinano dal ciclo di snapshot successivo. Su TOB non c'è riparazione: la quote di un mercato torna corrente solo quando il suo miglior bid o ask cambia successivamente.

Cambiamenti del reset count

Qualsiasi cambiamento nel reset count significa che quel publisher si è riavviato o ha eseguito un re-seed del canale. Scarta lo stato per quell'indirizzo IP sorgente e canale, raccogli nuovamente le definizioni dalla porta reference-data e su MBP ricostruisci i book dalla porta snapshot.

Il tunnel non si attiva

  1. Edge Connect: esegui lo status nel container — docker exec doublezero-edge-connect doublezero status. Il doublezero status dell'host spesso fallisce mentre il feed funziona correttamente (il container gestisce il daemon). Conferma che il doublezerod dell'host sia fermo.
  2. Nativo: verifica che il daemon dell'host sia in esecuzione: sudo systemctl status doublezerod
  3. Verifica che le regole del firewall siano configurate (GRE, BGP, PIM e le porte del feed su doublezero1)
  4. Controlla lo stato della connessione dallo stesso punto da cui ti sei connesso (container o host) — aspettati BGP Session Up sulla rete DoubleZero corretta

L'IP del client viene auto-rilevato dall'IP pubblico del tuo host. Verifica che corrisponda all'IP usato al momento dell'acquisto del feed.


Design di riferimento per la ricerca

Opzionale. Se hai già un tunnel DoubleZero e una sottoscrizione sull'host e vuoi registrare e visualizzare i dati del feed, il design di riferimento per la ricerca esegue multicast → parser → topofbook-bot → ClickHouse → Grafana con Docker Compose:

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

Questo punta la demo su Phoenix TOB (vedi Indirizzi dei feed):

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 è tipicamente raggiungibile su http://localhost:3000 sull'host. Dettagli e dashboard: il README della demo.

Questo visualizza i dati che stai già ricevendo. Non sostituisce l'acquisto del feed, la sottoscrizione o nessuno dei percorsi di connessione descritti sopra.