Para todos / Como funciona

O trajeto de uma transação

Da sua carteira até a Ethereum em cinco passos, a maioria mais rápida do que você consegue ver. Esta página é a máquina; a página das confirmações é o que cada passo promete.

O trajeto

Você assina algo na sua carteira e envia. Isso chega a um computador, o sequenciador, que anota para que não se perca, faz o trabalho na hora e sabe a resposta antes de você soltar o botão. Muitas vezes por segundo o sequenciador agrupa as respostas que acabou de produzir, assina o pacote e o publica. Um pouco menos frequentemente, ele envolve esses pacotes num bloco que se parece exatamente com um bloco da Ethereum, que é o que a sua carteira e o explorador lhe mostram.

Depois, separadamente, ele anota tudo o que estava naquele bloco e envia uma impressão digital da lista para a Ethereum. Qualquer pessoa pode pegar a lista, reproduzi-la por conta própria e verificar que chega à mesma resposta. Esse último passo é o que faz da Pickle uma parte da Ethereum, e não só um computador rápido que diz que é.

1. Você envia. Sua carteira assina a transação e a submete por JSON-RPC padrão ao sequenciador, o único processo que roda a cadeia.

2. Ela é admitida e tornada durável. O sequenciador recupera o signatário, coloca a transação numa fila limitada e a anexa a um log com soma de verificação em disco antes de executá-la, para que uma transação reconhecida sobreviva a uma queda.

3. Ela executa de imediato. Um único coordenador confirma as transações na ordem de admissão. O recibo existe antes de qualquer bloco.

4. Ela é pré-confirmada, depois confirmada. A uma meta de agendamento de 10 milissegundos as transações do intervalo são seladas num minibloco assinado; a uma meta de agendamento de 250 milissegundos os miniblocos do intervalo são envolvidos num bloco EVM padrão com um número que toda ferramenta entende.

5. Ela é comprometida na Ethereum. Cada bloco selado produz uma carga com a sua lista completa de transações, armazenada numa camada de disponibilidade de dados, e um compromisso por meta de agendamento de 60 segundos é publicado num contrato de caixa de entrada na Ethereum. A partir disso, qualquer pessoa que rode uma réplica reexecuta cada transação e chega ao mesmo estado.

A camada RPC recupera o signatário e coloca a transação numa fila de admissão limitada com um teto por remetente; uma fila cheia devolve um erro em vez de crescer em memória sem limite. Toda transação aceita é anexada a um log de escrita antecipada com soma de verificação e tornada durável antes de executar, um fsync por lote. Um único coordenador de execução confirma na ordem de admissão e nunca executa o mesmo remetente concorrentemente, o que preserva a segurança do nonce sem uma etapa de reordenação de mempool. A execução é imediata, então o recibo existe antes de o bloco que o contém ser selado.

Um produtor sela um minibloco à meta de agendamento de 10 ms: as transações, recibos e logs do intervalo, um hash de diferença de estado, um timestamp em microssegundos e uma assinatura do sequenciador sobre o cabeçalho. Um segundo produtor sela um bloco EVM no formato Cancun à meta de agendamento de 250 ms envolvendo os miniblocos do intervalo; o timestamp do bloco seguinte é fixado quando o anterior é selado, então uma transação que lê o timestamp do bloco vê o valor com que o cabeçalho se compromete. Cada bloco selado emite uma carga de derivação, lista completa de transações, intervalo de blocos, hash do pai, hash do bloco e timestamp comprometido, para uma camada de disponibilidade de dados endereçada por conteúdo, e um envelope por meta de agendamento de 60 s é comprometido na caixa de entrada da L1, com calldata como alternativa.

Três desses passos carregam um número, e nenhum é uma promessa

Os valores de 10 milissegundos, 250 milissegundos e 60 segundos são, cada um, uma meta de agendamento, o intervalo que o sequenciador procura manter. Nenhum é uma garantia de latência e nenhum é uma afirmação de vazão.

O ciclo de vida, passo a passo

  1. Um cliente submete uma transação assinada por JSON-RPC padrão.
  2. A camada RPC recupera o signatário e coloca a transação numa fila de admissão limitada, com um teto por remetente. Uma fila cheia devolve um erro em vez de crescer em memória sem limite.
  3. Um único coordenador de execução confirma as transações na ordem de admissão. O mesmo remetente nunca é executado concorrentemente, o que preserva a segurança do nonce sem uma etapa de reordenação de mempool.
  4. A execução é imediata. O recibo existe antes de o bloco EVM que o contém ser selado.
  5. Toda transação aceita é anexada a um log de escrita antecipada com soma de verificação e tornada durável antes de executar, um fsync por lote, para que uma transação reconhecida sobreviva a uma queda.

Três maneiras de executar

O sequenciador não roda toda transação do mesmo jeito. Ele reconhece três formas e toma o caminho correto mais curto para cada uma:

  • Uma transferência simples de ETH toma um caminho nativo, sem sequer iniciar a máquina virtual.
  • A transferência ERC-20 canônica toma um caminho rápido que move o slot de saldo diretamente e emite o evento padrão, produzindo o mesmo resultado que a máquina completa produziria.
  • Todo o resto passa pela EVM geral, que é o revm fixado no hardfork Cancun.

Os três cobram gas padrão e dividem a taxa do mesmo jeito, então você não consegue dizer pela taxa qual caminho foi tomado, e não deveria precisar. Os caminhos rápidos existem porque a maior parte do tráfego de uma cadeia são os dois tipos mais simples de transação, e é ali que o tempo vai.

Por que é determinístico

Duas coisas que outras cadeias deixam ao operador são constantes de compilação aqui: o hardfork de execução e o preço mínimo do gas. Se fossem ajustáveis, qualquer uma permitiria a uma réplica rejeitar ou reprecificar uma transação que o sequenciador aceitou, e a derivação independente pararia. O mesmo raciocínio fixa o timestamp do bloco seguinte no selo anterior e faz do intervalo do minibloco um parâmetro de consenso em vez de um ajuste por operador: uma réplica precisa concordar sobre como o fluxo é cortado para reproduzir os mesmos hashes.

Por que é construído assim

A decisão incomum é executar antes de selar. Na maioria das cadeias uma transação espera o próximo bloco e é executada como parte da sua construção; aqui ela é executada na chegada e os blocos são montados depois a partir de resultados que já existem. É isso que torna o primeiro momento rápido, e é por isso que o minibloco existe como algo separado do bloco: o minibloco é o sequenciador colocando a sua assinatura sobre resultados que já calculou, enquanto o bloco comum chega no seu próprio ritmo atrás dele. O que cada momento garante está na página das confirmações, e onde o registro termina está na página da liquidação.