P2SH-P2WSH
P2SH-P2WSH,是 SegWit 隔離見證在比特幣過渡期間的一種封裝型輸出格式,屬於 P2SH 與 P2WSH 的組合結構。

P2SH-P2WSH,是 SegWit 隔離見證在比特幣過渡期間的一種封裝型輸出格式,屬於 P2SH 與 P2WSH 的組合結構。
它將原本的 SegWit witness program 包裝在 P2SH 之內,使舊版錢包與節點仍可正常識別與支付。
該類型地址外觀上仍使用 Base58Check 編碼,主網通常以 3 開頭,但內部實際使用的是 SegWit 的 P2WSH 腳本結構。
其核心目的是在不破壞既有 P2SH 生態相容性的前提下,引入 SegWit 的簽章分離、交易延展性改善,以及對複雜腳本的支援。
P2SH-P2WSH 基本概念
-
ScriptPubKey 交易輸出 在比特幣系統中,每一筆 UTXO 都包含ScriptPubKey。
在 P2SH-P2WSH 中,ScriptPubKey 並不直接鎖定 Witness Script,而是鎖定一段 Redeem Script 的 Hash160 雜湊值。
OP_HASH160 <20-byte ScriptHash> OP_EQUAL = ScriptPubKey
-
內層使用 Witness Program P2SH-P2WSH 的 Redeem Script 並非完整花費腳本,而是一段標準 P2WSH Witness Program。
OP_0 <32-byte WitnessScriptHash>
當花費該 UTXO 時,ScriptSig 不再提供完整解鎖腳本,而是僅提供這段 Redeem Script。 真正的簽章資料、Witness Script 與其他解鎖資料則放置於交易末尾的 Witness 欄位中。 節點會先驗證 ScriptSig 提供的 Redeem Script 是否符合 ScriptPubKey 中的 ScriptHash,再依照 SegWit 規則,利用 Witness 中提供的 Witness Script 與相關解鎖資料完成驗證。
P2SH-P2WSH 運作方式
-
建立公私鑰對 使用者生成參與腳本所需的 ECDSA 公私鑰對。私鑰用於簽章,公鑰用於驗證。若為多重簽章,則每位參與者皆各自擁有一組公私鑰。
-
建立 Witness Script 使用者先建立完整花費條件,例如多重簽章、時間鎖定或其他複雜腳本,此腳本稱為 Witness Script。
-
計算 SHA-256 雜湊 將 Witness Script 放入 SHA-256 雜湊函數中進行計算,產生一個 32 位元組,256 位元的 WitnessScriptHash。
SHA256(WitnessScript) = WitnessScriptHash
-
建立 Witness Program 將版本號 OP_0 與 WitnessScriptHash 組合成標準 P2WSH Witness Program,建立 Redeem Script。 OP_0 <32-byte WitnessScriptHash>
-
Redeem Script 計算 Hash160 將上述 Redeem Script 再進行 Hash160 計算,產生 ScriptHash。
RIPEMD-160(SHA256(RedeemScript)) = ScriptHash
-
建立 ScriptPubKey 將 ScriptHash 放入 P2SH ScriptPubKey 中,形成最終鎖定條件。
OP_HASH160 <20-byte ScriptHash> OP_EQUAL = ScriptPubKey
-
計算 Base58Check 地址編碼 將版本位元組、ScriptHash 與 Checksum 依照 Base58Check 編碼,轉換為 P2SH-P2WSH 可讀地址,以 3 為開頭,34 個字元的字串。
-
ScriptSig 與 Witness 解鎖資料 當花費該輸出時,ScriptSig 僅提供 Redeem Script。
OP_0 <32-byte WitnessScriptHash>
真正的解鎖資料則存放於 Witness 中,包括 Witness Script,以及符合該腳本所需的簽章或其他解鎖資料。 節點首先驗證 ScriptSig 中提供的 Redeem Script 是否符合 ScriptPubKey 所指定的 ScriptHash,接著依照 SegWit 規則,利用 Witness 中提供的 Witness Script 與相關解鎖資料完成最終驗證。
P2SH-P2WSH 應用
- SegWit 相容性過渡 現行大多數支援原生 SegWit 的多重簽章錢包皆直接採用 P2WSH。 P2SH-P2WSH 是 SegWit 推出初期最重要的過渡格式,使尚未支援 Bech32 地址的錢包、交易所與支付服務,也能正常接收 SegWit 多重簽章與複雜腳本交易,同時享有交易延展性修正、手續費降低,可容納較大的腳本內容。
P2SH-P2WSH 相關 BIP
- BIP 16:Pay to Script Hash
- BIP 48:Multi-Script Hierarchy for Multi-Sig Wallets
- BIP 141:Segregated Witness (Consensus Layer)
- BIP 143:Transaction Signature Verification for Version 0 Witness Program
- BIP 173:Base32 address format for native v0-16 witness outputs

更多文章