首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

可移动进程代数在区块链的应用(4)

Sharding(分片)

另一个使得以太坊提案得以实践的要求是摆脱全网的电脑设备。以太坊真正需要的是一个虚拟机集群,每个虚拟机服务于一个客户端过程的分片,而不是只在区块链上运行单个虚拟机。在某种意义上,这标志着我们重新回到了Rosetee/ESS设计被提出时,互联网最初的愿景。然而这里面有一些关键的不同点。首先,每个虚拟机的状态是被存储在区块链上的。其次,尽管每个虚拟机都是来自同一个部分,但仍然需要一个规则来控制它们的交互。具体来说,尽管它们都是同一个VM的有效副本,每个虚拟机操作特定的虚拟地址空间,或者是我们调用它时所处的命名空间。当它们在操作同一个命名空间时,我们已经确保了每个副本的状态都是强一致的。这是共识算法的目的。

在以太坊的虚拟机设计中,一个很关键的成分缺陷在于虚拟机之间协调某一命名空间下组合账户的使用。而主要的原因是:它并不是组合的。另一个核心变化是,类似Rosette/SEE的设计,RChain的虚拟机被设计成在根本上是并行的。RChain的智能合约,也跟Rosette/ESS中的参与者一样,在执行期享受着细粒度的并行性。以下两个关键因素使得这种并行性在金融交易中很安全。

并行性、非确定性与安全性

在分布式环境中,有两种使得细粒度并行执行变得安全的机制,它们根本上是运行在不同层的。一个是在运行期,另一个是在编译期。运行期是比较好理解的。而合约相关的并行执行所引起的不确定性,总是以下面的竞争形式出现:

两个输出竞争服务于同一个输入请求

1 x!( v1 ) | for( y

两个输入请求竞争同一个输出

1 for( y

这种竞争要么出现在合约内部的计算,要么在合约与其运行环境之间。无论是哪一种可能情况,为了让合约能继续运行,我们需要一个消除的手段,其中之一是交易。这就是前文所述的交易边界的意义。因此,这些交易正是Casper共识算法想要复制的。所以,尽管会出现内部的不确定性,但复制的状态是确定性的。在同一个分片上的所有节点都会看到同样的状态。

但我们依然可能敲下错误的代码。抛开EVM的确定性不谈,DAO的bug的出现,说明了在调度有关维护新用户请求的状态更新上存在一些不公正;而且,当它以rholang合约的形式表示时,会产生多余的竞争条件。那就是,考虑到合约真正想要表达的语意,合约中所允许的一定程度的不确定性存在着安全隐患。在大多数实际情况下,这些问题可以被检测到,并且在编译期使用rholang的空间行为类型来预防。在攻击DAO所找到的bug的特例中便是如此。

虚拟机是什么

让我们短暂回顾一下,什么是虚拟机。每个虚拟机相当于一张表格。表格列出了一个交易的集合。这些交易按如下形式:

1 ->

交易明确指出了一个在给定状态下的机器运行一串特殊字节码指令后会发生什么:

1 rosette> (code-dump (compile '(+ 1 2)))litvec:

2 0: codevec:

3 0: alloc 2

4 1: lit 1, arg[0]

5 2: lit 2, arg[1]

6 3: xfer global[+],trgt

7 5: xmit/nxt 2

8 rosette>

π演算赢得了基于消息传递交互来构建的并发计算的核心模型。它在并发和分布式计算中所扮演的角色,就像lambda演算在函数式语言和函数式编程所扮演的一样,给出了计算的基本本质,并将其转化为可以执行计算的语法和语义。给定信道的一些概念,它构建起了一些基本的进程公式,其中前三个是关于I/O的,描述了消息传递的行为。

1 for( y P{ @Q / y }

这个转移表达式的意思是,当虚拟机中的一个输入守卫线程正在等待x上的输入,与一个正在提交输出到x上的另一个线程并行运行,这时数据会通过x传递,最终在持续过程P中与变量y绑定。这是一个包含了很多低层级状态变化的更高层级的状态转移。理解这个很重要。这是因为x与多种通道绑定,从本地存储的表格,到AMQP队列,再到tcp/ip的套接字。每个通道都有一种与更高层转移规则进行平滑互操作的自然语义。高层转换规则和不同通道语义之间的互操作,恰好是元组空间的语义所能提供的。

然而,在这次讨论中,对于给定虚拟机实例的识别是很重要的。换句话说,一个虚拟机表格的副本,加上一个特定的机器状态配置,可以被限制在特定命名集合上进行操作。这个命名集合(也称为命名空间),可以编程的方式指定,因此也不一定是有限的。

在这个架构中,一个分片大致相当于一个命名空间,一个机器实力以及部署在虚拟机状态所存储的网络上的RChain节点。我们只敢说“大致”,因为分片也可能由分片组成,这意味着给定的、在命名空间的子空间中复制机器状态的分片中,存在着节点的子群。同样地,因为虚拟机只有在他们有重合的命名空间时才可以互操作,多个分片可以存储在相同的节点上。这提供了可用性与安全性,因为对于使用虚拟机、节点和命名空间之间的关系,以及寻找节点的物理地址与命名空间的相关性,这些可以根据需要在计算量上做得足够困难。

Next Previous

再不关注RChain,机会就要飞走了哦

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180319G1Q37Z00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券