Ciclo de vida da transação no Monad

Envio de transação

O ciclo de vida de uma transação começa com um usuário preparando uma transação assinada e enviando-a para um node RPC.

As transações normalmente são preparadas por um frontend de aplicativo e depois apresentadas à carteira do usuário para assinatura. A maioria das carteiras faz uma eth_estimateGaschamada RPC para preencher o limite de gás para esta transação, embora o usuário também possa substituir isso em sua carteira. Normalmente, o usuário também é solicitado a escolher um preço de gás para a transação, que é um número de NativeTokens por unidade de gás.

Após o usuário aprovar a assinatura em sua carteira, a transação assinada é enviada a um node RPC usando a chamada de API eth_sendTransactionou eth_sendRawTransaction.

Digno de nota, no Monad, o limite de gás é a soma do gás de transporte e do gás de execução. O gás de transporte é uma constante.

Propagação de mempool

O node RPC encaminha a transação pendente para outros nós Monad que participam do consenso. O conjunto de transações pendentes é coloquialmente conhecido como 'mempool'. Consulte Mempool para obter detalhes adicionais sobre o comportamento do mempool.

Por motivos de prevenção de spam, os nós adicionam a transação ao seu mempool somente se houver gás suficiente no saldo de reserva.

Bloquear inclusão

MonadBFT usa um mecanismo de líder rotativo para produzir blocos. A cada rodada, um líder monta um bloco da lista de transações pendentes. Após escolher uma transação a ser incluída no bloco, o líder decrementa o saldo da reserva com o custo de transporte.

Os blocos são propagados pela rede conforme discutido em MonadBFT. O certificado de quorum (QC) para este bloco é propagado na rodada subsequente de consenso (ou seja, é enviado pelo próximo líder). Depois de ver o QC, os nós votantes enviam votos uns aos outros; quando um nó vê 2/3 do voto de peso da aposta sim, ele finaliza esse bloco.

Assim que o bloco for finalizado, a transação “ocorreu” oficialmente na história do blockchain. Como sua ordem é determinada, seu valor de verdade (isto é, se ela é bem-sucedida ou falha e qual é o resultado imediatamente após a execução) é determinado.

Execução local

Assim que um node finaliza um bloco, ele começa a executar as transações desse bloco. Por questões de eficiência, as transações são executadas de forma otimista em paralelo, mas é como se as transações fossem executadas em série, pois os resultados são sempre confirmados na ordem original.

Consultando o resultado

O usuário pode consultar o resultado da transação chamando eth_getTransactionByHashou eth_getTransactionReceiptem qualquer node RPC. O node RPC retornará assim que a execução for concluída localmente no node.

Last updated