Taproot

什麼是 Merklized 替代腳本樹?

  • October 25, 2020

我看到首字母縮略詞 MAST 到處飄蕩。我看到它代表 Merklized Alternative Script Trees,但這是什麼意思?它們在什麼情況下出現,它們可以用來做什麼?

Merklized Alternative Script Trees(或以前的 Merklized Abstract Syntax Trees)的想法可以追溯到 Russell O’Connor 在2012 年提出的想法。最初的想法是,您可以將替代腳本或腳本片段作為葉子儲存在 Merkle 樹中,然後可以修剪掉未使用的樹的葉子,而不佔用區塊鏈上的寶貴空間。將此與 P2SH(支付到腳本雜湊)進行比較,其中整個腳本經過雜湊處理,然後在花費時間在區塊鏈上顯示。這帶來了區塊空間效率(從而降低了費用)以及隱私優勢。

早期的 MAST 正式提案是BIP 114BIP 116,最近的提案當然是 Taproot ( BIP 341 )。我們不再使用 Merklized Abstract Syntax的原因樹的術語是使用 Taproot(和 BIP 114)只能執行 Merkle 樹的一個葉子。您不能將一個特別長的腳本路徑拆分為儲存在樹的不同葉子上的多個腳本片段,然後滿足這些葉子的組合。它實際上是一棵 OR 的樹(沒有不同葉子的 AND,也沒有導致滿足樹上不同葉子的 IF、ELSE)。您可以有 AND 和 IF ELSE,但它們包含在葉子中而不是葉子之間。滿足一個葉子就足夠花費UTXO了。正如 Johnson Lau 在 BIP 114 中所說:

只允許執行一個分支,需要使用者將一個複雜的條件轉換成幾個互斥的分支。

Pieter Wuille 和 Russell O’Connor 在 2020 年 7 月的倫敦 BitDevs上討論了為什麼要為 Taproot 做出這個設計決定。原因之一是您只需要對數個 Merkle 分支節點即可到達任何給定的葉子。如果所有葉子都有不同組合的可能性,就會出現組合爆炸。另一個原因是設計空間必須在某個階段受到限制,以使提案獲得社區共識並最終被啟動的最佳機會。

您之前可能聽說過“比特幣是可程式貨幣”。比特幣使用一種稱為腳本的簡單程式語言來編碼支付條件。雖然今天絕大多數交易使用標準的單簽名輸出(P2PK、P2PKH、P2WPKH)或一小組常用腳本(包裝的 segwit、2-of-3 multisig、2-of-2 multisig 和 1-of -2 備份),比特幣的腳本語言將允許許多其他應用程序。

最初,此類腳本直接編碼在交易記入的輸出腳本中。Pay to Script Hash (P2SH, BIP16 )引入了將資金鎖定到完整兌換腳本的雜湊。特此發布有關支出的完整腳本。使用 P2SH 部署更複雜的支出條件的挑戰之一是所有可能的結果都必須編碼到單個腳本中,這會使腳本變得冗長而復雜。由於需要在支出時發布完整的腳本,因此生成的輸入成本很高,並且會顯示完整的契約。此外,確定即使是中等複雜的智能合約的所有可能結果也並非易事。

Merklized Alternative Script Trees (MAST)¹的想法是分別列舉不同的支出條件,並允許通過執行任何一個腳本來花費資金。每個腳本都被劃分為默克爾樹的葉子。收到後,資金被鎖定在默克爾樹的根部。支出需要揭示單個葉子的腳本、顯示包含在樹中的 merkle 證明,以及滿足編碼在葉子中的支出條件。這種劃分的好處是減少了每個葉子的長度和復雜性,其他支出條件保持私密,以及編碼大量支出條件的可能性。缺點是默克爾證明的額外成本。

MAST 的一個變體是BIP341 Taproot 提案的一部分,它取代了兩個早期的 MAST 提案。Pay to Taproot (P2TR)輸出腳本編碼在單個公鑰中。在內部,它們由一個用 MAST 的根調整的內部鍵組成。P2TR 輸出既可以通過發出滿足公鑰的簽名通過密鑰路徑使用,也可以通過使用 MAST 葉子之一的腳本路徑使用。


¹ 請注意,MAST 最初是作為 Merklized Abstract Syntax Trees 的縮寫引入的,但後來被回用以更好地適應提案的目前範圍。另請參閱Michael’s answers,其中對此進行了更詳細的說明。

引用自:https://bitcoin.stackexchange.com/questions/99539