Ethereum 交易类型及其特点

一. 概述

在智能合约开发中,我们需要了解不同的交易类型,这对我们的合约交易发送和交易解析等息息相关。以太坊网络中的交易类型多种多样,每种类型都有其特定的用途和特点。

二. 主流的几种交易类型

1.Legacy 交易

在以太坊上,Legacy交易是指在EIP-1559之前的传统交易类型。这些交易类型依赖于第一价格拍卖机制来确定交易费用。以下是对Legacy交易类型的详细介绍:

1.1.Legacy交易的结构

Legacy交易的结构包括以下字段:

  • nonce:发送方账户的交易序号
  • gasPrice:每单位 gas 的价格
  • gasLimit:交易消耗的最大 gas 量
  • to:接收方地址
  • value:转移的以太币数量
  • data:交易的附加数据(可选)
  • v, r, s:交易的签名

1.2.交易字段详细说明

  • nonce:每个账户有一个递增的nonce值。每次发送交易,nonce值都会增加,以确保交易的唯一性和顺序性。例如,账户发送的第一笔交易nonce为0,第二笔为1,依此类推。
  • gasPrice:这是用户愿意为每个gas单位支付的费用。矿工根据gasPrice的高低优先打包交易。gasPrice的单位为gwei(1 ETH = 10^9 gwei)。高gasPrice通常会导致交易更快被确认。
  • gasLimit:这是用户愿意为交易支付的最大gas量。它限制了交易执行过程中可以消耗的gas总量。设置gasLimit过低可能导致交易失败(但仍需支付已消耗的gas),而设置过高则可能浪费资金。
  • to:接收方的以太坊地址。对于普通交易,这是一个常规的地址。对于合约创建交易,此字段为空,表示将部署一个新合约。
  • value:表示转移的以太币数量,单位为wei(1 ETH = 10^18 wei)。用户可以在交易中指定转移的金额。
  • data:这是一个可选字段,包含交易的附加数据。对于调用合约函数的交易,data字段包含合约调用的详细信息。对于合约创建交易,data字段包含合约的字节码。
  • v, r, s:这些是签名字段,用于验证交易的发送者。通过这些字段,可以确认交易确实是由拥有相应私钥的账户发送的。

1.3.Legacy交易的执行流程

  • 交易创建:用户创建交易并指定所有必要的字段,包括nonce、gasPrice、gasLimit、to、value和data。
  • 交易签名:用户使用其私钥对交易进行签名,生成v、r、s字段。
  • 交易广播:签名后的交易被广播到以太坊网络。
  • 交易验证:矿工节点接收交易并进行验证,包括检查nonce、签名和账户余额等。
  • 交易打包:矿工将交易打包到区块中,优先打包gasPrice较高的交易。
  • 交易执行:区块被挖出后,交易在以太坊虚拟机(EVM)中执行,根据交易类型(转账或合约调用)改变账户状态。
  • 交易确认:交易被多个区块确认后,交易被视为最终确定。

1.4.Legacy交易的优势与劣势

优势

  • 简单易理解:交易费用机制简单明了,用户通过指定gasPrice来确定交易费用。
  • 灵活性:用户可以根据需要灵活调整gasPrice以提高交易确认速度。

劣势

  • 费用波动大:在网络拥堵时,交易费用可能会迅速飙升,导致用户难以预测和控制费用。
  • 用户体验差:用户需要手动调整gasPrice以确保交易被及时确认,增加了使用的复杂性。
  • 矿工激励不稳定:矿工可能会优先选择高gasPrice的交易,导致低费用交易长时间等待确认。

2.EIP1559 交易

EIP-1559 是以太坊改进提案中的一个重要提案,它对以太坊的交易费用机制进行了重大改进,旨在解决交易费用的不确定性和网络拥堵问题。以下是对 EIP-1559 交易的详细介绍:

2.1.EIP-1559 的背景

在 EIP-1559 之前,以太坊的交易费用是通过“第一价格拍卖”机制确定的,即用户在交易中指定愿意支付的 gas 价格,矿工优先打包出价最高的交易。这种机制导致以下问题:

  • 费用波动:当网络拥堵时,交易费用可能会迅速飙升。
  • 用户体验差:用户很难确定合适的 gas 价格,经常要么支付过高的费用,要么交易迟迟未被确认。

2.2.EIP-1559 的改进

EIP-1559 引入了一种新的费用结构,包括基本费用(base fee)、小费(tip)和 gas 限额(gas limit),以改善上述问题。

基本费用:基本费用是根据网络需求动态调整的最低费用。每个区块都会设定一个基本费用,这个费用会根据网络的拥堵情况自动调整:

  • 机制:基本费用在区块容量达到目标值时增加,在区块容量低于目标值时减少。
  • 目的:使交易费用更加可预测,减少用户手动调整 gas 价格的需求。

小费:用户可以选择支付额外的小费(priority fee)给矿工,以激励矿工优先处理他们的交易:

  • 功能:提高交易被打包的优先级。
  • 灵活性:用户可以根据需要设置小费的高低。

最大费用:用户在交易中指定愿意支付的最大费用(max fee),包括基本费用和小费:

  • 保障:确保用户不会支付超过预期的费用。
  • 计算:实际支付的费用为基本费用加上小费,剩余部分退还给用户。

2.3.EIP-1559 交易的结构

  • nonce:发送方账户的交易序号。
  • maxFeePerGas:用户愿意支付的每单位 gas 的最大费用。
  • maxPriorityFeePerGas:用户愿意支付的每单位 gas 的小费。
  • gasLimit:交易允许消耗的最大 gas 量。
  • to:接收方地址。
  • value:交易中发送的以太币数量。
  • data:交易附加数据,通常为合约调用数据。
  • v, r, s:交易的签名。

2.4.EIP-1559 交易的执行流程

  • 交易创建:用户创建一个包含 maxFeePerGas 和 maxPriorityFeePerGas 的交易。
  • 交易签名:用户使用其私钥对交易进行签名,生成v、r、s字段。
  • 交易广播:签名后的交易被广播到以太坊网络。
  • 交易验证:矿工节点接收交易并进行验证,包括检查nonce、签名和账户余额等。
  • 基本费用确定:矿工根据网络状态确定当前区块的基本费用。
  • 费用计算:矿工从用户提供的 maxFeePerGas 中扣除基本费用,剩余部分作为小费。
  • 交易打包:矿工优先打包小费较高的交易,以最大化收益。
  • 交易确认:交易被打包到区块中,用户支付的总费用为基本费用加小费。

2.5.EIP-1559 的优势

  • 费用预测性:基本费用的动态调整使得交易费用更加可预测,改善用户体验。
  • 网络稳定性:通过自动调整基本费用,EIP-1559 有助于缓解网络拥堵。
  • 矿工激励:小费机制仍然为矿工提供了足够的激励,确保网络安全。

2.6.实际应用中的变化

自 EIP-1559 实施以来,以太坊的交易费用结构发生了显著变化:

  • 用户体验改善:用户不再需要频繁调整 gas 价格,交易费用更加稳定。
  • 费用燃烧机制:基本费用部分被销毁(burned),减少了以太币的供应,可能对 ETH 的长期价值产生积极影响。

3. Legacy 交易与 EIP-1559 交易的对比

EIP-1559交易引入了基本费用(base fee)和小费(priority fee)机制,改善了Legacy交易中的一些问题:

  • 费用预测性:EIP-1559的基本费用根据网络需求动态调整,使交易费用更加可预测。
  • 用户体验:用户不再需要频繁调整gasPrice,简化了交易的创建和提交过程。
  • 费用销毁机制:EIP-1559中的基本费用部分被销毁,减少了以太币的供应,可能对ETH的长期价值产生积极影响。

总结来说,Legacy交易是以太坊早期采用的交易机制,尽管简单直接,但在网络拥堵和用户体验方面存在明显不足。EIP-1559交易通过引入新的费用机制,显著改善了这些问题,提高了网络的整体性能和用户体验。

4.EIP-4844 和 Blob 交易

在以太坊扩展方案中,Rollups 提供了一种有效的方法来提高网络的吞吐量和降低交易费用。Rollups 主要有两种类型:Optimistic Rollups 和 ZK-Rollups。在这些扩展方案中,blob 交易是一种新兴的概念,特别是与以太坊改进提案EIP-4844 相关。EIP-4844,也被称为“Proto-Danksharding”,引入了一种新的交易类型,称为 blob-carrying transactions(携带数据块的交易),用于更高效地存储和传输大量数据 blobs。

4.1.Blob 交易的特点

  • 高效的数据传输:Blob 交易允许 Rollups 提交大块数据(blobs)到以太坊主链。这些数据包含了 Rollup 内部的所有交易详细信息。
  • 独立于主链状态:Blob 数据不会直接影响以太坊主链的状态,这意味着它们不会增加主链的存储需求。这些数据主要用于验证和重建 Rollup 的状态。
  • 费用优化:由于 blob 数据不直接影响主链状态,处理这些数据的费用通常较低,从而降低了整体交易成本。

4.2.Blob 交易类别

4.2.1.数据可用性交易 (Data Availability Transactions)

这些交易主要用于确保 Rollups 提交的 blob 数据在以太坊网络中是可用和可验证的。数据可用性是 Rollups 安全性的重要组成部分,因为链下计算需要基于链上的数据进行验证。

  • 提交和验证:Blob 数据提交到以太坊主链,并通过专门的验证机制确保数据的完整性和可用性。
  • 数据存储:Blob 数据不会永久存储在以太坊主链上,而是通过优化的存储方案(如短期存储或外部存储)来管理。

4.2.2.状态更新交易 (State Update Transactions)

这种交易类型用于提交 Rollup 状态的更新信息。虽然具体的交易细节在 blob 中,但状态更新交易会包含指向这些 blob 的引用,以确保主链上的状态可以被正确更新和验证。

  • 状态根更新:每个状态更新交易会包含一个新的状态根,这个状态根是通过处理 blob 数据得到的。
  • 验证机制:状态根的更新和 blob 数据的处理需要通过加密验证机制来确保其准确性和安全性。

4.3.Blob 交易的结构

Blob 交易的结构与传统以太坊交易有一定的区别,它引入了一些新的字段来处理和管理 blob 数据。以下是 blob 交易的一些关键字段:

  • nonce:发送方账户的交易序号。
  • gasPrice:每单位 gas 的价格。
  • gasLimit:交易消耗的最大 gas 量。
  • to:接收方地址,通常为空,因为 blob 交易主要用于数据提交。
  • value:转移的以太币数量,通常为 0。
  • blobData:包含实际的 blob 数据。
  • blobVersion:blob 数据的版本号,用于处理不同版本的 blob 交易格式。
  • blobRoot:blob 数据的 Merkle 根,用于数据验证。
  • v, r, s:交易的签名。

4.4.Blob 交易的执行流程

  • 交易创建:Rollup 协调器创建一个包含大量交易数据的 blob,并将其打包成 blob 交易。
  • 提交到主链:将 blob 交易提交到以太坊主链,包含 blob 数据和相关的验证信息。
  • 验证和存储:以太坊网络验证 blob 数据的完整性和可用性,并将其存储在优化的存储方案中。
  • 状态更新:Rollup 通过处理 blob 数据更新其状态,并将新的状态根提交到以太坊主链进行记录。

三. 基于业务常见的交易类别

1. 创建合约的交易

创建合约的交易用于在以太坊网络上部署智能合约。其特点是 to 字段为空,data 字段包含合约的字节码。其字段包括:

  • nonce:发送方账户的交易序号。
  • gasPrice:每单位 gas 的价格。
  • gasLimit:交易消耗的最大 gas 量。
  • to:为空。
  • value:部署合约时发送的以太币数量。
  • data:包含合约的字节码。
  • v, r, s:交易的签名。

2.ERC20 代币交易

ERC20 是以太坊上最常见的代币标准,用于创建和管理代币。ERC20 代币交易涉及调用代币合约的 transfer 或 approve 等函数。这些交易的 to 字段指向代币合约地址,data 字段包含具体的函数调用和参数。

3. ERC721 和 ERC1155 交易

ERC721 和 ERC1155 是用于不可替代代币(NFT)的标准。ERC721 代表单个不可替代代币,而 ERC1155 支持多种类型的代币(包括可替代和不可替代代币)。这些交易涉及调用 NFT 合约的 transferFrom 或 safeTransferFrom 等函数。

4. 内部交易

内部交易是由智能合约内部触发的交易,例如一个合约调用另一个合约或执行自身的函数。这些交易不会直接显示在区块链上,而是通过事件日志(logs)或工具(如 Etherscan)来跟踪。

我们都知道,解析内部交易需要运行 archive 节点, 并且节点需要开启 debug 模块。社区有很多追踪内部交易的工具,如 ETHTX; 当然,使用第三方节点直接解析追踪,例如使用 erigon 节点。

  • ETHTX

https://github.com/EthTx/ethtx_ce

https://github.com/EthTx/ethtx

  • Erigon 节点

https://github.com/ledgerwatch/erigon

四. 总结

熟悉 Legacy, Eip1559 和 Blob 交易类型,能帮助我们更好,更高效的开发我们的程序,如果我们进行转账和 Call 合约时,需要更好的用户体验和手续费预测,选用 EIP1559 交易类型,但如果我们对用户体验和手续费的准确预测要求不高,或不希望 ETH 销毁,我们使用 Legacy;对于 L2 rollup 交易到 Ethereum 上,我们选用的是 Blob 交易类型。

熟悉合约创建,ERC20, ERC721 和 ERC1559 和内部交易等类别,当我们需要做数据统计系统,数据分类系统,基于交易的业务平台如"数字货币追踪","defi 数据平台","浏览器"等系统特别有用。

留言
全部评论(0)