Custo de transporte e saldo de reserva
Motivação
Adiar a execução é incrivelmente poderoso, pois permite que a execução e o consenso ocorram em paralelo, expandindo enormemente o orçamento de tempo para execução.
Uma objeção óbvia é: agora que os nós de consenso não têm uma visão atualizada do estado, o que os impede de incluir erroneamente transações de contas que gastaram todo o seu gás? Isso criaria um vetor de negação de serviço.
Para se defender contra isso, a Monad introduz um custo para uma transação a ser transportada pela rede (o "custo de transporte"), mantém um saldo de reserva para cada conta que é atualizado no momento do consenso e cobra os custos de transporte contra o saldo de reserva.
Custo de transporte
No Monad, há uma cobrança para que uma transação seja transportada pela rede em um bloco (o “custo de transporte”). Este é um encargo separado do custo de execução.
O custo de transporte é necessário para prevenção de spam; o custo é mínimo, mas reflete o custo de utilização dos recursos da rede.
É possível que uma transação seja incluída no consenso (e cobrada pelo transporte), mas tenha um orçamento de execução insuficiente em relação ao limite de gás especificado. Nesse caso, no momento da execução, a transação falhará, mas será cobrada gás até o ponto de falha. Observe que isso não é diferente do Ethereum: as transações enviadas com Ether insuficiente em suas contas consumirão Ether e falharão. Carregar o gás até o ponto de falha é necessário para evitar a execução de vetores DOS.
Saldo de reserva
Para cada endereço, os nós mantêm dois saldos:
um saldo de reserva, usado para pagar o custo de transporte
o saldo de execução, usado para pagar pela execução da transação
O custo de transporte é debitado ao saldo de reserva quando a operação é incluída em bloco (consenso); é deduzido do saldo de execução no momento da execução (cobrança dupla) e reembolsado ao saldo de reserva após Ddecorrido o período de atraso dos blocos (10 segundos).
A reserva é efetivamente um orçamento para pedidos “em andamento”; existe para garantir que apenas as transações pagas sejam incluídas nos blocos. Você pode pensar no saldo das reservas como uma diminuição em tempo real (ou seja, à medida que ocorre o consenso); embora a visão do nó sobre o estado completo seja desfasada, o saldo das reservas reflecte sempre despesas actualizadas.
Saldo de reserva alvo
O saldo de reserva alvo é um parâmetro por conta. Prevê-se que o padrão seja um grande múltiplo (200x) do custo de transporte, para que os usuários possam enviar um grande número de pedidos durante o voo sem problemas.
Os usuários que antecipam o envio de um grande número de pedidos a bordo do mesmo EOA podem alterar o saldo de reserva alvo interagindo com um contrato inteligente consagrado. As alterações no saldo de reservas são tratadas como execuções, ou seja, só são refletidas no saldo de reservas após decorrido o período de atraso.
Last updated