Solana交易的生命周期

本文深入探讨了Solana交易的生命周期,具体描述了交易的结构、执行和排序过程,以及Solana与以太坊之间的关键区别。该文强调了Solana的高性能特点以及这些特性对MEV(最大化可提取价值)搜索者的潜在影响。

引言

在本文中,我们关注 Solana 交易的生命周期。我们检查了 Solana 运行时如何处理交易,重点是交易执行和排序。我们还探讨了 Solana 和 Ethereum 之间交易执行的不同。

讨论的主题假设读者对区块链机制有一定了解。本文的目标是为讨论 Solana 上的 MEV 奠定基础。

Solana 交易的结构

一个 Solana 交易由三个部分组成:

  1. 一个或多个指令,指定交易在链上需运行的代码。例如,“从账户 A 转移 5 SOL 到账户 B”。
  2. 一组交易所需的账户(独立的状态片段),带有读写标志。例如,“账户 A [可写],账户 B [可写]”。
  3. 交易所需的一个或多个签名。例如,“来自账户 A 拥有者的签名”。

简化的 Solana 交易

预先状态规范对开发者来说是个负担,但代码和状态的分离对 Solana 的并行执行模型是必要的(类似于 EIP-2930)。

你可以在 这里 阅读更多有关交易结构的详细信息,但理解其余部分不需要这种知识。

Solana 交易的生命周期

用户通过其钱包发起交易。交易可以是代币转账、DeFi 协议的交易、NFT 铸造或任何在 Solana 区块链上可用的其他操作。在点击“批准交易”和用户界面报告交易已被确认之间发生了什么?

发起交易

一旦用户在其钱包中签署交易,钱包会将交易发送到 Solana RPC 服务器。RPC 服务器可以由任何验证者运行。在接收到交易后,RPC 服务器检查 领导者调度(每个纪元确定一次,纪元大约持续 2 天),并将交易转发到当前的领导者以及接下来的两个领导者。领导者 负责为当前 生成 区块,并被分配四个连续的槽。槽的持续时间通常约为 400 毫秒。

客户端到领导者

交易执行和排序

当签署的交易到达当前领导者时,领导者验证交易的签名并进行其他预处理步骤,然后安排交易执行。

目前大多数验证者使用 Solana Labs 提供的 Solana 客户端的调度器实现。然而,验证者可以根据需要使用不同的区块构建算法。

默认的调度器实现是多线程的,每个线程维护一个等待执行的交易队列。交易随机分配到单个线程的队列中。每个队列按 优先费用(以请求的每个 计算单位 支付的费用计)和时间排序。

请注意,排队等待执行的交易没有全局排序;每个线程的队列仅是本地排序。

请记住,交易包括哪种状态需要在执行时被读锁定和写锁定的规范。当线程执行交易时,它首先尝试获取必要的账户锁,然后执行交易。不能获取必要锁的交易则重新排队以稍后再次尝试。

图中每个方框代表一个交易。每笔交易标有其锁定的账户。执行线程 1 锁定账户 \[a,b,c\],\[d\],未能锁定 \[c,j\] 和 \[f,g\]。执行线程 2 锁定账户 \[w\],\[x,y,z\],未能锁定 \[c\] 和 \[v\]。剩余的交易被重新安排以便将来执行。

在上面的图中,每个方框代表一个交易。每笔交易标有其锁定的账户。执行线程 1 锁定账户 [a,b,c],[d],未能锁定 [c,j] 和 [f,g]。执行线程 2 锁定账户 [w],[x,y,z],未能锁定 [c] 和 [v]。剩余的交易被重新安排以便将来执行。

这是 Solana 实现比竞争链更高性能的一种方式。当多个交易不需要触及相同状态时,它们可以并行执行,从而提高区块链的吞吐量。然而,对开发者来说,这会带来成本,因为交易需要的任何状态都必须事先指定。

使用此默认调度器实现,交易在区块中的排序是 FIFO 和优先费用的粗略组合。但是,由于交易被随机分配到执行线程,因此在交易排序中存在固有的不确定性——即使没有网络抖动,不同的发送可能会在多线程调度器中落入不同的位置。这种调度抖动增加了交易在区块中落入位置的变化,所以发送大量交易以迅速落入紧急交易可能是有利的。

这也意味着,如果搜索者能够快速完成特定交易,他们可能能够在相关状态(市场账户)出现热门之前执行交易,从而无需使用优先费用来包含交易。

可以想象具有不同特征和向验证者支付不同费用的替代调度器设计。这只是区块打包问题,只是执行由于 Solana 支持的高吞吐量而成为显著瓶颈,因此在交易流入时,区块会逐步构建。

交易传播和状态更新

一旦交易由领导者执行,它会立即记录到验证者的分类帐副本并传播到网络的其余部分。在区块获得共识的必要投票后,交易被视为“确认”。最后,当在其上构建了 31 个以上的确认区块时,该区块被视为“最终确认”。这些阶段通过 RPC 返回到前端,使用户可以看到其交易的状态。我们将在未来的文章中探讨 Solana 的区块传播和共识机制。

领导者到客户端

Solana 和 Ethereum 之间的差异

Solana 和 Ethereum 的交易生命周期有许多不同之处。

  • 一个主要的区别是 Solana 没有公共的内存池。待处理的交易不是由点对点耳语构建的分布式内存池的一部分,而是直接转发到当前领导者和接下来的几个领导者。
  • Solana 的默认验证者实现还具有持续的区块生产。交易不断流入验证者以执行、区块生产,最后是交易传播。在 Ethereum 上,待处理的交易在完整区块以 12 秒间隔构建之前被验证者或区块构建者暂停。持续的区块生产意味着优先费用不会保证在区块中的位置。这意味着延迟对竞争交易更为重要,而不是针对状态的离散拍卖(在 Ethereum 的 mev-boost 和 Solana 的 Jito 拍卖中出现)。
  • Solana 交易要求每个签名收取固定的网络费用(通常每个交易一个签名)为 0.000005 SOL,按本文发布时约 $0.0001 计算。还可以包括一个可选的优先费用,以请求的每个计算单位支付的费用为计(执行中使用的计算单位的上限),用于在上述 Solana 调度器中获得更高优先级。Solana 的区块大小限制在计算单位中也是固定的,这类似于 Ethereum 区块的Gas目标。网络费用的一半会被销毁,另一半会送给领导者。我们将在将来的文章中探讨这一费用模型的影响及潜在替代方案。
  • 最近在 Solana 上推出了协议外的区块空间拍卖(Jito),其市场份额相对较小(25%),而 Ethereum 的 mev-boost 则达到了 85%。这表明两个生态系统在区块生产和 MEV 处理方面存在一些基本差异。

结论

在本文中,我们考察了 Solana 交易的生命周期,从用户提交的钱包交易到交易被 Solana 网络确认。我们观察了 Solana 如何执行和排序交易,以及 Solana 和 Ethereum 之间的相关区别。我们还触及了 Solana 设计对于 MEV 搜索者的某些下游影响。在下一篇文章中,我们将讨论 Solana 上 MEV 的当前和未来状态。

要与我们合作,请联系 collaborators@umbraresearch.xyz

  • 原文链接: umbraresearch.xyz/writin...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
umbraresearch
umbraresearch
Umbra Research is exploring novel ideas in blockchain research.