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.
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
- Um cliente submete uma transação assinada por JSON-RPC padrão.
- 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.
- 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.
- A execução é imediata. O recibo existe antes de o bloco EVM que o contém ser selado.
- 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.