Smartcontracts

Taproot 或 Graftroot 可以執行複雜的腳本嗎?

  • August 18, 2019

據我了解,Taproot 使用 Merkle Tree 結構,其根代表腳本的結果。該表示形式採用簽名的形式,可以解鎖與其公鑰對應方相關的輸入,所有參與者共享該公鑰。

我有兩個與此相關的問題:

首先,腳本在樹中的結構是怎樣的?每條路徑是否代表不同的執行結果?如果是這樣,如何定義潛在結果?

其次,如果它遵循 Merkle Tree 結構,是否對腳本的大小有限制?我傾向於說不,因為這發生在鏈下,但我可能錯了。

首先,腳本在樹中的結構是怎樣的?每條路徑是否代表不同的執行結果?如果是這樣,如何定義潛在結果?

主根電子郵件未指定腳本如何放入 merkle 樹中。可能是樹中的每個葉節點都是不同的腳本(BIP114 風格),也可能是可以傳遞一個允許提取多個葉的參數,以便可以重用部分腳本(BIP116 風格)。

主根電子郵件中沒有此詳細資訊的原因是,該電子郵件是關於重新安排先前關於默克爾化腳本 (MAST) 的想法,以便預期的預設條件(每個人都簽名)是最簡單和最便宜的選擇,無需實際處理預期情況下的默克爾樹。關於如何組織和使用樹的想法是一個單獨的討論。

其次,如果它遵循 Merkle Tree 結構,是否對腳本的大小有限制?我傾向於說不,因為這發生在鏈下,但我可能錯了。

Taproot 的 merkle root / public key 消耗固定數量的字節(比如 64),這是微不足道的,但支出交易必須提供支出腳本以及提供雜湊列表的merkle 證明(和一些位路徑資訊)證明提供的腳本連接到主根的默克爾根。

此資訊將受制於 400 萬重量單位的基本塊大小限制,並且根據其實施方式,還可能受比特幣目前對見證人大小的限制(segwit v0 為 10,000 個重量單位)。好消息是,一個誠實的人不可能創建需要超過 8,000 個字節來創建 merkle 證明(不包括腳本)的 merkle 樹,即使他們擁有宇宙中的所有能量。(假設我們使用比特幣的 SHA256d 雜湊函式。)

上面是我關於 MAST 的文章中的一個插圖,顯示了將替代腳本(下標)編碼到 MAST 中如何在 log2 處增長,而它隨著現有機制線性增長。

對於具有一百萬種可能結果(樹深度等於 20)的腳本,將需要大約 643 個字節20 * 32 + ceil(20 / 8)(當然,如果每個人都簽名,你不需要提供任何數據——你只需推送一個簽名。

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