Skip to main content
A cadeia confirma blocos. As aplicações fazem perguntas como quais foram as execuções desta conta na semana passada e que aspeto tem o livro neste momento — perguntas a que um registo com forma de bloco responde mal. O indexador é o que converte uma coisa na outra. Na maioria das cadeias, o indexador é crítico para a infraestrutura: a cadeia emite eventos opacos e terceiros reconstroem o significado a partir deles, pelo que aquilo em que uma aplicação acredita depende do indexador em que confia. Aqui o passo de reconstrução não existe. O kernel emite saída tipada e atribuída — cada alteração de estado já ligada à transação que a causou — pelo que o indexador remodela os dados em vez de os inferir. Isso muda aquilo para que o indexador serve. É uma camada de serviço, não uma fonte de verdade. Tudo o que reporta pode ser verificado contra a cadeia, e uma divergência é um bug do indexador e não uma questão em aberto.

O caminho

divisão por idade
Nó completoblocos confirmados, em registos tipados
Cacherecentes — da memória
Ficheiroshistóricos — duráveis
Serviço de dadosapresenta ambos num só stream
Gateway → REST · WebSocketacesso, quotas, rotas
Porque a divisão existeSeguir a cabeça é sensível à latência e leve; as consultas históricas são sensíveis ao débito e pesadas. Um preenchimento num caminho partilhado bloquearia o feed em direto.
Camada de serviço, não fonte de verdadeO kernel emite saída tipada e atribuída, pelo que o indexador remodela em vez de inferir. Uma divergência com a cadeia é um bug do indexador.
Um nó completo é a origem. Os registos de negociação saem dele em streaming como dados tipados, e não como transações em bruto que exigem interpretação. A cache e o armazenamento em ficheiros dividem o stream por idade. Os dados recentes são servidos a partir de memória, porque é o que a maioria dos consumidores quer e a latência conta. Os dados históricos são escritos em armazenamento de ficheiros durável, porque manter tudo em memória não é uma estratégia. Um consumidor que peça algo antigo e um consumidor que siga a cabeça da cadeia são servidos a partir de sítios diferentes sem que nenhum dê por isso. O serviço de dados apresenta ambos como um único stream. Um cliente pede um intervalo com início em qualquer ponto; se esse intervalo é servido a partir da cache, dos ficheiros ou de ambos não é problema do cliente. O gateway trata das preocupações que ficam entre um serviço e a internet pública: acesso, quotas e encaminhamento. As superfícies REST e WebSocket são o que as aplicações realmente usam — dados de mercado, histórico de ordens e de execuções, posições, estado da conta, pagamentos de funding e subscrições em tempo real. Ver a referência da API para o detalhe ao nível dos endpoints.

Porque a divisão existe

Um único serviço que seguisse a cabeça da cadeia e ao mesmo tempo respondesse a consultas históricas não faria bem nenhuma das duas coisas. Seguir a cabeça é sensível à latência e leve; as consultas históricas são sensíveis ao débito e pesadas, e um único preenchimento histórico grande bloquearia o caminho em tempo real. Separá-los significa que preencher o histórico de um novo consumidor desde há meses não degrada o feed de um market maker que segue a cabeça, e que os dois podem ser escalados de forma independente — o que precisam de ser, porque os seus perfis de carga não têm nada em comum.

Em que é seguro confiar

Seguro. Tudo o que o indexador serve e que deriva de blocos confirmados: execuções, ordens, posições, pagamentos de funding, transferências, dados de mercado. Isto é remodelado a partir da saída da cadeia. Não é a mesma coisa. Tudo o que ainda não foi confirmado. Uma ordem aceite no mempool não foi ordenada, e o indexador não tem nada a dizer sobre ela. A ausência do indexador significa ainda-não-confirmada, não rejeitada. Verificável. Se uma resposta for suficientemente importante — um litígio de liquidação financeira, uma auditoria, uma reconciliação contabilística — pode ser verificada diretamente contra a cadeia em vez de ser aceite do indexador. Operar um nó completo próprio é a forma mais forte de o fazer, e é o que deve fazer quem não pode correr o risco de estar errado. Ver Operar um nó.
Dois consumidores que leiam o mesmo intervalo confirmado devem obter a mesma resposta. Se não obtiverem, a discrepância está no caminho de serviço e é um bug a reportar — não uma propriedade inerente a ler uma cadeia através de um indexador.

Para onde ir a seguir

Modelo de estado

O que o indexador está a ler e qual é a representação que vale.

Programadores

Superfícies REST e WebSocket, SDKs e ferramentas.

Operar um nó

Verificar diretamente contra a cadeia, e porque o conjunto é fechado.

Serviços de programa

O que consome este stream para calcular estado de conta derivado.