O que são meta transactions (ERC-2771)?
Escrito por Harpalsinh Jadeja
Todas as transações Ethereum usam gas, e o remetente de cada transação precisa ter Ether suficiente para pagar pelo gas gasto. Isso força novos usuários a comprar Ether (o que pode ser uma tarefa intimidadora) antes de poderem começar a usar um dapp. Este é um grande obstáculo no onboarding de usuários.
As chamadas “Meta transactions” tornaram possível pagar taxas de gas em nome dos usuários.
No entanto, muitas dessas soluções estão migrando para a infraestrutura de Account Abstraction (ERC-4337), já que ela é uma forma mais promissora e sofisticada de abstração de gas, com muito mais funcionalidades!
O que são meta transactions?
A ideia das Meta Transactions é simples: um terceiro, chamado Relayer, envia a transação em nome do usuário e paga pelas taxas de gas.
Os usuários assinam mensagens (preferencialmente compatíveis com EIP-712) que contêm informações sobre a transação a ser executada.
A mensagem assinada é passada ao Relayer, que então é responsável por validar se o Relayer receberá o pagamento ou não (isso pode ser opcional, mais sobre isso depois), verificar se tem fundos suficientes para pagar as taxas de gas, assinar uma transação nativa e submetê-la para execução.
Vamos entender as Meta Transactions usando o Relayer da OpenZepplin como exemplo:

Como é uma requisição de meta transaction?
É assim que uma mensagem de Meta Transaction de exemplo se parece...

A mensagem acima realiza o mint de um NFT e deve ser assinada pelo endereço from 0x7099797...
Depois que a mensagem é assinada, o cliente (ou usuário) pode criar uma requisição de Meta Transaction (vista abaixo). Ela é enviada como uma requisição POST ao Autotask, um webhook que, quando invocado, usa internamente a chave privada do Relayer para assinar transações nativas.

O que é o relayer de meta transaction?
Um Relayer é uma Ethereum Account que contém os fundos para custear as taxas de gas do usuário. A chave privada da Account é armazenada em um vault seguro no servidor do provedor.
O desenvolvedor pode então enviar fundos ao Relayer, que cobrirá as taxas de transação dos seus usuários.
Os desenvolvedores podem criar quantos Relayers quiserem, cada um dos quais precisa ser financiado separadamente com ETH.
O OZ Relay permite pausar o Relayer, aceitar requisições apenas de Endereços na Whitelist e definir um Gas Price Capping. Mais lógica condicional pode ser programada no Autotask, se desejado.
Tenha em mente que a transação definida pelo usuário agora vive dentro do campo data da transação nativa do Relayer. Uma Meta Transaction é essa transação dentro de outra transação!
O que é o MinimalForwarder em meta transactions?
Até agora, nenhuma validação on-chain foi realizada. É aqui que entra o MinimalForwarder.
O MinimalForwarder é um smart contract on-chain que valida a mensagem assinada pelo usuário para garantir sua validade e proteção contra replay.
struct ForwardRequest {
address from;
address to;
uint256 value;
uint256 gas;
uint256 nonce;
bytes data;
}
function verify(ForwardRequest calldata req, bytes calldata signature) public view returns (bool) {
address signer = _hashTypedDataV4(
keccak256(
abi.encode(
_TYPEHASH,
req.from,
req.to,
req.value,
req.gas,
req.nonce,
keccak256(req.data)
)
)
).recover(signature);
return _nonces[req.from] == req.nonce && signer == req.from;
}Após a validação bem-sucedida, o MinimalForwarder executa a transação fazendo a chamada ao contrato de destino com o calldata apropriado
function execute(ForwardRequest calldata req, bytes calldata signature)
public
payable
returns (bool, bytes memory)
{
require(verify(req, signature), "MinimalForwarder: signature does not match request");
_nonces[req.from] = req.nonce + 1;
(bool success, bytes memory returndata) = req.to.call{gas: req.gas, value: req.value}(abi.encodePacked(req.data, req.from));
// Validate that the relayer has sent enough gas for the call.
// See
if (gasleft() <= req.gas / 63) {
// We explicitly trigger invalid opcode to consume all gas and bubble-up the effects, since
// neither revert or assert consume all gas since Solidity 0.8.0
//
/// @solidity memory-safe-assembly
assembly {
invalid()
}
}
return (success, returndata);
}É aqui também que entram as desvantagens das Meta Transactions, pois o contrato chamado pelo MinimalForwarder precisa permitir que o MinimalForwarder o chame em nome dos usuários.
O que é o ERC-2771?
Por fim, quando a chamada chega ao contrato de destino pretendido, ele precisa conseguir identificar o usuário original (msg.sender) e o calldata (msg.data), que estão aninhados dentro da transação do Relayer. Para padronizar esse processo, o ERC2771 foi proposto.
A OpenZepplin fornece um contrato utilitário chamado ERC2771Context para facilitar ao desenvolvedor de smart contracts a extração do msg.sender e msg.data pretendidos a partir dos dados enviados pelo MinimalForwarder.
contract YourContract is ERC2771Context {
constructor(MinimalForwarder forwarder, string memory uri_)
ERC2771Context(address(forwarder))
{}
// Depending on whether the call is made by the `MinimalForwarder` or not the `msg.sender` and `msg.data` will be inferred accordingly
}Como cada smart contract precisa saber como ler Meta Transactions, implementá-las em contratos já implantados é difícil e pode levar à introdução de bugs!
Embora existam muitos outros serviços de infraestrutura de Meta Transaction, todos eles exigem que o contrato de destino herde um contrato baseado em EIP-712 ou EIP-2771 para deduzir msg.sender e msg.data.
Embora esse padrão seja ótimo, ele não funciona retroativamente. É por isso que o ERC-4337 foi criado, e está substituindo a maioria das soluções ERC-2771 existentes.
Perguntas frequentes
O que são meta transactions?
Meta transactions permitem que um terceiro chamado Relayer envie transações em nome dos usuários e pague pelas taxas de gas, removendo a barreira de exigir que os usuários tenham Ether antes de interagir com apps.
Como funcionam as meta transactions?
Os usuários assinam mensagens contendo informações da transação, que são passadas a um Relayer que valida a requisição, paga pelas taxas de gas, assina uma transação nativa e a submete para execução na blockchain.
O que é ERC-2771?
ERC-2771 é um padrão que permite que smart contracts identifiquem o usuário original e o calldata ao receber meta transactions através de um forwarder confiável, garantindo a extração correta de msg.sender e msg.data.
O que é o MinimalForwarder em meta transactions?
O MinimalForwarder é um smart contract on-chain que valida mensagens assinadas pelo usuário quanto à autenticidade e proteção contra replay, antes de executar a transação chamando o contrato de destino.
O que é o ERC2771Context?
ERC2771Context é um contrato utilitário da OpenZeppelin que facilita aos desenvolvedores de smart contracts a extração do msg.sender e msg.data pretendidos a partir das meta transactions enviadas pelo MinimalForwarder.
Quais são as limitações das meta transactions ERC-2771?
O ERC-2771 exige que os contratos de destino suportem explicitamente o padrão herdando contratos baseados em EIP-712 ou EIP-2771, tornando a implementação difícil para contratos já implantados e podendo introduzir bugs.
Como o ERC-2771 se compara ao ERC-4337?
Embora o ERC-2771 permita transações sem gas através de relayers e forwarders, o ERC-4337 (Account Abstraction) está substituindo a maioria das soluções ERC-2771, pois funciona retroativamente e não exige que contratos existentes sejam modificados.
Qual é o papel do relayer nas meta transactions?
Um Relayer é uma conta Ethereum que custeia as taxas de gas dos usuários, com sua chave privada armazenada com segurança no servidor do provedor, e pode ser configurado com funcionalidades como whitelisting, gas price capping e lógica condicional.
Visões gerais relacionadas
Carteiras2 de setembro de 2026
Agent wallets: o modelo de sessão e permissões para agentes de IA
Como agentes de IA obtêm acesso a wallets com escopo definido e revogável, sem manter chaves privadas: sessions, delegated signing e revogação instantânea.
Carteiras29 de julho de 2026
Pare de colar chaves privadas no Cursor: como dar uma wallet ao seu coding agent
Dê ao seu coding agent uma wallet sem dar a chave. Como as agent wallets do Alchemy CLI usam sessões com escopo definido para que agents transacionem sem private keys no .env.
Carteiras24 de junho de 2026
O que é um crypto bundler?
Um crypto bundler combina múltiplas transações ou operações em um único envio onchain, abrangendo batching, MEV, rollups, lançamentos de tokens e account abstraction.

Construa magia blockchain
A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.