Três representações
Estado do motormercados · contas · posições · livros · câmara de compensaçãopersiste entre blocos · uma reconstrução
Conjunto de trabalhomarcações · contas tocadas · execuções · resultadosdura um bloco · um diário
Estado da cadeiachave-valor versionado, autenticação Merklea autoridade
A falha que isto evitaUm motor cuja visão em memória se afastou do que foi confirmado continua a servir respostas, e todas elas estão erradas de uma forma que só aparece na liquidação financeira.
o estado do motor tem de ser derivável do registo confirmado, nunca o contrário
Chaves
O estado da cadeia é endereçado por chave. O estado de negociação está agrupado em espaços de nomes identificados e explicitamente versionados — por exemplo, a configuração de comissões, o índice de contratos perpétuos, a tabela de escalões de alavancagem, a lista de papéis administrativos. O sufixo de versão não é decoração. Quando a forma de uma configuração muda, ela passa para uma nova versão da sua chave, e a chave anterior é mantida para que o estado escrito sob o esquema antigo continue a poder ser lido durante a migração. Um leitor que fixe uma versão no código e nunca volte a verificar passa a ler, em silêncio, configuração desatualizada depois de uma migração; um leitor que resolva a chave atual não.É por isto que a configuração deve ser lida da cadeia e não fixada no código do cliente. O serviço de escalões de comissões lê a configuração de comissões em vigor em cada ciclo exatamente por esta razão — uma tabela de escalões embutida num cliente é uma tabela que mais cedo ou mais tarde vai divergir daquela que a rede está a aplicar.
Versões
Cada bloco confirmado faz avançar uma versão. Os valores de estado são guardados associados à versão em que foram escritos, o que significa que o armazenamento não é apenas «o estado atual», mas «o estado em qualquer versão». É esta propriedade que torna várias coisas possíveis ao mesmo tempo:- As provas podem ser produzidas contra uma versão específica, e não apenas contra o presente.
- A reexecução pode começar em qualquer versão, não só na génese.
- As leituras podem ser históricas — um indexador que reconstrói o histórico de uma posição está a pedir versões antigas, não a varrer um registo sequencial.
- A poda passa a ser uma decisão de política sobre até onde manter o passado, e não uma limitação estrutural.
O que acaba confirmado
A execução do kernel produz duas coisas por bloco. Cada transação transporta as suas próprias escritas e eventos, ligados a ela. Os efeitos que não pertencem a nenhuma transação de utilizador — fluxos de funding, movimentos do fundo de seguro, contadores ao nível do bloco — vão para um canal de sistema próprio. Entre os dois, nada se perde. Não existe nenhum efeito de execução dentro do kernel que esteja ausente tanto do resultado de uma transação como do canal de sistema. É esta completude que permite tratar o registo confirmado como a história inteira, e não como um resumo dela, e é a razão pela qual um evento pode ser rastreado até à transação que o causou, mesmo quando o matching correu em lote.Para onde ir a seguir
Armazenamento e provas
Como o estado confirmado é fisicamente guardado, autenticado e podado.
Sincronização de estado
Como um nó que nunca viu a cadeia a alcança.
IntentionKernel
Onde vivem o estado do motor e o conjunto de trabalho do bloco.
Indexador
Transformar o estado confirmado em algo consultável.