為什麼 Taproot 需要新的地址格式?
Dawid Weightkiewicz在推特上問道:
嘿#bitcoin ers。我試圖弄清楚為什麼主根需要一種新的地址格式,因為我錯過了它。如果您有一個好的連結或其他東西 - 請分享。我認為“Taproot 輸出是版本號為 1 (…) 的本機 SegWit 輸出”意味著 bech32 可以。
我在這裡提出問題是為了更好地了解問題和答案。
背景
P2TR 地址將使用Bech32進行編碼,儘管可能是一個修正版本。由於預計 Taproot 將被合併,一些支持者測試了各種錢包和服務在 segwit v1 輸出方面的行為。BIP173規定應對 Bech32 地址實施已知限制,但“實施必須允許使用任何版本”。測試發現,多個錢包和服務不符合規範,而是無法創建 segwit-v1 輸出,或者更糟糕的是,使用相同的輸出腳本但會破壞 segwit 版本,從而默默地將它們降級為 segwit-v0 輸出燒錢。
去年,還發現 Bech32 存在長度擴展可變性。可以通過插入特定字元來擴展具有特定結尾的地址(如果它們出現在特定位置,則刪除它們)。由於本地隔離見證地址限制為 42 或 62 個字元,因此這在很大程度上無關緊要。
最近的一項提案旨在通過修改 Bech32 的校驗和計算來解決這兩個問題。為即將到來的 segwit 輸出版本使用這種修改後的格式將保護資金不被燒毀,因為降級的輸出將不再符合 segwit-v0 校驗和要求,同時糾正了 segwit-v1-v16 的長度擴展可變性。
向 segwit v1 地址付款
隔離見證規范明確允許創建所有版本的隔離見證輸出。因此,預計所有支持 segwit 的錢包都能夠開箱即用地創建 P2TR 輸出。根據上述測試,許多錢包和服務不符合規範,但需要更新以支持發送到 P2TR。根據提議的更改,錢包必須額外更新 segwit-v1–v16 bech32 地址的校驗和常量。
P2TR 輸出的支出
Taproot BIP 規定了一個新的腳本版本 ( Tapscript )、Schnorr 簽名和Taproot 輸出格式,因此從 P2TR 輸出中花費首先需要更多的實施工作,特別是要利用腳本路徑花費或使用等高級功能密鑰路徑中的聚合密鑰。