本文是《区块链技术手册》系列的第二篇,目标是为了让读者可以懂得一条链是如何搭建起来的,也可以理解加密货币项目的网络结构。
第二篇选题选择有关TEE,原因是TEE是一个非区块链领域的硬件,但却是我们生活中可用不可知的硬件,例如英特尔2015年后的CPU都有TEE。这样读者可以清楚的感受到网络每个部分的存在,了解到区块链究竟是我们所谓的链、加密货币网络里的哪个部分?
本文内容会相关于3个项目,3个项目都是使用TEE特性的项目,每个项目的网络结构各不相同,但都有明显的分层特征,TEE的性能被这三个网络运用在了网络中的重要部分。文中会对3个网络结构进行解构和对比,希望对比之后,你会清晰的了解到一个加密货币网络的搭建是如何进行的?
另外,《区块链技术手册》系列在后续的篇章中还会继续介绍将其他特征的公链。话不多说,进入今天的正题。
一条公链,可以称为一个应用开发网络,网络聚集了IT资源,开发者利用资源开发应用,所以网络最基础的部分是通信。
公链在基础通信层之上,会加入共识,因为网络由节点组成,节点间是通过共识协同完成网络任务的。其中会有很多承担不同功能的节点,例如大分类上可以分为全节点、轻节点。
在不同网络中,节点的功能可能会被细分成更多分类,例如共识节点、汇总节点、归档节点等。这些节点都有全节点的功能,但会被加入其他功能的开关。
每个节点都有不同的运行方,所以节点背后是人,这赋予了节点有一定角色意义。这也是加密货币网络被称为人类治理实践的原因,加密货币网络的创建,需要创始团队先建立自己的节点运行网络,然后吸引其他人建立节点加入网络,使网络逐渐健壮,继续成为开发者开发dApp的土地。
无论加密货币网络设计如何,网络都需要节点参与,节点是it资源的来源,还需要保证节点运行稳定。所以大部分节点参与是由代币激励实现的,通过经济收益方式引入节点、保证节点稳定。代币激励也要有“循环”,所以在网络上层,使用者会消耗网络资源,所以需要支付提供资源的费用。例如gas费。
运行原则上最重要的是每个链要有一个总帐本,共识节点负责验证交易形成总帐本,像比特币一样。但如果网络既要保证安全还要高性能的情况下,就不能只有一个网络,要把很多的处理任务分摊出去,否则就会和比特币、PoW的以太坊一样。
这里的原则是为了网络扩容和可拓展性,在验证交易组成总帐本的网络之外还需要多个负责计算的网络,也就是在主链外做很多处理网络交易的节点,这些节点会组成新的网络层,也就会形成分层。
为了扩容和可拓展性的工程实践,目前很多项目都引入了模块化的思维,模块化和分层有同样的意义,分层是纵向的分割,模块化更加深入每一个细节,因为会包含在单独分层内的模块分割。
以上的逻辑是加密货币网络生长的基础思路。在这个思维逻辑之上,最难的莫过于网络从0到1。本文会以Oasis、Phala、Crust三个网络的结构和节点搭建解读这件事。
让我们先看一下三个加密货币项目的网络结构。Oasis、Phala、Crust三个项目都有分层的思路,第一步是把共识层先分离出来。
Oasis有一个单独的共识层,共识层由具有稳定信用的企业或组织建立,节点间通信依靠Tendermint算法,确认出块。
Phala也拥有独立的共识层,但设计较为特殊,因为Phala把共识的计算节点称为GateKeeper,GateKeeper的节点设施是具备TEE的,节点间算法使用NPOS(可参照波卡的NPOS)。
Crust则把共识层设计的更加复杂一些,因为用了混合共识,共识节点利用TEE硬件搭建,底层使用的是可证明有意义工作量的共识MPoW,目的是在把节点存储文件的证明可信的计算出来。MPoW之上还有一层GPoS共识的共识层,MPoW层的计算结果(也就是节点的有意义工作量)会上传到GPoS层出块,所以GPoS层负责确认出块,是总帐本的生成层。
三个项目的共识层是这样做的,那接下来共识层之外选择了怎样的设计?
Oasis的架构是共识层加Paratime层,也就是除了共识层外,都是Paratime,理解上Paratime是一个单独的计算节点群,每一个Paratime都可以有自己的特点,这一层负责计算和存储,每个Paratime里会有委员会节点保证将Paratime的元数据上传到共识层。
这里需要提的是,目前TEE的硬件是可以运用到Paratime里,但Paratime的特点不仅仅局限于TEE,还会包含其他类型的技术特性。
Phala的共识层外,是计算层,这一层由许多并行执行的保密合约(来自TEE)组成,也就是具备TEE的计算节点,每个TEE独立与共识层通讯,每个计算节点运行一个pRuntime,这样的设计是把计算下放到矿工,以实现扩容,而Gatekeeper(共识层)负责计算的安全性。从结构上看,每一个TEE计算节点的pRuntime,和Oasis的Paratime很类似。
Phala的网络结构(共识层+计算层)
Crust除了MPoW、GPoS共识层外,接下来就是计算层和存储层,因为Crust将分布式存储的概念做了主要实现,所以在计算和存储层直接通过类似云服务的产品实现,单独做一层设计也是很合理的,这样与其余两个项目相比,Crust是把计算层和存储层直接产品化了,这个思路从项目背景来看,是想把存储和计算资源市场化的表现。也就可以把这一层做为服务层。
理解了设计总结构,接下来的解构主要是节点类别,前文我们提到,节点都有角色属性,节点背后是人,当节点组成网络,网络就会因为人的因素而存在一些表象,比特币以太坊都是如此,因为PoW挖矿让很多PoW网络已经远远超过稳定阈值,表现稳定,此外,历史上的PoS实验虽不足以称之为成功,但维持网络稳定运作是绰绰有余的。先从0到1之后,才有其他可能。
对于公链团队来说,搞定节点背后的人,就可以让网络稳定,慢慢从0到1。接下来就让我们看看,这三个项目的网络都由哪些节点?如何参与?
Oasis的节点会分为:共识节点、Paratime节点(Paratime里会包含委员会节点),其中共识节点需要运行Tendermint Core以及Oasis Core。节点可以在本地部署,也可以部署在服务器。
具体操作流程可参阅
https://docs.Oasis.dev/general/run-a-node/set-up-your-node/run-validator
Paratime层的节点是需要运行Runtime客户端,节点聚集成网,互相协作,其中会有一个委员会节点负责将所有的元数据发送给共识层。而当这个Paratime是具备TEE的,会通过协议控制方式控制TEE,使用TEE做远程认证和执行调用。
Oasis的网络结构(共识层+Paratime层)
Phala的网络则分为GateKeeper、全节点(归档节点可理解为包含在全节点内),网络分为共识层和计算层就可以了,网络的共识层是一个区块链,是由GateKeeper节点组成完成,然后全节点进行汇总碎片和块存储。计算层来运行保密合约,由分散的TEE计算节点组成。
其中所有节点都需要运行三个软件:Phala节点、pRuntime、桥。运行Phala客户端,节点运行硬件需要满足需要满足硬件需求,目前支持Intel SGX,未来会引入AMD SEV也就是英特尔的固定配置。此外,这些节点的配置相同,在运行时只是因为打开开关的不同,而成为不同的角色。例如GateKeeper是需要单独报备一下TEE,才能成为GateKeeper。
关于节点运行操作流程,可参阅
https://wiki.Phala.network/en-us/docs/poc2/run-a-full-node/
另外Phala主网还未上线,现在是第三测试网,已经开放了计算节点(矿工)可以自由接入。
Crust网络结构相比两者复杂,从节点功能上看分为MPoW节点(也是分布式存储节点)、GPoS节点,但从节点的运营者角色去归类,节点类别并没有那么多,都在为去中心化存储市场DSM服务。
所以,具有存储资源的用户可以运行两种节点:验证人和候选人。
验证人是Crust网络中负责打包并生成区块的节点,维护着整个区块链网络的共识,这里的共识是GPoS共识。验证人节点也是一个提供存储资源的节点。MPoW共识统计的就是存储工作量,所以验证人也同时运行MPoW层的节点,运行客户端为Crust(GPoS)、Crust sWorker(MPoW)。
Crust的网络结构(MPoW+GPoS+DSM)
节点具体操作可参阅
https://github.com/crustio/crust/wiki,其中包含Crust测试网参与方式和节点安装手册。
另外的节点角色是候选人,是Crust 网络中参与竞争成为验证人,但没有获得验证资格的节点,其和验证人的区别是,候选人节点不参与生成区块,不能获得单独给予生成区块节点的奖励,但是候选人可以获得区块链每个周期的奖励分成。也就是需要安装节点,等待候选。
当我们看完三个网络的搭建过程,可以至少我们对网络有一个清晰的初步的结构认识了,那这些网络设计的原则是什么?创新点又在哪里?
比特币建立一个网络,用共识对抗双花,以太坊增加智能合约,网络变成可以编程的,但以太坊并没有摆脱PoW,Eth2.0还有待验证,也是因为完全自由意义的质押验证者出块的实践仍不稳定,历来,那些承担主要运营节点的,都会是网络里大的利益相关方。
现在网络设计趋向的目标是扩容和拓展,而原则上要还要包含经济原则和工程原则。继而出现分层或模块化的思路。例如Oasis的共识层里Oasis Core和Tendermint Core在功能上是完全分离的,理论上可以更换其他共识,这就是模块化。而Paretime层的多样性意味着拓展性,Paratime没有局限于使用TEE,或者要求所有节点都用TEE。
另外实现网络规模发展,都是经济原则驱动的,整个网络有一个经济运作的闭环,大部分是建节点,共享资源、出块,然后获得奖励。网络的实操创新可能会集中在让参与者收益更均衡、公平。
例如Phala的思路是汇集散布在世界各地的闲置可信计算算力,因为更去中心化就意味着更加安全。无论是家用电脑还是服务器,只要可以为网络贡献计算资源,都可以加入网络以获取收益。工程化上,Phala在设计之初比较注重可组合性,因此在实现上融入了波卡的跨链协议XCMP,这也为未来Phala成为波卡平行链作准备。
Crust除了关于以上的网络原则设计,创新上主要是做了针对分布式存储的设计,也就是要共享存储,以及形成类云服务,这是更加面向产品端的一个调整。Crust也是波卡生态内的项目,未来的产品端会集成到波卡生态标准的Apps里(Apps.Crust.network)。
未来看,三个项目从0到1的关键,可能还是会集中在激励上,因为代币是项目各部分自运行的动力。经济原则最重要,其次是创始团队的实力。
在文章最后,我们做一些技术文档的解析以及聊一聊目前透漏出的关于在项目的链上开发的操作过程。
Oasis的技术文档内容来自docs.Oasis.dev,其中运行验证者节点界面的介绍很清晰,可以明显看到,节点主要需要运行Oasis Core,而关于Oasis Core的详细内容,可以在OasisCore文档里查看,其中很详细的标注了客户端的功能模块。
Oasis的Tendermint模块和Oasis Core模块
因为整个Oasis的开发设计,完全是按照模块化处理的,例如OasisCore里负责基础通讯的Ttendermint模块,和其他的设计隔离的很清晰,这意味着未来可以换共识。每一个单项的功能被模块化后,技术上的组合性可以给网络更多便利。
关于开发部分,因为Oasis的计算都是部署在Paratime里的,这就要看Paratime的开发入口,例如Second State为Oasis做的Oasis Ethereum Paratime,是在Second State的BUDIL里做的合约开发。
Phala的技术文档内容来自wiki.Phala.network,目前内容主要围绕如何成为矿工,也就是GateKeeper以及全节点,还有一个本地开发的指引。
因为Phala未来是波卡的平行链,也就意味着,现在的测试网只要平稳运行即可,未来Phala的网络还会通过插槽链接波卡中继链,利用波卡主网的安全性。
现在的开发披露是需要执行Phala-node、pRuntime、Substrate-TEE中继桥,还有一个web UI(用于交互调用)可用。另外,开发披露的保密合约的开发指南,也为保密合约黑客马拉松活动提供了样例和模版。
Crust和Phala的进度相仿,其技术文档来源于https://github.com/crustio/crust/wiki,目前主要是节点参与,有很详细的节点参与设置指南(或查看github里的wiki)。Crust未来也是波卡的平行链,所以关于开发上,需要依照Substrate的开发,例如在Substrate的App里有开发者使用的RPC调用。
TEE在三个网络中,其实是足够发挥特性的,例如Phala为什么用TEE做GateKeeper的计算,因为要用TEE保存签名和密钥,其他TEE用来执行保密合约。Oasis也是如此,把合约扔进TEE执行,Crust则把TEE作为一个存储工作监视器,这是一个很值得尝试的部分。
此外,这些项目都采用了很融合的方案设计,这种思路是值得学习的,同时,这些项目也都和以太坊开发者一样,在努力实现着一些让人兴奋的未知的部分,例如Oasis、Phala着眼于隐私计算,Crust着眼于存储市场。总体来看,目标是一致的,都是在用加密货币网络改变着传统互联网产品,只是驱动进度不同罢了。加密货币行程漫漫,愿三个项目都可以如愿达到目标之地。