张卫:底层链技术原理&PlatONE 联盟链平台介绍
12月20日,由中关村大数据产业联盟主办,中国信息协会、数据观、大数据文摘等协办的线上网络分享会——“区块链100分”成功举办。本期分享会的主题为《“底层链技术原理”&“PlatONE 联盟链平台”介绍》。
活动中,万向区块链研究组负责人,底层链研发团队主管,区块链架构师张卫围绕区块链底层链技术原理和“PlatONE 联盟链平台”为大家分享了精彩观点。
以下是分享的全文内容(略有删减)
Part 1
底层链技术原理
这是一张来自ISO TC 307的区块链的参考架构图。从图中,我们可以对区块链系统有一个整体的认识。图左下部分是区块链的主要功能组件部分,包括平台层和基础设施层等。例如,我们经常听到的共识算法这个功能模块就位于平台层,其中也包括智能合约、交易处理、账本存储等。
区块链的原理
首先,什么是区块链?简单来说,区块链就是一个个前后链接组成的区块。按照ISO的定义,它是“使用密码技术将共识确认的区块按顺序追加形成的分布式账本”。因此,区块链实际上是分布式账本(DLT)的一种实现。
这也对应着上图中的DLT概念(Distributed Ledger Technology)即分布式账本技术的意思。
其次,区块中一般包含的数据有哪些呢?每一个区块中包含了前一个区块的哈希、相应的时间戳以及交易数据等。这是主要的一些数据,我们一般把区块链中第一个区块称为“创世区块”。
接下来,再来看一下交易数据的组成。交易的原始数据以及使用这些交易数据构造的默克尔树的根哈希都存储在区块中,这意味着交易数据的篡改将导致区块中的数据被改动。
那么,区块链的数据不可篡改原理是什么呢?如果交易数据以及区块中其他数据被改动,都将导致区块哈希的变动,因此,修改特定区块将导致需要修改该区块后续所有区块,而区块链的共识算法将确保这种修改很难成功。
区块链中的数据在底层一般存储为NoSQL数据库,如LevelDB等。
区块链的分类
从区块链的许可要求来看,区块链主要分为两类:Permissionless和Permissioned。Permissionless的区块链是不需要许可的区块链系统,即任何个体都可以自由地进入和退出,也可以在其中写入、读取、参与交易。以太坊就是一种Permissionless的区块链。
而在 Permissioned区块链中,各个节点通常有与之对应的实体机构组织,只有通过授权后才能加入和退出网络。各机构组织组成利益相关的联盟,共同维护区块链的健康运转。
P2P网络
以上基本上介绍了上图中关于Ledger、State Management和 Storage 几个功能模块。接下来将介绍Peer-to-Peer Network模块,它对应的是P2P网络。P2P 网络的两个显著的特点是:非中心化和健壮性。
非中心化:是指网络中的资源和服务分散在所有节点上,信息的传输和服务的实现都直接在节点间进行,无需中间环节和服务器的介入,避免了可能的瓶颈。
健壮性:是指P2P架构天生具有耐攻击、高容错的优点,部分节点或网络遭到破坏对其它部分的影响很小。P2P网络通常都是以自组织的方式建立起来的,允许节点自由地加入和离开。
大家一直有疑虑,在P2P效率上有什么突破吗?即区块链全量复验和全量冗余带来的效率问题。针对这个问题,业内一直在各个方向寻求解决方法。目前的尝试主要分为 Layer-1 和 Layer2 两个方向。
常见的 layer1 方案有:区块扩容、隔离见证、共识优化、分片、多链等;layer2方案有:闪电网络、侧链和Plasma等。分片和Plasma等主要的扩容方式都还在探索当中。目前有一些项目已经落地,但是较为完善的机制,还需要时间。也就是图中的 Consensus Mechanism 模块。
共识算法
共识算法提供了一种分布式节点就正确版本的区块链或账本达成共识的方法,它对于维护区块链网络的完整性和安全性至关重要。共识算法能够保证篡改难度及成本极大,使得任何试图篡改区块链数据的行为都容易被追溯。这样共识算法也就能够实现以极低的成本来解决信任与价值的可靠传递问题。
按照 ISO 的定义,区块链通过共识算法达成以下共识:一是交易的有效性,也就是交易被验证是有效的;二是交易集合和顺序的一致性,也就是区块链账本中交易的集合和顺序在各节点中是一致的。
目前业界主流的共识算法,在公有链中有 PoW 工作量证明算法、PoS 权益证明算法、DPoS 代理权益证明算法及它们与类BFT算法等结合的共识算法。例如,比特币及目前的以太坊采用的是PoW算法,Cosmos的Tendermint共识算法是一种PoS共识,以太坊2.0计划采用的Casper也是一种 PoS 共识,而 EOS 的共识是 DPoS。在联盟链中,通常采用的共识算法有 PBFT 等传统的分布式一致性算法等。
智能合约
接下来将介绍智能合约部分,其对应的是图中的 Smart Contract 部分。智能合约概念是由 Nick Szabo 在90年代最先提出,是一种想要以信息化方式传播、验证或执行合同的计算机协议,并且它不依赖于第三方。这个概念首先在以太坊中实现,进而被大众熟悉。
不过在以太坊和今天的区块链行业中,智能合约现在一般是指一段运行在区块链上的通用程序,不再局限于合约。
当然,除了以上介绍的一些区块链主要模块,参考架构图中,还包括API接口层、用户层以及Cross layer function等。
Part 2
PlatONE 联盟链平台
PlatONE 是由万向区块链和矩阵元共同打造的支持隐私计算的新一代联盟区块链系统平台。
我们开发此平台,一个是为了多方协作的场景提供更高效,运行更稳定的底层链,第二个目的是逐步引入先进的密码学功能,实现链上数据保密,同时还能支撑业务对这些数据的使用和计算。
以上是我们 PlatONE 的架构图,结合这张架构图,下面从链的认证机制,合约开发语言支持,共识算法的优化,同态加密和零知识证明等方面对链的功能进行介绍。
链的认证机制
首先,相对于公链,联盟链是指共识,同步数据,发起某种操作等方面存在准入,即需要一定的权限才能参与这些事务。这个特点是符合我们多个个体共同协作的一些场景需要的。比如,我们多个个体之间的一些协作数据不希望其他人看到的,那么节点接入同步数据就需要设定权限,不是所有人都能同步链上数据。所以我们设计了节点准入、用户权限控制、合约防火墙等一系列的认证机制。
在实现了这些功能后,“什么节点可以参与共识,什么节点可以同步数据,用户做操作需要具备什么样的权限”,都将在一些系统级别的合约中进行设置。另外,一个用户部署了合约之后,他可以指定哪些人可以访问那些接口,这些功能都将在系统级别确保链上的信息安全和调用安全。
智能合约开发语言支持
智能合约是运行在区块链上的一段通用程序,程序是使用某种语言为了实现某个功能而编写的一段代码。在第一个支持智能合约的以太坊平台上,用户只能使用 solidity 语言来实现智能合约(后来又提供了 vyper )。而大多数程序员是不熟悉这种语言的,另外这种语言的维护社区也不是很大,执行这种语言的虚拟机实现机制也存在一些缺陷。
针对这些问题,业内渐渐选择 WASM 作为新的编译标的。PlatONE 是业内第一家实现了 WASM 合约支持的联盟链平台,同时还保留了对 solidity 的支持。
简单的说,PlatONE 用户可以使用 C/C++, Rust 等一系列的语言来实现智能合约,而不仅仅是通过 Solidity。而且,我们还让 Solidity 合约和 WASM 合约沟通互相调用,从而让之前通过 Solidity 编写的合约能无缝移植到我们平台。
之后,我们平台还将支持更多的常见语言来编写智能合约。像比特币中的使用的 POW 共识,是不具备确定性的。上链的数据有可能被回滚掉的。这个特性不能满足金融、溯源等场景需要的。
共识算法的优化
PlatONE平台采用的是经典的BFT共识算法,对一个区块完成投票确认之后,这个区块就是不可回滚的。这样上层应用就能够根据这一确定的事件,进行其他业务逻辑的构建。
业内很多联盟链项目都是采用了PBFT或其变体,但是很多项目,甚至很多知名项目的实现中,存在很多较为严重的问题。比如说有些项目中存在 liveness 机制不完善的问题,简单说,就是在某些网络状况下,共识可能停住,并且无法自我恢复运行。另外有些联盟链的底层共识实现,在计票时,重复计算同一个节点的投票,这些问题都严重的影响了区块链的安全运行。
PlatONE 团队对共识机制的复杂理论有了充分的研究之后,优化解决了之前系统实现中的很多问题。对于 PlatONE 的共识实现,我们压测了上百个共识节点,底层链依然能够保持长时间的稳定运行。
同态加密和零知识证明
公开透明是区块链的一大特点,但是并不是所有的上链数据的明文都适合被链中所有节点看到。基于此,我们引入了同态加密和零知识证明等较为复杂的密码学方案。
用户可以将加密后的数据上传到链上,这些数据中的数值信息仍然可以被计算,并得到结果的密文。共识节点可以验证这些计算结果,保证他们是正确的。拥有秘钥的相关方可以解开这些结果的密文得到结果。同时,任何第三方,都得不到这些信息。
后续,我们将持续的引入更多的隐私保护密码学方案。比如安全多方计算等。
以上是 PlatONE 目前已经实现的主要功能。接下来,我们将在如下方面继续迭代:
1. 支持更多的密码学方案;
2. 共识的可审计和插件化;
3. 大数据量存储;
4. 更多的合约编写语言;
5. 多链,并行计算;
6. 治理机制;
7. 形式化验证;
……
希望在不久的将来,能给大家带来一个功能更丰富,能支持更多业务场景需要的底层联盟链。
责任编辑:张薇