'CryptoYC'
研究|Solana——扩容公链的另类尝试
🌿

研究|Solana——扩容公链的另类尝试

与其他公链相似,solana的出现也是为了解决以太坊扩容问题,为去中心化生态提供高效可靠的保障。其创新性的将PoH(Poof of History)引入到共识中,在保证相对安全的情况下大大提高了处理速度。本文试图从Solana的共识机制入手,进而探讨其机制的可靠性。

创始团队简介

Solana 创立于2017年,愿景是做“性能最高的去中心化网络”。总部位于瑞士日内瓦,三位主要创始人Anatoly Yakovenko、Greg Fitzgerald和Stephen Akridge有着非常优秀的初审,来自高通、英特尔、谷歌的技术人员。Anatoly Yakovenko曾就职于高通公司担任核心工程师 13年。

解决的问题

区块链扩展的主流技术:分片和二层。Solana就没有采用分片但同时解决拥堵(目前实现区块时间为800毫秒),解决方案的核心是PoH,和其他的方法(在全网广播时间戳)相比,solana通过使用VDF(可验证的延迟函数)使用sha256计算在本地形成时间戳,提高了网络效率。Solana网络中主要有两个算法:第一个是PoS算法可以从任意大小和有效的流PoRep恢复,第二个就是PoRep和PoH的组合可以防御在时间顺序和存储方面对账本伪造的问题。目前TPS在5w到6.5w,但理论上在标准千兆网络下,可以达到71w。

发展历程

image

历史证明:Proof of History(PoH)

时间推移和时间顺序验证的证明(提供一种加密方式证明两个事件之间的时间推移),优势就是减少BFT状态机中信息传递的消耗。并且让外部计算机可以进行重新计算和验证。

PoH和时间戳

下图简单表示了PoH的时间戳流程,里面包括了索引序列,哈希操作和哈希输出。通常索引为1 的哈希输入为随机字符串。下一步的哈希输入取决于上一步的哈希输出,按序进行,同时如果有附加数据(白皮书中称做event),由combine函数,将附加数据作为input和上一步的哈希值一起输入,产生下一个输出。这里在PoH序列中插入的数据,可以是原始数据也可以是元数据的哈希。输出即为数据时间戳,例如索引366中的哈希添加了photograph1的sha256,输出哈希336就是一个时间戳。

注意这里的哈希都是抗碰撞的并且一个set的哈希只能由单个线性计算机进行计算。

image
image

image

系统结构&角色介绍

PoH generator:网络中可以有很多PoH生成器,用来生成PoH序列,并且每个PoH有自己的identity

Leader:从所有生成器中选出一个,主要去生成所有交易的历史证明序列以保证系统中的唯一全局顺序。每个固定slot换一个leader,每个leader只能在分配时间内添加事件,加上时间戳并对时间戳进行签名。这样就能从公钥找到每个slot负责的leader。

Validator:其实是虚拟节点,消耗的是verifier的带宽,可以运行在和验证器或者leader相同的机器上,或者是一个特定单独的计算器上。

Verifier:验证器节点复制区块链状态,提供高可用性。复制目标由共识算法提供,共识中的validator就会根据外链定义标准选择并投票给他们所信任的PoR(复制证明)节点。

Solana中的PoRep引用的是filecoin论文中提出的PoRep,但solana的版本是为了实现PoRep的快速和流验证,通过记录PoH序列的时间来实现这个目的,这就是之前开头提到的,通过PoRep和PoH的结合防御账本伪造问题。

共识过程

首先说明,PoH不是一个共识机制,它用于改进 Solana PoS的性能,共识过程如下:

  1. 将交易细节作为input给到leader(被选出来的poh生成器)
  2. leader会将有效的将信息进行排序,以便其他节点处理
  3. leader将基于RAM目前状态处理这些交易
  4. 完成过的交易状态和签名接下来会被leader发布给verifier节点(复制节点)
  5. 如果状态接受确认后,verifier将在他们的副本上执行相同的交易并且发布签名(共识过程使用发布确认信息“conformation“作为投票)

image

这么做的原因是因为solana认为八卦网络增长到一定规模以后,确认就会变的非常缓慢,如果想要减少事件,就只能被迫集中到少数几个节点上,所以就使用以下方法:

  1. 使用vdf样本对交易打上时间戳并签名
  2. 将交易分为几批,将每笔交易发送到单独的节点,同时每个节点都与对等节点共享其批次。
  3. 递归地重复上一步,直到所有节点都具有所有批次。

在leader签名之后,交易分成批处理,以便节点可以将交易发送给多方,而无需进行多份复制。官方文档给出一个例子,如果leader需要将60笔交易发送到6个节点,则它将把60笔交易的集合分成10笔交易的批次,并向每个节点发送一批交易。这能将60笔交易放在网络上,而不是每个节点60笔交易。接着,每个节点都与对等节点共享其批次。一旦节点收集了全部6个批次,它将重建60个交易的原始集合。

网络可能出现的问题

1.leader出现失败:当一个leader被选出,但是后面被发现出现错误,那么就会触发重新选举,有最大validator数量的或者最多公钥地址的PoH生成器将会被选出作为新leader。网络中一旦有新的PoH被选出,那么将自动产生一个二级,职责就是来接管交易,当主要的PoH失败之后,rank排在后一位的二级poh将会自动接管(这时候二级变成主要的poh,又会继续产生一个新的二级poh)。

2.无效状态:

a)PoH分叉:每个poh生成器会有特定的identity,当身份标识被破坏,即历史记录中出现一个pho标识有两次签名,被认为无效状态,那么就会由validator通过八卦传播公布一个正确的签名,投票重新进行一次选举。任何接受了错误状态的validator,他的质押bonds都会被罚没,罚没的钱将进入矿池。

b)硬件故障,bug或其他错误都有可能导致生成无效状态,解决方法如上。

3.网络超时也会触发重新选举,一般回应时间为500毫秒。当主要生成器发生超时,那么将会在序列中插入一条准备handover的信息,网络就退回到二级生成器。

关于验证

一个PoH序列只能被单个核心CPU生成,但是输出可以被多个验证者平行验证。

image

验证者主要验证PoRep发送的消息,响应时间为500毫秒,为了避免verifier不工作就只是简单的确认porep,网络将payout在pos验证者和porep中分开,porep会在很小的比例时间内发动错误的证明(也会提供生成错误函数的证明来证明数据是错误的),当verifier确认了这些错误证明,质押就会被罚没。

安全性

理论上来说Solana的机制是足够安全的,首先PoH提供了天然的防攻击,其次就是共识机制提供了第二层防御机制,任何攻击所花费的时间都比清除有效validator的时间要长。从消耗上来说,每秒四千的哈希产生160千字节的数据,需要4000核的GPU花费0.25-0.75毫秒验证。目前最大GPU大概3500+。

PoH和VDF的关系

VDF是一类数学函数,能够使得该函数的计算需要至少一段已知的时间,即使是在同时使用少量 CPU 进行并行计算的情况下。VDF 通常会接受一个输入以及一些参数(安全参数、时间参数等),输出一个结果以及相应的证明(可以为空,前提是结果能够自带证明)。验证者会依据输入、参数、输出以及结果来判断 VDF 的结果是否正确。VDF有两个特性:

1.唯一性:对于任意一个 VDF 的输入,应当有唯一的输出结果能够通过检验。也就是说,不存在两个不同的输出,他们有相同的输入,概率小到可以忽略不计。

2.串行性:攻击者即使能够提前计算很长时间(但不是任意长的时间),并且拥有很多并行处理器(但不是任意多的处理器),利用各种计算方法(确定地计算或是连蒙带猜),能够以少于 t的时间计算出 VDF 结果的概率可以小到忽略不计。

注意在两条特性中提到的概率虽说是小到可以忽略不计,却是始终不为零。但实际运用中VDF的结果检验是非常有效的。

Solana 在 2017 年 11 月首次介绍了PoH技术在区块链中的使用。第二年 6 月, 斯坦福阐述了类似的技术,称为 verifiable delay function(可验证延迟函数)。优势是验证时间非常短,4000个核心GPU足以满足solana的性能需求,但论文作者认为Solana 的方法在算法上很慢 ,因此不应该叫作 VDF,所以solana会继续使用PoH一词。

代币经济

总供应量为5亿枚

来源:https://explorer.solana.com/supply

分配情况

image

创始团队的12.5%有九个月的锁仓期,基金会的分配在网络启动后每个月小幅增加,在推出时解锁了11,365,067 SOL借给做市商6个月。

有效通货膨胀:

  1. 主要燃烧机制,每笔交易的50%transaction fee将被burned,剩下的fee将留给处理交易的validator。
  2. 其他因素:例如私钥丢失和削减事件(例如比特币10%-20%已经丢失并且无法恢复)。SOL期望年损失率大概在1% - 2%。

SOL 供应现在以每年 0.1% 的速度膨胀,新铸造的代币将按其抵押量的比例分配给验证者和抵押者。这个“最终”通胀建议包括 8% 的初始年通胀率。但是,这种通货膨胀率将以每年 15% 的速度下降(“通货膨胀率”)。Solana 的通胀率将继续下降,直到达到 1.5% 的年率,网络在大约十年或 2031 年达到。长期通胀率还是1.5%,除非网络的治理系统投票改变它。总的来说代币经济模型一般。

小结

PoH和PoRep的结合是Solana的技术亮点之一,并且团队希望在几年之内将他们的技术推向主流。在目前表现看来,Solana确实也是加密货币中生态系统增长非常迅速的,八月九月的表现一骑绝尘。但是北京时间9月14日晚Solana的Beta版本宕机超过十几个小时说明Solana对大量负载所产生的分叉并没有可以迅速稳定网络的解决方案,其去中心化存疑。所以对于Solana后面的发展和10亿用户的目标,只有时间可以给出相应的答案。