Conexão de Assinante Binance Edge
Ao conectar-me ao DoubleZero, concordo com os Termos de Uso do DoubleZero. Note que os dados são apenas para seus fins internos e não podem ser retransmitidos (veja a Seção 2(e)).
Os feeds da Binance entregam dados de mercado top-of-book da Binance através da rede DoubleZero Edge como multicast UDP. Os dados são ingeridos da Binance em Tóquio e transportados pela fibra dedicada do DoubleZero, de modo que chegam a outras metros antes do que a internet pública os entrega. A Binance é onde ocorre a formação de preços de muitos pares spot, então seus dados são um indicador antecedente para outros mercados.
Existem dois feeds, um por motor de matching da Binance:
| Feed | Instrumentos | Timestamp da quote |
|---|---|---|
| Binance Spot | Todos os pares spot em negociação, incluindo pares cotados em moeda fiduciária | Horário de envio do gateway, precisão de µs |
| Binance USD-M | Perpétuos cotados em USDT e USDC. Futuros com vencimento e perpétuos TradFi não estão incluídos | Horário do motor de matching, precisão de ms |
O conjunto de instrumentos acompanha as listagens da Binance: pares e contratos são adicionados e removidos à medida que entram e saem de negociação.
Preços
Os feeds são cobrados por mês:
| Feed | Preço |
|---|---|
| Binance Spot | $100 / mês |
| Binance USD-M | $100 / mês |
Qual caminho devo seguir?
| # | Caminho | Melhor para | Esforço |
|---|---|---|---|
| 1 | Edge Connect | Agentes e aplicações que desejam uma CLI simples e JSON decodificado via WebSocket | Mais baixo |
| 2 | Multicast nativo | Construir seu próprio decodificador contra o formato bruto do wire | Mais alto |
Antes de qualquer caminho: adquira os feeds que você precisa em doublezero.xyz/edge/subscribe. Ao adquirir, você concorda com os Termos de Uso do DoubleZero.
1. Edge Connect (recomendado)
Comece aqui. doublezero-edge-connect é o caminho amigável para agentes: um comando de instalação, o host se junta ao DoubleZero, e sua aplicação consome JSON decodificado via WebSocket (ws://<host>:8081) em vez de decodificar multicast binário.
O Edge Connect atende às necessidades de sua base de usuários em expansão. Este é o método de conexão mais fácil e deve ser usado a menos que você tenha uma necessidade técnica específica.
Versão resumida:
curl -fsSL https://get.doublezero.xyz/connect | bash
O instalador solicita seu segredo: um token de acesso DZ_… ou o caminho para o JSON do keypair Solana que possui seu passe de acesso / compra de feed.
Se um doublezerod do host já estiver em execução, ele e o daemon do próprio contêiner ambos vinculam a porta UDP 44880, então o daemon do contêiner encerra logo após iniciar. O instalador oferece parar e desabilitar o daemon do host, e faz isso sem perguntar quando DZ_ASSUME_YES=1 está definido. Para fazer manualmente:
sudo systemctl stop doublezerod
sudo systemctl disable doublezerod
Em seguida, verifique o status dentro do contêiner (espere BGP Session Up e seu grupo Binance) e conecte um cliente WebSocket à porta :8081:
docker exec doublezero-edge-connect doublezero status
Toda mensagem da Binance no WebSocket carrega "source_name":"BINANCE". Os motores compartilham esse nome, então diferencie-os pelo source_id: 8 é Spot e 6 é USD-M. O mesmo símbolo pode existir em ambos — BTCUSDT é um par spot em um e um perpétuo no outro — e os instrument IDs são atribuídos por motor, então indexe por source_id além do símbolo ou instrument ID.
Contrato WebSocket: PROTOCOL.md.
2. Multicast nativo (avançado)
Conhecimento técnico mais aprofundado necessário
Multicast nativo significa que você mesmo se junta ao grupo e decodifica o formato bruto do wire Edge no seu host. Apenas os usuários tecnicamente mais capazes devem seguir este caminho. Você precisará ler e entender as especificações, começando por top-of-book/spec.md e o restante do edge-feed-spec. Prefira o Edge Connect a menos que você tenha um requisito rígido de possuir o decodificador.
Configuração do cliente DoubleZero
Siga as instruções de configuração para instalar e configurar o cliente DoubleZero. Mantenha o cliente atualizado:
sudo apt update && sudo apt install doublezero
Comprar um feed
Com o doublezerod em execução, identifique o dispositivo de menor latência antes de comprar:
doublezero latency
Compre em https://doublezero.xyz/edge/subscribe.
Configurar o firewall
Permita GRE, BGP, PIM e o tráfego do feed Binance. Ambos os feeds publicam dados de mercado na porta UDP 30001 e dados de referência na 30002; eles são diferenciados pelo grupo multicast, não pela porta. Veja Endereços dos Feeds.
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
O UFW não possui protocolo pim. O PIM de saída é permitido pela política de saída padrão do UFW; se você negar tráfego de saída, adicione uma regra raw para PIM em /etc/ufw/before.rules.
Inscrever-se
Junte-se a cada feed que você comprou (cliente v0.35.0 ou posterior):
doublezero connect multicast
Inscrever-se por código de grupo com --subscribe falha em um passe comprado.
Espere ✅ User Provisioned. Aguarde cerca de 60 segundos, depois:
doublezero status
Espere BGP Session Up na rede DoubleZero correta.
doublezero user list --client-ip <your ip>
Seus feeds aparecem na coluna groups. Inspecione os IPs do grupo com:
doublezero multicast group list
Decodificar o wire por conta própria
A versão do schema é 3 — descarte datagramas cuja versão seu decodificador não implementa. Layouts autoritativos: edge-feed-spec, incluindo top-of-book/spec.md, o Registro de Source IDs e o GLOSSÁRIO.
Cada datagrama começa com um cabeçalho de datagrama de 24 bytes, seguido por uma ou mais mensagens de aplicação empacotadas até o MTU. Os datagramas são little-endian e de layout fixo.
| Campo | Notas |
|---|---|
| Magic | u16 no offset 0: 0x445A. Valide-o. |
| Versão do schema | 3 |
| Channel ID | Spot usa o canal 1, USD-M o canal 0 |
| Sequence | Monotônico por endereço IP de origem, Channel ID e porta de destino — cada porta tem sua própria série. Use para detecção de lacunas. |
| Send timestamp | Nanossegundos desde a época Unix |
| Message count | Mensagens empacotadas neste datagrama |
| Reset count | Qualquer alteração (incluindo o wrap 255 → 0) é um reset; descarte o estado do canal daquele publicador. |
| Datagram length | Total de bytes |
Mensagens de aplicação
| Tipo | ID | Tamanho | Porta | Contém |
|---|---|---|---|---|
| Heartbeat | 0x01 |
16 B | market | Liveness enquanto o mercado está quieto |
| InstrumentDefinition | 0x02 |
130 B | reference | Símbolo, expoentes, tick e lote, expiração |
| Quote | 0x03 |
60 B | market | Melhor bid e ask, preço e tamanho, flags de atualização |
| Trade | 0x04 |
52 B | market | Preço, tamanho, lado agressor, trade ID |
| EndOfSession | 0x06 |
12 B | market | Encerramento limpo |
| ManifestSummary | 0x07 |
24 B | reference | Flag de validade, contador de alteração de Manifest Seq, contagem de instrumentos, timestamp |
O Source ID é a chave do motor. Ambos os feeds usam o código de venue BINANCE, mas cada motor tem seu próprio Source ID no registro edge-feed-spec: 8 Binance Spot, 6 Binance USD-Margined Futures. Os motores listam símbolos sobrepostos (BTCUSDT é tanto um par spot quanto um perpétuo USD-M), e cada motor atribui instrument IDs de forma independente, então o mesmo instrument ID pode aparecer em ambos os feeds para instrumentos diferentes. Indexe instrumentos e livros por (Source ID, instrument ID), nunca apenas pelo símbolo ou instrument ID. Leia price_exponent e qty_exponent de cada InstrumentDefinition — não os codifique fixamente. O expoente é a precisão do preço, não o tick: o incremento negociável é tick_size × 10^price_exponent.
A entrega é UDP fire-and-forget sem retransmissão, e a porta de dados de referência não repara dados de mercado: ela apenas repete InstrumentDefinition (pelo menos uma vez a cada 30 s em ambos os feeds) e ManifestSummary (pelo menos uma vez a cada 1 s no USD-M, a cada 5 s no Spot). Uma Quote perdida permanece perdida até que o melhor bid ou ask daquele instrumento mude. Deduplique trades por (Source ID, instrument ID, trade ID), nunca por trade ID sozinho.
A Binance consolida as atualizações de melhor bid e ask antes que cheguem ao feed: sob carga, uma atualização superada de um símbolo é descartada em favor da mais recente. Menos quotes do que alterações no livro é comportamento normal do venue, não perda — use o número de sequência do datagrama para detectar perdas.
Detalhes dos dados de referência que diferem do que um decodificador poderia supor:
- Timestamps.
QuoteeTradedo USD-M carregam o horário do motor de matching, com precisão de milissegundos.Quotedo Spot carrega o horário de envio do gateway eTradedo Spot o horário de execução, ambos com precisão de microssegundos. Todos são expressos em nanossegundos no wire. Leg1tem 8 bytes. Ativos base mais longos (por exemplo1000FLOKIouBROCCOLI714) são truncados; o nome completo está sempre emSymbol.- Nem todo símbolo é ASCII. Alguns perpétuos USD-M têm nomes em chinês, e seus
SymboleLeg1carregam bytes UTF-8. Não presuma ASCII ao decodificar esses campos. Expiryé0em todos os instrumentos USD-M, já que todos são perpétuos.Bid Source CounteAsk Source Countsão sempre0. A Binance não publica contagens de ordens no topo do livro.- O USD-M exclui ordens Retail Price Improvement (RPI) do melhor bid e ask, então pode diferir de um snapshot de profundidade que as inclua.
Endereços dos Feeds
| Código do grupo | Motor | Source ID | Channel ID | Grupo multicast | Dados de mercado | Dados de referência |
|---|---|---|---|---|---|---|
edge-binance-spot-tob |
Spot | 8 |
1 |
233.84.178.31 |
30001 |
30002 |
edge-binance-usdsm-tob |
Perpétuos USD-M | 6 |
0 |
233.84.178.23 |
30001 |
30002 |
doublezero status e multicast group list mostram o código do grupo.
O grupo seleciona o feed; a porta seleciona dados de mercado ou dados de referência dentro dele. A replicação multicast acontece por endereço IP de origem e grupo, e o fabric nunca inspeciona a porta UDP, então juntar-se a um grupo entrega tudo naquele grupo através do seu túnel DoubleZero. A porta é um filtro de socket aplicado no seu próprio host após os bytes chegarem. Como os feeds compartilham portas, um socket vinculado à 30001 em um host que se juntou aos dois grupos Binance recebe ambos; filtre pelo grupo de destino ou pelo Source ID.
Solução de Problemas
Se você encontrar um problema não coberto aqui, entre em contato pelo seu canal existente antes de contorná-lo. Se você não tem um canal, veja Suporte.
Certifique-se de que seu cliente está atualizado
Execute: sudo apt update && sudo apt install doublezero
Nenhum datagrama chegando
- Confirme que o feed foi adquirido em https://doublezero.xyz/edge/subscribe. Um feed não adquirido não entrega tráfego.
- Confirme que o BGP está ativo:
doublezero statusdeve mostrarBGP Session Upna rede DoubleZero correta. - Confirme que a assinatura está ativa:
doublezero user list --client-ip <your ip>deve listar o feed emgroups. - Confirme que o grupo está vinculado na interface correta. O multicast chega em
doublezero1, não emdoublezero0. - Confirme que o firewall permite as portas UDP
30001–30002de entrada emdoublezero1.
Dois motores misturados
Spot e USD-M listam símbolos como BTCUSDT, atribuem instrument IDs de forma independente e compartilham portas. Um decodificador que indexa livros apenas pelo símbolo ou instrument ID, ou que vincula um único socket para todos os grupos sem verificar o grupo de destino, mescla dois instrumentos diferentes em um só livro. Indexe pelo Source ID (ou pelo grupo de destino) além do instrument ID.
Lacunas de sequência
Rastreie a sequência por endereço IP de origem, Channel ID e porta de destino; um decodificador indexado apenas por Channel ID verá lacunas falsas. Uma lacuna real significa datagramas perdidos. Não há reparo: a quote de um instrumento volta a ser atual quando seu melhor bid ou ask mudar novamente.
Alterações no reset count
Qualquer alteração no reset count significa que aquele publicador reiniciou ou fez re-seed do canal. Descarte o estado para aquele endereço IP de origem e canal, e colete as definições da porta de dados de referência novamente.
Túnel não subindo
- Edge Connect: execute o status no contêiner —
docker exec doublezero-edge-connect doublezero status. Odoublezero statusdo host frequentemente falha enquanto o feed está funcionando (o contêiner possui o daemon). Confirme que odoublezeroddo host está parado. - Nativo: verifique se o daemon do host está em execução:
sudo systemctl status doublezerod - Verifique se as regras de firewall estão configuradas (GRE, BGP, PIM e as portas do feed em
doublezero1) - Verifique o status da conexão do mesmo local de onde você se conectou (contêiner ou host) — espere
BGP Session Upna rede DoubleZero correta
O IP do cliente é descoberto automaticamente a partir do IP público do seu host. Verifique se ele corresponde ao IP que você usou ao adquirir o feed.
Design de referência para pesquisa
Opcional. Se você já tem um túnel DoubleZero e assinatura no host e quer gravar e visualizar dados do feed, o design de referência para pesquisa executa multicast → parser → topofbook-bot → ClickHouse → Grafana com Docker Compose:
github.com/malbeclabs/edge-multicast-ref/tree/main/demo
Isso aponta o demo para Binance Spot. Para outro feed, use seu grupo de Endereços dos Feeds:
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
O Grafana normalmente está em http://localhost:3000 no host. Detalhes e dashboards: o README do demo.
Isso visualiza dados que você já está recebendo. Não substitui a compra do feed, a assinatura ou qualquer um dos caminhos de conexão acima.