作为公链,Solana是一个开源项目。“去中心化的节点网络可匹配单个节点性能”一直是Solana致力于解决的问题。
Solana在模型逻辑的设计上与以太坊方向一致。相较于比特币的UTXO,以太坊通过自动执行、不可篡改的智能合约将区块链“无人值守”的世界进一步拓展,但是又由于安全性和信任问题,自动验证的效率大大降低。
Solana采用工作历史证明PoH作为整个生态中的共识机制,通过SHA256作为验证延迟函数来生产时间戳,以实现SolanaCluster(集群)的异地时间同步。Solana集群又采用名为Turbine的多层块传播机制,以最少的重复消息将事务碎片广播到所有节点。这样的机制使得Solana在不牺牲区块链独有的去中心化特征的同时,能够获得更高的处理速度和吞吐量。
本文将简述Solana的编程模型。
SolanaCluster
SolanaCluster是模型中的一个基础概念,集群是一组协同工作的验证器,用于服务客户机事务和维护分类帐的完整性。在Solana模型中许多集群可能共存,当两个群组共享一个起源块时,它们试图聚合,但传输的错误事务将被直接拒绝。
那么在Solana模型中,如何创建集群、节点如何加入集群、它们如何共享账本,以及它们如何确保账本的正确复制和如何处理错误和恶意节点?
创建集群
在启动任何验证程序之前,首先需要创建一个创世配置,配置引用两个公钥,分别为一个mint和一个引导验证程序。
持有引导验证程序私钥的验证程序负责将第一个条目附加到分类帐,它会用铸币厂的帐户初始化它的内部状态。该帐户将持有创世配置定义的原生令牌数。
然后第二个验证器联系引导验证器以注册为验证器。其他验证器然后向集群的任何注册成员注册。
验证器接收来自领导者的所有条目,并提交确认这些条目有效的投票。投票后,验证器将存储这些条目。一旦验证器发现存在足够数量的副本,它就会删除其副本。
加入集群
验证者通过发送到其控制平面的注册消息进入集群。
控制平面是使用gossip协议实现的,这意味着节点可以向任何现有节点注册,并期望其注册传播到集群中的所有节点。所有节点同步所需的时间与参与集群的节点数的平方成正比。从算法上看这很慢,但作为交换,一个节点可以确保它最终拥有与其他所有节点相同的信息,并且该信息不能被任何一个节点审查。
将交易发送到集群
客户端将交易发送到任何验证器的交易处理单元(TPU)端口。
如果节点处于验证者角色,节点则将交易转发给指定的领导者。
如果处于领导角色,节点则捆绑传入的交易,为它们添加时间戳以创建条目,并将它们推送到集群的数据平面上。
一旦进入数据平面,交易就会由验证器节点验证,有效地将它们附加到分类账中。
确认交易
Solana集群能够对多达150个节点进行亚秒级确认,并计划扩展到数十万个节点。一旦完全实施,确认时间预计只会随着验证者数量的对数而增加,其中对数的基数非常高。
例如,如果基数是一千,这意味着对于前一千个节点,确认将是三个网络跃点的持续时间加上绝对多数中最慢的验证者投票所需的时间。对于接下来的100万个节点,确认仅增加一个网络跃点。
Solana将“确认”定义为从领导者为新条目添加时间戳到它识别出绝大多数分类帐投票的时间的持续时间。
一旦网络增长超过一定规模,gossip网络就太慢而无法实现亚秒级确认。向所有节点发送消息所需的时间与节点数的平方成正比。如果区块链想要实现低确认并尝试使用gossip网络来实现,它将被迫集中在少数节点上。
l?使用VDF样本为事务添加时间戳,并对时间戳进行签名。
l?将事务拆分为多个批,将每个事务发送到单独的节点,并让每个节点与其对等节点共享其批处理。
l?递归地重复上一步,直到所有节点都具有所有批处理。
Solana以固定的时间间隔轮换领导者,并称其为slot。每个领导者只能在其分配的时间段内产生条目。
因此,领导者可以对交易进行时间戳记,以便验证者可以查找指定领导者的公钥。然后领导者签署时间戳,以便验证者可以验证签名,证明签名者是指定领导者公钥的所有者。
接下来,交易被分成批次,以便一个节点可以将交易发送给多方而无需进行多次复制。
例如,如果领导者需要向6个节点发送60笔交易,它会将60笔交易分成10笔交易的批次,并向每个节点发送一笔。这允许领导者在网络上放置60个事务,而不是每个节点60个事务。然后每个节点与其对等节点共享其批次。一旦节点收集了所有6个批次,它就可以重建原始的60个交易集。将60划分为6,而6次就能重新还原60,这是Solana高TPS的关键。
一批事务只有被拆分很多次,才能变得非常小,以至于头文件成为网络带宽的主要消耗者。
在Solana模型中,验证器的数量可以持续扩展,为了实现这一目标——每个节点可以将与领导节点相同的技术应用于另一组相同大小的节点。
Solana集群可以分成小的节点集合,称为“邻域”。每个节点负责与其邻域中的其他节点共享它接收到的任何数据,并将数据传播到其他邻域中的一小组节点。这样,每个节点只需与少量节点通信。
在其时隙期间,领导节点在第一个邻域中的验证器节点之间分配碎片。每个验证器在其邻域内共享其数据,但也会将碎片重新传输到下一层某些邻域中的一个节点。第1层节点每个都与它们的邻居节点共享它们的数据,并重新传输到下一层的节点等,直到集群中的所有节点都收到了所有的碎片。
邻域之间的传输所消耗的性能非常低,同时传输的交易信息却不会随之减少。
例如,宇宙中存在着数个领导者星球,他们负责把一项事物分割成数片存放在小星球之间,相邻的星球只派出一两个信使互相沟通彼此的碎片,同时在一下次传输中将已经获得的碎片继续传输下去,当所有存在碎片的星球都传输过之后,不止所有小星球都拥有了碎片,他们还可以将碎片重新组合成领导者星球所拥有的最完整的原始事务。
据SolanaDocumentation介绍,Solana正在计划将验证器扩展到150个。随着验证者数量的增加,Solana的性能将会持续扩展和提升。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。