Taproot

如何用超過 2 個 scriptleaves 作為描述符來表示主根輸出?

  • September 14, 2022

我在比特幣核心文件中閱讀了一個帶有 2 個腳本路徑的主根輸出描述符的範例:

tr(c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5,{pk(fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556),pk(e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13)})

我嘗試使用第三個腳本路徑傳遞描述符,但遇到錯誤tr(): expected ')' after script expression

這是有道理的,因為我在同一個文件中讀到主根描述符的語法是tr(KEY,TREE),並且TREE定義為:

* any SCRIPT expression
* An open brace {, a TREE expression, a comma ,, a TREE expression, and a closing brace }

這與我在 rust-bitcoin 庫中看到的一致,其中 aTAPTREE要麼是一片葉子,要麼是兩棵樹。

我的問題是,如果我想送出第三個腳本,一個非常簡單的腳本,例如範例中的 2,該怎麼辦?

我想我可以自己計算樹的根並將rawtr()描述符與輸出公鑰一起使用,但是如果我想證明沒有隱藏的承諾怎麼辦?

我想我可以提供所有腳本,並且可以通過重新創建 scriptpubkey 並檢查它是否相同來解決它,但這很麻煩。

如果您想要一個帶有腳本路徑的 Merkle 樹,S1並且S2在 Merkle 樹的第二層和 Merkle 樹S3的第一層的腳本路徑,則描述符符號為:

tr(KEY,{{S1,S2},S3})

其中KEY可以是任何密鑰表達式,包括公鑰、x-only 公鑰、WIF 私鑰、xpub、xprv 或帶有派生路徑的 xpub/xprv。

拉取請求#22051添加了對tr(KEY,{{S1,{{S2,S3},...}},...})描述符的支持,並且該符號在拉取請求#21365中得到確認。

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