跳至内容
0%

Ethereum 交易是如何传播(广播)的?

Alchemy team headshot

作者 Alchemy

发布于 2022年9月7日1 分钟阅读

交易是区块链上信息和价值交换的基础,对开发者、交易者和爱好者理解区块链至关重要。交易通过RLPxWire Protocol等多种网络协议在Ethereum去中心化的点对点(P2P)网络中传播,以确保出块者和验证者能够在mempool中找到待处理交易。

本文将介绍Ethereum交易类型,以及交易如何在Ethereum节点网络中广播。

什么是Ethereum交易?

Ethereum交易是一个地址向Ethereum网络上另一个地址发送代币或资产的契约性过程。一个简单的例子是Alice向她的朋友Bob发送1个ETH(Ethereum的原生代币)。

由于交易是构建区块链应用的基础,我们来看看Ethereum交易中包含哪些信息。

Ethereum交易中包含哪些信息?

在编程语言层面,发送方Alice对应msg.sender全局变量,接收方Bob对应address(this)变量,而双方之间发送的代币数量(1个ETH)就是msg.value

除上述数据外,一笔典型的Ethereum交易通常还包含以下内容:

  • Signature - 发送方对发起交易的批准签章
  • gasLimit - 该交易可使用的gas上限
  • Nonce - 该笔交易的唯一标识符
  • Data - 用于交易描述或消息的可选字段

Ethereum交易有哪些不同类型?

Ethereum交易有多种类型,包括部署智能合约的交易、实体之间(即人与人之间)的交易、智能合约之间的交易(内部交易),以及人与智能合约混合的交易,例如使用DeFi协议。

在本节中,我们将聚焦于与Ethereum网络中交易传播相关的不同实体间交易状态类型。

1. 池化(待处理)交易

池化交易是指mempool中尚未被打包的待处理交易(即存在于单个节点本地存储中的待处理交易)。

当两个节点建立连接后,各自本地交易池的内容会被共享,使得每个节点都拥有一份完整的待处理交易列表。

随着节点在Ethereum P2P网络中建立更多连接,发送给单个或多个节点的交易会在网络中更广泛地传播。

2. 已打包交易

已打包交易是指已从全局待处理交易池(即mempool)中被选中,并被打包进新区块加入区块链的已完成交易。

由于链重组(reorgs)的存在,一笔已打包交易可以处于多种确认级别之一。在The Merge之前,交易区块的确认级别为_latest_,每个区块(约12秒)递增一次;而在The Merge之后,交易还可以被标记为_safe_(也称为_justified_)或_finalized_,每32个区块(约6分钟)递增一次。

_Safe_区块指不太可能被重组的区块,而_finalized_区块指极不可能被重组的区块。

3. 被丢弃和被替换的交易

被丢弃的交易是指已从全局mempool中移除的待处理交易。交易被丢弃的原因可能是发送方的gas费用过低,或交易的nonce出错。

被替换的交易是指与mempool中现有交易使用相同nonce的交易。用户通常在希望提高原交易的gas价格以使其被下一个区块打包时使用替换交易。当替换交易被确认后,原交易将被丢弃。

4. 强化交易

强化交易是一种新的Ethereum交易类型,通过向Ethereum节点重新传播交易,提高交易被验证的可能性,尤其是在网络活动量大、gas价格波动剧烈的时期。

强化交易是针对失败和被丢弃交易的一种解决方案。

其他交易类型

除池化、已打包、被丢弃与被替换以及强化交易外,还存在其他交易状态,包括:

  • Canceled Transactions(已取消交易) - 一种取消原交易的替换交易
  • Confirmed Transactions(已确认交易) - 已被打包并加入区块链的交易
  • EOA Transactions(EOA交易) - 一笔或多笔外部账户(EOA)之间的交易,通常指人与人之间的交易
  • Failed Transactions(失败交易) - 已尝试但未成功的交易
  • Internal Transactions(内部交易) - 两个智能合约之间的交易
  • Private Transactions(私有交易) - 直接发送给矿工、绕过公共mempool的交易
  • Stuck Transactions(卡住的交易) - 无法被打包的交易
  • Type 0 Transactions(0型交易) - EIP-1559采用之前的交易
  • Type 2 Transactions(2型交易) - 遵循EIP-1559更新规范的交易

Ethereum的p2p网络如何运作?

在点对点网络中,用户既是网络资源的消费者,也是网络资源的供给者。但并非所有P2P框架都相同,因此信息如何被共享、验证和广播的机制,对于理解整个Ethereum网络至关重要。

在P2P网络中,信息通过节点进行共享和存储。截至本文撰写时,Ethereum拥有超过300,000个全节点。以下概述了新全节点如何加入网络、相关协议,以及每个节点在处理、验证Ethereum链上新区块时所执行的具体功能。

1. 节点相互发现

Ethereum使用bootnode来检测和发现网络中的新节点。当一个新节点愿意连接时,它会向bootnode发送一个称为PING的初始化请求。bootnode随后以PONG消息进行响应绑定。

建立连接后,该节点会向bootnode查询,请求提供附近其他节点的列表。由于Ethereum将节点组织为二叉树中的叶节点,"距离"这一概念指的是任意两个节点160位ID之间的数值接近程度。

一旦该节点能够与附近可用节点建立连接,bootnode的作用便完成。此后的同步任务则由RPLx协议来完成。

2. 节点建立安全连接

RPLx协议通过支持数据包(即小块数据)的发送与接收,促成两个节点之间的同步。数据包使用RLP编码进行动态封装,并经过加密和身份验证。

节点使用RPLx建立安全连接并相互验证。验证要求双方节点都发送一条身份验证消息,随后再发送一条包含端口号、客户端和节点双方ID,以及协议与子协议信息的消息。

一旦节点完成相互身份验证,便可以开始使用Wire protocol进行通信。此时这两个节点被视为对等节点(peer),而peer正是节点与整个Ethereum网络通信的方式。

3. 节点同步状态、区块并交换池化交易

在这一阶段,Ethereum P2P网络中的新全节点将与整个协议的状态保持一致,并开始交换数据。这里需要对节点(node)和客户端(client)做一个重要区分。虽然这两个术语常被交替使用,但客户端是指使节点能够读取Ethereum区块链上区块和智能合约的软件。

Ethereum上的所有全节点在Wire protocol下都有三项基本任务:

  1. 同步(Synchronization)
  2. 区块传播(Block Propagation)
  3. 待处理交易传播(Pending Transaction Propagation)

3A. 链与状态同步

同步分为与链的同步以及与状态的同步。

在与链同步的过程中,peer之间会交换其可用区块的难度值和哈希值。难度值最高的客户端会下载区块头。而在状态同步过程中,peer则会验证数据的真实性,并下载区块状态。

3B. 区块传播

在区块传播过程中,Ethereum P2P网络中的区块会被处理并广播。一旦出现新区块,客户端会将其发送给其peer以进行验证,并对区块中的交易进行确认。

客户端验证并处理该区块后,节点必须将该区块广播给网络中所有的全节点或peer,使它们有机会对其有效性提出质疑。

3C. 交换待处理(池化)交易

矿工负责将新区块添加到链上;因此,所有参与验证的节点都必须向矿工提供已处理的待处理交易。

要开始这一交换过程,每个peer必须互相发送自己所拥有的待处理交易的哈希值。由于私有交易是直接发送给矿工或出块者的,节点将无法发现并传播这类交易。

当所有这些任务完成后,矿工便可以将新区块添加到Ethereum链上,Wire protocol的流程随之重新开始。

Ethereum交易是如何传播的?

当某个节点通知网络其池化交易集合中出现新交易,且peer查询以获取这些交易时,Ethereum交易便在整个网络中传播。

具体过程如下:

  1. 传播节点通过发布NewPooledTransactionHashes消息,将新交易告知网络。
  2. 或者,peer也可以通过发布GetPooledTransactions消息来查询这些交易

The Merge之后交易是如何广播的?

自The Merge以来,Ethereum节点拥有两个独立的节点客户端——执行层客户端和共识层客户端——各自负责处理交易的不同职责。简而言之,执行层客户端负责执行交易并验证状态,共识层客户端负责接收和传播新区块。

以下是在合并后环境中交易运作方式的更多细节:

每个节点的共识层客户端负责接收、预验证区块,将其传递给执行层客户端,在执行层客户端完成任务后将区块添加到区块链头部,并在网络中进行广播。

当执行层客户端从节点的共识层客户端接收到经预验证的区块后,它负责执行交易、验证区块状态,然后将验证后的区块发送回共识层客户端。

除上述变化外,自The Merge以来,Ethereum P2P网络的其他运作方式均保持不变。

当CL客户端同时也是出块者时,交易如何广播?

在合并后的Ethereum中,将存在出块者和提议者,当共识层客户端同时也是出块者时,The Merge之后交易和区块的传播方式会略有不同。关于这一细分场景的更多信息,请阅读Ethereum基金会网络层文档

Ethereum交易传播总结

Ethereum的全球点对点网络需要节点相互发现、验证并安全通信,以广播待处理(池化)交易和新打包的区块。通过RLPx和Wire Protocol等一系列底层网络协议,这一在Ethereum全球计算机中建立peer连接并传播信息的过程,使区块链交易得以实现。

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。