跳至主要內容
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 地址仍然被廣泛使用, 特別是在需要向後相容的場景中。

已複製連結
已複製到剪貼簿