作者/Atticbee

在这一集,Greg和RChain的研究人员Isaac,Christian讨论了TLA(Temporal Logic of Actions)和RChain的LADL(Logic As Distribution Law)。下面是Atticbee做的摘要,然后加了一些自己的理解。

TLA (Temporal
Logic of Actions,行为时序逻辑)是并发系统进行形式化验证的首选工具,很多分布式的并发系统都用选用这个工具来进行验。有一些背景介绍在这些文章里:

https://www.zhihu.com/question/268593174/answer/423871132。

很有意思,亚马逊的云服务就利用TLA找出了很多设计上的bug。

用TLA进行验证相对与传统的软件测试来说已经是很大的进步了。传统的测试,对于并发系统来说是远远不够的。有过多线程代码经验的码工应该有体会,有些错误是很难重现的,可能运行100万次会崩溃一次。对于非重要应用这个无所谓,因为学习这些形式化验证工具的成本很高,然后业界觉得对大多数的传统应用,有bug也无所谓,大不了重启,回滚交易。

Atticbee注:但对于区块链这种直接和钱打交道的,没法回滚的去中心化系统,这种bug就很要命了。尽管有些项目用了更安全的语言比如Rust,以及更安全的设计模式如OCAP来减少很多bug,但是智能合约的安全性是0和1的关系,不是0.9999999和1的关系。只要不通过形式验证,黑客总是可以用模型检测器找到发起攻击的途径。

用TLA进行验证,有个重要的缺陷就是,TLA的模型语言和最后的产品实现语言是不同的。在TLA的流程中,你首先用TLA建模语言定义一个模型,然后用这个语言定义一些目标性质(比如没有死锁,系统不会进入非法状态等等),最后用这个自动化工具检验这个模型是否满足指定的目标性质。检验完成后,产品代码按照这个模型来实现。然而,你验证了TLA模型的正确性,并不表明你最后的代码实现是正确的。

Atticbee注:这就好比你设计了一座桥,进行力学计算验证了这座桥是安全的,但你最后的工程实施如果和设计有所差距,造出的桥还是会倒。

所以,最好的解决方案就是,发明一种语言,它既可以是用来形式验证的建模语言,同时又可以作为产品化的代码语言。这就是为什么我们对名字空间逻辑中的LADL感兴趣的原因。Rholang中的名字空间逻辑可以用来建立一套行为类型系统,对很多有意思的性质进行表达和检查。所以在这个意义上,Rholang同时是一个产品化的代码语言,也是一个TLA那样的形式化建模语言。

Rholang可以推导出的类型可以表达TLA能验证的同样的目标性质,实际上更接近空间逻辑模型检测器(Spatial Logic
Model Checker)能验证的目标性质。但Rholang的名字空间逻辑更具有表达力,因为由于反射它可以检查名字之间的结构。所以有很多事,Rholang的名字空间逻辑可以做,但Spatial Logic Model
Checker做不到。一个很好的例子就是编译期的防火墙:在类型检查期间(远在代码执行之前),你就可以判断一个进程是否只在规定的名字集合中进行通信,而不会超出这个范围。甚至,你可以随时调整这个约束,比如规定在某些状态下你的进程可以在规定的名字上进行通信。这种都是在代码类型检查期间完成的,所以称之为编译期防火墙。

注意现有的RChain还没有实现这个名字空间逻辑,这是金星的规划,水星是不带类型的。尽管在Rholang 0.1的规格中,Greg给出了一个类型系统的草案,但还有很多事情要做,比如让类型定义的语法变得对开发人员更加友好。巧合的是,TLA中目标性质定义的语法和Rholang 0.1中类型定义的语法非常类似。事实上,名字空间逻辑中的类型、空间逻辑模型里的类型、TLA中的目标性质这几个都有相应的对应关系,都是非常有意思的数学概念。而Rholang名字空间逻辑上的推导类型的LADL算法(用分配律表示逻辑)是这些概念的一个推广,不光是数学上很有意思,在分布式系统的工程实现中也有非常重要的好处。

要理解LADL,需要知道上世纪三十年代就被发现了的柯里-霍华德同构(zh.wikipedia.org/wiki/%):人们发现,Lambda演算和直觉逻辑的公式之间是紧密对应的,两者可以相互转换。直觉逻辑中的公式或命题可以对应成为Lambda演算中的类型。直觉逻辑中对命题的证明的推导(规约)步骤对应了Lambda演算中的beta规约。上世纪的90年代,Pi演算提出后,人们也进而发现用Pi演算中的进程代替Lambda演算中的项(Term)也得到同样的对应关系:一个进程要满足的逻辑命题等价于这个进程满足的类型。你的进程通过了一个类型检查,也就自然证明了这个进程满足对应的逻辑命题,从而实现了自动化的形式验证。(Atticbee注:Greg在接下来讲了很多LADL的知识,需要很多数学功底才能理解,所以略过很多细节。)

LADL(用分配律表达逻辑)是一种推导、检查类型的算法。注意有一些类型是不满足分配律的,比如列表,因为列表中元素存在次序关系所以不满足交换律。但集合这个类型是满足的。然而我们并不需要支持最通用的类型集合(那就太复杂了,很难快速、自动的求解),只需要支持一个尽可能大的子集就行。

所以LADL的思路是放弃了对最普遍的代数结构的支持,这就不用求解非常难解的问题了,转而只支持一个子集(Atticbee注:最普遍的情况非常难解,需要穷举各种状态的组合,计算量非常大。)用LADL有很多好处,首先,可以一键快速生成类型系统(Atticbee注:从而也实现了在这个子集上的代码的一键形式化证明);然后,可以用来作为一个更好的查询语言。比如现有的github系统,你是无法根据代码的结构进行查询的。如果可能根据代码的结构和行为进行查询,那会使得程序员的效率大大提高。

/ 关于Rholang的第一手中文资料 /

为了让大家更方便地了解RChain,追踪最新信息,将项目相关资源链接整理如下:

RChain官网

rchain.coop

RChain社区

discord.gg/NWkQnfH
注:需要认证为Coop会员才能进入
认证入口:www.rchain.coop/community

视频

www.youtube.com/channel/UCSS3jCffMiz574_q64Ukj_w/videos
注:RChain创始人Greg每周会发布视频更新,内容包括由产品负责人Kelly主持的每周开发总结,由Greg亲自操刀的理论研究进展,和一些及时的社区反馈信息。

RChain代码
RChain区块链项目主代码库:
github.com/rchain/rchain

官方dApp项目RSong的代码库

github.com/rchain/rsong

RChain社区自带干粮的码农贡献的代码

github.com/rchain-community

RChain-API 代码库

github.com/rchain-community/rchain-api

治理
董事会文档

github.com/rchain/board

RChain社区特别会议提案区

github.com/rchain-community/sm19a

技术文档

mobile-process-calculi-for-programming-the-new-blockchain.readthedocs.io/en/latest
注:最值得研究的文档

关于LADL

arxiv.org/pdf/1610.02247.pdf
注:Mike Stay和Greg共同撰写的论文

关于CBC Casper
RChain Dev Conference - CBC Casper
docs.google.com/presentation/d/1I15PD5cV-OxL9I45B-cX6KTPwQJQu4BYgHfLwLthByg/edit#slide=id.p
注:Vlad在Rchain 开发者大会上的PPT

Rholang的早期文档
The Rholang specification
developer.rchain.coop/assets/rholang-spec-0.2.pdf

RChain项目管理

rchain.atlassian.net/wiki/spaces/CORE/overview
注:信息量巨大,慢慢研究吧

 

测试网相关信息

rchain.atlassian.net/wiki/spaces/CORE/pages/678756429/RChain+public+testnet+information

Rholang中文社区

rholang-china.org/
注:使命是在中文区推广Rholang语言,由愁虫主持。

Rholang中文教程

slides.com/dimworm/rholang_v1/

注:由中文社区出品

R链中文社区

www.genesisfor.com/

注:汇集所有中文RChain的文章,由链随运营。

http://rchain.site/
注:中文社区爱好者网站,目前在维护中。

RChain的一键形式化验证:关于RCast 33 – LADL话题的讨论摘要的更多相关文章

  1. 形式化验证工具(PAT)Reader-Writers Problem学习

    经过前几次的学习,我们应该对PAT有一点点的了解了,我们加下来就直接看例子中的一个问题,这个问题比较简单. 看代码: //The classic Readers/Writers Example mod ...

  2. 形式化验证工具(PAT)2PC协议学习

    今天我们来看看2PC协议,不知道大家对2PC协议是不是了解,我们先简单介绍一下. 两阶段提交协议(two phase commit protocol, 2PC)可以保证数据的强一致性,许多分布式关系型 ...

  3. 形式化验证工具(PAT)羊车门代码学习

    首先介绍一下PAT工具,下图是PAT工具的图标 PAT工具全称是Process Analysis Toolkit,可以做一些简单的验证. 今天我们分析一下例子里面的Monty Hall Problem ...

  4. 形式化验证工具(PAT)Perterson Algorithm学习

    今天学习一下Perterson Algorithm. 这个算法是使用三个变量来实现并发程序的互斥性算法. 具体看一下代码: Peterson算法是一个实现互斥锁的并发程序设计算法,核心就是三个标志位是 ...

  5. [转]ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    本文转自:http://www.cnblogs.com/parry/p/ASPNET_MVC_Web_API_digest_authentication.html 在前一篇文章中,主要讨论了使用HTT ...

  6. ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认 ...

  7. kickstart一键自动安装Linux系统

    kickstart,无人值守,自动安装系统.本文介绍kickstart的用法. #安装系统的信息——可以参考 [root@larrywen pdf]# vim ~/anaconda-ks.cfg 第一 ...

  8. 安全验证之使用摘要认证(digest authentication)

    安全验证之使用摘要认证(digest authentication) 在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看 ...

  9. 【Asp.net入门15】第一个Asp.net应用程序-输入验证

    前言 所谓输入验证,顾名思义就是验证用户输入符不符合要求.前面我们已经完成了这个简单的应用程序,但还有一个问题需要解决:用户可以在Default.aspx窗体中 提交任何数据,甚至可以提交根本不包含任 ...

随机推荐

  1. Stylized Image Caption论文笔记

    Neural Storyteller (Krios et al. 2015) : NST breaks down the task into two steps, which first genera ...

  2. 【Linux】sed笔记

     sed - stream editor for filtering and transforming text(用于过滤和转换文本的SED流编辑器),主要是以行为单位进行处理,可以将数据行进行替换. ...

  3. Python 序列求和

    #基于Python2.7 多数OJ题库的第一题便是A+B,A+B+C此类求和问题,之前初学Python时是这么做的: while True: try: a,b,c=raw_input().split( ...

  4. JAVA异常类Throwable解析

    在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable类. Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) :二者都是  ...

  5. nginx负载均衡的相关配置

    一台nginx的负载均衡服务器(172.25.254.131) 两台安装httpd作为web端 一.准备工作 1.1 安装nginx yum -y install gcc openssl-devel ...

  6. 洛谷$P5330\ [SNOI2019]$数论 数论

    正解:数论 解题报告: 传送门$QwQ$ ,,,这题还蛮妙的$QwQ$(,,,其实所有数论题对我来说都挺妙的$kk$然后我真的好呆昂我理解了好久$QAQ$ 考虑先建$Q$个点,编号为$[0,Q)$,表 ...

  7. $loj\ 6045$ [雅礼集训 $2017\ Day8$] 价 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 这题还,挺有趣的我$jio$得. 考虑依然先是照着最小割的模子建图呗,然后从意义上来分析,割一条边就相当于不吃一种减肥药/买一种药材.由已知得,买的药材数量 ...

  8. 洛谷$P$3168 任务查询系统 $[CQOI2015]$ 主席树

    正解:主席树 解题报告: 传送门! 首先考虑如果是单点修改,那就是个线段树板子嘛$QwQ$ 然后现在是区间修改,对于区间修改,显然就考虑差分下,就变成单点修改辣$QwQ$ 同时单点查询前$k$小也就变 ...

  9. SQL预处理

    每向数据库发送一条SQL语句,数据库中的SQL解释器就会将SQL语句转换成数据库底层命令,然后执行该命令完成相关的数据库操作.如果频繁的向数据库提交SQL语句,势必会增加数据库中SQL解释器的负担,进 ...

  10. 【汇编】2.第一个程序:hello world

    前言 在上篇博文 [汇编]1.汇编环境的搭建:DOSBox的安装 中,我们完成了 1.汇编环境模拟器DOSBox的安装. 2.汇编编译相关程序MASM6的下载. 在上篇文章的最后我们提到了挂载DOS程 ...