O que é uma transação Ethereum bruta?
Uma transação Ethereum bruta é a string de bytes codificada em RLP que uma carteira produz ao assinar: para transações tipadas, um prefixo de tipo de um byte (0x01 a 0x04) seguido de uma lista RLP com nonce, campos de taxa, limite de gas, to, value, data e a assinatura ECDSA (v, r, s). O endereço do remetente não é armazenado; os nós o recuperam da assinatura, e o hash da transação é o Keccak-256 desses bytes exatos.
Onde obter a transação bruta
- MetaMask e a maioria das carteiras: não exibem diretamente, mas dApps e bibliotecas que chamam
eth_signTransactiona recebem; o ethers.js expõetx.serializedetx.unsignedSerialized. - Nós:
eth_getRawTransactionByHashno Geth, Erigon e na maioria dos provedores RPC; o Etherscan mostra em "Get raw tx data". - Fluxos de carteira de hardware: o hex que você é solicitado a confirmar está exatamente nesse formato.
Campos explicados
Taxa total máxima é limite de gas × taxa máxima por gas: o máximo que a transação pode custar; a taxa real costuma ser menor. Hash não assinado é o digest que a chave privada assina. Access list pré-declara chaves de armazenamento para reduzir gas. Em transações de blob, os dados do blob em si não fazem parte do RLP mostrado aqui, apenas seus hashes versionados.
Tipos de transação em resumo
| Tipo | EIP | Campos de taxa | Campos extras |
|---|---|---|---|
| 0 (legado) | chain ID EIP-155 em v | gasPrice | nenhum |
| 1 | EIP-2930 | gasPrice | accessList |
| 2 | EIP-1559 | maxPriorityFeePerGas, maxFeePerGas | accessList |
| 3 | EIP-4844 | como o tipo 2 mais maxFeePerBlobGas | blobVersionedHashes |
| 4 | EIP-7702 | como o tipo 2 | authorizationList |
Exemplo prático
Uma transação tipo 2 com limite de gas 21.000, maxFeePerGas 30 gwei e maxPriorityFeePerGas 2 gwei mostra uma taxa total máxima de 21.000 × 30 gwei = 630.000 gwei = 0,00063 ETH. Se a base fee do bloco for 12 gwei, o preço efetivo é 12 + 2 = 14 gwei e a taxa real é 294.000 gwei = 0,000294 ETH; os 0,000336 ETH restantes nunca são cobrados. Um to igual ao contrato do USDT com calldata começando em a9059cbb é uma transferência de token, e seu campo value é 0.
Precisa codificar calldata ou decodificar uma função desconhecida? Use o codificador / decodificador ABI e a consulta de seletores.