Standards Track Final
BIP-13: P2SH 地址格式
定義 P2SH 地址的 Base58Check 編碼格式,以 3 開頭。
Gavin Andresen 2012年1月3日
BIP 編號
13
類型
Standards Track
狀態
Final
創建日期
2012-01-03
摘要
BIP-13 定義了 Pay to Script Hash(P2SH)地址的 Base58Check 編碼格式。 這些地址在主網以 "3" 開頭,在測試網以 "2" 開頭,允許使用者向複雜腳本發送資金。
動機
BIP-16 定義了 P2SH 輸出類型,但沒有定義地址格式。BIP-13 填補了這個空白, 讓使用者可以像使用普通地址一樣使用 P2SH:
- • 可以分享給付款人
- • 可以生成 QR Code
- • 錢包可以識別並正確處理
地址格式
編碼規則
P2SH 地址 = Base58Check( version || script_hash ) 其中: • version = 0x05(主網)或 0xC4(測試網) • script_hash = RIPEMD160(SHA256(redeemScript)) • Base58Check 包含 4 byte 校驗碼
版本號
| 網路 | 版本 | 前綴 | 範例 |
|---|---|---|---|
| 主網 | 0x05 | 3 | 3J98t1WpEZ73CNmQvie... |
| 測試網 | 0xC4 | 2 | 2N7XypJMdRJL3Z3A4... |
編碼範例
// 假設 redeemScript 是 2-of-3 多簽:
redeemScript = OP_2 <pubkey1> <pubkey2> <pubkey3> OP_3 OP_CHECKMULTISIG
// 計算腳本哈希
script_hash = RIPEMD160(SHA256(redeemScript))
= 0x89abcdef...(20 bytes)
// 加上版本前綴
data = 0x05 || 0x89abcdef...
// Base58Check 編碼
address = Base58Check(data)
= "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy" 與 P2PKH 地址的比較
P2PKH(1 開頭)
- • 版本: 0x00
- • 哈希: pubkey_hash
- • 用途: 單一公鑰
- • 例: 1A1zP1eP5QGefi2DMPTf...
P2SH(3 開頭)
- • 版本: 0x05
- • 哈希: script_hash
- • 用途: 任意腳本
- • 例: 3J98t1WpEZ73CNmQvie...
P2SH 地址的用途
多重簽名
最常見的用途。將 2-of-3 等多簽腳本哈希為簡短地址, 付款人無需知道內部結構。
P2SH-P2WPKH
SegWit 相容地址,內部是 SegWit 輸出但以 P2SH 包裝, 允許舊錢包向 SegWit 地址發送。
時間鎖
包含 OP_CHECKLOCKTIMEVERIFY 等時間鎖的複雜腳本。
閃電網路通道
通道資金腳本通常使用 P2SH(或 P2WSH)包裝。
安全注意事項
重要提醒
- 保存 redeemScript:花費 P2SH 輸出需要原始的 redeemScript, 僅有私鑰是不夠的。
- 驗證地址生成:確保地址確實來自你控制的 redeemScript。
- 理解腳本含義:在向 P2SH 地址發送資金前, 了解 redeemScript 的條件。
演進
隨著 SegWit 的引入,出現了新的地址格式:
| 類型 | 前綴 | BIP | 說明 |
|---|---|---|---|
| P2PKH | 1 | - | 原始地址格式 |
| P2SH | 3 | BIP-13 | 腳本哈希地址 |
| P2WPKH | bc1q | BIP-173 | 原生 SegWit v0 |
| P2TR | bc1p | BIP-350 | Taproot(SegWit v1) |
總結
BIP-13 為 P2SH 輸出定義了人類可讀的地址格式,使複雜腳本的使用變得和普通地址一樣簡單。 雖然新的 Bech32 地址正在取代 Base58 格式,但 P2SH 地址仍然被廣泛使用, 特別是在需要向後相容的場景中。
延伸閱讀: 查看 GitHub 上的完整 BIP-13 文件
已複製連結