朋友们大家好,今天我们聊聊Solana。
Solana是一条高性能公链,以交易速度快和交易费用低著称。
第一个问题就是:什么是公链?
什么是公链
Chatgpt老师的回答是:公链(Public Blockchain)是一种分布式账本技术网络,任何人都可以自由参与和访问。它是区块链技术的最典型形式,旨在实现完全去中心化和开放性。
我用人话翻译一下,公链是基础设施,是去中心化世界的基础。
一个通俗的比喻,公链相当于操作系统。比如IOS、安卓、Window、Linux,它们都是基础设施,在操作系统之上有软件、应用、app,有开发者、用户、服务各种各样的人提供服务、建立生态、互相挣钱。这些操作系统粗粗看上去都差不多,都能发微信、打电话、打王者、玩元神,用户知道IOS和安卓手机的系统不一样,但又说不出来具体哪不一样。
公链也是这样,BTC公链、以太坊公链、币安链、Solana也是类似的,它们是区块链世界的基础设施,是生态的基础,每条公链的原理都不太一样,但是基础的功能又都差不多。
在已经有BTC和以太坊两大巨头之下,Solana凭什么能杀出重围,成为原生代币市值排名第三的公链?原因就是Solana又快又便宜。
在详细解释它之前,我们先看看为什么其他的公链,又慢又贵呢?
为什么其他的区块链网络那么慢
快慢是个相对概念,是比较出来的,通常会用TPS也就是每秒交易处理能力来衡量。
比特币网络的TPS是7,以太坊大概是15-20,而目前大家常用的卡组织,它们的TPS根本不在一个数量级,峰值情况下Visa和Master大概是5-6万,而银联的峰值TPS甚至可以到达24万。
毫无疑问,以太坊和BTC网络都很慢。和传统金融比起来,区块链的性能简直过于孱弱。
为什么比特币和以太坊这么慢呢?
主要原因是:在去中心化环境中,快速出块和快速达成共识是矛盾的。
在区块链中,交易写入区块链,并且和网络中的其他节点达成共识,大家都认可、都把这条交易写入账本中,这条交易就确认完成了。
因此TPS是这样被计算出来的:多长时间创造一个新区块,以及一个区块中能写入多少笔交易。
对于BTC来说,10分钟创造一个新区块,每个区块大概1M,每笔交易250字节,算下来大概7笔/秒。
是不是只要区块创造的足够快、每个区块足够大,TPS就能无限上涨呢?
不是这样,因为达成共识也要时间。
现在比特币网络设定在10min产生一个新的区块,是给网络中的节点通信预留了时间。每一个发现新区块的节点都会在向网络中的所有节点广播:我要打包新区块链了哦,我先写入,你们快来验证一下,没问题你们就写跟我一样的。
BTC网络中,节点达成共识的通信方式叫“八卦协议”,不是诸葛亮的那个八卦,而是传八卦的八卦Gossip。
模拟我们传八卦的形式通信方式:节点接收到信息后会随机传递给其他节点。就像在在茶水间碰见随机碰见不同同事,抓住谁就向谁分享新获得的八卦。八卦的传递路径是随机的,有可能多个同事都跟你分享了同一个八卦,好处是网络容错能力比较强,所有人都互相分享,总能获知消息;缺点就是通信成本比较高,同一条八卦可能听了好几次,信息有可能被多次重复传递。
节点互相通信、以及验证都需要时间,如果区块产生的过于快,来不及传递达成共识就又产生了新的,而网络中所有的节点都是平等的,意味着所有节点都有机会打包新区块,当所有人都来不及和其他人沟通,新区块就又产生了,然后就乱了。
一旦乱了,就意味着不存在共识了,每个节点都账本都不相同,100个人有100套账,网络可以崩溃瓦解了。
有点像小朋友在课堂上发言,一个人说完,大家讨论,再下一个人发言,大家接受的是有效的信息传递,当所有人同步说话的时候,只有一片混乱。
Solana为什么能那么快
如果说,在去中心化网络中,快速出块和快速达成共识是矛盾的,那Solana做了什么突破了性能瓶颈呢?
在上一部分我们谈到,区块链的吞吐速度由出块时间和达成共识的时间决定,Solana也是围绕这两部分分别提升。
并行处理提升出块速度
为了防止“双花”情况出现,区块链的执行通常是串行的,避免一笔钱同时转给两个人,产生无中生有的效果。
但是串行一定慢,就像在超市结账,只开一个结账窗口意味着所有人都要排队,加速进度的方式是“并行”——多开几个窗口同时结账。
Sealevel就是在处理这个问题,前置判定这笔交易是否有依赖项,是否访问不同的账户和数据,有依赖项就串行处理,没有依赖性就能并行处理。
Pipeling的并行表现在获取、验证、存储的并行,分工的流水线作业,大大提升了出块速度。
结果就是Solana的平均出块时间达到了惊人的400毫秒。
层级网络加快形成共识
Gossip协议的优点是稳健,缺点是所有节点间随机通信,效率低。
想象一下一条发生在北京的消息,是通过八卦网络,邻居之间口口相传传到青海快,还是通过政令通道,中央传到省、省到市、市到乡,再到个人效率高呢。
如果给节点之间建立层次关系,就能更有效的通信。
Solana网络中的节点并不是完全平等的,有轮值的Leader节点作为核心,其他节点根据质押比例多寡决定靠近核心的远近。
层级关系带来的好处就是通信效率大幅提升。
Solana中的Turbine通信,就利用了网络的层级结构,节点之间有导向性的传递消息。从第0层核心,到第1层高质押节点,再从第1层传递到它周围的节点,仅两跳传递,信息能够覆盖的节点范围就非常广了。
Gulf stream使得Solana的待处理交易池非常浅,也是充分利用了层级网络。根据Leader轮值表把待处理交易提前发给下一个、下下一个Leader处理,把工作做在前边,滞留在待处理池自然就少了。
边缘节点优先向核心节点通信——处理交易;核心节点分层向外通信——验证交易、产生共识。
节点的分级,使得通信效率大幅提升。
加上PoH的历史证明方式,使得每一笔交易都有一个时间戳,相当于给所有的交易做的全局排序,把交易记录也成链的串起来。验证节点验证的成本就小了很多。
层级网络的有效快速沟通,加之PoH的全局排序,使得Solana网络中的节点能够快速达成共识。
在400ms的极速出块前提下,Solana网络中的节点也能有效达成共识,理论上设计TPS可以高达6.5万。
而这个吞吐量已经可以和卡组织的峰值TPS媲美了。
越复杂越脆弱
在Solana官网上,有它的八大创新,在白皮书中也花了30页的篇幅详细介绍了什么是PoH。和BTC网络比起来真的复杂了非常多倍。复杂的设计除了能带来高性能之外,副作用就是过于脆弱,从上线以来,宕机次数有一只手都数不过来。
对于Solana不稳定的服务,很多人都指责是因为不够“去中心化”。
我的个人观点:中心化不一定代表服务脆弱。同理,去中心化也不代表绝对的安全。
以大家都很熟悉的电商平台为例,京东淘宝拼多多,哪一家都是中心化的网络平台,商家的交易都要过平台,商品由平台审核后发布。但过往一年能够感知到的淘宝宕机微乎其微,只要容灾备份做的好,高可用演练多来几次,即使某处机房着火了都不影响线上服务。
而去中心化做的再好也不能完全杜绝代码有问题、有bug被攻击的情况产生。
每一次的宕机都有不同的原因,我相信Solana团队也在尽力修补漏洞,让公链服务更加可靠。
反倒是过于复杂的设计,会带来脆弱的系统。
也许现在的Solana团队还没有掌控这么复杂项目的能力,也许是这套公链方案设计本身存在缺陷,需要继续打补丁。
Solana需要成长,但去中心化不是安全的必要条件。
权衡与平衡
理解了Solana高速吞吐的原理之后,我意识到它的性能突破是牺牲了部分去中心化特性换来的。
极端的去中心化意味着节点之间完全平等,达成共识并不容易,需要反复通信,结果就是效率低下。如果暂时不能理解,就回想一下开会的时候如果都是平级同事,很难达成一致,总得有一个人站出来主持大局。
极端中心化的状态下,不需要达成共识,所有节点都听从中心节点的安排就行,令行禁止,效率非凡,就像领导指派工作,大多数情况下员工只能说“好的收到”。
去中心化不是绝对的有或无的概念,中心化与去中心化也不是非0即1的关系,大概是个光谱。
做个不恰当的类比,极端的中心化就像古代的皇帝,所有人都听一个人的;
极端的去中心化大概是无政府状态,谁也不领导谁,比如比特币网络,节点之间平等通信。
但是在0和1之间,还有广阔的中间地带,很难说绝对的中心化还是绝对的去中心化。
比如班级管理中所有小朋友轮流当班长,谁都是中心但谁又都不是中心,这是Solana的轮值Leader方式;
再比如每年竞选,在所有小朋友中选出几个人组成班委,定期轮换,长期来看“核心”并不稳定集中,也是介于中心化与去中心化的模糊地带。
效率和去中心化的权衡,没有十全十美,也不会有“多快好省”俱全。
BTC用缓慢处理速度换来了安全稳定的去中心化网络,以太坊网络向效率方向迈了一小步,如今的Solana迈了一大步出去,当然代价也显而易见。
我觉得Solana的尝试是积极的,一片空白的世界不应该只有两个巨头,它俩合起来也吃不下整个生态系统。还有很多场景的需求没有满足,很多问题需要解决。
解决的过程也是寻找平衡的过程:在绝对的去中心化,和绝对的效率两极中间,什么情况下应该选择什么,什么情况下又应该牺牲什么。
Solana权衡利弊,踩在了效率和去中心化跷跷板的一个点上。
但跷跷板不止一个点,三足鼎立也许也不是终态,一起且行且看,朋友们我们下周见。