边缘案例:第二篇——Metanet协议

发表时间:2019年8月19日
信息来源:Medium


欢迎回到Edge cases,Metanet博客系列。

在上一篇文章中,我们介绍了理解有向无环图(Dags)所需要的几个概念,并研究了它们与Metanet协议的关系。如果你是第一次来到本系列,可以点击这里查看Metanet系列博客的首篇文章。在今天的文章中,我们将详细介绍如何使用Metanet协议来创建链上Dag结构,并使用这一结构实现比特币sv上的对等价值网络。

第2.1部分——节点和边结构

在本系列的第2部分中,我们使用了一些图论的知识。现在我将介绍图论的一些基本概念来帮助我们描述DAG。简述如下:

  • 图——包含节点和边的结构;

  • 方向性——有向图中边的方向;

  • DAGS-——无回路的有向图;

  • 入度——指向某一节点边的数目

  • 出度——由一个节点发散出边的数目

这些简单的概念让我们可以从原理上理解有向无环图的结构。理解了有向无环图的一些基本概念之后,我们可以运用这些概念来帮助我们描述三种不同的Dag图结构:

The Block DAG;(块DAG)

The Transaction DAG; (事务DAG)

The Metanet DAG

我们发现基于POW的区块链,比如比特币SV,其区块形成了一个简单的线性有向无环图,我们称之为“区块DAG”。同样我们发现事务的结构也属于有向无环图,尽管是一个复杂得多的有向无环图,我们称之为“事务DAG”。

最后,我们引入了Metanet图的概念,Metanet图也是有向无环图。我们已经讨论过Metanet协议通过定义一组规则来表述如何创建Metanet图是合法的,类似于底层区块链协议通过定义一组规则限定创建块和事务(Transaction)DAG的方式。

在今天的文章中,我们将详细介绍Metanet协议是如何在比特币SV区块链上用原生,独有的方式来构建链上图结构,接着我们会介绍Metanet协议规则集的正则化,并探索其图结构的一些特性。

我们现在开始学习Metanet节点和边是如何构成的。

Metanet节点

根据Metanet白皮书,Metanet节点只是一个遵循Metanet协议规则集的事务。

节点就是事务(transactions)

我们将学习到有关Metanet节点特征的限制其实是很少的,这意味着Metanet节点可以有许多不同的形状、大小和形式。事实上,任何遵循非常简单的Metanet节点格式(作为骨架结构)的事务都被视为元网节点。那么,这个格式是什么?

Metanet节点最基本的骨架结构要求事务满足以下条件:

  • 事务至少有一个OP_RETURN输出;

  • OP_RETURN负载包括:(i)Metanet标志,(ii)节点地址’P(Node)’,和(iii)父节点事务ID 'TxID(Parent)’。

  • 事务包含由父节点签名的输入,如果该节点确实有父节点,则用“SigP(Parent)”表示。

看起来有许多限定条件,但当我们用比特币图解法来表示时,通常会容易理解。满足以上所有条件的Metanet节点的最基本骨架结构如下图所示:

在这里插入图片描述

请注意,我们采用“OP_RETURN”来表示整个Metanet博客系列中组合的操作码“OP_false OP_RETURN”。

我们可以看到,上面的示例是一个非常简单的事务。从表面上来看,它只是一个非常标准的OP_RETURN事务,其中OP_RETURN数据负载中包含三个元素。 Metanet节点与这类事务之间的关键区别在于,元网协议对此类事务每个组成部分赋予了相应的内在含义,我们在比特币SV中已经看到并熟悉这一特点。

我上述其实在表达什么?

上面的事务显示了Metanet节点的框架,可视为包含六个元素:

  • TxID(Node);

  • SigP(Parent);

  • P(Parent);

  • Metanet flag;

  • P(Node);

  • TxID(Parent).

前三个元素,TxID(Node)、SigP(Parent)和P(Parent)将作为任何典型事务的一部分出现。此外,在典型的OP_RETURN输出载荷中,至少有一个元素要出现,而其余三个元素 :The Metanet标志、P(Node)和TxID(Parent)也可能存在于任何典型的OP_RETURN载荷中。

Metanet协议的核心在于我们对这六个元素赋予了非常具体的意义,通常情况下,只有少数元素可能具有内在含义。

Metanet协议赋予的这些内在含义是:

  • TxID(Node)——节点的唯一事务ID;

  • SigP(Parent)——由父节点创建的签名;

  • P(Parent)——定义父节点的地址;

  • Metanet flag——表示Metanet事务的协议前缀;

  • P(Node)—— 定义节点的地址;

  • TxID(Parent)——父节点的唯一事务ID。

我想再强调一遍的是,我们已经对节点事务的所有六个基本元素赋予了实际意义。因此,Metanet协议与现有的OP_RETURN协议形成了对比,后者往往忽略了输入签名的作用,并且只为OP_RETURN负载中的元素赋予特定含义。

这里的微妙之处在于,它展示了Metanet协议是如何设计来支撑底层区块链所有的,已经存在的基础设施。传统协议的OP_RETURN事务输入中的签名和Public key*通常没有与它们相关联的更深含义,而Metanet协议直接将它们用作Metanet图结构的内在部分。

*本系列至此,我想从顶层视角来阐述Metanet图是如何通过事务和签名构建的。如果您质疑我在本节中使用“地址”一词代表地址及其对应的公钥,那么您有权这样做。我们之后的文章会讨论Metanet协议的底层规范,但现在我们将认为使用术语“address”和“Public key”等价。

现在我们知道一个Metanet节点包含六个重要元素,那么我们能否进一步简化以便更简洁地表达?

答案是肯定的——我们可以把范围缩小到四个元素,可以解释为:

  • P(Node)——节点的地址;

  • TxID(Node)——节点的版本;

  • P(Parent)——父节点的地址;

  • TxID(父级)——父节点版本。

通过忽略固定的Metanet flag元素,同时把P(parent)和SigP(parent)这两个元素看作是一个,我们可得到简化后的四个元素。当然P和SigP是两个独立的元素,但重要的是P和SigP两个元素是与父节点相关的。因此,将这两个元素简单地表示为P(Parent)会更简练。

从简化后的四元素组中我们可以看出,节点的地址可以理解为对应的公钥,节点的版本对应的是事务的哈希值。在之后的内容中我们将会对这两个属性进一步讨论,但现在请记住这两个概念。

简化后,我们可以用图表形式将Metanet节点表示为:

在这里插入图片描述

如上图所示,Metanet节点的类型有两种:

  • 根节点:没有父节点;

  • 节点:只有一个父节点。

只有一个父节点的“标准”节点有四个重要元素:P(Node)、TxID(Node)、P(Parent)和TxID(Parent),我们可以在Metanet图中通过这四个元素唯一确定某一节点
而根节点只有两个重要元素:P(Node)和TxID(Node),我们可以在Metanet图中通过这两个元素唯一确定某一根节点。通过上图中红色字体的标注,可以得知根节点的输入签名可以来自任意公钥,并且父节点的事务ID可以为空。

Metanet边

我们已经介绍了链上Metanet节点概况,那么边呢?

边是由签名创造的

简单地说,边是由签名创建的。若要创建从父节点到子节点的边,子节点的输入必须包含来自父节点的签名Sig(Parent)。

上述场景将举例说明。对于节点A,由P(A),TxID(A)两个元素对定义,且 P(A)与alice控制的密钥有关。现在要创建第二个节点B,由P(B)、TxID(B)元素对定义, 且P(B)与由bob控制的密钥有关。在从A到B创建父节点连向子节点的边,我们需要确保节点B的输入中包含来自P(A)的签名。下图展示了创建边的过程。

在这里插入图片描述

通过SigP(A)作为节点B的输入,我们创建了A指向B的边。边的方向表明节点A是父节点,节点B是子节点。考虑到在上一节中我们定义Metanet节点的特征,节点b还必须在其OP_RETURN负载中包含TxID(A)作为其“父事务ID”。

因此,当我们创建从父节点到子节点的边时,必须确保子节点(B)同时包含来自其父节点地址的签名和其父节点的事务ID。

用上一版块定义的四元素简化节点来考虑根节点A,可以得到下述关系:

  • 节点A由P(A)、TxID(A)、P(any)和TxID(null)定义;

  • 节点B由P(B)、TxID(B)、P(A)和TxID(A)定义。

这里的关键点在于,Metanet协议利用了生成子节点必须由父节点签名这一特点,保证了Metanet图结构的规范性。换句话说,把新Metanet节点写入到一个树结构中的这一过程(写访问),需要签名才能完成。

上面的例子中,alice(有P(A)的控制权)有创建子节点B的唯一权限,因为只有生成SigP(A)并传入B节点。另一方面,考虑如果bob试图独自创建B节点会怎样。

在这里插入图片描述

本场景中,BOB只能在输入签名中包含他控制的密钥对。只需用Metanet协议来考量,就知道A和B节点之间无法存在合法的边。

这就是Metanet协议如何保证链上数据结构的规范性的。向图中添加的权限始终来自父节点,父节点既可以为单用户授权,也可以为用户数据链提供授权。

唯一节点标识符

现在,我们已经明确了在Metanet Dag中节点和边有关知识,现在引入另一个概念:唯一节点标识符。

每个节点都有一个唯一的标识符:ID(Node)。

之前已经讨论过,四个基本元素:P(Node)、TxID(Node)、P(Parent)和TxID(Parent)组成了节点
前两个元素P(Node)和TxID(Node)指定节点本身,后两个元素P(Parent)和TxID(Parent)指定节点的父节点(如果有)。

然后,通过P(Node)和ID(Node)两个元素可生成节点的唯一标识符,从而可以在Metanet中唯一确定某一节点。

ID(Node)是由上述两个元素拼接后的哈希值生成的,如下面图表中的公式所示:

在这里插入图片描述
现在可能更容易理解为什么我们要把Metanet节点提炼为四个元素;这四个元素足为任何给定Metanet节点的ID(Node)和ID(Parent)元素做出唯一定义。

这引出了Metanet协议中的一个基本原则:

每个节点都唯一标定了自身及其父节点。

对于这个陈述我们可理解为,一个节点必须包含足够的信息来唯一标定ID(Node)和ID(Parent)。

是时候指出“房间里的大象”了,事实上,TxID(Node)也可以作为任何给定Metanet节点的唯一标识符。所以有人会认为不需要ID(Node),因为我们可以简单地使用其唯一的TxID(Node)值来标识每个已创建的Metanet节点。

是时候回想为什么要把TxID(node)作为节点的版本号了。我们特意使用P(node)和TxID(node)来生成ID(node),是因为他们有不同的特定含义。若单独考TxID,相比于简单地使用TxID(Node)作为节点标识符,它们所代表的内在含义可以发挥更大作用。

因此,通过选择从P(Node)和TxID(Node)派生的ID(Node),我们能够确保我们能够描述元网图,而不会丢失我们从比较具有不同地址和版本的节点中获得的任何功能(稍后将详细介绍这些功能)。

谱系

我们现在可以思考今天的文章中已讨论过的想法,并且对于如何通过使用简单的边和节点来搭建几乎无穷种链上图结构有一个快速的认识。

在这值得强调的是,上述的简单合法结构,比如两节点案例,可以拓展到任何使用Metanet协议创建的图结构。换句话说,协议允许我们具有描述、跟踪、拓展链上谱系(具有一致性)内权限流的能力。

在这里插入图片描述

考虑上面的蓝色节点,此节点必须由其父节点引用和签名。类似地,蓝色节点的子节点必须由蓝色节点引用及签名。蓝色节点的孙子节点(未显示)需引用并由蓝色节点的子节点签名,这一过程可以无限延续下去。

如上图所示, Metanet协议授予任何此类Metanet图权限进行继承和扩展,而这就是通过先前探讨过的写控制来实现的。

图与树

我一直在使用术语“图”来描述使用Metanet协议创建的结构。但是,随着本系列的继续,您可能会发现我开始把“树”和图互换使用。现在开始,我将尝试解释下列定义:

  • Metanet图:Metanet网DAG结构的全局集合。

  • Metanet树:Metanet网DAG结构的单个实例。

用上述两种描述方式的原因在于有时把“Metanet Dag”视为更大、覆盖整个基于Metanet协议的链上内容的主导性Dag结构可能更便于思考。出于同样的原因,将每个使用了Metanet协议的单独实例(即每个单独的结构)称为树来讨论会更简单。因此,Metanet图成为树的全局集合,每棵树都从自己的根节点起始,并有自己的局部权限结构。

在这里插入图片描述

上面的树只是使用Metanet协议创建Dag结构的一个简单示例。在接下来的文章中,我们将进一步了解它的一些特性,比如域结构和版本控制。

Metanet协议规则

总结已探讨的内容,我们可以将Metanet协议的基本规则集提炼为以下内容:

  1. 节点就是事务;

  2. 边由签名创建;

  3. 每个节点由一对(P(Node)、TxID(Node))元素唯一指定;以及

  4. 每个节点必须指定其自身及其父节点的节点ID。

这些核心规则是让我们构造定义清晰的链上图结构的基石。所有可以用Metanet协议实现的功能都基于上述四个规则。

在白皮书中,我们也介绍了一些其他规则来确保Metanet树可以轻松映射到其他的层次结构,比如如文件系统、域名系统和组织命令链:

  1. 节点的入度应为0(无父节点)或1(只有一个父节点);

  2. 节点的出度应该是自由的。

概括来说,白皮书中概述的Metanet协议的规则集如下:

在这里插入图片描述

在Metanet博客系列的多数文章中,我们将使用上面的规则集来理解Metanet,并探索使用链上图结构可以实现的具体功能。在本系列的后面部分,我们还将探讨当规则5和6被取消时哪些情景可能发生,而仅由上述的规则1-4来约束

Metanet图的特性

今天的帖子或许写的有点多,但由于我们已经探讨了Metanet Dag的结构,我就不能不强调它的一些核心特性。

概括性

概括性很容易解释。由上述四条规则定义的Metanet协议是抽象的。换句话说,协议不限制开发人员只能搭建固定种类的结构。

Metanet是一个非常抽象,非常特殊的协议,以至于它变成了哲学。——_unwriter

该协议不仅适用于所有已存在的链上数据结构应用范例,还适用于任何我们还没预见到的未来应用。Metanet协议的设计应考虑如何尽可能的满足未来需求,同时最大化鲁棒性。对于支撑Metanet的野心,协议如此设计是必要的。

授权

我们已经讨论了Metanet协议中原生的授权结构。如果考虑这种结构在现实世界中的使用场景,那么使用无环图的动机将会变得合情合理。

一家公司或者某一商业行为可作为层次授权结构的典型案例,CEO在指挥链的顶端,而在最底层的会是一名普通员工,甚至是实习生。如果我们想把这个层次结构映射到Metanet树,我们就会得到下面的结果:

在这里插入图片描述

可以看到,图结构写操作的授权流是根据权限自身的逻辑自顶向下流动的,从顶层人员至底层人员。需要注意的一点是,因为我们限定了图结构必须是无环的,所以不存在破坏命令链的可能性。

例如,对于上图中的红线代表了假定的,且不希望发生的情景,要注意图中出现了回路。在这种情况下,实习生突然被授权可以重写代表CEO的节点。任何授权层次结构中的圈或回路都会产生可怕的后果,这种后果将会在任何需要授权层次结构的情形中出现。

事实上,Metanet协议是被设计来确保在授权情况中不会有上述的圈结构出现,因此要保证结构是DAG。

效率

我承认在这里很难对效率下定论,因为需要参照许多因素才能全面地考虑效率问题。但是,我相信声明Metanet协议是一种高效的数据存储协议并不是夸谈。

比特币是最有效的数据存储协议,而Metanet则是最有效的数据结构协议。——_unwriter

我们基本上创建了一个链式数据存储和数据结构协议,也就是Metanet协议。该协议将所有事物提炼为事务中的四个核心元素:P(Node)、TxID(Node)、P(Parent)和TxID(Parent),清晰地展示了一种只需很少消耗的就可以解决问题的极简主义方法。

尽管只用如此少的元素来定义Metanet Dag,我们并没有以任何重要的功能性为代价,比如版本控制和域结构,我们的目标是为Dag链上结构保留这些功能。

为了更深入地体会Metanet协议的效率,我再次推荐阅读unwriter在链接中的讨论内容,里面探讨了比特币SV原生UTXO模型的拓展性。

版本控制

最后,我想再指出的是通过使用Metanet协议来构建数据,加上一个POW公链,我们就可以实现一个强大的、无法篡改的版本控制系统,而这个系统也是其底层区块链的原生系统。

在这里插入图片描述

我们暂不详细描述Metanet协议中的版本控制是如何工作的,因为我觉得它单独讨论比较合适。至少现在要指出的一点是,我们已经列举了Metanet协议利用比特币SV区块链来提供服务具有的关键优势。

请继续关注下一期文章,我们将会讨论Metanet图结构中出现的丰富域结构,并探讨如何与之交互。

点击此处阅读原文


Bitcoin SV是唯一遵循着中本聪于2008年发表的白皮书《比特币:点对点的电子现金系统》中协议的区块链。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章