Bitcoin-Core-Development

Taproot 之後的多重簽名交易

  • November 19, 2021

在我們進行多重簽名交易的主根之前,vout 有一個地址數組(圖 1)。現在,比特幣核心 v22.0 中的這種多重簽名交易僅表示為沒有地址欄位的多重簽名類型(圖 2)。根據我的基本理解,taproot 改進了使用 Schnorr 簽名對多重簽名交易進行簽名的方式。vout 中的地址如何表示?它們是否以與 pre-taproot 多重簽名交易相同的方式抽象(隱藏地址欄位)?提前致謝。

圖 1:

圖 1

圖 2:

圖 2

這與主根無關。

Bitcoin Core 的 RPC 輸出中的“地址”欄位是歷史遺留問題,充其量是過時的,最壞的情況是令人困惑。自 22.0 以來,該欄位已被完全棄用,適用於所有類型的交易輸出。它可以(暫時)使用 重新啟用-deprecatedrpc=addresses,但在 23.0 中它將完全消失。我的建議是不要使用它,因為即使它有效,它也可能並不意味著你認為它的作用。

在現代解釋中,“地址”是特定“鎖定腳本”(scriptPubKey)的人類可讀的簡寫符號,可以放置在交易輸出中。即使輸出編碼了多重簽名策略,也只有一個鎖定腳本,因此只有一個地址。

歷史解釋(在 2012 年引入 BIP16 之前,但持續時間更長)是地址是公鑰的標識符。這種解釋導致在 RPC 輸出中有一個“地址”欄位;每當有一個包含多個公鑰的鎖定腳本時,每個的“地址”標識符都會在該 RPC 欄位中報告。

這種歷史解釋現在已經沒有意義,而且已經很久了。原因是今天的多重簽名輸出不會在 scriptPubKey 中放置多個密鑰。相反,他們使用 P2SH (BIP16) 或 P2WSH (BIP141) 僅將包含所有公鑰的腳本*雜湊放入 scriptPubKey 中。*這更便宜,更簡單,而且更私密。從這些輸出中,儘管是多重簽名策略,但 RPC 輸出無法推斷出單個公鑰,因為它們僅由支出者在花費時間顯示,並且對於此類輸出,RPC 仍將僅報告 1 個地址。

P2TR(taproot)輸出沒有什麼不同。沒有可以從 scriptPubKey 學習到的單獨的公鑰,因此 RPC 輸出只會報告一個“地址”(P2TR 地址)。

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