Что такое сырая транзакция Ethereum?
Сырая транзакция Ethereum — это RLP-кодированная байтовая строка, которую кошелёк создаёт при подписании: для типизированных транзакций однобайтный префикс типа (0x01–0x04), за которым следует RLP-список из nonce, полей комиссии, лимита газа, to, value, data и подписи ECDSA (v, r, s). Адрес отправителя не хранится; узлы восстанавливают его из подписи, а хеш транзакции — это Keccak-256 именно этих байт.
Где взять сырую транзакцию
- MetaMask и большинство кошельков: напрямую не показывают, но dApp и библиотеки, вызывающие
eth_signTransaction, получают её; ethers.js предоставляетtx.serializedиtx.unsignedSerialized. - Узлы:
eth_getRawTransactionByHashв Geth, Erigon и у большинства RPC-провайдеров; Etherscan показывает её в разделе «Get raw tx data». - Сценарии с аппаратным кошельком: hex, который вас просят подтвердить, имеет ровно этот формат.
Пояснение полей
Максимальная суммарная комиссия — это лимит газа × максимальная плата за газ: самое большее, во что может обойтись транзакция; реальная комиссия обычно ниже. Неподписанный хеш — дайджест, который подписывает приватный ключ. Access list заранее объявляет ключи хранилища, чтобы снизить расход газа. Для blob-транзакций сами данные blob не входят в показанный здесь RLP — только их версионированные хеши.
Типы транзакций вкратце
| Тип | EIP | Поля комиссии | Дополнительные поля |
|---|---|---|---|
| 0 (legacy) | chain ID по EIP-155 в v | gasPrice | нет |
| 1 | EIP-2930 | gasPrice | accessList |
| 2 | EIP-1559 | maxPriorityFeePerGas, maxFeePerGas | accessList |
| 3 | EIP-4844 | как тип 2 плюс maxFeePerBlobGas | blobVersionedHashes |
| 4 | EIP-7702 | как тип 2 | authorizationList |
Наглядный пример
Транзакция типа 2 с лимитом газа 21 000, maxFeePerGas 30 gwei и maxPriorityFeePerGas 2 gwei показывает максимальную суммарную комиссию 21 000 × 30 gwei = 630 000 gwei = 0,00063 ETH. Если базовая комиссия блока 12 gwei, эффективная цена — 12 + 2 = 14 gwei, а реальная комиссия — 294 000 gwei = 0,000294 ETH; оставшиеся 0,000336 ETH никогда не списываются. to, равный контракту USDT, с calldata, начинающейся с a9059cbb, — это перевод токена, и его поле value равно 0.
Нужно закодировать calldata или декодировать неизвестную функцию? Используйте ABI-кодировщик / декодер и поиск селекторов.