邊緣案例:第二篇——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年發表的白皮書《比特幣:點對點的電子現金系統》中協議的區塊鏈。

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