比特币经历了多次升级,地址类型从 Legacy 到 SegWit 再到 Taproot,每一代都在提升效率和功能。
graph LR
A["P2PKH<br/>1 开头<br/>2009"] -->|"更强大"| B["P2SH<br/>3 开头<br/>2012"]
B -->|"更高效"| C["P2WPKH<br/>bc1q 开头<br/>2017"]
C -->|"更隐私"| D["P2TR<br/>bc1p 开头<br/>2021"]
style A fill:#ffecb3
style B fill:#ffe0b2
style C fill:#c8e6c9
style D fill:#b3e5fc
| 类型 | 前缀 | 编码格式 | 引入时间 | 说明 |
|---|---|---|---|---|
| P2PKH | 1 | Base58Check | 2009 | 最早的地址格式,Pay to Public Key Hash |
| P2SH | 3 | Base58Check | 2012 (BIP16) | 支持多签等复杂脚本,Pay to Script Hash |
| P2WPKH | bc1q | Bech32 | 2017 (BIP141) | 原生隔离见证,手续费更低 |
| P2TR | bc1p | Bech32m | 2021 (BIP341) | Taproot,Schnorr + MAST |
| 类型 | 锁定脚本 | 解锁需要 |
|---|---|---|
| P2PKH | OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG | 签名 + 公钥 |
| P2SH | OP_HASH160 <script_hash> OP_EQUAL | 赎回脚本 + 脚本输入 |
| P2WPKH | OP_0 <20字节hash> | witness 中提供签名 + 公钥 |
| P2TR | OP_1 <32字节公钥> | witness 中提供 Schnorr 签名 |
SegWit 解决了比特币的两大问题:
graph TB
subgraph "问题1:交易延展性"
P1A["签名数据在交易ID计算范围内"]
P1B["第三方可以修改签名格式"]
P1C["导致交易ID改变但交易仍有效"]
P1A --> P1B --> P1C
end
subgraph "问题2:区块容量限制"
P2A["1MB 区块大小限制"]
P2B["签名占交易约 60% 空间"]
P2C["实际可用空间很少"]
P2A --> P2B --> P2C
end
subgraph "SegWit 解决方案"
S1["签名数据移出交易主体"]
S2["交易ID不再包含签名"]
S3["引入'虚拟字节'概念"]
S4["等效区块容量提升至约 4MB"]
end
P1C --> S1
P2C --> S1
S1 --> S2
S1 --> S3
S3 --> S4
SegWit 之前:
[version] [inputs (含签名)] [outputs] [locktime]
↑ 交易ID = hash(整个数据)SegWit 之后:
[version] [marker] [flag] [inputs (不含签名)] [outputs] [witness (签名)] [locktime]
↑ 交易ID = hash(不含witness)签名数据被"隔离"到 witness 区域,不再参与交易 ID 的计算,彻底解决了交易延展性问题。