专栏名称: TheSeeDAO
让创作者进入Web3.0!
目录
相关文章推荐
新周刊  ·  就冲这 4 点,女性也一定要多吃肉啊! ·  8 小时前  
鸡西新闻网  ·  周五早安 | ... ·  昨天  
鸡西新闻网  ·  周五早安 | ... ·  昨天  
三联生活周刊  ·  这个“隐形杀手”,正在毁掉你的事业运 ·  2 天前  
51好读  ›  专栏  ›  TheSeeDAO

Solana 开发系列 1 - 理解 Solana

TheSeeDAO  · 公众号  ·  · 2025-01-22 17:41

正文

这是一个系列文章介绍 Solana 开发。

Solana 是一个高性能的区块链平台,通过独特的共识机制和账户模型实现高吞吐量和低延。

作为系列文章第一篇,这篇文章主要介绍 Solana 开发前需要了解的一些知识:

  1. Solana 诞生背景
  2. Solana 是如何出块(共识运作)
  3. Solana 核心概念:账户模型、PDA、交易及费用、集群等。

Solana 诞生背景

Solana 于 2017 年由 Anatoly Yakovenko 创立。Anatoly 选择名为 Solana 的名字,以致敬他们在工作于高通期间住和冲浪了三年的圣地亚哥北部的一个小海滩城镇Solana Beach。

在创立 Solana 之前,Anatoly 在高通、Mesosphere 和 Dropbox 工作过多年,在高性能网络和分布式系统领域有着丰富经验。

他认识到区块链在可扩展性方面的瓶颈限制了其大规模应用的潜力。受到分布式系统中时间同步技术的启发,他提出了 Proof of History (PoH) 的概念。用于在不信任彼此的计算机之间进行时间同步。

一起看看 Solana 如何应用 PoH 实现验证者之间的高效同步的。

Solana 共识 -  如何出块

注:Solana 共识算法文档有些过时,这部分的内容是参考 深入 Solana 共识 加上我理解。

Solana 是一条权益证明(PoS)区块链,共识算法遵循两阶段:1. 选出验证者 出块 2. 其他验证者对块进行投票,积累了足够多投票之后,区块被最终确认。

选出验证者

在 Solana 的协议中,有两个重要时间间隔相关的词: Epoch 时隙(slot)

  • 时隙(slot): 验证者生成区块的时间单位。每个时隙可以生成一个区块,每个时隙持续 400 毫秒。
  • Epoch: 在每个Epoch 开始时,Solana 网络会根据质押权重和之前的区块随机选举出一个验证者(称为领导者Leader)序列 , 这个领导者序列负责在该Epoch 内出块,领导者序列在此期间保持固定,每个领导者可以连续处理 4 个 Slot (即出 4 个块),每个Epoch大约持续两天(包含 432,000 个 Slot)。直到下一个Epoch 重新产生领导者 Leader。

上图中,每个有颜色的块表示一个区块,不同的颜色表示不同的验证出的块。

随机选举这里不细说(主要是不懂),在每个 Epoch 开始时,验证者就会知道在哪些 slot 需要他来出块。

但是这里有 两个问题 需要解决:

  1. 验证者怎么知道该轮到自己出块了?如果只依靠网络通信,由上一个验证者告诉下一个验证者,很可能由于网络延迟(或上一个验证者掉线了)错过宝贵的出块时间,毕竟出块时间只有 0.4 秒。
  2. 如何在一个块里面,塞入尽可能多的交易。如果类似以太坊一个交易一个交易接着执行,这么短的时间里,是放不了很多交易的。

Solana 最重要的创新 - POH , 主要就是用来解决这两个问题的。

出块

Solana 为了实现高性能,引入了并行处理交易, 把交易的排序和执行分成了两个阶段,这样执行阶段就可以并行处理了。

其他验证者在验证交易时,也是按照同样的排序序列来执行验证,为了让交易排序序列可以被验证, Solana 使用  POH 历史证明哈希链的方式来确定交易的顺序。

PoH 通过创建一系列加密哈希(SHA256 算法),每次哈希计算都需要使用前一个哈希值,这样就可以确保下一个哈希总是在上一个哈希之后发生,因此 POH 哈希链结合介意数据就可以确定交易次序。

只需要在计算哈希时,加入交易数据作为输入的一部分,就可以确定交易的序列。而且这个序列是可并行可验证和不可篡改的。

当前的 领导验证者 会不停从 RPC服务器和其他的验证者那里接收交易,做了初步的验证(如验证交易签名和账户余额)之后,就会加入的 POH 哈希链的计算当中排序,即给每笔交易打上一个全局、可验证的时间顺序标签,然后再对交易进行并行执行。

在 Solana 中,整个 交易处理流程 被拆分成多个相互衔接的阶段(交易验证阶段、POH 排序阶段、执行阶段、广播阶段),形成一个 流水线(pipeline) 。不同阶段之间可以并行、重叠地处理不同批次的交易,就不同 CPU 核或 GPU 在同时处理某一批交易的验证核另一批交易的执行(称为banking)。

交易的执行也是并行的,交易执行基于 账户的读写依赖 来安排并行度,将交易按照依赖分组,并行的放进不同线程/CPU 核心/GPU 任务中执行。

若两笔交易操作的账户完全不同或都是只读,理论上可以同时执行;如果存在写冲突,则必须按顺序执行,避免数据不一致。

现在我们明白了 Solana 出块的过程,这个如上的方式,Solana 在单个 Slot(约 400ms)内能够处理大量交易。

POH - 同步时钟

还有一个问题,验证者怎么知道该轮到自己出块了?

每次哈希操作都是需要最小时间,且每次哈希计算都需要使用前一个哈希值。这确保了无法进行并行化。因此PoH 哈希链,可以作为时间流逝的证明。

在 Solana 中,每个区块(的PoH 哈希链)必须包含 12,500 个哈希。当前Slot 的领导者负责生成这些 PoH 链(区块)。

实际上,没有验证者都在后台自己计算着 PoH 链(没有交易数据的空 Hash 链),如果前一个领导者(或多个前领导者)未发布区块(或者当前领导者未收到),只要经过 Slot 要求的哈希数量,当前领导者就可以按时生成区块。

如下图 Slot3 离线,Slot4 的验证者为 slot3 填充 PoH 序列。

验证和投票区块

区块的验证过程包括验证区块元数据和重新计算 PoH 哈希,会验证并重放来自区块的所有交易,并更新账本。

验证通过后,通过投票表示验证者对一个区块的承诺,验证者持有的委托权益(币)越多,投票的权重就越大。

通常,验证者会选择 最重 的链出块和投票,如果出现了前一个领导者的区块未能到达当前领导者, 则可能会出现分叉的情况:

在分叉的情况下,验证者会为每个子树计算总的按股份加权投票,并选择投票最多的那个。如果一个区块获得至少三分之二的持权加权投票,则该区块被确认。

Solana 核心概念

Solana 账户







请到「今天看啥」查看全文