作者:@0xShitTrader @buffalu__ 编译:CoinTime 237
本文重点介绍了Solana交易的生命周期。我们探讨了Solana运行时如何处理交易,并强调了交易执行和排序。我们还探索了Solana与以太坊在交易执行方面的差异。文章假定读者对区块链机制有一定的了解。本文的目的是为后续讨论Solana上的MEV打下基础。
Solana交易的结构
Solana交易由以下三部分组成:
1、一个或多个指令,指定交易应在链上运行的代码。例如“从账户A向账户B转移5 SOL”。
2、所需的账户数组(离散状态块),每个账户都有读写标志。例如,“账户A [可写],账户B [可写]”。
3、一个或多个交易所需的签名。例如,“来自账户A所有者的签名”。
对于开发人员而言,事先指定状态规范可能会很繁琐,但这种代码和状态的分离对于Solana的并行执行模型(类似于EIP-2930)是必要的。
Solana交易的生命周期
用户通过他们的钱包启动交易。交易可以是代币转移、DeFi协议上的交易、NFT铸造或Solana区块链上提供的任何其他操作。在单击“批准交易”和UI报告交易已经确认之间会发生什么?
1、启动交易
一旦用户在他们的钱包中签署了交易,钱包就会将交易发送到Solana RPC服务器。RPC服务器可以由任何验证者运行。收到交易后,RPC服务器检查 leader schedule(每个时期确定一次,约为2天长)并将交易转发给当前leader以及下两位leader。leader负责为当前时间段生成一个块,并被分配四个连续时间段。时间段通常持续约400毫秒。
2、交易执行和排序
一旦签署的交易到达当前leader,leader会验证交易的签名,并在调度执行之前执行其他预处理步骤。
目前大多数验证者使用Solana Labs构建的Solana客户端提供的调度程序实现。但是,如果他们愿意,验证者可以运行不同的块构建算法。
默认调度程序实现是多线程的,每个线程维护等待执行的交易队列。交易随机分配到单个线程的队列中。每个队列按优先费用(以请求的计算单位支付的费用计量)和时间排序。
请注意,没有全局排序的待执行交易队列;每个线程的队列中只有本地排序。
回想一下,交易包括需要为执行锁定的状态的规范。当线程执行交易时,它首先尝试获取必要的账户锁定,然后执行交易。处理无法获取所需锁定的进程的交易会被重新排队以稍后重试。
在上述图表中,每个框表示一个单独的交易。每个交易都带有其锁定的账户标签。执行线程1锁定账户[a,b,c],[d],无法锁定[c,j]和[f,g]。执行线程2锁定账户[w],[x,y,z],无法锁定[c]和[v]。其余交易计划在未来执行。
这是Solana实现比竞争链更高性能的一种方法。当多个交易不需要触及相同的状态时,它们可以并行执行,这提高了链的吞吐量。然而,这对开发人员有成本,因为任何可能被交易所需的状态必须事先指定。
有了这种默认调度程序实现,交易按FIFO和优先费用的大致组合顺序排序在块中。但是,交易排序存在固有的非确定性,因为交易有点随机地分配给执行线程-即使没有网络抖动,不同的发送也可能落在多线程调度程序中的不同位置。这种调度程序抖动会增加交易在块中落位的差异,因此大量发送以落位紧急交易可能是有益的。
这也意味着如果搜索器最快到达特定交易,他们可能能够在相关状态(市场账户)变热之前执行交易,因此不需要使用优先费用以获得包含。
人们可以想象具有不同特征和不同向验证者支付的不同奖励的替代调度程序设计。这仅仅是块打包问题,除了由于Solana支持的高吞吐量,执行是一个显著的瓶颈,因此在交易流中逐步构建块。
3、交易传播和状态更新
一旦leader执行交易,它立即记录到验证者的帐本副本中并传播到网络的其余部分。在一个块从共识获得必要的投票之后,交易被视为“已确认”。最后,当31个或更多已确认的块建立在上面时,块被认为是“最终确定”的。这些阶段通过RPC返回给前端,允许用户查看其交易的状态。我们将在未来的文章中探讨Solana的块传播和共识机制。
Solana和以太坊之间的差异
Solana和以太坊的交易生命周期有很多不同之处。
1、一个主要的区别是Solana没有公共内存池。与由点对点传输构建的分布式内存池的待处理交易不同,它们直接转发给当前的leader和下几个领leader。
2、Solana默认的验证器实现还具有连续块生成功能。交易持续流入验证器进行执行,然后进行块生成,最后进行交易传播。在以太坊上,待处理交易被验证者或块构建者阻塞,直到完整块在12秒间隔内构建完成。连续块生成意味着优先费用不能保证在块内的位置。这意味着相对于以太坊上的离散状态拍卖(在MEV-boost和Jito拍卖中特色)来说,在竞争性交易中延迟更加重要。
3、Solana交易需要每个签名的固定网络费用(通常为每个交易一个签名),为0.000005 SOL,约为出版当时的$0.0001。还可以包含可选优先级费用,以请求的计算单位支付费用(执行中使用的计算单位数量的上限)计量,并在Solana调度程序中提供更高的优先级,如上所述。Solana的块大小限制基于使用的计算单位而固定,类似于以太坊块具有的Gas目标。网络费用的一半被烧毁,另一半归leader所有。相比之下,以太坊的交易费用由Gas价格和Gas限制组成,其中Gas价格是以太币(ETH)的数量,而Gas限制是交易执行所需的Gas总量。Gas价格和Gas限制的乘积是以太坊上交易费用的总量。在以太坊上,即使没有计算单位或网络费用,交易也需要支付最小金额的Gas费。
4、在Solana上,最近推出了不受协议控制的区块空间拍卖(Jito),市场份额较以太坊上的MEV-boost(85%)要小得多(25%)。这说明了两个生态系统在块生成和处理MEV方面存在一些根本性差异。
结论
Solana的高速交易处理是其高性能的基础之一。通过删除公共内存池和使用多线程调度程序运行交易,Solana可以实现高吞吐量并将交易处理时间最小化。然而,这种并行执行的模型可能会对开发人员造成负担,因为他们必须指定可能被交易所需的状态。在未来的文章中,我们将探讨Solana与以太坊在MEV捕获和打击方面的差异。
所有评论