> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# IntentionKernel

> A camada de execução: um conjunto fechado de instruções de operações financeiras, executado como uma sequência fixa de fases sobre um bloco confirmado pelo consenso.

O IntentionKernel é onde um bloco confirmado se torna estado de negociação. Não é uma máquina virtual de uso geral que executa programas arbitrários — o seu conjunto de instruções é o conjunto enumerado de operações financeiras de que uma plataforma de derivados precisa, e cada uma delas tem um efeito definido que o protocolo compreende.

É essa distinção que permite à rede afirmar seja o que for sobre negociação. Uma cadeia de uso geral consegue dizer que uma transação foi assinada e não abortou. Não consegue dizer que a transação era o cancelamento de uma ordem específica numa posição específica do livro, porque o significado da chamada lhe é opaco. Aqui, o significado é a instrução.

<h2 id="closed-world-execution">
  Execução em mundo fechado
</h2>

Fechar o conjunto de instruções é apenas uma instância de um gesto que o kernel faz quatro vezes. De cada vez, o espaço do que pode acontecer é enumerado à cabeça, e o que fica de fora é recusado em vez de tratado.

<div className="dg" data-dg="kernel-closure">
  <div className="dg-c" style={{aspectRatio:"720 / 384"}}>
    <svg className="dg-w" viewBox="0 0 720 384" aria-hidden="true" />

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"7.8125%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">Operações</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"7.8125%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">Uma carga que não pertence ao conjunto enumerado — recusada na validação, não em tempo de execução</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"7.8125%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--blue">O que foi realmente pedido</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"28.1250%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">Verdade</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"28.1250%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">Tratar o conjunto de trabalho do bloco como autoritativo. É um diário; a fonte é o estado do motor</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"28.1250%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--sky">O que é verdade neste momento</span></div>
    <div className="dg-b dg--yellow" style={{left:"0.0000%",top:"48.4375%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">Entradas</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"48.4375%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">Tudo o que pode diferir entre duas máquinas: relógio, entropia, vírgula flutuante, ordem de hash</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"48.4375%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--yellow">Se outro nó obtém os mesmos bytes</span></div>
    <div className="dg-b dg--green" style={{left:"0.0000%",top:"68.7500%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">Causalidade</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"68.7500%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">Uma alteração de estado sem dono. Os efeitos que não pertencem a nenhuma transação passam por um canal de sistema, não por uma exceção</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"68.7500%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--green">Porque aconteceu esta alteração em concreto</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"20.8333%"}}><div className="dg-n">Fechado</div></div>
    <div className="dg-free" style={{left:"22.5000%",top:"0.0000%",width:"41.6667%"}}><div className="dg-n">Recusado</div></div>
    <div className="dg-free" style={{left:"65.8333%",top:"0.0000%",width:"34.1667%"}}><div className="dg-n">Assim o ledger consegue responder</div></div>
    <div className="dg-free" style={{left:"0.0000%",top:"89.0625%",width:"100.0000%"}}><div className="dg-n">Quatro fechos, um só gesto: enumerar o espaço à cabeça e recusar o que fica de fora.</div></div>
  </div>
</div>

Não são quatro virtudes independentes. Cada uma sustenta a seguinte: fechar as operações é o que torna recuperável o *significado* de uma instrução; um único estado autoritativo é o que dá sentido à palavra «resultado»; fechar as entradas é o que torna esse resultado reproduzível fora desta máquina; e fechar a causalidade é o que permite recuar de um resultado até ao pedido que o produziu. Retire uma e a cadeia de responsabilização parte-se nesse elo.

O que as quatro compram em conjunto merece um nome, porque os locais tradicionais compram a mesma coisa muito mais caro. A trilha de auditoria de uma bolsa é montada **ao lado** do sistema de negociação e depois reportada a jusante — é por isso que pode divergir do sistema, é por isso que a reconciliação é um trabalho permanente, e é por isso que a sincronização de relógios entre locais é uma exigência regulatória e não um detalhe de implementação. Aqui não há um segundo registo com que reconciliar. A trilha de auditoria é a execução.

O resto desta página são esses quatro fechos em detalhe.

<h2 id="the-instruction-set">
  O conjunto de instruções
</h2>

Tudo o que um participante ou um validador pode fazer é uma de um conjunto fixo de operações tipadas:

| Grupo                        | Operações                                                                                                                                                                                 |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Ordens**                   | Colocar, cancelar, substituir e alterar — nas formas limitada, de mercado e condicional, com validade da ordem, reduce-only (apenas redução) e estruturas take-profit / stop-loss ligadas |
| **Configuração de conta**    | Criação de subcontas, seleção de alavancagem, modo de margem, modo de posição                                                                                                             |
| **Transferências**           | Entre subcontas, entre contas e para dentro e para fora através da [ponte](/pt/protocol/architecture/bridge)                                                                              |
| **Autorização de agente**    | Autorizar e revogar um agente que negoceia em nome de uma conta                                                                                                                           |
| **Operações de vault**       | Criação, depósitos, levantamentos, configuração                                                                                                                                           |
| **Configuração do sistema**  | Listagem de mercados, configuração de comissões, escalões de alavancagem, parâmetros de risco — autorizados pela governação                                                               |
| **Emitidas por validadores** | Atualizações de preços certificados e reconfiguração                                                                                                                                      |

Uma transação cujo payload não pertença a este conjunto é rejeitada na validação. O conjunto só muda por atualização do protocolo, nunca por se instalar algo novo.

<h2 id="executing-a-block">
  Executar um bloco
</h2>

A execução é uma sequência fixa de fases. A ordem não é um detalhe de implementação — é o que determina se uma liquidação forçada vê o preço que a ativou e se um cancelamento chega antes de uma ordem agressora que entra.

<div className="dg" data-dg="kernel-stages">
  <div className="dg-c" style={{aspectRatio:"720 / 434"}}>
    <svg className="dg-w" viewBox="0 0 720 434" aria-hidden="true">
      <path className="dg-wire" d="M 150.00 69.33 L 150.00 80.93" />

      <path className="dg-head" d="M 150.00 87.33 L 145.60 80.93 L 154.40 80.93 Z" />

      <path className="dg-wire" d="M 150.00 130.67 L 150.00 142.27" />

      <path className="dg-head" d="M 150.00 148.67 L 145.60 142.27 L 154.40 142.27 Z" />

      <path className="dg-wire" d="M 150.00 192.00 L 150.00 203.60" />

      <path className="dg-head" d="M 150.00 210.00 L 145.60 203.60 L 154.40 203.60 Z" />

      <path className="dg-wire" d="M 150.00 253.33 L 150.00 264.93" />

      <path className="dg-head" d="M 150.00 271.33 L 145.60 264.93 L 154.40 264.93 Z" />

      <path className="dg-wire" d="M 150.00 314.67 L 150.00 326.27" />

      <path className="dg-head" d="M 150.00 332.67 L 145.60 326.27 L 154.40 326.27 Z" />
    </svg>

    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"6.9124%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">Preço</span><span className="dg-s">fixar as marcações do bloco</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"21.0445%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">Carga</span><span className="dg-s">ingerir as contas e ordens do bloco</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"35.1767%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">Funding</span><span className="dg-s">acertar o funding</span></div>
    <div className="dg-b dg--orange" style={{left:"0.0000%",top:"49.3088%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">Risco</span><span className="dg-s">desalavancagem de vaults → liquidação → ADL</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"63.4409%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">Matching</span><span className="dg-s">pré → matching → pós</span></div>
    <div className="dg-b dg--green" style={{left:"0.0000%",top:"77.5730%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">Finalizar</span><span className="dg-s">recolher saídas, eliminar estado morto</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"6.9124%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">As fases seguintes raciocinam sobre um preço por instrumento, não um em movimento</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"35.1767%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">Acertado sobre as posições como carregadas, não como acabam</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"49.3088%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">O fluxo forçado resolve-se antes de se admitir novo fluxo discricionário</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"63.4409%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">Correr depois do Risco impede o front-running de uma liquidação por uma ordem do mesmo bloco</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"77.5730%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">Posições zeradas e contas esvaziadas não persistem</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"41.6667%"}}><div className="dg-n">Um bloco, seis fases</div></div>
    <div className="dg-free" style={{left:"45.8333%",top:"0.0000%",width:"54.1667%"}}><div className="dg-n">O que a posição determina</div></div>
    <div className="dg-free" style={{left:"0.0000%",top:"89.4009%",width:"100.0000%"}}><div className="dg-n">As ordens condicionais são varridas dentro desta sequência: uma ativação pelas marcações deste bloco produz efeito neste bloco e não no seguinte.</div></div>
  </div>
</div>

**Preço** corre primeiro e fixa as marcações que o resto do bloco vai usar, para que todas as fases seguintes raciocinem sobre um preço por instrumento e não sobre um preço em movimento. **Carga** ingere as contas e as ordens do bloco. **Funding** acerta o funding sobre as posições tal como foram carregadas. **Risco** corre três fases por ordem — desalavancagem de vaults, depois liquidação forçada, depois desalavancagem automática — para que o fluxo forçado fique resolvido antes de se admitir novo fluxo discricionário. **Matching** corre depois as suas próprias três fases, produzindo execuções. **Finalizar** recolhe o que mudou e elimina o estado que já não precisa de existir, como posições zeradas e contas esvaziadas.

As ordens condicionais são varridas e avançam no seu ciclo de vida dentro desta sequência, pelo que uma ativação despoletada pelas marcações deste bloco produz efeito neste bloco e não no seguinte.

<Note>
  O facto de a liquidação correr antes do matching é a razão pela qual não é possível fazer front-running a uma liquidação com uma ordem do mesmo bloco. O fluxo de liquidação já está resolvido quando as ordens discricionárias são cruzadas.
</Note>

<h2 id="two-kinds-of-state">
  Dois tipos de estado
</h2>

O kernel mantém uma separação estrita entre o que persiste e o que é rascunho.

<div className="dg" data-dg="kernel-state">
  <div className="dg-c" style={{aspectRatio:"720 / 300"}}>
    <svg className="dg-w" viewBox="0 0 720 300" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 195.00 104.00 L 254.60 104.00" />

      <path className="dg-head dg--blue" d="M 261.00 104.00 L 254.60 108.40 L 254.60 99.60 Z" />

      <path className="dg-wire dg--yellow" d="M 261.00 152.00 L 201.40 152.00" />

      <path className="dg-head dg--yellow" d="M 195.00 152.00 L 201.40 147.60 L 201.40 156.40 Z" />

      <path className="dg-wire dg--green" d="M 449.00 128.00 L 498.60 128.00" />

      <path className="dg-head dg--green" d="M 505.00 128.00 L 498.60 132.40 L 498.60 123.60 Z" />

      <path className="dg-wire dg--green dg-dash" d="M 615.00 177.00 L 615.00 232.00 L 95.00 232.00 L 95.00 183.40" />

      <path className="dg-head dg--green" d="M 95.00 177.00 L 99.40 183.40 L 90.60 183.40 Z" />
    </svg>

    <div className="dg-band" style={{left:"34.7222%",top:"18.6667%",width:"29.1667%",height:"46.6667%"}}><span className="dg-cap">enquanto o bloco executa</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"26.6667%",width:"26.3889%",height:"30.6667%"}}><span className="dg-t">Estado do motor</span><span className="dg-s">mercados · contas · livros · posições · câmara de compensação</span><span className="dg-n">persiste entre blocos</span></div>
    <div className="dg-b dg--yellow dg-dashed" style={{left:"36.9444%",top:"26.6667%",width:"24.7222%",height:"30.6667%"}}><span className="dg-t">Conjunto de trabalho</span><span className="dg-s">marcações · contas tocadas · execuções · resultados</span><span className="dg-n">dura apenas um bloco</span></div>
    <div className="dg-b dg--green" style={{left:"70.8333%",top:"26.6667%",width:"29.1667%",height:"30.6667%"}}><span className="dg-t">Estado confirmado da cadeia</span><span className="dg-s">versionado · autenticado</span><span className="dg-n">a autoridade</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"87.3333%",width:"100.0000%"}}><div className="dg-n">É fácil confundir o registo de alterações com autoridade. O que mudou num bloco constrói saída determinista — não é onde o estado vive.</div></div>
    <div className="dg-lbl" style={{left:"49.3056%",top:"77.3333%"}}>autoridade de onde o motor é reconstruído</div>
    <div className="dg-lbl" style={{left:"31.6667%",top:"30.0000%"}}>ler</div>
    <div className="dg-lbl" style={{left:"31.6667%",top:"55.3333%"}}>aplicar</div>
    <div className="dg-lbl" style={{left:"66.2500%",top:"37.3333%"}}>materializar</div>
  </div>
</div>

O **estado do motor** vive de bloco para bloco: metadados de mercado, contas, livros de ordens, estado dos instrumentos, estado da câmara de compensação. É a resposta a «o que é verdade neste momento».

O **conjunto de trabalho por bloco** existe apenas enquanto um bloco executa: as entradas do bloco, as marcações fixadas no início, as contas e ordens tocadas e as saídas em construção. É um diário, não uma fonte de verdade.

A distinção importa porque é fácil confundir o registo de alterações com autoridade. O que mudou durante um bloco serve para construir saída determinista — não é onde o estado vive. Inverter isto produz um sistema em que a resposta depende da forma como a pergunta foi feita.

<h2 id="why-the-result-is-reproducible">
  Porque o resultado é reproduzível
</h2>

Aqui o determinismo é imposto, não esperado. Todos os nós honestos que executem o mesmo bloco sobre o mesmo estado anterior produzem o mesmo resultado byte a byte, porque nada no caminho de execução pode ler o que quer que seja que difira entre nós:

* **Aritmética de vírgula fixa em todo o lado.** O cálculo da liquidação financeira corre em vírgula fixa inteira com semântica de arredondamento explícita — por excesso em expoentes negativos na margem, por defeito e por excesso nas comissões. Não há vírgula flutuante no caminho da liquidação financeira, porque uma diferença de arredondamento entre duas máquinas é um fork.
* **Sem relógio de parede.** A ordenação dentro de um bloco usa a posição canónica confirmada pelo consenso e a data/hora do bloco, nunca a hora local.
* **Sem aleatoriedade em tempo de execução.** Tudo o que precise de aleatoriedade deriva-a de forma determinista do estado da cadeia.
* **Iteração determinista.** Qualquer coleção cuja ordem de iteração seja observável na saída é ordenada, não aleatorizada por hash.

Vale a pena nomear uma consequência: como o «tempo» dentro de um bloco é a posição intrabloco confirmada, não existe qualquer vantagem de colocalização ao nível do submilissegundo *dentro* de um bloco. Combinado com a ordem de prioridades — que corre os cancelamentos antes das colocações agressivas — isto é uma defesa estrutural contra o risco de uma cotação colocada no livro ser apanhada por uma ordem que chegou no mesmo bloco.

<h2 id="risk-formulas-are-pure">
  As fórmulas de risco são puras
</h2>

As fórmulas que decidem requisitos de margem, preços de liquidação, seleção para desalavancagem, comissões e limites de open interest (posições em aberto) são implementadas como **funções puras e sem estado**. Recebem valores e devolvem valores; não leem nem alteram o estado do ledger.

As alterações de estado são conduzidas exclusivamente pela [câmara de compensação](/pt/protocol/architecture/clearinghouse), que chama essas funções e aplica os resultados. Os módulos que detêm estado — contas, posições, livros de ordens — armazenam dados e expõem mutadores, mas não conduzem eles próprios o fluxo de negócio.

Esta fronteira é deliberada. Significa que um cálculo de margem pode ser verificado isoladamente contra uma tabela de entradas e saídas, e significa que existe exatamente um caminho de código pelo qual o saldo de alguém pode mudar.

<h2 id="output">
  Saída
</h2>

A execução produz escritas de estado e eventos, cada um ligado à transação que o causou, mais um canal para efeitos ao nível do sistema que não pertencem a nenhuma transação de utilizador — funding, movimentos do fundo de seguro, contadores de bloco. Estes tornam-se as saídas de transação que a [camada de estado](/pt/protocol/architecture/state/model) confirma e o [indexador](/pt/protocol/architecture/indexer) serve.

Nada do que acontece dentro do kernel é invisível a jusante. Se alterou estado, está na saída de alguém ou no canal do sistema.

<h2 id="where-to-go-next">
  Para onde ir a seguir
</h2>

<CardGroup cols={2}>
  <Card title="Matching" href="/pt/protocol/architecture/matching">
    O livro de ordens, a prioridade preço-tempo e como se resolvem a validade da ordem e a prevenção de autonegociação.
  </Card>

  <Card title="Câmara de compensação" href="/pt/protocol/architecture/clearinghouse">
    O único caminho pelo qual saldos, posições e margem mudam.
  </Card>

  <Card title="Modelo de estado" href="/pt/protocol/architecture/state/model">
    Em que se torna a saída do kernel depois de confirmada.
  </Card>

  <Card title="IntentionBFT" href="/pt/protocol/architecture/intention-bft">
    De onde vieram a ordenação e os preços.
  </Card>
</CardGroup>
