巴比特加速器技术公开课 | 你不知道的链下扩容技术

巴比特加速器技术公开课 | 你不知道的链下扩容技术

8BTC_Boost 发布在 区块链 29685

巴比特加速器推出的全球线上区块链技术深度对话栏目Geekhub Global Online,定期邀请世界各地的资深技术大咖连线对话,旨在为技术社区输送前沿高质量的区块链技术内容;同时GeekHub技术社区成员也可以参与直播互动,共同探讨区块链的技术发展与未来。

扩容难题是现阶段绝大多数区块链企业的核心关注点。目前就区块链扩容问题,目前市场上的扩容解决方案可大致分为两类:1)链上扩容,即第一层(Layer1)扩容;2)链下扩容,即第二层(Layer2)扩容。第一期活动《分片与跨分片通讯技术的碰撞》就对Layer1扩容中分片技术进行了探讨。

时隔1个月,第二期活动Geekhub Global Online-Layer 2扩容周已于10月22日正式拉开帷幕。在为期一周的时间里,活动将邀请ConsensysPlasma、Celer、Nervos、闪电HSL一同探寻Layer 2的现状与发展。在前天早上(2018.10.24 10:24)进行的第三场活动中,Celer Network创始人董沫博士为大家带来了主题为《链下扩容核心技术解析》的技术公开课,主要讲述广义状态通道的基础知识,核心技术挑战以及完整的技术和加密货币经济学架构设计。

状态通道(State Channel)是一种用于执行交易和其他状态更新的“链下(off-chain)”技术。但是,一个状态通道“内”发生的事务仍保持了很高的安全性和不可更改性。如果出现任何问题,我们仍然可以选择回溯到链上交易中确定的“稳定内核”。

大家可能会对支付通道(payment channel)比较熟悉,这一概念已存在多年了,并且最近通过闪电网络(lightning network)部署在了比特币上。状态通道是支付通道泛化出来的形式,它们不仅可用于支付,还可用于在区块链上进行任意的“状态更新”,就像在智能合约内部进行更改一样。 2015 年,Jeff Coleman 第一次详细介绍了状态通道。

以分层架构建立了一套链下扩容体系, 提出了广义状态通道和侧链灵活结合的cChannel, 在不牺牲信任与安全保障的情况下不仅加速简单支付, 同时也支持智能合约和各类复杂应用的加速扩容。Celer团队同时提出了第一个最优化的链下支付和状态路由算法cRoute, 一个简单易用的应用开发框架和用户移动端接口cOS作为区块链应用的新入口。拥有极强的普适性, 可以广泛兼容主流区块链。在技术创新的同时, 独家首创了第一个基于博弈论和拍卖理论的链下扩容加密货币经济学和代币模型, 系统和完整地提供了链下扩容平台中的核心激励和安全保障机制。

 

一、扩展性的最终目标到底是什么?

对标visa

作者认为应该对标整个信息传输的体量。从8到15TPS,进步到5.3亿TPS,10毫秒的延时。

假设在互联网上传输1000kb的data,区块链上也会有相应的transaction的话,我们将会需要支持500M TPS。

 

二、为什么要做链下扩容

目前的扩容架构在区块链底层上架设了各种各样的dapp。在这样的扩容架构下,存在扩容瓶颈。这是来自于整个分布式系统的节点之间互相通信的over head,与此同时即使使用像分片也无法解决。

因为对于任何一个并行系统,只要在并行系统当中有任何不可并行的部分,那么并行系统本身的好处就会很快的去被消磨掉。

这个东西也就是著名的Amdahl’s Law。

1

我们通过链上扩容方法遇到的瓶颈和真正我们期望的500M tps离得还非常远,我们这时候就需要使用链下扩容的方法实现区块链扩容的转折点,这样也能够使区块链真正达到大规模应用,让区块链走进千家万户。

 

三、链下扩容的基本概念

最基本的链下扩容来自于支付通道。所谓支付通道简单的来说是两人之间要互相发很多次钱的时候,且不愿意每一笔钱都放在区块链上去发,便构造一个on-chain的合约(bond contract),然后他们各自往这个在智能合约中放入各自的钱,通过balance proof证明各自拥有的账户余额,就可以进行链下交易,contract本身也成为支付通道,这也是状态通道最简单的一个模型之一。

有了这样的状态通道之后,两个人之间就可以互相很快的用这样的方法去互相的发钱,他们之间传递的消息也就是一个共同签名的Balance Proof。只要我给你发一个Balance Proof,我就相当于给你发了钱,我并不需要向整个区块链去广播(broadcast)的整个发行过程。

状态支付通道可以比较简单地拓展为多人支付通道,中间人每两个人之间的state channel都要存钱,当人多了以后,存的钱就很多,对支付者压力很大。因为发钱的人发送带锁的交易,发送给中间人,如果有人能用钥匙解开,就可以获得这个钱。中间人无法解开这个交易,就把这个带锁的交易发送给下一个人。到了接收钱的人手里,出示钥匙,请求中间人将交易解锁,中间人将这个请求转发给上一个人,直到转发到发送者手里,发送者解锁交易,交易才顺利完成。

如果有中间人不愿意转发交易,交易无法达到接受者,或者接收者的钥匙无法到达发送者,就可以将交易放到真实的链上运行,交易仍然可以完成,所以流程仍然是安全的。也就是说链下是可以执行带条件的支付(you can do off-chain conditional payment),也就是两端的人或中间人并不需要互信就能完成整个多跳的支付,这是对于状态通道非常简单的概述。

 

四、链下技术生态

技术生态的扩容要求:技术生态不光要做非常简单的支付通道,还要做各种各样的链下智能合约,也就是扩容不光是要去扩支付的能力,更重要的是扩充状态通道的能力。

cStack:cChannel  -> cRoute -> cOS

1、cChannel:

链下支付和链下智能合约,state channel、side chain联合架构,可以接入多个公链,为多个公链进行扩容。cChannel层实现了对于各种各样的DAPP的广义链下扩容,不光是简单的支付扩容,同时消息的overhead是非常低的。

我们不妨用这样一个例子来对比一个链上的智能合约执行过程和一个链下的智能合约执行过程,来对比一下,到底为什么链下的广义状态通道能够达到这样的扩容能力。

以象棋为例:

  • On-chain情况下:
Alice和 Bob玩一盘$5Chess Duel,首先他们要在链上部署一个智能合约,然后各自放$5进去,因为他们要实现谁输了就给对方5的逻辑,然后在On-chain玩这个游戏,那么Bob动一个子,然后Alice动一个子,Bob动一个子。每次挪一个棋子的过程,实际上都是一个on-chain transaction或者说都是区块链函数调用。

这部分大家知道实际上是非常缓慢的,因为每一步的一个函数调用,实际上都是通过Bob和Alice之间的这样一个区块链智能合约调用来进行的。那么每一个智能合约调用的时间可能一两分钟三五分钟都是有可能的。那么最后整个chess game在非常长的时间之后终于进行完了。假设说Alice赢了十块钱,这两位都已经变成了白发苍苍的老人,Alice从智能合约中取出了十块钱,五块钱是她自己放去的,另外五块钱是Bob当时在一开始的时候放进去。

  • off-chain情况下:
和Bob只有最开始的时候的象棋合约的创建是在链上进行的,其他的时候都是在celernetwork的链下虚拟机进行下棋。下棋的过程中不收取手续费,响应非常快,互联网产品的体验。

如果棋手作弊,则需要通过链上的智能合约进行仲裁,对作弊者进行惩罚。

比赛结束,链下合约的条件支付自动改成无条件支付。添加赌资,合约可以根据象棋的结局决定谁能赢得比赛,获取全部的赌资。

在cChannel链下智能合约中,首先第一步假设我们在简单的版本当中,我们把chess的合约部署在链上的,那么相当于在链上有了chess怎么玩的规定,接下来Alice发给了Bob5块钱,Bob也发给了Alice5块钱,但这两个五块钱的发送不是像刚才on-chain完成的,而是在celer Network的cChannel的架构当中通过Celer Network的多跳relay给对方发钱。第二点需要注意的是整个发钱是有条件依赖性(conditional payment),每两个人之间的state channel都要存钱,当人多了以后,存的钱就很多,对支付者压力很大。

在这个过程之后,Alice、Bob再去玩这盘棋就可以通过互相签名来进行游戏,下棋的过程都是通过智能合约链下执行进行。在cChannel实际实现当中,可以进一步优化使整个玩棋的合约甚至都不需要出现在区块链上。只要在一开始发钱的时候两人同意玩棋的程序代码初值和共同同意的随机数,那么智能合约甚至都不需要出现在区块链上,就是跟互联网一样的感觉。链下执行智能合约是需要符合一定规范和接口的,我们也定义了一套接口来规范这样的一个链下智能合约的执行。

2

这是最完整的描述我们是如何定义一个状态通道的图,如何定义一个条件组,如何定义条件主动的条件,以及各个函数调用之间的关系来实现广义状态通道的能力。有了条件依赖能力,就可以实现非常复杂的条件依赖的状态图,那么我们通过这样的状态图,也就能够实现各种各样复杂的区块链应用。

3

同时cChannel支持非常多功能,我们支持multi-hop payment。比如刚才Alice和Bob的游戏,我们就可以通过Alice和Mo, Mo和Bob两套channel也可以完成状态支付以及状态的交互和转换。

 

2、cRoute:可证明最优的状态路由

技术栈中的第二层叫cRoute,cRoute是整个状态通道中的效能引擎,链下扩容的基础架构中,链下扩容的的容量和运转速度完全取决于状态路由算法。

为什么状态通道路由是非常有挑战性的事情?因为状态通道网络中的链路和传统数据中的数据网络中的链路是非常不一样的模型。在状态通道网络中,我们面临一个有状态的链路模型,比如说两个人之间开了一个状态通道,我放了10元进去,你放了10元进去,我给你发了1元,我最多还能再给你发9元。那么整个状态通道的capacity决定于我们过去互相之间发钱的过程,这样的链路模型实际上使网络的路由也就是从A到B的过程变得非常复杂,也就不能使用简单传统的状态通道路由的方法来去做。数据网络路由就是这样一个最短路径路由,数据数据网络的路由最短路径在状态通道网络当中的效能实际上是非常低的,这时候面临一个全新的问题。

状态通道路由算法不光考虑路径本身的长短,同时也需要考虑整个网络的平衡性。我们往这条链路去继续发送的时候,会不会导致整个网络越来越不平衡,如果整个网络不断失衡的话,那么我们就应该去换一条路来发,或者帮助网络恢复平衡性。在cRoute层实际上用3层来保证perfomance的同时又能完全隐私化而分布式的状态路由通道。可证明最优的状态通道路由的实现方法,比以前的状态路由算法,比如雷电网络或者闪电网络性能提高大概到20到25倍。

3、cOS:开发者SDK,celer全节点,入口层

的第三层的技术栈也就是cOS,提供了用户的runtime以及deep SDK,将已有链上应用放到链下执行。 cOS的套件也提供了用户与celer Network交互的能力,帮用户隐藏与celer Network交互过程当中所涉及到以及所需要处理的细节。

 

五、经济学架构

Layer2的经济学是一个非常重要的问题。这在整个业界研究非常缺乏。链下扩容很好,它能够实现展平扩容的模式,同时也有隐私、安全的好处,但天下是没有免费的午餐,那么状态通道扩容或者是链下扩容到底去牺牲了什么?还有哪些重要的经济学挑战?

1、第一个经济学挑战叫做状态可用性挑战(state availability challenge)。

假设两人之间有一个状态通道,最新状态是49,假设Bob掉线了,Alice可能变成坏人,向整个区块链或者是整个状态通道的合约提交旧的共同签名状态(比如说序号47),但在序号47的状态中的state对Alice本身是更有利的。

4

当Bob不在线的时候,Alice可能向整个状态通道网络去settle一个旧的、但对她更好的state,这个问题怎么解决?有人提出monitoring solution 帮看状态,中心化的monitoring solution显然是一个坏主意,因为中性化的monitoring solution和Alice可以非常简单的合谋分你的利益。通过这样的方法不光不能保证自己的安全,还可能白白的花钱。

在最新的research潮流中,大家说有没有可能构建一种去信任的monitor service?去信任的monitor service大概怎么工作?可能其实是这样的,比如说我要掉线了,那么我就把我的状态交给一个状态的看管者(monitor),同时monitor也会向另一个智能合约放一定的保证金,如果他到时候没帮我干活的话,我待会上线发现没干活,我可以把他这部分保证金拿走。

那么这时候假设Alice再去提交一个旧的状态(47号状态),那么monitor就可以帮你向智能合约提交最新状态proof。假设说monitor也是坏人,他就拒不提交状态proof。

5

挑战:但是这样的解决方案实际上也有非常多问题,首先会将网络流动性的需求增倍。本来整个状态通道网络中要降低一些流动性,才能够使得整个service run起来。但现在你、你的peer和monitor都要付押金。与此同时守卫的状态可能是不同的token,对应不同token都要提供不同的接口,并有不同的流动性去锁定,但无法确定守卫的状态。因此无法确认守卫的过程中应该给多少钱(pricing),同时整个interaction非常复杂,不断需要守卫一个状态的on-chain transaction实际上是一个非常慢的过程。 同时insurance model非常僵硬,只要这个x不是百分之百的话,那么帮你看管状态的 monitor还是可能去和坏人合谋你的钱。

6

状态守卫者网络(SGN):状态守卫者网络是一个特殊的侧链,你需要有celer token才能进入侧链变成一个状态守卫者。当用户离线,或者向IOT device去check pointing的时候,那么他就会把自己的状态连同payment提交给state guardian network(SGN)。有多少状态守卫者实际上是基于支付给整个状态守护者网络的钱相比于整个状态守护者网络正在收到钱的比率。假设celer state越多,guarding任务也就越多,收费越多,这里面实际上实现了激励模式:通过token的设计,使得用的人越多,整个celer Network或是整个SGN的收入也就越高,这实现了一个真正动态和高效的pricing机制。同时SGN架构使得liquility的要求变得非常的低,同时状态也可以是支付、游戏等各种中间状态,只需提交相应的payment。

7

防合谋的机制:后守卫者dispute,可以获得前面没有report者的token以及所收到的payment。假设说我们几个人之间虽然商量好了,但实际上最后一个人去report的动机也就越来越大,因为假设说你有前面有一百个人,那么这一百人都没有report的话,你可能就会得到很多的额外的token。

那么假设所有的SGN都是恶意的怎么办?这个情况也是有可能发生的。在这样的最坏情况当中,用户就可以向区块链提交他所有的state guardian都没有完成应该完成的任务的state proof,SGN的测量合约会将没有按约定完成任务的state guardian node的token罚没,并且将他们踢出SGN侧链,与此同时罚没的token将会作为对用户的补偿发还给用户。

保险机制:这实现了非常灵活的保险机制,那么我们不再是说我花一定的钱,我就是得到最大的X% insurance,用户得到的补偿是以token为计价的。在用户开始决定用多少token在cover for him的时候,他实际上就是在灵活的决定,出现损失时他得到的token能够用多快的速度恢复他所丢失的财产。实现了一种完全新的insurance model,也就另外一点非常重要的经济学性质。

8

2、另外一个链下扩容经济学的挑战是connectivity challenge。

在整个链下的扩容体系当中,我们之间的整个链下状态的推演是通过共同签名一个新的状态来完成的。假设两个人在玩一局棋,A马上要赢了,但B不想签名,那么出现这种情况怎么办?是不是说这时候只要A去向区块链去提交新的state proof状态我们就应该惩罚B呢?实际上并不是这样的。因为区块链并不能分辨如下这三种情形:第一种是B突然之间火了不干了;另外一种是B明明好好的,A去区块链上去诬告说B不理我;还有一种是A和B都没有错,只是中间网络出了一些问题。

9

最简单的方法就是我们把整个区块链作为data availability service,它非常available,但由于需要on-chain storage所以非常贵,另外需要O(log(n))N monitoring,因为每一个人都需要不断地去monitor所有区块,所以在解决data availability service时,我们就用SGN,可以使得整个终端的资源消耗变得非常少。

 

六、总结

在celer network当中,我们引入了state guardian network的侧链,这个侧链实际上可以帮助state channel有更高效的方法去运行。首先作为一个分布式的monitory service,提供了一套比较完整的不在线去challenge 这些解决方案,同时也提供了这样一套data connectivity的解决方案,解决了传统的approach当中有合谋、复杂的interface或liquility等等问题。

另外有另外两个架构叫proof of liquility commitment mining和liquility backing auction,这两部分实际上是去解决链下服务商的成本,或者是链下服务商的流动性的问题。因为链下服务商本身需要跟很多用户去建立这样的channel,那么在建立channel的过程当中,它需要下很多的血本去把整个channel建立,那么proof of liquility commitment mining是激励用户去锁定自己的流动性,构造一个这样的稳定liquility pool,同时用户通过锁定自己的流动性可以去获得token,那么获得token的比例实际上是跟它的锁定数量和锁定时间是相应的成正比的。在整个网络有了一个稳定和充裕的流动性之后,我们使用流动性拍卖的机制去激励用户。

 

回看GeekHub layer2扩容周-巴比特加速器技术公开课,可以进入扩容系列课学习,课程链接:加入Geekhub Online社区微信群,链接及总结文章均发布在社区中。

加入Geekhub Online社区方式

关注【巴比特加速器8BTCBoost】微信公众号,聊天框中回复【GGO】获取【Geekhub Online】社区加入方式。

或微信扫二维码进入课程中:

1513154080079

1、公开课:

演讲者:Coogan Brennan(Consensys,Ethereum Foundation)

2、AMA:

演讲者:John Adler(Consensys Plasma Researcher)

3、公开课:

演讲者:董沫(Celer Network创始人)

4、公开课:

演讲者:吕国宁(Nervos基金会联合创始人)

5、Panel:

演讲者:Celer Network创始人董沫、Nervos基金会联合创始人吕国宁、闪电黄世亮、巴比特加速器联合创始人胡梦迪

geekhub-02 2

文章标签: 区块链 扩容
评论(1)
登录 账号发表你的看法,还没有账号?立即免费 注册
  • 逆水寒 2018-10-31
    如果讲技术,还是翻译国外的文章比较靠谱