Rchain架构之命名空间

  • A+

问:假设Alice,Bob和Carol分别位于不同的名称空间中,并且我们有两笔支付:Alice-to-Bob和Alice-to-Carol。如果我是一个只想关心爱丽丝的节点,我怎么知道爱丽丝不会双重花费?

答:命名空间只是一个名称集合。所有区块链地址都是名称。一个集合可以用几种方式来描述。其中之一是通过明确拼出集合中的每个项目。另一种方式是通过提供一个规则或程序来内含地生成集合或者识别集合中或集合之外的项目。更有趣的命名空间是内涵指定的命名空间。

现在,下一步是将这些与用户,合同和节点相关联。用户和合约都通过名称相互交流。节点验证给定名称空间中的事务,事务是跨名称的I / O事件(用作通道)。任何涉及两个独立命名空间的事务都必须由处理这些命名空间的节点集合来提供服务。如果没有处理组合命名空间的事务的节点,则事务不会发生。

如果存在结合名称空间的节点,则一致算法保证所有节点对事务处理达成一致。更具体地说,他们同意每场比赛的获胜者。因此,永远不会有双重花费。最大的威胁是找到由少数验证器提供的复合命名空间。幸运的是,您可以在命名空间后面看到验证器的功能,并决定是否信任该命名空间。

 

 

正文:

要实现互联网规模的区块链解决方案,就像互联网一样,它必须拥有逻辑推理资源的“位置”。具体来说,我们如何引用资源?我们如何确定哪些代理可以在什么条件下访问该资源?与许多其他区块链相比,地址是平坦的公钥(或其哈希值),RChain的虚拟地址空间将被划分到命名空间中。在一个非常一般的解释中,名称空间是一组命名通道。由于渠道经常作为数据存储实施,因此命名空间等同于一组有争议的资源。

我们已经确定两个进程必须共享一个指定的通道进行通信,但是如果多个进程共享相同的通道呢?交易不确定性是在两个一般条件下引入的,这些条件使资源有争议并容易受到竞争条件的影响:

for(ptrn < -  x){P1} | x!(@ Q)| for(ptrn < -  x){P2}

当并行合成中的多个客户端竞争在指定频道上接收数据资源时,会出现第一个争用条件。在这种情况下,P1并且P2正在等待指定的通道上正在由另一个进程发送x的资源。当且仅当在该位置处目睹了正确的值时,客户端才会执行其延续。在许多客户竞争的其他情况下,可能会有许多减少,但在这种情况下,可能只有其中的一种。其中一个接收第一个,第一个接收第一个,当它们被替换到它们各自的协议实体中时,它们可能返回不同的结果。@QxP1@QP2@Q@Q

x!(@ Q1)| for(ptrn < -  x){P} | X!(@ Q2)

当两个客户端竞争在指定频道上发送数据资源时,会发生第二个争用条件。在这种情况下,两个客户端每个竞争向@Q指定通道上的客户端发送数据资源x,但只有两个事务中的一个可能发生 - 一个是接收方客户端@Q1首先接收,另一个接收第一个客户端@Q2,两者都可能返回不同的结果代入协议体时P

对于竞争资源的协议,这种不确定性的水平是不可避免的。之后,在共识部分,我们将描述共识算法如何通过收敛于非确定性过程中的许多可能事务中的一个来保持复制状态。现在,观察重新定义一个名字是如何约束第一种竞争条件下的减少:

for(ptrn < -  x){P1} | x!(@ Q)| for(ptrn < -  v){P2}→P1 {@ Q / ptrn} | for(ptrn < -  v){P2}

第二种竞争条件:

x!(@ Q1)| for(ptrn < -  x){P} | 你!(@ Q2)→P {@ Q1 / ptrn} | ü!(@ Q2)

在这两种情况下,通道和正在传输的数据资源都不再是有争议的,因为它们现在正在通过两个不同的命名通道进行通信。换句话说,它们位于不同的名称空间中。此外,名称可以证明是不可推测的,所以只有在自行决定的外部过程给予它们时才能获取它们。因为名称是不可猜测的,所以资源只有知道该名称的进程/合约才可见[5]。因此,在非冲突的命名通道集上执行的一组进程,即在不同名称空间中执行的事务集可以并行执行,如下所示:

  for(ptrn1 < -  x1){P1} | x1!(@ Q1)| ... | for(ptrnn < -  xn){Pn} | xn!(@ Qn)→P1 {@ Q1 / ptrn1} | ... | Pn {@ Qn / ptrnn}

| for(ptrn1 < -  v1){P1} | v1!(@ Q1)| ... | for(ptrnn < -  vn){Pn} | vn!(@ Q1)→P1 {@ Q1 / ptrn1} | ... | Pn {@ Qn / ptrnn}

在命名空间中并行执行x的一组事务以及在命名空间中执行的一组事务v是双盲的; 它们彼此匿名,除非通过辅助过程引入。两组事务都在传递相同的资源,@Q甚至要求@Q符合相同的资源,ptrn但没有竞争条件出现,因为每个输出都有一个输入计数器部分,事务发生在不同的名称空间中。这种隔离进程/合同交互集的方法基本上将RChain的地址空间分割成许多独立的事务环境,每个环境都是内部并发的,并且可以相互并行执行。

尽管如此,在这种表示中,事实仍然是资源对于知道渠道名称并满足模式匹配的流程/合同是可见的。将地址空间划分为独立事务环境的多路复用后,我们如何进一步优化可以在类似环境中与资源进行交互的流程/合同的类型? - 在什么条件下以及在多大程度上可以这样做?为此我们转向定义。

命名空间定义

名称空间定义是流程/合同在名称空间中运行所需的最低条件的公式描述。事实上,名称空间的一致性立即并且完全依赖于该空间如何定义名称,根据名称空间定义描述的契约的预期功能,名称可能会有很大差异。

名称符合定义,否则不符合; 它的功能,或者它没有。以下命名空间定义在交互中实现为'if条件',它描述了一组进程将一组合约发送到一组包含名称空间的命名地址:

  1. 一组合同contract1...contractn被发送到一组渠道(名称空间)address1...addressn
  2. 同时,一个进程监听address命名空间中每个通道的输入。
  3. 当在任何一个渠道收到合同时,它将被提供给它,它检查名称空间的来源,发件人的地址,合同的行为,合同的结构以及合同所承载的数据的大小。if cond.
  4. 如果这些属性与address名称空间定义所表示的属性一致,则继续以其参数P执行contract

名称空间定义有效地限制了名称空间中可能发生的交互类型 - 空间中存在的每个合同都表现出一种共同的可预测行为。也就是说,驻留在名称空间中的协定所调用的状态更改必须经过授权,定义并且对该名称空间是正确的。这种设计选择使命名空间的快速数据记录式查询变得非常方便和非常有用。

名称空间定义可以控制空间中发生的交互,例如通过指定:

  • 接受的地址
  • 接受的命名空间
  • 接受的行为类型
  • 最大/最小数据大小
  • I / O结构

定义可能并经常会指定一组可接受的名称空间和地址,这些名称空间和地址可与其定义的代理进行通信。

请注意上图中针对行为类型的检查。这是为了确保合同表达的操作顺序与命名空间的安全规范一致。行为类型检查可以评估活性,终止,死锁自由和资源同步的属性 - 所有属性确保名称空间内资源的最大“安全”状态更改。因为行为类型表示操作顺序,所以行为类型标准可以指定合同的后置条件,这又可以满足后续名称空间的先决条件。因此,名称空间框架支持事务环境的安全组合,或“链接在一起”。

可组合名称空间 - 资源寻址

在这之前,我们已经将命名频道描述为任意宽度的扁平原子实体。通过指定渠道的反思和内部结构,我们实现了深度。

名称空间可以被认为是URI(统一资源标识符),而资源的地址可以被认为是URL(统一资源定位符)。scheme://a/b/c例如,URL的路径组件可能被视为等同于RChain地址。也就是说,一系列嵌套通道,每个通道都带有指定通道的消息,a即“顶部”通道。

然而,请注意,URL路径并不总是组成的。拿scheme://a/b/cscheme://a/b/d。在传统的URL方案中,这两者不构成一条路径。然而,每一个平路自动为树形路径,并且,如树木,这些构成,以产生新的树scheme://a/b/c+d。因此,树为资源寻址提供了一个可组合的模型。

Rchain架构之命名空间

图 - 可组合的树路径

以上,统一作为一种自然算法用于匹配和分解树,并且基于统一的匹配和分解提供了查询的基础。为了探索这个说法,让我们用这种形式重写我们的路径/树语法:

scheme:// a / b / c + d↦s:a(b(c,d))

然后根据rho-calculus的I / O操作调整语法:

s!(a(b(c,d)))

对于(a(b(c,d))< -  s;如果cond){P}

顶部表达式表示输出 - 将资源地址a(b(c,d)放在指定的通道上s。底部表达表示输入。对于与表单匹配的模式a(b(c,d)),进入频道s,如果满足某些前提条件,则执行continuation P,将地址a(b(c,d)作为参数。当然,这个表达暗示s,作为一个有名的频道。因此,适应的渠道结构被表示出来:

Rchain架构之命名空间

图 - 树结构中的URL架构作为嵌套通道

鉴于现有的地址结构和名称空间访问,客户端可以查询并发送到该地址结构中的名称。例如,当rho-calculus I / O进程置于并发执行中时,以下表达式表示一个函数,该引用进程(@Q,@R)位于以下位置a(b(c,d))

for(a(b(c,d))< -  s; if cond){P} | s!(a(b(@ Q,@ R)))

评估步骤是象征性的:

for(a(b(c,d))< -  s; if cond){P} | s(a(b(@ Q,@ R)))→P {@Q:= c,@R:= d}

也就是说,Pc替代@Qd替换的环境中执行@R。更新的树结构表示如下:

Rchain架构之命名空间

图 - 在通道放置进程

除了一组平面通道,例如s1...sn符合命名空间的限定外,每个具有内部结构的通道本身都是一个名称空间。因此,sa,和b可以递增地施加类似通过平面命名空间所给出的那些个人的名称空间定义。在实践中,命名通道的内部结构是任意深度和复杂度的n元树,在这种情况下s,“顶部”通道只是s1...sn具有内部结构的许多可能的名称之一。

这种资源寻址框架代表了对历史上使用最广泛的互联网寻址标准的逐步调整。RChain通过命名空间实现私有,公共和联盟可见性所需的组合地址空间,但显而易见的用例解决了可伸缩性问题。不是偶然的,毫不奇怪,命名空间也为RChain的分片解决方案提供了一个框架。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: