1、为什么要研究资源和多链管理
依据区块链实际发展的情况我们认为,区块链 3.0 应该能成为分布式应用(DAPP)的平台。为DAPP提供分布式的信任计算和资源存储。作为提供信任计算的平台,我们就要设计完善的资源策略来促进链上生态的繁荣,同时,提供良好的扩容方案来支持更多应用需求。
因此严格意义上说,本文重点讨论的是资源管理策略,而多链管理是我们提供资源扩容的一种手段。
2、主流的开放区块链的资源方案
资源分配方案
首先,我们来分析一下主流的开放区块链的资源分配方式:
以太坊,围绕着Gas,有几个重要概念Gas,Gas Price,Gas Limit。Gas 用来衡量执行某些动作需要多少“工作量”,也就是消耗了链上多少资源。Gas Limit是用户在执行某个操作,比如某个智能合约方法时,愿意承担的最大的Gas量,Gas Price 是用户愿意承担的Gas 的价格。另外还有块的Gas limit,同样一个操作,Used Gas 量会有不同总之概念还是很复杂的。更麻烦的是,不仅以太坊DAPP的开发者要理解这些概念,他们的普通用户也要理解,更甚者,用户还要理解,同样操作每次消耗费用不一样,同样支付参数,昨天能成功的交易,今天就可能失败。
EOS,采用代议制的模式,利用超级节点大幅度提高了全网的TPS,但是这并没有使他逃脱资源陷阱。之前发生的EIDOS 事件,就充分说明了这个问题。这完全是由EOS资源模型的先天缺陷导致的。它采用抵押EOS token ,按比例分配资源的方式,用户可以免费使用这些资源。看似公平高效,其实隐藏了很大风险。本质上,是EOS 资源模型的不确定性导致。它跟以太坊一样,是一个超卖的模型。这个复杂的模型不仅面向DAPP的开发者,而且面向普通用户。任何潜在的用户都必须先迈过这个门槛,大大增加了DAPP的获客难度。
资源扩容方案
以太坊2.0 在向POS 转型的同时,也实现了分片的概念,进而实现了资源扩容。
它通过信标链来协调所分片,实现,诸如分片区块提议者,奖励和惩罚,提供随机性,组织委员会投票等等功能。由于以太坊1.0的存在,以太坊Serenity做了很多适配,大大拖延了Serenity 面世的时间,至今该版本仍在开发中。
图2 以太坊 serenity
EOS 则完全依赖超级节点的高性能来提供扩容,无论是计算资源还是存储资源,现在并没有实质的多链的方案,因此前文提到的问题,依然继续存在。
以波卡(Polkadot),Cosmos为代表的跨链方案更倾向于万链互联,其核心思想是通过网关将不同链的协议进行转换,进而实现万链互联的目的,听起来非常诱人,让人眼前一亮,但实际效果有待考量。比如,高安全性链(比如以太坊,比特币)与一个低安全性链互联的意义上在哪里,它只会使得这种不安全性在其他链上蔓延。而且应用范围也有限,多用于链上货币转账。关于万链互联,我们会在后续文章详细阐述,本文不做过多介绍。
3、链化未来的资源分配方案
本着降低用户进入区块链门槛的原则,链化未来借鉴了广为人知的云服务的模式设计了链化未来的资源模型。(注:资源指的是链上的计算资源,传输带宽和存储介质)
资源只面向DAPP开发商
DAPP的开发商,作为专业提供区块链应用的开发者,必须理解链上资源的管理,所以我们的模型是平台只提供资源给开发者,开发者利用这些资源开发DAPP,提供具体的服务给用户。用户通过企业应用注册到链上,成为链化未来的用户后,就可以使用链化未来上其他的应用服务。在整个过程中,普通用户不需要考虑任何跟资源相关的概念,只需要选择应用,得到一定的服务,并按照应用的要求支付服务费用即可。服务费的形式可以是UGAS(注:UGAS 是链化未来资源套餐的结算单位,下同),也可以是商家发行的其他服务结算单位。
图3 链化未来资源模型
开发者购买的资源是确定的
我们采用了预售模式,将一条链的资源分成若干份,每份资源的容量都是确定的,开发者可以选择购买资源数量和时间,一旦交易成功,DAPP的资源就确定了,不会受到其他应用的影响。这样可以使得开发者稳定的运维DAPP。
企业服务和系统服务分开
基于我们主侧链的架构,我们将企业服务和系统服务分开,主链只部署系统合约,提供账号管理,UGAS转移,资源购买,委员会注册等核心功能,企业应用部署到侧链上去,从而保证链化未来的核心功能不会受到其他应用的影响。
资源可以在资源市场交易
我们相信市场的力量!
在侧链上的应用,必然会出现优胜劣汰,有些DAPP发展壮大,需要越来越多的资源,有些DAPP逐渐萎缩,甚至关闭,资源无人使用。这个时候,逐渐退出的DAPP开发商可以像变卖资产一样把资源拿到资源市场上,出售给需要的DAPP。
从这个资源模型可以看出,链化未来并没有压缩已有客户的资源来超售资源。链化未来的愿景,是真实的为实体企业服务,帮助他们使用区块链这项新技术解决当前的痛点。
4、链化未来的多链管理
解决了资源分配策略,我们再来聚焦资源扩容。
链化未来采用一级主侧链扩容的方案。主侧链是同构链,均采用R-POS共识算法。这样两个设计大大简化了工程的复杂度,提高了网络的稳定性,使我们可以在2019年4月份上线服务。
下面我们从多链的运行机制, 委员会的链间随机调度,主侧链通信三个方面进行详细阐述。
图4 链化未来多链架构模型
链化未来多链架构的运行机制
矿工通过主链的系统合约注册成为链化未来的矿工,这个过程需要在主网上抵押链化未来的资源结算单位UGAS;成功后会进入到等待队列,等待时间过后会被主链系统合约随机调度到特定的侧链进行挖矿。
矿工在侧链挖矿(出块)的结果会被上报到主链的系统合约,被确认有效后由主链来分发挖矿奖励。同时,侧链块头成为主侧链通信的基础构建。
主链系统合约会定时的对矿工做随机调度,所以矿工不会一直停留在某条侧链挖矿,这是出于全网安全的考虑,后续章节会详述这个安全设计;调度对矿工来说是透明的,他的长期经济收益预期不会受到调度影响。
对普通用户来说,用户账号的第一次创建必需通过主链的系统合约进行;主链有着全网所有账户的全貌;当用户需要和某条侧链上特定的DApp发生交互的时候,可以申请授权(empower)到特定的侧链,主侧链通信机制会为用户在被授权的侧链上创建同名账户。
对DApp开发者来说,当他希望在某个侧链上部署他的DApp的时候,他需要通过主链的系统合约来购买针对特定侧链的系统资源套餐(cpu/storage/netcombo),然后这个资源套餐购买信息也会被同步到特定的侧链,这样这个开发者就可以在特定的侧链上部署和运行他的DApp了.
原生的主侧链之间的UGAS 跨链转移流通功能。
委员会的链间随机调度
多链的水平扩容面临一个问题就是算力/stake 稀释。当原有委员会扩容成N条链后,每条链的stake就只有原来的1/N,也就是攻击这条链难度变成了原来1/N。为了解决这个问题,链化未来采用随机调度委员会的方案,来大大增加攻击者的难度。
假设p 为攻击者在全网算力/stake 的总占比,那么, 攻击者能实现控制特定侧链的概率(在R-PoS 共识下需要>=2/3委员会成员)是一个二项式展开公式:
我们可以看到,当单侧链的委员会数目达到80以上的时候,即使恶意攻击者在全网的算力能占到40%, 他能在特定的侧链占到大于2/3委员会成员的概率也是非常非常低的。所以在我们的多链架构下,我们设定的单侧链冷启动最少委员会成员为40,安全运行的建议值是至少大于80个委员会成员。
链间调度带来一个新的问题,链状态的同步。随着链运行的越久,数据量就越大,同步需要的时间就越多,为此我们采用了了世界状态快照机制:
新加入的节点可以从世界状态快照来恢复世界状态,极大提高调度效率。那么如何保证快照的真实性,就变得尤为重要。为此我们设计了Oracle机制来将侧链世界状态上到主链,供新加入侧链的节点进行世界状态快照的校验。
每隔一定的周期,某条侧链的所有矿工节点会把当前的世界状态做成一份快照存储在本地,并把这份快照的hash 值记录到主链上。
主链的系统合约负责记录侧链的世界快照hash, 只有当某条侧链在特定时刻的所有委员会成员的2/3以上的矿工节点上传了一样的世界状态hash, 主链才会认为这个世界状态的hash值是有效的;这个可以认为是一次近似的对特定世界状态的共识过程。
当矿工节点被调度到某个侧链的时候,它可以从主链获取目标链最新的若干个世界快照的hash值;当矿工节点从目标侧链的其他节点同步世界状态文件的时候,他就知道他接收并恢复的世界状态是否是安全有效的世界状态。
主侧链通信
既然采用主侧链架构,主链和侧链必然是融合一体的。因此要引入链间的通信(Inter-Blockchain Communication) 机制,来建立他们的联系。我们建立了两种原生基础设施来支持链间通信。
提供原生的主链与侧链互相为轻客户端的支持,也就是主链和侧链互相保存了对方的块头信息,能够互相验证对方链的有效性以及某个交易确实在对方的链上发生且确认。
提供基于委员会投票的通用跨链通信机制,e.g. 当侧链A 需要同步主链的某个信息的时候,可以由侧链A的委员会成员在侧链A的系统多签合约发起对主链某个信息的投票,当大于2/3的委员会投票达成的时候,即可认为主链的某个信息在A链的到了确认,并触发后续的操作.可以看到,这个是一种将通用的预言机(Oracle, 将链下数据上链的机制)运用在跨链通信的使用实例。
当前版本,我们启用了模式a,也就是基于轻客户端模式来搭建IBC 通道。基于这个IBC 通道,我们系统原生支持了:
矿工在侧链间的调度信息从主链同步到侧链;
主链的账号同步到侧链;
DApp开发者购买的资源套餐从主链同步到侧链;
UGAS 可以在主侧链同一账户之间流转。
接下来,我们来讨论如何基于轻客户端完成信息的同步。其核心就是在链B上证明某交易T在链A上发生了,然后将其结果反映到链B上。
图 5 链化未来轻客户端模型
从图5 可以看出,当链A的块头已经同步到链B后,就可以针对某个交易T(比如用户U转账到B链),提交它的merkle proof 给链B来证明交易T确实在链A发生了。然后将资产在B链反映出来。这样就完成了跨链转账。其余的跨链同步也是一样的道理。
那么新的问题来了,我们如何保证链B得到的块头,确实是链A产生的呢?如图5,在我们的设计中,块头信息除了常规的proposer, transaction merkle, previous hash 等等之外,还有两个optional 的数据结构会周期性的出现在块头里。
Confirm Point包含了当前委员会成员对上一块的有效性的聚合签名。我们知道,PoW的块头是“自证清白”的,也就是只要块头里的nonce 值是对的,那区块的链接就必然是有效的;但是PoS 是基于委员会成员的投票的,有效的委员会签名代表了有效的投票,那一种思路是把每轮共识过程中委员会的投票信息都放到块头里面去,但是这样就需要消耗大量的存储空间(另外一个难点是要对哪些投票信息记录到块头里进行共识,所以只能是下一块记录上一块的投票信息);我们采用的方法是周期性的选取一个块把对这个块的签名投票信息放到块头里;这样对于只维护块头的轻客户端来说,只有当遇到包含Confirm Point 的块头的时候,才能够把这之前的块头都一起确认了;可见的坏处是跨链的块头/交易确认的延迟受限于Confirm Point的出现频率,而提高这个频率会有额外的存储和计算的开销,这个也算是效率与存储/计算资源之间的一种tradeoff。
Epoch Point 包含了当前所有委员会成员的全列表;Epoch Point 只有委员会成员发生变化的时候才会出现在块头里;上面提到了Confirm Point 是当前委员会成员的签名投票的聚合,但是轻客户端既然不维护目标链的世界状态,它如何知道当前有效的委员会成员是哪些呢?那他就需要从最新的Epoch Point 里面来拿到全列表了。
综上所述,可以看到Confirm point &Epoch point 的设计理念就是把PoS 的核心固化在块头信息里:谁stake了成为了委员会成员以及委员会的变化历史,哪些委员会成员签名投票承认了块的有效性;只有当轻客户端对接收到的块头信息的有效性有足够的信心的时候,跨链通信的有效性确认才成为了可能。
5、跨链
我们支持非常灵活的跨链方案。
比如以太坊,比特币,还有一些基于超级账本(Hyperledger) 的联盟链都可以基于这个方案,非常方便的跟链化未来连接起来,实现跨链交易。
下面基于我们的一个联盟链的案例来详细阐述一下链化未来的跨链方案。
我们假设有一个联盟链,它上面有很多数据和交易,是可以对外公开并产生价值的。联盟链就可以选择链化未来作为合作平台,公开部分数据和交易。
异构链跨链到链化未来
图 6 异构链跨链
首先,我们假设联盟链验证节点的验证公钥是已知的。联盟链验证节点是有限的,并且公钥作为身份的公开信息,是应该被公开的。因此这个条件很容易满足。接下来需要建立一个联盟链到链化未来的转换合约,我们称之为跨链合约。这个合约要做以下三个功能:
接受联盟链的块头,并按照Hyperledger的协议验证这个块头的有效性。
接受联盟链的交易,并根据Hyperledger 的协议验证这个交易是否有效。
如果被提交的联盟链的交易是有效的,就根据跨链的协议将这笔交易反映到链化未来上,从而实现联盟链到链化未来的跨链交易。
当然,这个跨链合约的部署需要按照链化未来DAPP 的部署方案,首先购买套餐后才能部署成功。
链化未来向外跨链
类似的,链化未来也可以跨链到其他区块链。前提是这个链提供了跨链的方案。比如波卡(polkadot)。
下面我们以链化未来跨链到波卡(Polkadot) 为例来说明这一过程。首先在波卡(Polkadot)上建立一条平行链并记录当前验证节点的账号和公钥。这条平行链需要完成以下功能:
接受链化未来的块头,并根据链化未来协议如图 5 所示,验证块头的有效性。
接受链化未来的交易,根据交易,merkle proof,以及所在块的块头验证该交易的有效性。
当被提交交易被验证有效后,就根据跨链的协议将这笔交易反映到波卡(Polkadot)链上,完成交易跨链。
从以上两个案例可以看出,主流的跨链结束的核心都是相似的,只是根据不同链的特点表现形式有所不同。波卡(Polkadot)采用了平行链的形式,也就是任何跨链需求,或者业务需求需要去建立一条平行链,将业务逻辑以为一个模块实现在平行链上,这显然是一种非常重资产的实现方式,而链化未来采用了合约层跨链,跨链合约的资源套餐可以根据需求灵活调整,是一种更轻量级的解决方案。
以上介绍最基本的跨链方案,在此基础上还有很多跨链的变种方案,比如将验证部分从跨链合约/平行链中剥离出来,跨链合约/平行链只提供链上资产抵押和管理。这里就不一一列举了。
6、该领域面临的问题及发展方向 – 技术创新路线
这个领域未来的创新方向主要集中在跨链/分片技术的发展,如何实现高效随机的选取侧链/分片/平行链的验证者(委员会成员)是提高资源安全扩容的关键。在这方面,除了上述介绍的链化未来的研究,业界知名的波卡(Polkadot),以太坊2.0也都有各自的解决方案。他们的愿景更宏大带来的开销和限制也更大。
波卡(Polkadot)主打的共享安全策略,本质就是用有限的验证者为多条平行链做验证工作,它们期望验证者可以在不同平行链之间瞬间切换,这就要求验证者可以无状态的验证平行链的交易。收集人需要创建未打包区块,并提供零知识证明给验证人,来辅助验证人无状态验证交易。并且其安全性强烈依赖钓鱼人的审计。这里面又涉及到不同角色间利益合理分配问题,可能带来的审计的有效性问题。
以太坊2.0 serenity,同样将依赖无状态客户端来辅助随机选取验证者,验证者被随机分配到某个shard,需要在前瞻期间下载保存根状态。交易发送者需要提供见证数据,以此来验证交易对账户产生影响的“前状态”(pre-state),并提供足够的信息来计算交易执行后的“后状态根”(post-state root)。
两大项目都依赖无状态范式(stateless paradigm),如何植入到区块的生产和验证过程中,是研究的重点。至今,两个项目跨链/分片的核心功能仍在开发中,可见其工程的复杂性。在瞬息万变的互联网/区块链领域,若不是这两个项目深厚的背景,很难相信市场能给予如此的耐心。因此解决方案的选择要根据项目自身特点,在开发效率和设计完备性上做出取舍。链化未来采用敏捷迭代开放,在当前实现的跨链架构上,也将考虑加入无状态范式,在一定场景下提高多链的管理效率。