Em nossa série de postagens sobre a estimativa de gás do ERC-4337, começando com o funcionamento da estimativa de gás do ERC-4337, discutimos o passo 2 do "Fluxo de Operação do Usuário", eth_estimateUserOperationGas
, e suas complicações, incluindo o problema de transferência de token de gás e os desafios de estimar o gás da L2 (camada 2). Esta postagem irá focar no passo 3 do fluxo, detalhando como as taxas de gás são estimadas e cobradas.
Para o propósito desta postagem, presumiremos que estamos trabalhando com uma blockchain que suporta a EIP-1559. O entendimento da EIP-1559 é um pré-requisito para compreender os campos de taxa em uma operação do usuário.
Operações de usuário possuem os mesmos campos de taxa que as transações EIP-1559:
-
maxFeePerGas
: o montante máximo total que um usuário se dispõe a pagar (taxa base + taxa de prioridade) -
maxPriorityFeePerGas
: a taxa de prioridade máxima ou "gorjeta" que o usuário se dispõe a pagar.
O ponto de entrada usa a seguinte fórmula para calcular o preço do gás resultante desses dois campos:
uint256 maxFeePerGas = mUserOp.maxFeePerGas;
uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;
if (maxFeePerGas == maxPriorityFeePerGas) {
//modo legado (para redes que não suportam o opcode basefee)
return maxFeePerGas;
}
return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);
Como você pode ver, maxFeePerGas
age como um limite absoluto sobre o preço do gás, enquanto maxPriorityFeePerGas
age como uma gorjeta em cima da taxa base do bloco.
Transações Empacotadas
Quando os empacotadores enviam transações empacotadas para o ponto de entrada, elas também estão sujeitas a um preço de gás derivado das dinâmicas da EIP-1559. Os empacotadores definem um maxFeePerGas
e um maxPriorityFeePerGas
. O preço final do gás é calculado a partir destes valores e da taxa base do bloco em que a transação está incluída.
Os empacotadores enviam uma transação com um certo preço de gás e, em seguida, são compensados com um preço de gás potencialmente diferente definido por cada operação do usuário no pacote. Se o preço do gás da operação do usuário for mais alto, o empacotador lucra; caso contrário, o empacotador tem um prejuízo naquela operação do usuário. O maxPriorityFeePerGas
não é apenas uma gorjeta para o empacotador, mas também ajuda o empacotador a compensar pela gorjeta que teve que pagar ao construtor do bloco para que a transação empacotada fosse incluída (a menos que o empacotador seja o próprio construtor).
Como os empacotadores são financeiramente incentivados?
Empacotar pode ser uma tarefa cara, principalmente devido às simulações complexas necessárias para garantir a segurança do empacotador. Para permitir que os empacotadores recuperem esses custos de computação e incentivem um mercado saudável para operações de usuário (o que melhora a experiência do usuário ao reduzir o tempo até a inclusão), é necessário que haja incentivos financeiros para os empacotadores na forma de receita excedente.
Essa receita pode assumir várias formas: taxas de prioridade, MEV e acordos fora da cadeia.
Taxas de Prioridade
Empacotadores podem exigir que os remetentes incluam uma taxa de prioridade em suas operações que seja maior do que a taxa de prioridade que o empacotador pagou em sua transação. Remetentes que desejam melhorar suas chances de terem suas transações empacotadas durante períodos de alta congestionamento podem aumentar sua oferta de taxa de prioridade.
Receita MEV
Empacotadores podem extrair MEV (Valor Máximo Extraível) de operações no mempool, pois possuem direitos de ordenação no pacote. Eles estão livres para fazer operações de back-running e sanduíche para embolsar o lucro.
Fora da Cadeia
Empacotadores podem executar mempools privados (com recursos como proteção MEV) e fazer acordos fora da cadeia com remetentes de operações de usuário. As taxas seriam aplicadas por algum mecanismo fora da cadeia.
Para garantir uma rede saudável, argumentaríamos que (1) é uma opção obrigatória para a maioria das operações de usuário.
O MEV positivo não está disponível para ser extraído de todos os tipos de operações de usuário. Se confiarmos apenas nesse incentivo, empacotadores não pegarão a maioria das operações de usuário. Acordos fora da cadeia são centralizadores e muitos usuários vão querer evitar esse vetor. Isso deixa as Taxas de Prioridade.
O Rundler da Alchemy atualmente define uma taxa de prioridade dinâmica necessária para o empacotamento. Essa taxa é baseada nas taxas de rede estimadas atualmente. Se uma operação de usuário oferecer menos do que a taxa de rede estimada, mais uma pequena gorjeta para o empacotador, ela não será empacotada e ficará no mempool.
Quando a rede p2p surgir, isso parecerá mais com um mercado, semelhante ao de transações. Os remetentes podem analisar operações de usuário previamente mineradas para avaliar qual é o preço mínimo. Empacotadores podem fornecer dicas aos usuários com base no conteúdo atual do mempool. Os buscadores de MEV também podem escolher operações de usuário do mempool que tenham MEV associado alto, mas que potencialmente paguem menos (ou zero) em gás (ou até mesmo exijam que o buscador os pague). Esse mercado de MEV poderia ser facilitado por um Leilão de Fluxo de Ordens (OFA).
Como os empacotadores estimam taxas de gás?
Antes de empacotar, o empacotador deve fazer sua própria estimativa das taxas que irá submeter para garantir a inclusão da transação do pacote no mercado de pacotes. Normalmente, um empacotador construirá para inclusão no próximo bloco e dará um lance decente para garantir a inclusão.
Para estimar as taxas base, o empacotador pode consultar a rede para a taxa base do bloco atual. Geralmente, adicionar pelo menos uma sobretaxa de 25% (a quantidade máxima que a taxa pode aumentar nos próximos 2 blocos) é desejável para garantir que a transação não fique parada.
Para estimar a taxa de prioridade, o empacotador pode usar eth_maxPriorityFeePerGas
. Semelhante à taxa base, adicionar uma sobretaxa percentual a esse valor é desejável para garantir que a transação seja escolhida.
Com essas taxas estimadas, o empacotador pode então consultar o mempool e filtrar operações de usuário que deem lances suficientes para serem incluídas (incluindo a pequena “gorjeta” do empacotador).
Esta seção descreve um Empacotador que utiliza um mercado de pacotes para enviar seus pacotes. Os empacotadores devem usar mercados de pacotes (ou seja, Flashbots) para garantir que seu pacote de operações de usuário não seja ultrapassado, fazendo com que seja revertido na cadeia e deixando o empacotador pagar pelo gás.
A dinâmica muda se um empacotador faz parte de um construtor de blocos.
Como os remetentes devem estimar as taxas de operação do usuário?
Do lado do cliente, os remetentes devem estimar as taxas necessárias para empacotar. Se estimarem muito baixo, sua operação de usuário pode ficar presa no mempool. Se estimarem muito alto, especificamente para a taxa de prioridade, podem estar pagando em excesso pela inclusão.
Recomendamos a seguinte abordagem ao interagir com o Rundler antes da rede p2p:
- Estime a taxa base. Adicione uma sobretaxa com a qual você esteja confortável para garantir a mineração se o preço se mover contra você. Recomendamos pelo menos 25%.
- Estime a taxa de prioridade usando
eth_maxPriorityFeePerGas
. Adicione uma sobretaxa com a qual você esteja confortável. Recomendamos pelo menos 10%. - Adicione a sobretaxa da “gorjeta” do empacotador dependente da rede à taxa de prioridade.
- Some a taxa de prioridade à taxa base para obter
maxFeePerGas
,maxPriorityFeePerGas
é a taxa estimada do item 2.
Estimativa de Taxa do Arbitrum
O sequenciador do Arbitrum ignora taxas de prioridade e eth_maxPriorityFeePerGas
sempre retorna 0. Para compensar o empacotador, exigimos uma taxa de prioridade que é uma porcentagem fixa da taxa base máxima estimada do empacotador. Atualmente, cobramos 5%.
Estimativa de Taxa do Optimism
O Optimism tem um caso extremo, descrito em nosso post anterior sobre estimativa de gás da L2, que afeta a estimativa de taxas.
No Optimism, definimos maxPriorityFeePerGas = l1_gas / l2_base_fee
. No entanto, como em uma transação Optimism normal as taxas de prioridade se aplicam apenas ao componente de gás da L2, elas podem ser ordens de magnitude superiores à taxa base da L2. Assim, exigimos que a taxa de prioridade de um pacote seja uma porcentagem fixa da taxa base estimada. Atualmente, cobramos 5%.
Mais detalhes sobre a lógica de taxas do empacotador da Alchemy podem ser encontrados em nossa documentação.
Mempool P2P
Uma vez que o mempool p2p estiver em execução, um mercado separado surgirá para as taxas de operação do usuário. Isso pode simplificar substancialmente a estimativa de taxa para operações de usuário. Em vez de executar cálculos estáticos para taxa de prioridade como descrito acima, o usuário pode usar o histórico de taxas para estimar seu lance. Não importa mais o critério que um único empacotador está usando para escolher operações de usuário, apenas que algum empacotador veja uma operação de usuário como valiosa o suficiente para empacotar.
O Rundler suportará um método rundler_userOperationFeeHistory
(ou algo semelhante, que pode ser padronizado) semelhante ao eth_feeHistory
que os usuários podem consultar para estimar seus lances com base em operações previamente empacotadas.
🦀
Continue Lendo
Se você perdeu os três primeiros artigos desta exploração técnica sobre a estimativa de gás ERC-4337, saiba como a estimativa de gás ERC-4337 funciona e como superamos complicações para fornecer estimativas de gás precisas para operações de usuário.
- Como Funciona a Estimativa de Gás do ERC-4337
- Assinaturas Fictícias e Transferências de Token de Gás do ERC-4337
- Estimativa de Gás para Camada 2 e Agregadores de Assinatura - ERC-4337
Artigo original publicado por Dan Coombs e David Philipson. Traduzido por Paulinho Giovannini.
Latest comments (0)