Taproot

單個主根輸出可以容納多少資訊?

  • October 27, 2021

主根會OP_RETURN過時嗎?我可以在輸出中填充多少資訊?Tapscript葉子?Tapscript 樹是否有最大深度?

我認為你的問題混淆了兩件事:

  • 對數據的承諾:使用區塊鏈證明某些數據在某個時間點之前存在
  • 發布數據:讓每個人都真正看到數據。

有根本不同的目標,你需要什麼取決於目的:

  • 如果你想給某事加上時間戳,承諾就足夠了。可以使用OP_RETURN包含數據雜湊的事務來實現承諾,但還有許多其他更私密的方法。例如,可以在鏈上創建一個完全普通的 ECDSA 簽名,用於實際將資金轉移到一個並非專門為此目的設計的地址的正常交易,實際上“混合”了一些附加數據。該簽名無法與普通簽名區分開來,但與外部證明一起,證明該簽名不能在不使用所述數據的情況下進行。這種方法稱為簽訂契約
  • 如果您想使用事務將資訊傳達給接收者(例如消息),則承諾是不夠的。這是一個壞主意,有幾個原因,但忽略了這一點:如果你在這裡使用像簽署契約這樣的承諾,收件人不會知道消息的存在。您需要向他們提供消息和交易在帶外送出給它的證據,如果您需要在帶外與他們進行通信,您可以直接在那裡向他們提供消息。
  • 例如,承諾也不會阻止您承諾兩個“衝突”的資訊。例如,keybase.io 會定期在比特幣區塊鏈上發布其整個數據庫的雜湊值。即使它只是一個雜湊,但承諾是不夠的,因為重點在於允許使用者驗證 keybase.io 是否為每個人提供相同的數據庫。只需一個承諾,他們就可以維護兩棵不同的樹,並將一棵展示給一些使用者,另一棵展示給其他使用者。

發布機制包括OP_RETURN交易中的輸出,或在密鑰原始多重簽名輸出中填充內容,或在見證中填充數據(通過使用帶有OP_DROP範例的腳本)。承諾機制包括使用發布機制儲存散列,還包括前面提到的簽署契約(承諾簽名中的數據)或支付契約(承諾公開密鑰中的數據)。

現在回到你的問題:在這兩種情況下,taproot 都沒有幫助。是的,主根腳本 Merkle 樹意味著您可以送出大量數據,但您已經可以這樣做:只需自己計算這些數據的 Merkle 根,然後送出/儲存該根。它也無助於發布,因為葉子不會在輸出上發布(只有調整過的公鑰是)。您可以在花費 P2TR 輸出時顯示數據(通過將數據放在一個葉子中,然後通過該葉子花費),但這並不能讓您做任何 P2WSH 無法實現的事情。

最後,taproot 中的腳本樹限制為最多 128 個級別,但這不會影響您所詢問的其餘內容。

我根本看不到 P2TR 將如何使OP_RETURN應用程序受益。葉中的腳本僅發佈在支出上,而NULLDATA輸出根本不會發生。

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