纵观区块链项目的进化史,改良和创新已经成为必然。
前有以太坊提出智能合约带来区块链2.0与“世界计算机”,后有Polkadot以中继链共享安全建立异构分片架构。
区块链从业者正以分层、算法改进等创新不断组合出了一个个面向业务的解决方案。为去中心化世界带来去中心化商业的基础设施,带来传统业务在去中心化世界标准化复制的机会。
不过无论项目设计如何变化,项目实现的目标是一致的,都是要在保证去中心化的信仰之下塑造出应用生态的辉煌。
如今,在大部分区块链项目选择使用PoS共识后,仍旧有一些项目在改进PoW以利用PoW共识的去中心化特征打造生态繁荣。
本文中,我们就将以公链Starcoin为例,解析其白皮书中的设计思路,展现一个成熟的以PoW共识为基础的成熟方案,为行业提供一个组合创新的范例。
哪些设计理念已成为常规设计?
以太坊是公链的典型代表,其提出了世界计算机的概念实现,想要将互联网业务都运行于区块链网络之上。目前所有的公链,无论是为金融服务,还是拓展到为数据、用户服务,也都在向这个目标努力。
但一条链的网络并不足以实现这些需求,例如比特币虽在金融系统上可以称之为创新,但比特币网络是一个不能运行智能合约的非图灵完备加密货币网络,只有利用加密方式控制的账户地址、资产的功能。
随后以太坊应声而起,以智能合约定义了区块链的优势和特点。同样的,以太坊1.0链也遇到了PoW网络的性能问题。所以以太坊正转向PoS、塑造分片、并且开辟layer2。
从这个路径上看,以太坊已经在塑造分层结构,在以太坊2.0的计划中,信标链通过PoS共识运行完成总账本的验证,而状态执行都将在信标链下的分片中进行,更多独特的扩展功能也可能将设计在layer2层中。
这似乎已经是行业内技术上的共识,波卡、Cosmos等公链都不约而同的向相似结构发展。表现了对“部分信息上链验证”、“分层处理”方案的默许。
Starcoin的分层框架和每层功能定义
为什么呢?因为分层后,可以针对每层出现的问题各个击破。正如Starcoin,通过区块链分层技术,可以在区块链layer1可以达到去中心化和安全,通过layer2又可以达到足够的可扩展性,供商业使用。为此,Starcoin对每层都进行了明确的定义和单独满足需求的技术改良。
Layer1的共识改进和逻辑突破
当我们拆分区块链项目的时候可以发现,layer0是资源层,是由计算设备组成的点对点通信网络层,Layer0可以看到路由、节点(矿机或服务器),在这层资源之上,公链建立了核心的layer1:共识层。
Layer1表现着区块链的特点,保护着一些设计者的信仰。正如比特币的PoW共识对很多信仰者来说,是重要的,因为工作量证明在原则上显示了公平,而PoS共识,与既有权益过于相关。
也因PoW网络是由矿机搭建而成,其成本和挖矿周期代表了矿工更长久的参与。因此很多区块链项目选择将矿机参与组成的共识层作为layer1,这是对PoW共识的信仰和对矿机挖矿经济模型的信任。
Starcoin即是如此,其通过矿机来搭建一个以共享经济为保护的layer1网络。坚持PoW的公平性,也用来防止行业极端变化下的不稳定性冲击。
那Starcoin又如何避免PoW网络带来的既有问题呢?
Starcoin进行了重要创新。以以太坊的设计对比来看,Starcoin的重要创新是在没有改变PoW共识出块和广播流程上,让出块变得动态可控。
首先我们需要了解比特币、以太坊的出块和交易打包方式。
当节点开始确认出块,开始广播后,一段时间内,只有纳入最长链的区块才是被认可的块,最长链的竞争过程会让网络持续分叉,出现孤块、叔块。其原因在于矿工在打包交易前,很可能需要同步新的交易。
NC中本聪共识中的块传播方式
例如,当节点 A 向节点 B 传播一个块并且其中没有新的交易时,节点 B 可以立即将这些紧凑块传输给它的所有相邻节点。但是,如果区块中有新交易,节点 B 必须首先从节点 A 同步这些交易,然后验证这些交易的签名,这个过程需要时间。最终只有当整个区块的有效性得到验证时,节点 B 才能继续传播这个区块。
此时,如果不进行新交易打包,出块时间较短,但如果等待打包新交易,就需要更长的出块时间。
因此,如何确定一个有效的同步时间,并保证新交易不是无序的一直延续的在同步,是极为重要的。
与之相关的,如果孤块增加,也会而影响网络资源使用率和安全性。
Starcoin在这个部分的设计,是令人惊讶的,其操作很简单,像以太坊一样引入了叔块概念,并且对叔块进行统计。
Starcoin中的叔块打包监测
叔块是指孤块中被编入最长链的块,其可以代表网络状态分叉较多,孤块会增加,在网络延迟并且网络拥堵时,叔块也会随之增加,因此,最终叔块的数据可以用来辅助调整出块时间和难度。
Starcoin网络运行时,为了将叔块维持在一个合适的阈值内,在每个小周期(时隙Epoch)末,都会重新调整下一个周期的出块时间,同时调整的还有挖矿难度。
其逻辑在于,如果叔块率较高,表示当前的出块时间间隔下,网络中存在较多的分叉和孤块,需要调大出块的时间,缓解此问题。反之,则说明全网出块情况良好,还可能进一步缩短出块时间,提高全网吞吐。
Starcoin引入叔块的方式对于网络本书来说,是自然的。不过还有一些公链可能会选择设计特殊的切入点。
例如当打包前出现新交易时,可以将区块空间中引入一个“叔块头”概念,其不占据交易验证的体积。但可以把新交易引入叔块头,然后重新设计一个提交区用来验证交易。
这是一种把影响区块打包速度的“新交易”剥离正常区块验证步骤,转换成其他方式验证提交的方法。与Starcoin的方式不同,它改变了验证方式。
因此,综合来看,在layer1网络(即比特币PoW网络)上做改进,首先是先增加小周期(时隙Epoch)用来快速调整出块难度。
其次就是解决区块打包等待新交易的问题,Starcoin的设计和选择是明确的,在不用重新把新交易单独处理的情况下,只通过叔块监测数据而调整出块时间和挖矿难度,这样是将PoW网络演变成了一个动态吞吐网络,其规则像是在高速公路中添加了指挥员,随时指挥车辆的速度,这样的改变虽小,却可以改善PoW链在拥堵时的表现。并且,笔者认为,出块时间随网络状态可调整已经成为新公链系统的重要特性之一。
在Layer2大展拳脚
Starcoin已经改进了比特币、以太坊的PoW模型。而在layer2上,Starcoin设计为专注于解决资产转移交换等过程中的扩展性和性能问题。只是目前,layer2解决方案正处于“百花齐放,暂时无王”的阶段,同时面对多个的layer2的解决方案,需要Starcoin设计团队明确需求后做出选择。
目前,在Starcoin白皮书中并未展示其部分,其官方表示会在白皮书2.0版本中公布layer2方案。我们可以通过Starcoin对分层网络功能的定义去推测其layer2的设计。
layer2和layer1的普通状态关系
从逻辑上看,layer2是layer1状态的迁移交互,因此首先来看Starcoin Layer1职能,详情如下:
1. 通过增强的中本聪共识机制来尽可能的在保证安全的基础上在Layer1扩容,最大化Layer1网络的利用率。
2. 提供资产的定义,发行,以及流转,以及layer1、layer2之间的流转能力。
3. 给layer2提供仲裁能力,layer2可以利用Layer1的安全机制来保证自己的安全。
而这时layer2职能是:
1. 将Layer1的交易分流到layer2,Layer1不再关心layer2交易的细节以状态的变更。
2. 提供监督机制,layer2的不同角色之间可以互相监督。
3. 提供证据保全能力,用户如果对layer2的交易有争议,可以到Layer1仲裁。
由此来看,首先Layer1、layer2间的互相交互必须保证实现,因为这相关于Layer1、layer2资产流转的需求以及有相互证明状态有效的方式。其次,Starcoin还强调了layer2不同角色可以互相监督。
Layer1、layer2间的状态锁定和证明间的交互
这样的需求使用单个layer2技术是无法实现的。例如以太坊上的rollup,其两层链间的双向交互并不完善。例如零知识证明,虽可以保证两层链间交互数据的安全性,却无法在layer2的角色设计和数据可用性上发力。
所以可以推测的是,未来Starcoin一定会在layer2使用多技术组合方案,这在其公示出的layer2思路上得到一些证实,其抽象出一种通用的layer2方案模型如下:
1. 应用的状态(包括资产)在Layer1和layer2之间安全的转移。
2. 保证layer2的数据可用性。
3. 提供证明和提供仲裁机制。
上文说到,从逻辑上看,任何layer2方案都是Layer1的状态迁移,详细过程可能包含将状态锁定并在layer2重建等。因此,我们来看公示的模型,如果layer1和layer2都有统一的资源模型,那状态迁移就不是难事,如果两层链都用统一的框架搭建,数据可用性也不是问题,可能唯一遇到的问题会是合约迁移。而Starcoin很亮眼的是,其合约也是无状态设计,因为合约并入了账户模型里,状态已经被确定了所有权。交互中直接访问状态即可执行。
综上,我们可以对Starcoin抱有足够的期待,笔者认为在layer2技术上,Starcoin的重点并不在改良技术,而是对行业内多类技术的组合与实现,在Starcoin的基础优势(例如账户、存储模型、编程语言)上占据优势即可。
巧妙设计以为长远规划
分层结构以及对layer1、layer2的单独设计,塑造了Starcoin的基本能力,而千变万化的业务需要要求在一些标准化的设计上仍要具备优势。
这就要提及Starcoin一些有利于长远发展的巧妙设计。这些设计虽然讨论不多,但却是公链系统不可或缺的特性。
足以称之为巧妙设计的,有3点,分别是更改账户模型和状态存储,支持多种验证合法性的方式、双累加模型,以及基于Move开发语言的适配。
1)更改账户模型和相应的状态存储之后,Starcoin得以实现以太坊无法顺利进行的状态计费计算。
对比以太坊来看,以太坊将账号分为合约账号和用户账号。合约账号用于部署合约的代码以及存储合约的状态,用户在某个合约中的状态都保存到该合约账号下,读写权限也由合约自己控制。这样的设计自由度很高,但导致合约状态的所有权不明确,从而容易带来安全上的问题以及很难解决"状态爆炸"问题。
Starcoin更改后的账户模型
这样的设计带来了以太坊拥堵情况下,Gas费的暴增以及复杂合约调用成本的居高不下。
因此,Starcoin 以太坊账户模型基础上做了以下改进:
1. 废弃了合约账号,任意账号都可以部署智能合约,部署的智能合约在当前账号下。
2. 通过对合约编程语言中状态存储机制的改变,让智能合约的开发者很容易的把合约的状态分散保存到该状态所属的用户地址下,从而明确状态的所有权。
通过这样的改造,一方面增强了链对用户状态的安全保护能力,另外一方面也为状态计费提供了可能。未来Starcoin会支持token支付gas,便于用户和开发者使用。
2)从上文的讨论中,我们还能看到多次提到区块链验证,足以证明验证数据是区块链运行刚需,在 Starcoin 的整体设计中,还提供了四个层面的数据校验机制,这些机制,可以提供全场景下的数据验证逻辑。
1. 交易可校验:BlockHeader 包含一个全局交易累加器的根哈希,任何上链的交易都有对应的全局证明。
2. 状态可校验:BlockHeader 包含一个全局状态状态树的根哈希,保障了状态可验证。
3. 区块可校验:BlockHeader 包含一个 BlockBody 的哈希,用于校验 BlockBody 中的数据。
4. 链可校验:BlockHeader 包含一个全局区块累加器的根哈希。任何一个区块可以提供一个和当前区块的关系证明,不需要遍历区块即可验证某个区块是否是当前区块的祖先区块。
Starcoin区块头中的的全局区块累加和根哈希示意
在四个维度的数据校验的基础上,再配合Starcoin的合约和账户模型,「交易累加器」和「区块累积器」组成了Starcoin独特的「双累加器」模型,这将成为Starcoin系统数据安全的基础。也可以通过数据合法性的优势为很多业务服务,例如跨链数据交互验证。
3)为了更好地扩展区块链的能力,Starcoin 还将 Move 语言作为智能合约,以保证针对数字资产的编程更加安全、简单。
Move 语言是Facebook稳定币项目Libra(已更名为Diem)的开发语言,该语言尤其重视安全性,主要由以下几个方面保证:
1. 自底向上的静态类型系统;
2. 资源不可复制或者隐式丢弃;
3. 资源按用户存储,重新定义链,合约,用户三方的数据操作权限;
4. 引入形式化验证技术,通过数学原理来证明合约的安全性;
更重要的是,Starcoin团队已经通过 Move 语言建立了Move开发社区,通过开源社区,可以获得开发技术、开发资源以及人才储备和未来的生态项目孵化能力。
写在最后
从Starcoin白皮书中详实的设计,再到Starcoin已经完成的技术进展,综合来看。 Starcoin除了未确认的layer2外,其网络从0到1的过程已经完成了80%,其中最关键的要数layer1中对PoW共识的改进。小小的改进,让Starcoin可以坚持使用PoW,可以建立一个挖矿生态。
如果说挖矿生态是建立layer1的支柱,当layer1和layer2组合使用后, Starcoin也会因layer2层对应用的扩展为DeFi、NFT的应用土壤。
其原因有四:
其一,Starcoin有稳固的矿工经济做支撑,网络生命力远胜其他PoS网络。
其二,layer1层的账户模型和存储的设计让 Starcoin Gas费更低。
其三,使用Move语言与PoW配合,足够安全,又具备比特币金融系统的基因。
其四,layer2的执行让Starcoin虽使用PoW但性能完全可以承载DeFi等应用。
为了让以太坊的性能达标,以太坊团队用了7年时间,才做好了PoW向PoS转换的准备,但切换共识还没有真正进行,信标链的稳定性还没有经历合并后的考验。如今,我们信任以太坊的DeFi、NFT,是运行在PoW链上的,用户对PoW信任一定高于还未得到全面证实的PoS。
如此来看,笔者认为,Starcoin将成为一个保持比特币金融系统基因,又具备图灵完备能力的安全智能合约运行平台。这是一个可以承担以太坊DeFi需求的平台,也是比特币信仰者曾经畅想也可以在未来使用的平台。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/industrynews/45624.html