Rchain的核心是基于移动进程演算(mobile process calculi),这是一个拥有大约 30 年历史的数学分支。
1.什么是PI演算?
在理论计算科学领域,π演算是一种过程演算。π演算允许命名空间在通道中进行传递,这样,使得在计算中导致网络配置变化的并行计算通过这种演算成为可能 (Ref.: https://en.wikipedia.org/wiki/Pi-calculus)。
需要更好的理解π演算在RChain发展中的应用方法,可参考这篇文献: Mobile process calculi for programming the blockchain。
2.Lucius(Greg)Meredith
Rchain平台由西雅图 RChain 合作社开发。作为一个合作社,它具有深厚的行业根基, 并且可以说比其他区块链团队有更多的合作经验,能够更好地维持其中成员的平等。
Lucicus(Greg)Meredith是RChain合作社的联合创始人,董事会主席。
RChain由Greg创立,是他长期研究创造的一系列新成果。Greg对数学有着极大的热情,在推动创新技术项目方面拥有超过30年的高水平经验。
Greg 起先在微软工作,并担任 BizTalk Process Orchestration 的首席架构师,是第一个互联网规模智能合约系统的共同作者,引出了一系列的互联网标准 BPML,BEPL 和 WS- Choreography 以及影响了之后被广泛使用的 WSDL;他还曾担任微软 Highwire 首席架构师,以及 ATT / NCR 的 ATM 网络管理解决方案首席架构师,以及 MCC Rosette / ESS 技术的联合设计师和开发人员。
Greg 的远见和创造力超乎时代,于是 Greg 便自己去解决他在微软所面临的问题。十年过去,Greg 已经设计并创建了他预期的 —— 业界第一个可扩展且值得信赖的区块链技术,并将向所有人开放。
3.RChain平台
Rchain是区块链技术向用户赋权的转变。在 RChain 平台上,智能合约(smart contracts)是并发(concurrent)的并由编译器进行形式验证,所以它们快速,通用且安全。 这些合约是用 RhoLang 写的,这是一种强类型(strongly-typed),并发和自动建构校正 (correct-by-construction)的编程语言,真正适合于区块链智能合约。
RhoLang 合约运行在 Rho 虚拟机上——一个并发执行引擎。RhoVM 允许您的应用程序实现前所未有的速度和可扩展性。
RChain 的平台为开发社区提供了一个独一无二的优势。RChain 平台支持同一节点上的多个区块链(Multiple blockchains),包括公有链和私有链。这些区块链可以安全,可预测和有规模地进行交互。这是开发人员多年以来希望实现的愿望。这些区块链受到整个行业翘首以 盼的权益证明共识协议的保护。这是可扩展性和容错性更高的验证者的共识。
Rchain平台另外一个非常有价值的方面就是使用 LADL = 分布式逻辑法则。它是一种压 缩形式(更多吞吐量),可以用非类型语言生成类型系统,这是一个巨大的优势。
4.PI演算在Rchain中的应用
从90年代早期开始,伴随着MCC的ESS技术以及其他一些新技术的兴起,分布式以及去中心化应用开始展露头脚。这其中的核心技术是基于一个虚拟机环境,在一个网络连通的物理环境中运行节点。这个想法为开发一个适合现有互联网模型的去中心化且可协调的应用程序提供了丰富的材料。
MCC的Carnot研究小组在网景公司成名整整十年之前就已经预测到了互联网的商业化。然而,Carnot小组专注于去中心化、分布式的应用,并且研发出了一个称为可扩展服务网关(Extensible Services Switch,EXX)的网络应用结点,以及用于在这些结点之上编程的编程语言Rosette。 而Rosette/ESS的研究模型则是actor模型。
Actor通过更新在并发运行中提供一个一致的状态视图,更具体地说,一个actor直到它被更新之后才会处理邮箱中的下一条消息,并且当actor正在处理当前消息时,邮箱上锁并且将进来的客户端请求排队。当一个actor调用了更新操作,一个新的逻辑线程将被创建来处理邮箱队列中的下一条信息。线程对该actor状态的视图全部都提供给了该次更新。前面的线程可能仍然会对状态进行更改,但是这些对后面处理邮箱中后续消息的线程都是不可见的,因此对后续的客户端请求也是不可见的。这种方法提供了一种可伸缩的并发概念,从消息抵达顺序不确定的单线程容器,扩展到某些系统级支持逻辑线程映射的外部容器(例如虚拟机,操作系统或硬件本身)。
Rosette不仅仅是结构上和程序上的反射,更是词法上的反射。也就是说,Rosette程序中的所有句法结构也都是actor!反射式的底层构造为干净的宏系统、嵌入式领域特定语言以及其他语法和符号处理特性提供了基础,而这些是许多工业语言在Rosette完成20年后还难以提供的特性。
Tomlinson,Lavender和Meredith等人提供了Rosette/ESS中的元组空间模型的实现,作为进行两种模型研究的手段,并比较两种风格所写出来的应用程序。正是在这项工作中,Meredith开始了对移动进程演算的深入研究,并把他作为actor模型和元组空间模型的第三个替代方案。主要需求之一是在具有一个统一的编程模型(如Rosette的actor模型)之间建立桥梁,通过元组空间模型提供的简单但灵活的通信和协调概念,使应用语义的推理变得容易得多。
在Tomlinson使用Rosette的反射方法来模拟元组空间语义(见上面的代码)的基础上,Meredith通过线性延续提供了从π演算到元组空间语义的直接编码。这种语义是微软BizTalk的Process Orchestration引擎的核心,微软的XLang可以说是第一个互联网规模的智能合约语言,而它正是由此产生的编程模型。这个模型直接影响到W3C标准,如BEPL和WS-Choreography,并催生了整整一代的业务流程自动化应用和框架。
与Rosette为actor模型带来的改进一样,π演算为应用程序提供了一个特定的本体论,这些应用程序是以通过消息传递信道进行通信的进程概念而构建的。重要的是要注意,进程是通道中的参数,而Meredith使用这个抽象层次为XLang中提供了各种信道类型,包括绑定到微软的MSMQ消息队列、COM对象和许多其他在当时的流行技术的接入点。也许当今互联网最核心的抽象在于,URI提供了一个自然的信道概念,允许通过URI感知通信协议(如http)实现编程模型。同样,就当今的存储地带而言,键值对存储(如nosql数据库)中的键也直接映射到π演算中的通道概念,而Meredith使用这个构想来提供π演算到元组空间语义的编码。
π演算赢得了基于消息传递交互来构建的并发计算的核心模型。它在并发和分布式计算中所扮演的角色,就像lambda演算在函数式语言和函数式编程所扮演的一样,给出了计算的基本本质,并将其转化为可以执行计算的语法和语义。给定信道的一些概念,它构建起了一些基本的进程公式,其中前三个是关于I/O的,描述了消息传递的行为;接下来的三个表示进程的自然并发情况、信道创建和递归情形;这些基本公式可以用元组空间里面的操作来模拟。
在过去的20年里, 一场革命已在计算机科学和逻辑学中悄然发生。许多年来人们都知道, 对于函数式编程模型中的小而增长的代码片段中,类型对应于命题, 证明对应于编程。如果这种对应,五花八门地被称为类型即命题范式或Curry-Howard 同构, 可以被用来涵盖模型中的一个重要而实用的部分, 它对软件开发有着深远的影响。至少, 这意味着, 类型检查程序的标准实践与程序证明在执行过程中拥有一致的某些属性。与Curry-Howard 同构所覆盖的初始片段相关的属性,主要与相关形式的函数中输入输出数据有关, 通过编译时检查,有效地消除了这类内存访问违规的行为.
加上J-Y Girard的线性逻辑的发明,我们可以看到命题即类型范式的一个具体扩展。通过线性逻辑,我们看到了范围涵盖远远超过严格串行的函数式模型。类型检查所提供的作用范围从属性证明扩展到并发环境下的协议一致性检查。接着,Caires和Cardelli发现了空间逻辑,其进一步扩展了作用范围,包括程序内部形态的结构化属性。在这些发现的基础上,Stay和Meredith确定了一个算法,即LADL算法,来生成类型系统,带来了一系列从安全性、可用性到安全性质的结构化和行为化的特性。通过应用Stay和Meredith开发的LADL算法,这里介绍的无类型的合约原语模型被赋予了一个完备的类型系统,它足以提供一些编译时守护,保证处理金融财产和其他敏感内容的关键任务所要求的关键的安全性和可用性。一个在编译时守护的简单例子是足以在编译时去发现和防止在The DAO事件中引起5千万美元损失的bug。
信道语义的单子处理就是在SpecialK栈研究中的亮点。首先,它将信道访问映射到for-comprehension风格的单子结构化的响应式编程。其次,它将信道同时映射到与整个节点相关的本地存储,以及节点之间的基于AMQP服务提供商的通信基础设施中的队列。这提供了内容传送网络的基础,该网络可以在通信节点的网络上实现,其与基于π演算的编程模型集成。特别的,从以上代码的注释中可以看出,信道加模式的单子化对待统一了消息传递和内容交付编程范式。具体来说,信道可以被看作是主题提供者,而模式为消息流提供了嵌套的子主题结构。这整合了所有的标准内容寻址机制(例如URL + http),同时提供了一个查询模型。
正如我们将看到的,RChain合约模型继承了SpecialK对待内容交付的所有优点。但是,SpecialK所实现的前RChain合约模型是以嵌入领域专用语言作为Scala的一组类库,而RChain则将该模型实现为全面的编程语言,运行在区块链上复制的虚拟机上,极具以太坊的架构和设计理念。该选择解决了第一个Synereo白皮书中指出的几个Synereo 版本1中体系结构的缺点。特别是避免了为运转注意力经济学的财务能力而必须支付给其他区块链费用从而在注意力经济系统合约上遭受了许多基于经济上的攻击的问题。它还解决了与SpecialK语义中心的Scala有限的延续库有关的SpecialK技术栈中的技术债务问题,同时显着提高了其支持的智能合约的能力。
从Rosette对元编程设计的总体承诺中得到一个线索,高阶反射π(r-eflective h-igher o-rder π-calculus,简写为rho-演算),引入反射作为其核心模型的一部分。它提供了两个基本原语,反射和修改,允许正在进行的计算将进程转变为一个通道,将一个从进程修改后得到的信通转变回它所修改的进程。该模型在过去的十年间经历过多次同行评审。原型系统已有将近十年的历史,清晰得演示了其健壮性。它采用总数达到了9个的合约构建原语集合,远远少于以太坊智能合约语言Solidity,然而这个模型比Solidity更具表达能力。特别是基于Solidity的智能合约不享有内在并发。
进入区块链
用一句简单的话来解释,区块链是一项去中心化的多冗余技术。状态可以备份在多个网络节点,并且不需要任何中心化的机构来管理备份。多冗余机制和基于经济学的安全之间微妙的相互作用有时候使多冗余本身的基本价值被模糊化。这个机制下的多备份已经成为一个高影响力的价值主张。以太坊的见证提议,它的精髓是在区块链上备份虚拟机的状态,而不是账本的状态。这不仅提供了一个智能合约系统,同时还有全网公开、无法被关闭的计算资源。
不仅仅是华尔街引起了注意,亚马逊的AWS,Google的云服务,Microsoft的Azure,所有这些业务深深地被以太坊所影响。事实上,账本(多冗余状态的经济学说法)可以被用作一个经济上的安全实体,可以抗衡基于全球计算资源的DoS攻击,加强了协议的健壮性。它也从本质上地改变了使用这些服务的生态系统。
云服务基础设施提供商的价值主张非常依赖于微交易,这些微交易与计算资源的使用息息相关。以太坊在最底层的执行和存储中集成了微交易,在一定程度上对系统的安全至关重要。它比当前的云解决方案更好、更优雅。更重要地是,它被开源地实现了。具有这种新兴形式的一些特点的革命之一,离我们最近的,还是由互联网导致的通信方式的转移。电话业务提供商知道,互联网将改变人们的通讯方式,从而不得不争先恐后地适应这样的场景——超过半数的长距离通讯都将趋于使用像Skype, zoom和Google Hangouts这样的免费服务。云基础服务提供商,以及整个跑在云上的互联网络,都将不得不转变成一个精致的加密货币市场。它在最底层了全球可用的、公开的计算资源。
Casper
在2万英尺的高度上看,这是一个深奥的想法,但在生产环境系统执行的角度上看,它突出了几个要求。首先,它需要一个不同的备份技术。为了使得以太坊的想法在互联网规模的生产环境系统上仍然可行,这项促使以太坊协议诞生的技术是我们首先需要重新思考的。工作量证明过于消耗能源。社区对此的争议很大,并且以太坊开发者社区的所有主要利益相关方都在积极参与这些讨论。取而代之地,一个被称为Casper的新的“付费参与”算法,正在由一个小团队负责进行开发,成员包括Buterin, Zamfir和Meredith。
下注区块VS下注提案
Casper共识算法的核心是参与复制协议验证者的一个消息交换周期。在消息交换周期中各个验证者最终能够趋于收敛达成共识。Casper协议设计特点是共识周期,有时被称为博彩周期与验证者正在使用的共识算法的状态无关。它可以用来在单个布尔值上(例如硬币翻转的结果)达成共识,或者像状态机那样复杂地达成共识。在本文中进一步阐明了共识的状态该如何封装。具体而言,区块链这个名词指代的就是一系列状态被封装成区块并串联成链式的结构。因此,对于一个共识周期而言,需要达成共识的目标就是一个区块。通俗一点来说,验证者在一轮验证的过程中相互交换信息,使得对于区块链上下一个区块的内容达成共识。
在这一章节中,我们将逐步自然地从PoW算法切换到Casper算法上。但是值得注意的是,共识周期的长短直接限制了区块产生的速率。由于交易是被封装在区块当中的,因为我们可以用区块产生的速度大致估量系统处理交易的速率。Vitalik的试验性Casper实现已经说明采用casper算法,区块链的执行效率比采用PoW算法要提高许多。但是Casper算法最终的目的是让交易处理的吞吐量达到4w笔每秒,基本接近于金融网络的处理速率,例如Visa。为了实现如此高的交易处理速率,我们做了两个基本的观察。第一个是一个生活的常识:绝大多数交易都是相互独立的,在上海的一名用户发起一笔交易去购买一辆汽车与在西雅图的一名用户发起一笔交易去购买一杯咖啡是完全独立的。多个并发交易的隔离性需要遵循与多车道高速公路一样的原则,在高速公路上汽车不变道就是我们所说的独立性。按照这个比喻,我们将一个区块比做一条有多条车道的高速公路,期间的汽车几乎没有变道行为。
另一个观察是更微观的,它与可编程的数据压缩有关。有一个贴切的比喻来自于计算机图形学。对于许多图像,例如蕨类图像,绘制图像有两种根本不同的方式,其中一种方式是由渲染器提供与像素对应的大量数据点来进行图形绘制。据推测,这个数据集是通过数据采样获得的,例如可能通过扫描实际的蕨类植物获取。另外一种绘制方式是通过获取一个与蕨类植物相关联的算法模型,通过这个算法模型计算产生一系列的像素点来完成图形绘制。从这个角度上来看,这个算法模型其实代表了一种数据的压缩形式。相较于一份数据量很大的像素数据传递给渲染器进行渲染,使用算法模型生成像素数据来绘制图形的效率显然会高很多。
因此,我们可以对交易数据采用类似的方式压缩成一个提案。Stay和Meredith的LADL算法精确地描述了如何绑定一个提案与一批交易之间的映射关系,剩下的部分就是如何建立不同验证者与他们提出的提案之间的映射关系。具体来说,假设验证者Abed正在检测网络产生的一部分交易,而验证者Troy正在检测网络产生的另外一部分交易。假设Abed和Troy使用提案来完成这些交易信息的交互,那我们如果保证不同的提案所包含的交易信息是一致的呢?这就是由LADL算法提出的提案具备压缩交易信息的能力。
通过逻辑层次的推理,可以确定一组提案是否一致。在LADL算法中提出,两组提案当且仅当它们的组合(比如并集)(即它们表示的集合)的含义不是空的,则这两组提案是相同的;当他们的组合是空的时候,则表明这两组提案不是一致的。从这个角度来看,验证者在Casper的验证周期中从提案的最大一致性性子集中挑选出一个作为验证区块。一旦共识周期开始收敛,被确定的区块就会以一致的提案集合的形式产生,然后扩展到一个更大的交易集合,就像蕨类植物从由模式算法产生一些列的像素点绘制出图像一样。
5.参考资料
https://en.wikipedia.org/wiki/Pi-calculus
http://mobile-process-calculi-for-programming-the-new-blockchain.readthedocs.io/en/latest/
http://www.rchain.site/?p=40
http://mytestdocforrchain.readthedocs.io/zh_CN/latest/
#Rholang&Namespaces#
http://www.rchain.site/?p=159
http://www.rchain.site/?p=260
http://www.rchain.site/?p=226
#白皮书&架构#
http://www.rchain.site/?p=192
http://www.rchain.site/?p=43