Taproot Assets:協議、閃電網絡兼容性

作者:Lightning Labs

來源:https://docs.lightning.engineering/the-lightning-network/taproot-assets

“Taproot Assets”(曾用名 “Taro”)是一種新的協議,由 Taproot 賦能,用於在比特幣系統內發行資產,且資產可在閃電網絡內傳輸,實現及時、高容量、低手續費的交易。就其核心而言,Taproot Assets 利用了比特幣網絡的安全性和穩定性,以及閃電網絡的速度、可擴展性和低手續費。

Taproot Assets 依賴於比特幣最近的一次升級 Taproot;該升級引入了一種新的樹型結構,允許開發者在一個比特幣交易輸出內嵌入任意的資產元數據。Taproot 還使用 Schnorr 簽名來提升簡潔性和可擴展性;而且,重要的是,它還能跟閃電網絡中的多跳交易相結合。

縱觀比特幣的歷史,許多提議致力於將資產帶到比特幣區塊鏈上。Taproot Assets 依靠 Taproot 帶來的力量,推進了這些提議背後的想法。在一種以 Taproot 為核心的設計中,Taproot Assets 可以在比特幣和閃電網絡上發行資產,而且更加隱私和可擴展。利用 Taproot Assets 協議發行的資產可以存入閃電通道中,讓節點可以提供從比特幣到資產的原子化互換。這讓 Taproot Assets 可以跟廣大的閃電網絡互操作,從閃電網絡的採用中受益並強化閃電網絡的網絡效應。

Taproot Assets 使用一種 “稀疏默克爾樹(Sparse-Merkle Tree)” 結構來啟用 見證/交易數據 的快速、高效、隱私的檢索和更新;並使用一種 “默克爾總和樹(Merkle-Sum Tree)” 來證明 有效狀態轉換/無通脹。資產可以通過鏈上交易來轉移,也可以在存入閃電通道後通過閃電網絡來轉移。

Taproot Assets 交易的參與者承擔驗證和存儲的成本(需要在本地(鏈下)存儲空間內存儲相關資產的見證數據),或者,可以使用名為 “Universes” 的信息倉庫(類似於一個 git 倉庫)。為檢查一項資產的有效性,需要驗證該資產自創世輸出(狀態)以來的流轉。這是通過在 Taproot Assets gossip 層中接收交易數據的一個驗證文件來實現的。客戶端可以交叉檢查自己的區塊鏈副本,並在需要轉移相關資產時修改自己的證據。

總結:

  1. 允許在比特幣區塊鏈上發行資產
  2. 利用 taproot 來獲得隱私性和可擴展性
  3. 資產可以存入閃電通道
  4. 資產可以在現有的閃電網絡中轉移

閱讀更多:2022 年 4 月 Taproot Assets 的宣佈演講幻燈片

觀看:Taproot Assets: A new protocol for multi-asset Bitcoin and Lightning

特性與侷限性

Taproot Assets 支持許多特性,讓協議可擴展、健壯,並且對帶寬和性能有限的移動設備友好。

  • Taproot Assets 是輕客戶端友好的:驗證成本低,而且只需訪問不必信任的比特幣交易。Taproot Assets 並不需要對整條區塊鏈的知識。
  • Taproot Assets 允許資產與比特幣的原子化互換。
  • Taproot Assets 可以發行唯一資產、不唯一的資產以及收藏品。
  • Taproot Assets 允許創造性的多簽名和聯合簽名安排。
  • Taproot Assets 通道可以跟 BTC 通道並存在同一個 UTXO 中,這使得 Taproot Assets 可以存在於閃電網絡中,而不需要消耗額外的資源。舉個例子,Alice 和 Bot 可以在一筆比特幣交易中創建兩條通道,一條是某種資產的通道,另一條是 BTC 通道。
  • 未來可能引入的特性包括機密交易以及作為 Taproot Assets 轉移的一部分的零知識證據。

Taproot Assets 協議

Taproot Assets 主要是一種鏈上協議,資產會使用 taproot 交易發行在比特幣區塊鏈上。

概念

為理解 Taproot Assets,我們需要熟悉幾個概念;有一些概念是比較新穎的,即使在比特幣區塊鏈的語境下。

閱讀 BIP:Taproot Assets 協議

在這裡學習基本概念:

Taproot 交易

Taproot 是由 BIP 341 定義的一種新的比特幣交易類型;從 2021 年 11 月開始, Taproot 在比特幣區塊鏈上完全激活。Taproot 交易相比傳統的比特幣交易,主要區別在於控制資金的腳本被包含在一個叫做 “tapScript 分支” 的樹狀結構中,而該結構是隱秘地承諾的。如果相關的 “密鑰花費路徑”(腳本)沒有被用來移動資金,其內容就不必暴露。

傳統的交易要求暴露整個腳本(不論用到的是腳本中的哪一部分),而 Taproot 交易則可以通過暴露一個公鑰(及其有效簽名)來避免暴露腳本;如果密鑰花費路徑不可用,也只需要揭曉被執行的腳本片段。所有其它沒有用到的腳本路徑都依然是私密的,或者也可以在鏈下選擇性揭曉。

這使我們可以創建更加複雜的腳本;在密鑰花費中,不需要付出在區塊鏈上提交額外數據的額外成本;而且我們還可以高效驗證一個修剪過後的腳本片段。在 Taproot Assets 的語境下,這讓我們可以為一筆比特幣交易可證地附加任意數據,且不需要在鏈上揭曉這些數據。

承擔到一個哈希值:Taptweak

我們將這樣包含了任意數據的交易叫做 “承諾”。一旦這樣的交易被包含在某個區塊中,我們就在其中承諾了一些數據,而且再也不能改變這些數據。

在承諾數據的時候,我們要使用一個叫做 “Taptweak” 的調整因子來扭曲我們的 Taproot 花費密鑰的公鑰。這讓我們可以選擇性揭曉被承諾的數據,而無需揭曉我們的私鑰;或者,我們可以花費這個 taproot 輸出而無需揭曉承諾。

在 Taproot 交易中,這種技術用來承諾腳本樹(用樹狀結構組織起來的多段腳本);實際上,這可以用來承諾任意數據。

  • Q = P + H(P|c)G
  • Q 就是 Taproot 輸出的最終的公鑰
  • P 就是 Taproot 輸出的 “內部公鑰”
  • H(P|c) 是內部公鑰以及數據承諾的哈希值

在使用我們的私鑰來簽名 Taproot 輸出的花費交易時,這個私鑰(內部公鑰的私鑰)也需要用公鑰和數據承諾的哈希值(H(P|c))來扭曲。

閱讀:Taproot 即將到來:它是什麼,如何有益於比特幣

觀看:Bitcoin Optech Schnorr Taproot 研討會

稀疏默克爾樹

“稀疏默克爾樹(SMT)” 是一種數據結構;使用它的時候,可以證明特定數據並不存在於一棵默克爾樹中(“稀疏” 在此處意味著 “稀稀落落”)。SMT 是一種經過認證的 鍵-值對 存儲(authenticated key-value store),意思是,樹上葉子的關鍵字(key)(或者說其位置)與其內容是相互綁定的。

為了實現這種屬性,葉子的內容會被哈希、創建出一棵默克爾樹,並且葉子的位置正對應著其哈希摘要的位圖(bitmap)。必然地,這會需要一棵 256 層的樹,它會有 2^256 個葉子。生成這樣的樹是高效的,儘管看起來體積很大,因為絕大部分的分支包含的都是空的葉子,可以用 nil 哈希值來代表。

constructing-a-sparse-merkle-tree

- 構造一棵稀疏默克爾樹 -

舉個例子,我們可以使用一種虛構的哈希函數 sha002 來創建一棵稀疏默克爾樹;sha002 的輸出是 0 跟 3 之間的數字。於是,我們創建出的稀疏默克爾樹就有 4 個葉子:0、1、2 和 3。只有葉子 2 是有內容的,所有其它葉子都是空的。為了找到葉子 2(其二進制表示是 “10”),我們只需在第一步中選擇右邊的分支(1),然後在第二步中選擇左邊的分支(0)。

identifying-leaves-in-a-sparse-merkle-tree

- 定位一棵稀疏默克爾樹中的一個葉子 -

要驗證葉子 2 的內容,我們只需要揭曉這個葉子中的數值、葉子 3 的哈希值,以及分支 0 的哈希值,即可。

在稀疏默克爾樹中,每一個葉子都可以描述成一個指南,可以通過一張表示成二進制形式的地圖找到自己。這張地圖就是這棵稀疏默克爾樹本身,而這個指南可以表示成在每一個分叉路口應該轉左還是轉右的指令。舉個例子,在一棵 2^4 大的稀疏默克爾樹上,第 10 個葉子可以用二進制表示成 1001,意味著我們只需先走右邊、然後走左邊、再走左邊,最後走右邊,就可以找到對的那個葉子。

這種屬性,在構造和重構稀疏默克爾樹的時候是極為有用的,因為它準確描述了我們要重新構造稀疏默克爾樹的哪一部分。更重要的是,每個葉子中的數據,都可以用葉子在樹上的位置來描述。

使用稀疏默克爾樹,我們可以將數據與公開的關鍵字關聯起來,並以易於驗證的方式證明我們已經刪除了這個數據,而無需揭曉整棵樹。

inserting-an-item-into-a-spare-merkle-tree

因為每一個數據都有自己預先確定的位置,所以樹的根哈希值獨立於這些數據插入樹的順序。

亦見:Plasma Cash

默克爾總和樹

“默克爾總和樹” 是一種默克爾樹,其每個葉子都包含了一個數字值,並且樹上每個節點都包含其下面的葉子的數字值之和。所以,默克爾總和樹的根就是所有葉子的數字值之和。

因為承諾了跟葉子相關聯的數量,默克爾總和樹允許狀態轉換(無通脹)的高效驗證。

亦見:使用默克爾總和樹生成債務證明

結合 taproot、taptweak、稀疏默克爾樹和默克爾總和樹

Taproot Assets 協議使用了上述概念的結合,以支持發行原生於比特幣區塊鏈的資產。稀疏默克爾樹和默克爾總和樹會結合成稀疏默克爾總和樹。

這棵樹的根值會被添加到一個 taproot tapscript 中,然後參與一個 taproot 地址的創建。

Taproot Assets 沒有自己的區塊鏈,資產的發行者會在鏈下存儲稀疏默克爾總和樹,然後以協議外的通信方式為資產持有者發放資產證明。這樣的資產的持有者可以獨立驗證自己的賬戶被包含在了樹中,並且攜帶了正確的數量;對應的一筆 taproot 交易存在,並已經被比特幣區塊鏈確認。

閱讀 BIP:稀疏默克爾總和樹

發行資產

資產 ID

要發行一種 Taproot Assets 資產的時候,我們先要創建該資產的標識符。我們創建一個 32 字節的資產 ID,這是用三個元素哈希出來的:即將被花費以鑄造這種資產的輸出點(outpoint)(譯者注:可以理解為 UTXO 的編號)、鑄造者選定的一種資產標籤(例如,其品牌名的哈希值),以及跟這種資產相關的元數據,例如網站、圖片和文檔。

asset_id = sha256(genesis_outpoint || asset_tag || asset_meta)

資產腳本(Asset Script)

資產腳本可以有輸入和輸出,類似於比特幣交易。新創建的資產不包含任何 Taproot Assets 輸入,但資產的轉移會有。

資產腳本的輸出定義了新創建的資產會被髮放給誰。更準確地說,這是通過一棵稀疏默克爾總和樹來實現的:在樹上,每個賬戶都用其 256 比特的關鍵字來辨識,跟這個關鍵字對應的葉子包含了關於這個賬戶擁有的數量的信息。

可以在一筆比特幣交易中發行多項資產,但每一種資產都有自己單獨的資產腳本以及其中的稀疏默克爾樹。資產可以是唯一的,也可以是不唯一的。

閱讀 BIP:Taproot Asset 腳本

資產葉子

每一個葉子都包含一個 TLV(類型、長度、數值)數據,類似於用在閃電網絡中的 TLV。它包含了一些信息(例如版本、資產 id、數量),還有與這項資產的以往流轉有關的數據(例如簽名)。

承諾到樹根

生成了稀疏默克爾總和樹和資產腳本之後,我們就可以扭曲我們的內部公鑰、獲得這個合約的地址並敲定這筆交易。

發佈交易

發佈這筆交易並讓它得到比特幣區塊鏈的確認之後,我們就不可逆地創造了一種資產。對其他人來說,這筆交易看起來跟其它標準的 taproot 交易沒有區別。

資產證明

資產發行者現在可以選擇性地揭曉自己創建了什麼資產,以及這些資產被分配給了誰。最重要的是,發行者可以向接收者證明一項資產已經轉移給了他們,辦法是揭曉一個具體的資產證明,包括資產的腳本,以及接收者賬戶作為關鍵字的葉子的稀疏默克爾總和樹的路徑。

proving-non-inclusion-in-a-sparse-merkle-tree

- 證明稀疏默克爾樹上不包含某個狀態 -

轉移資產

Taproot Assets 資產可以在鏈上轉移,也可以用來開啟閃電網絡通道。在這一節,我們只討論以鏈上交易轉移。

Taproot Assets 協議並不規定各資產賬戶的持有者之間如何交互,這件事交給各個應用。發行者在定義資產的性質或者說約束資產的意圖上享有靈活性。

資產根承諾(Asset Root Commitment)承諾了樹上持有的所有資產以及它們的總和。資產 id 是全局唯一的,因為它取決於其創世輸出的標識符。整個樹根可以包含多個資產 id,資金的保護是通過驗證資產樹根(asset_tree_root)來實現的。

asset_tree_root = sha256(asset_id || left_hash || right_hash || sum_value)

Taproot Assets 地址

Taproot Assets 地址是 bech32m 編碼的標識符,編碼了資產 ID、資產腳本的哈希值、稀疏默克爾總和樹的內部公鑰、數量,以 “Taproot Assets” 或 taptb1(測試網)為前綴。

bech32(hrp=TapHrp, asset_id || asset_script_hash || internal_key || amt)

資產的發行者,或者資產的持有者,可以使用 Taproot Assets 地址中的這些信息,來創建或修改對應的稀疏默克爾總和樹(下文講述)。這種地址格式也可以用來請求對某地址持有某數量的一個具體證明。

閱讀 BIP:Taproot Assets 鏈上地址

在樹內轉移資產

為轉移 Taproot Assets 資產,接收者將自己的地址發給自己的交易對象:可以發起轉移的資產當前持有人。資產持有者跟發行者之間的具體交互現在還沒有嚴格定義。可以留給各應用甚至資產的發行者來指定。

資金的發送者需要創建一棵新的稀疏默克爾總和樹,反映新的餘額。這是通過減少特定葉子的餘額、增加另一個葉子的餘額來實現的。稀疏默克爾總和樹保證了在這樣一筆交易中,不會創建新的資產(不會通脹),並且發送者對這項資產的索取權已被完全放棄。

identifying-accounts

- 定位賬戶 -

創建資產需要一筆鏈上的 taproot 交易,但可以鑄造多少資產以及多少賬戶可以持有這些資產則並沒有限制。為轉移資產,如上所述,需要重組默克爾樹併發布新的一筆鏈上交易。一筆鏈上交易可以反映多少內部 Taproot Assets 交易也沒有限制。

使用這種方法,資金被分配給賬戶持有者,表示成稀疏默克爾總和樹上的葉子,但發起這樣的內部轉移的能力限制在 taproot 內部私鑰的所有者手上。

taproot-asset-trees

- 用在 Taproot Assets 協議中的多種樹結構的概覽 -

Universe

“Universe” 是一項服務,提供關於資產的信息以及給資產持有者的證據。它就像比特幣的區塊瀏覽器,但展示的是 Taproot Assets 交易數據,這些數據本身是 Taproot Assets 協議客戶端在鏈下存儲的。主要區別在於,因為與 Taproot Assets 相關的絕大部分信息都是鏈下的,所以更容易隱藏。

Universe 可以由資產的發行者自己運行,也可以由發行者另外指定。自發運行聚合了由資產持有者提交的信息的的 Universe 也是便利的。

舉個例子,給定一個資產 ID,Universe 可以提供關於其創世輸出的信息,以及當前的元信息(例如文檔、資產腳本以及流通中的總數)。服務端可以知道多項資產(Multiverse),也可以僅知道一個輸出(Pocket Universe)。

Universe 在 Taproot Assets 協議中沒有特權。它提供可用比特幣區塊鏈驗證的教育處數據。惡意的 Universe 只能拒絕返回客戶端請求的數據。Taproot Assets 交易數據跟 Universe 不是綁定的。Universe 提供的數據可得性產品是由希望快速、便宜地驗證自己的資產的用戶激勵的。

閱讀 BIP:Taproot Asset Universes

資產的合併與分割

資產可以在其自身的稀疏默克爾樹上內部轉移(如上所述),也可以發送給另一個 taproot 密鑰持有者。這叫做資產的分割。

在資產分各種,發送者也需要更新自己的 taproot 輸出的稀疏默克爾總和樹:調整餘額並重新計算默克爾根。在資產合併的情形中,樹根中的和也會改變。

此外,這會產生另一棵稀疏默克爾總和樹、承諾到一個新的 taproot 輸出中。這棵默克爾樹由資產的接受者計算,過程跟上面案例中的發行者類似,區別在於,這種資產不是憑空創建出來的,而是從一個前序輸出(比如這種資產的創世輸出)中分割出來的。

資產證明

為驗證資產分割已經發生,新的 Universer 的操作者需要下列證據:

  • 資產在交易 t0 中創建
  • 資產存在於 t0 中的原版默克爾樹中的某個葉子中
  • 該葉子的餘額在交易 t1 中設為 0
  • 資產存在於 t1 中的新默克爾樹的一個葉子中

資產分割完成後,資產的所有人就可以像發行者一樣,執行內部交易。而在分割之前,總是需要包含發行證明,用作流轉驗證。

資產證明的規模會隨著用到的鏈上交易的增加而線性增長。每一種資產交易都需要追溯到創世輸出以完成審計。一個資產證明僅在其索引到的鏈上輸出是為花費輸出時,才是有效的。

無效資產

如果一項資產所在的 taproot 輸出被花費掉了,而這項資產有沒有承諾到一棵新的稀疏默克爾總和樹中,那麼就認為它已經成了一項無效的資產的。這對第三方觀察者來說是不明顯的,而且在一些情境中,可能更好的做法是將資產承諾到一棵新的、空的默克爾樹上,以證明這項資產已經毀掉了、作廢掉了,或者說 “燒掉” 了。

閱讀 BIP:Taproot Assets Flat File Proof Format

Taproot Assets 進入閃電網絡

Taproot Assets 協議描述瞭如何在比特幣區塊鏈上發行資產。這些資產可以存入 “閃電網絡支付通道” 中,實現即時轉移。

這一原理讓閃電網絡的用戶可以在自己的錢包中持有不同於 BTC 的資產:比如說,穩定幣。它們可以接收以穩定幣計價的支付,並通過閃電網絡使用穩定幣來為商品和服務支付。

比特幣依然是閃電網絡的骨架,而 Taproot Assets 資產的支付可以通過現有的比特幣閃電網絡來路由,無需升級、切換。當比特幣為這些以其它資產計價的支付提供流動性時,路由節點的運營者就可以收到以聰支付的更多路由費。

啟用 Taproot Assets 的通道

Taproot Assets 通道的創建方式跟當前比特幣通道的創建方式是相似的。在這些可以覺察 Taproot Assets 支付的通道中,可以構造 HTLC 來協助支付,就像轉移比特幣一樣。

資產會通過創建在通道承諾交易中嵌套的 HTLC 來轉移;在需要的時候,HTLC 中的價值可以被接收者通過揭曉一個原像來申領,也可以由發送者在超時之後取回。這些交易是閃電通道中的比特幣交易的 Taproot Assets 等價物。

多跳的 Taproot Assets 資產轉移

歷史上,支付網絡都掙扎於冷啟動問題 —— 只要創建一種新的資產,就需要建立一個全新的支付網絡,以服務於這種資產的支付需求。Taproot Assets 支持一種支付路由模式,讓閃電網絡可以處理帶有任何資產的通道,同時具有跨不同資產發現支付路徑的能力。閃電通道中的 Taproot Assets 資產可以通過廣大的閃電網絡來轉移。舉個例子,在整條支付轉發路徑上所有參與者都具有流動性的情形中,它們可以選擇用比特幣還是被轉移的 Taproot Assets 資產來收取路由費。

即使沒有這樣全面支持 Taproot Assets 的路徑,比特幣路徑也可以擔當起來,只要第一個節點願意用聰來轉發相關 Taproot Assets 資產的價值。這也可以讓閃電網絡可以協助比特幣與 Taproot Assets 資產的交換。這也允許支付的接受者自選使用 Taproot Assets 資產(而不是比特幣)來接收支付。在下面的例子中,Bob 和 Carol 都可以作為這樣的邊緣節點,將支付過來的 L-USD 換成 BTC 。

an-example-of-a-taproot-assets-payment-made-to-the-wider-lightning-network

- 通過廣大的閃電網絡來發起 Taproot Assets 支付的一個例子 -

這也使得我們可以接收 Taproot Assets 資產但把對應的發票交給其它任何閃電錢包 —— 即使它們並沒有集成 Taproot Assets 協議 —— 它們可以用 BTC 來支付發票。

這讓閃電發票保持作為標準方案的地位。一個最終用 Taproot Assets 結算的發票可以用 BTC 或任何其它資產來支付;並且,任何擁有 Taproot Assets 餘額的人都可以支付任何閃電發票。

an-example-of-a-taproot-assets-payment-in-which-the-receiver-opts-to-receive-the-same-asset-type

- 接收者選擇用同一種資產接收一筆 Taproot Assets 支付的案例 -

匯率

Taproot Assets 協議自身為集成節點提供了處理匯率的選擇。在通道中處理互換的兩個對等節點自主決定匯率。他們可能使用來自高流動性交易所的參考匯率,或者自己決定。重要的是,在接收支付時,發票是由接受者自己生成的,這就保證了它能收到合適數量的想要資產。

任何能夠感知 Taproot Assets 通道的閃電網絡節點都可以作為這樣的 “邊緣節點(Edge node)”。他們在轉發和互換的手續費上相互競爭。這些手續費包括路由費和互換手續費(也可以說是差價)。

在創建發票時,接受者(例如下面這個例子中的 Zane)和自己的對等節點(例如 Yana)先對匯率達成一致。他們使用這個雙方同意的價格來生成一張常規的閃電網絡發票,並將發票交給支付者;發票就包含了轉發提示和通道的條款。

當支付這通過自己構造的支付路徑傳遞支付時,支付會抵達 Yana,而 Yana 會轉發 L-EUR 給 Zane。在釋放原像之前,Zane 的錢包會檢查自己是否收到了預期數量的 L-EUR。

在通過 L-USD 來支付以聰標價的發票時,Alice 必須跟 Bob 對最新的匯率和手續費達成一致。她可以確認支付、將對方要求的 L-USD 加上手續費轉遞給對方,而接受者只會在收到了自己想要數量的聰時才會釋放原像。

sender-and-recipient-do-not-need-to-transact-in-the-same-asset-type

- 發送者和接受者無需使用同一種資產 -

如果邊緣節點擔心自己的流動性被濫用,可以使用其它工具,例如關閉某一條通道、減低發票的有效性或提高差價。

Taproot Assets 協議不會管制或設定匯率,只會提供有用市場所需的機制,保證進入的低技術門檻,支持自動化、原子化並且即時的轉發。

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論