Taproot
如何用超過 2 個 scriptleaves 作為描述符來表示主根輸出?
我在比特幣核心文件中閱讀了一個帶有 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 庫中看到的一致,其中 a
TAPTREE
要麼是一片葉子,要麼是兩棵樹。我的問題是,如果我想送出第三個腳本,一個非常簡單的腳本,例如範例中的 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中得到確認。