LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > AMA直击:万块齐发万链如一丨并发和互操作赋能下如何协作

AMA直击:万块齐发万链如一丨并发和互操作赋能下如何协作

2021-03-04 CITEX 来源:区块链网络

嘉宾:莫给机狂,RChain合作社中国社区成员,毕业于浙江大学和卡耐基梅隆大学计算机专业,后定居于美国,长期在IT业界工作。作为区块链技术爱好者,2017年开始关注RChain的技术,和RChain合作社成员有很多深入交流,并一直在中国社区宣传和推广RChain的独特技术路线。

熟悉REV项目的伙伴们都知道机总为REV社区做了很多贡献,一直关注REV项目的发展,一直为大家做分享,整理知识,方便大家理解。

Q1:请简单介绍一下RChain项目本身,让我们再加深一下对项目的了解。

莫给机狂: 我们最近搞了一个关于RChain的一页纸介绍,我直接copy paste在这里:

RChain通过革命性的Rho演算解决了困扰公链发展的诸多难题,使得让通用计算上链第一次成为可能。

基于Rho演算的快速冲突检测配合 Casper CBC共识,所有节点可以并发出块达成共识,首次做到了单分片可扩展性,使得大数据可以直接上链不需要借助IPFS。

基于Rho演算的分片间同步共识,保证了跨分片合约调用的原子性,让分片间的交互和协作第一次可以无缝进行。

基于Rho演算理论的行为类型系统可以完成并发和分片下的快速形式化验证,完成大量链上合约的安全有序编排。

其独特的反应式合约比传统的主动式合约更适合高频应用场景如DeFi。RChain的独特技术路线使它成为构建世界电脑的不二之选。

不过呢,有些事情我今天还想补充一下

跟其他公链有所不同,RChain并不是区块链兴起以后来蹭热点的。

Greg他们这些人酝酿用革命性的Rho演算已经十几年了。

他们一直想用Rho演算来构建一台可用的全球电脑,因为它几乎是唯一逻辑上、数学上可用的选择。

然而他们一直搞不定几个问题:冗余、可信无篡改。这时候随着区块链兴起,一切问题迎刃而解了。

以太坊兴起以后,Greg觉得基于图灵机体系的以太坊(EVM就是图灵机、状态机计算模型)由于先天缺陷无法成为世界电脑,所以去游说V神采用Rho演算。V神由于种种原因没有采纳,所以才有了RChain

Zora:(这几年大家都非常关注公链项目的发展,在技术上也面临了诸多的困局。

RChain上线主网,作为新秀公链项目,为区块链行业带来了一些技术创新)

Q2:RChain最初是基于ETH智能合约的发行的,是基于什么原因或者契机,着手研究和解决并发的问题?

莫给机狂: 很简单,并发是一切可扩展性的基础。要搞并发,逻辑上就是很多节点都可以同时出块。

这些块好比高速上的车一样,你把他们放进一个车道,那就变回了单线程,所以需要让他们在很多车道上一起跑。但是这些块之间可能会有相互关联,所以形成了DAG。

转币类的DAG项目已经很多了,但真正实现DAG的智能合约平台项目几乎没有。

conflux,casper labs, FTM这些,细细深挖下去,你会发现他们都是伪装成并发执行的但还是有单线程瓶颈的项目。就是说你有很多车道,但某时某刻都会把所有的车挤到一个车道上,这就是不可扩展的。

归根结底,问题在于一个:把图灵机体系(用EVM,WASM的几乎所有币圈项目)的智能合约的块挂到DAG上非常困难。

这是一个简单的图。图里面讲了“块合并”,这是RChain最近完成的一个里程碑。

对于某个节点,它现在看到了1,2,3这些块,然后它自己出了块4。

它想把块4挂到1,2,3的后面,就是说出的块4和1,2,3是没有冲突的,块4的交易可以在1,2,3后面跑,1,2,3的交易可以并发跑。

这个过程就是“块合并”。

为了最大的并发性,你出块4的时候,要把现有的DAG的边缘块都试图去挂一下,只要没有冲突的都去挂上。如此往复,变成这样一个东东:

对于RChain来说,这些部署就是乐高积木,不会乱变,容易分析,很容易嵌到DAG里面。

对于图灵机体系的那些妖精来说,你不跑一遍是不知道妖精会变身成什么的; 而对于乐高积木,你只要看一眼它们就能分析他们的行为。

马工们在Github合并Pull Request的时候,你很容易查出并解决代码的冲突,因为文字也属于乐高积木,而不是会变来变去的妖精。

所以并发这个事,RChain很容易搞定,而其他项目很难,很难。

Casper Labs是一个很好的例子,他们是从RChain分叉出去的,因为他们觉得Rho演算不够大众,不如换成WASM,这样开发人员多一点.

谈到这个,是祭出这个对应表的时候了。

区块链和传统计算机的对应关系:

共识协议????: 输入输出,带冗余纠错的I/O层

PoS的Staking??: 权限访问控制,让有代币的节点来控制

并发??????: 多线程,多核心

分片??????: 多进程,集群

形式验证???: 防火墙

分片类似于进程,并发类似线程。

分片是因为要分割不同的共识主体和相关资源,比如你在链上聊天这个事没必要让全网都知道,只要在聊天这个分片的节点上达成共识就可以。

现在很多项目靠分片来扩容,提高TPS,那等于用多进程来提高处理能力,这从一开始就错了。

这种资源隔离是多进程干的事情。单分片内部要提高TPS要靠多线程,就是让所有节点可以一起出块(多线程),达到分片内的可扩展能力。

进程是个很重的东西,开销很大; 线程小很多。

所以正确的做法是:用分片来拓展区块链计算机的”内存空间“,就是虚拟机的状态空间; 用并发来提高TPS。各自干各自的活。

币圈只有日链把两个扩容方案都规划进去了,而且是第一个真正的搞出了合约的并发执行。

Q3:现在大部分公链项目都在强调分片、扩展、并发的性能,请能为大家解释一下并发和分片之间是一种什么样的关系存在呢?

并发=多线程, 分片=多进程。

分片是用来扩展世界电脑的内存空间的,并不是用来提高TPS的。业界用分片做,其实是搞不定分片内并发的无奈之举。

我的“并发=多线程, 分片=多进程”的比喻的推特,被合作社官方转推了,他们也很认同我的这段阐述

Q4: 自比特币问世以来,也出现了诸多出名的公链项目,即使如此,公链项目依旧面临了诸多困难。针对技术方面的一些破局,RChain是如何解决并体现的呢?

这个问题比较宽泛。

对于我的理解,公链就是世界计算机。终极目标,就是通用计算上联,搞出web 3.0

世界计算机真的要搞成,需要几个前提:可扩展性, 跨分片、跨链的无缝互操作性,快速低成本的形式化验证。后者(多进程)用来隔离资源。跨分片的无缝互操作性,这个问题很有意思。

分片一个最重要的是解决互操作性的问题。如果你分了片,那些分片不能相互很好的协作,各自为战,那就脱离了搞分片的本意。

从总的来说,跨分片交易的共识有两种方案:同步共识和异步共识,同步共识的项目:日链。

异步共识的项目:以太2.0,Near,波卡。

同步共识,就是跨分片的交易需要两个分片的验证者同时批准,一次通过,保证了这个跨链交易的原子性。异步共识是把跨分片交易分成两阶段提交,每个分片只处理自己的那部分。 这样这个交易就不是原子性了,有很多问题。

比如我用分片A里面的Token A换取分片B里的Token B。那么同步共识的协议下,这个交易要A和B分片一起验证批准,啥问题都没有。

如果用异步共识的方案呢,那就先在分片A里面把Token A转账,但这个转的余额是不可以用的,系统暂时给你锁定并产生一个收条。然后分片B看到这个收条,再把Token B完成转账。最后分片A把Token A的那次转账的锁定取消,让余额变得可用。如果一定时间内,Token B没完成转账的话,分片A就把Token A的交易取消并且回滚。

所以你们可以看到,这种异步共识的协议非常啰嗦。而且因为割裂了交易的原子性,很多交易都很难搞定,比如那个“飞机票或者宾馆,要不都订上要不都不订上”的典型例子。

这个问题在《以太坊分片FAQ》里有,是个以太坊没解决的开放问题。

几十年前Greg在微软搞分布式事务系统biztalk(不是区块链,但有很多类似地方,有点象不用考虑恶意节点的联盟链)的时候,对这种割裂成多阶段的事务处理非常闹心,发现一旦整个系统变得复杂的话(比如交易涉及要更多的分片,搞更通用的计算而不是只是转转币),这种多阶段的事务处理一下子指数爆炸了,各种锁定、回滚相互交织,根本没法分析。

这个图是异步共识

同步共识那么简单,跟单分片内调用合约没啥区别,但为啥不用呢?因为在状态机体系下实现很难,需要打开“块合并”的技能点。

就是回到了分片内并发的难点了,你要把一个块挂到几个不同的父块上去。

如果各个分片都是单链,你偶尔把一个块挂到两边,那问题来了,跨链交易越来越多的时候,所有的链都和面条一样粘在一起了。

等于很多车道,最后挤到一条车道上来了。这也是不可扩展的。

所以,正确的打开方式是RChain那样,块内并发+跨链互操作的块同步共识。

并发和跨链互操作的基本技术难点其实是一样的,RChain已经完成了并发,所以完成无缝的同步跨链共识毫无压力,只要完成安全性就可以了。

下面提到第三点,就是快速低成本的形式化验证,

形式化验证大伙都能做,以太坊也能。关键是成本,还有它的运行环境。

用我喜欢的会变身的妖精和乐高积木的比喻,图灵机合约就是个不断变身的妖精,要搞定形式验证,它所有的变身你都需要考虑到。Rho演算的合约就是块乐高积木,它到底能掀起多大的风浪你一看看过去就知道。

现在以太坊,波卡这些的合约都在单线程情况下执行,也没多少合约间的协作。所以妖精们的行为,还算是可以预测。

假如,我说假如啊,有一天他们真搞定了并发,或者他们想让合约间很多协作,一个合约调用另一个合约,再调用另一个合约。那将会是一副惨烈的画面。

单线程下的形式化验证,一般就是霍尔逻辑那套,对每句代码抽象出前条件、后条件、命令,然后看一段代码能不能推导出所需要的断言。

并发下的形式化验证,一般用TLA+之类的工具,先抽象出状态和状态转移,然后穷举,看看能不能证明不管路径怎么变都能得出希望的结果。这两种都不能扩展而且代价高昂。

Pi演算中类似的算法比较成熟了,专门的论文很多。

Rho演算中的成熟程度如何要问合作社的Greg,Steve,Christian这帮人,他们都是进程演算的大牛。这种基于行为类型系统的形式验证,非常快速廉价。

终极目标是完成“成千上万的智能合约的编排”。

并发出块是地基,

分片是框架,

LADL是装修,

RChain的万丈高楼就是这样一步步造的。

造完了,世界电脑就实现了。

Q5: 安全性是一条公链项目最重要的一点,据了解RChain在安全性方面有自己的独到设计,能谈谈是什么吗?

形式验证和软件测试是不一样的。

形式验证是要证明你的代码“在任何时候都会满足某种性质”,比如你的账户余额不会变成负数,代币总量不会增加等等。

软件测试是给你的代码喂各种不同的输入,看输出是否满足要求的性质。

传统软件工程来说,测试就够了,不需要形式验证。

但区块链不一样。

因为区块链是mission critical,就是说“零容错”

你有一个bug,在传统计算机行业,问题不大,可以杀掉进程重启再慢慢查找,再不行回滚交易,反正服务器是你的。

尤其是并发下,搞过并发编程的都知道,很可能你跑100万次,就1次会出现问题。软件测试很可能抓不住。

然而你用形式验证工具,很可能发现这个问题。如果你没发现,黑客会帮你发现。

Q6:RChain主网上线已经有一段时间了,接下来的发展规划又是怎样的呢?

官网上有最新的路线图。快合并已经快出来了,接下来会开放外部节点,这是上半年预计完成的。

下半年主要任务是完成分片。前面已经说过了,RChain是先难后易,并发、快合并完成以后,分片其实已经完成了一大半。

还有一个任务是完成Rholang v1.1,这个完成以后,合约代码的可读性有个质的飞跃,TPS性能也会大幅度提高。同时还有很多优化要做,不停的挖这个平台的潜力。

分片完成以后,主要就是最后的软装修工作了——基于行为类型系统的形式验证。

中间,可能还会加入一个技能点,用零知识证明来直接加速Layer 1。这个今天不展开说了。

Q7: 据了解,Dfinity也说要研究世界电脑,那与之相比,RChain有什么优势呢?

不光DFN,

Algorand,Solana这种轮流出片的都是单线程。

好比,你学使一套绝世的快剑,那也就一个人,RChain吹一口毫毛,变出一千只猴子来同时锤你,你怎么搞。一千只不够,我再来一千只。

不讲武德啊。这就是可扩展性的威力,何况,他们的剑可能也没RChain快,他们有时间片作为同步约束,比如100毫秒出一剑。而RChain以后是会是没有这个约束的,想出剑就出剑。

走了VRF的邪路的,并发是彻底做不了了,比如你开两个线程,那你随机选的2个节点怎么保持协同去防止出的块中间合约执行没有冲突(无效块)

同样的,搞跨分片交易的同步共识也歇菜了,所以,技术上对这些轮流出块项目非常不看好。

当然,江湖上都说“无脑梭哈暴富,技术分析归零”

机总的定位是“币圈王语嫣”,品评一下币圈各派的武功还行,真的炒币的话,还是别听我的。

—-

编译者/作者:CITEX

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...