比特币支付交易全流程深度拆解:从私钥签名到全网确认

·

关键词:比特币支付流程、非对称加密、数字签名、交易广播、钱包地址、公钥私钥、交易验证、UTXO

1. 一言以蔽之:一次比特币转账到底发生什么事?

想像你把一枚金币邮寄给朋友,你要告诉全网:
“这枚金币现在归我朋友了,我之前从张三那收到它,我用专属钥匙盖了章,大家帮我记账!”
在比特币网络里,这段话被翻译成四步:创建交易 → 签名 → 广播 → 区块确认。接下来我们把每一步拉成慢镜头。


2. 钱包、公钥与地址:一把钥匙三段妙用

  1. 私钥
    256 位随机数,保密到底,丢失即永远失去掌控权。
  2. 公钥
    由私钥经椭圆曲线算法推导,对外公开,相当于“身份证”。
  3. 地址
    将公钥两次哈希后再转 Base58Check 编码,生成 26–35 位字符,方便粘贴,如同“银行卡号”。
小技巧:用在线工具输入私钥即可查看相应公钥与地址,但千万别把私钥粘到陌生网页上!

3. 情境代入:A 转账给 B 的 流程图

假设 Alice(A)要给 Bob(B)发 0.1 BTC,流程如下:

┌── Alice 创建交易 --------------------------------------------------┐
│ 01 指定输入:之前收到 0.2 BTC 的交易哈希 + 输出序号               │
│ 02 指定输出:Bob 地址 + 金额 0.1 BTC                              │
│ 03 找零输出:Alice 自己地址 + 0.099 BTC(预留 0.001 作手续费)    │
│ 04 生成脚本锁定 & 解锁条件                                       │
└-----------------------------------------------------------------┘
↑↓ 私钥签名
┌── 验证脚本(Bob 先做预检) ----------------------------------------┐
│ ① 交易是否双花?                                                 │
│ ② 解锁脚本中的公钥是否能哈希出输入对应的地址?                    │
│ ③ 数字签名能否用公钥解开并匹配交易内容摘要?                       │
└-----------------------------------------------------------------┘
↑↓ 广播到 P2P 网络
┌── 矿工打包 --------------------------------------------------------┐
│ —— 放入内存池 → 检验合法 → 组成候选区块 → 挖矿 → 区块确认 → UTXO 状态更新 │
└-----------------------------------------------------------------┘

4. 支付方视角:构建并签署一笔交易的核心字段

字段含义示例摘要
Previous Tx Hash前一笔交易的唯一指纹a1b2c3d4...
Index前一交易输出中的第几笔0x0
ScriptSig解锁脚本,含公钥 + 数字签名变长二进制
Sequence过期或替换标记ffffffff
Alice 用私钥对整笔交易做一次 ECDSA 签名,签名的结果写入 ScriptSig,确保任何改动都会被网络识破。

5. 被支付方视角:Bob 的三步本地校验

Bob 收到 Raw Transaction 后,无须联网即可在本地完成验证:

  1. 溯源:查找 UTXO 库里 Previous Tx Hash 对应输出是否未被花费。
  2. 校验公钥:将附带公钥做 SHA256+RIPEMD160,比对地址一致。
  3. 验签:用公钥解开数字签名,还原哈希,与当前交易哈希比对。

提示:Bob 的这轮校验只能验证字面正确,真正防双花要等 6 个区块确认。


6. 广播与挖矿:从广播到写入区块链

Alice 把签名后交易广播给相邻节点,节点再级联转发。矿工按手续费高低、字节数决定收录优先顺序。
一旦被打包并在后续 6 个区块后继续追加,此笔 0.1 BTC 所有权 就正式转入 Bob 手中。


7. 解构 UTXO:为何没有“账户余额”,而是一张张“支票”

比特币网络不记录“账户”数额,只记录未使用交易输出(UTXO)集合。
举例:

这就是为什么钱包余额需把所有 UTXO “叠硬币”加总得来。


8. 数据包长啥样?给你一个可对照的 HEX 片段

(以下是简略示例,真实长度更长)

01000000                版本号 1
01                      输入数量 1
a1b2c3...00000000       Previous Tx Hash
01000000                Previous Index
...                     脚本长度 & 解锁脚本
01                      输出数量 1
8096980000000000        0.1 BTC in Satoshi
76a9...5a88ac           锁定脚本 (Bob 地址)
00000000                Locktime

复制整段 HEX, 在区块链浏览器里可直接查看其交易 ID。


FAQ:常见疑问一次说清

Q1. 私钥泄露会怎样?
A1. 一旦他人掌握私钥即可导出公钥与地址,进而把资金全部转走,相当于钱包被偷。

Q2. 交易费怎么算?
A2. 按字节计费,通常 每千字节 0.00005–0.0005 BTC 区间波动,根据网络拥堵程度实时调整。可以用钱包中的“自定义费率”选项设置。

Q3. 转账多久能被确认?
A3. 平均 10 分钟出一个区块;网络拥堵时可能排队数小时。👉 实时查看 mempool 拥堵图表 ,选择合适时机再发交易。

Q4. 可以同时向多个人付款吗?
A4. 可以,一笔交易可包含多个输出:Alice→Bob、Alice→Charlie、Alice→找零,与几个输出无关,只需支付一次网络费。

Q5. 如果不小心设置成零手续费会怎样?
A5. 矿工大概率忽略,交易很可能长时间 Pending,甚至 14 天后自动退回内存池,重新签更合适的费率即可。


9. 实战演练:用命令行模拟一次离线签名(Linux/Mac)

  1. 安装 bitcoin-cli
  2. createrawtransaction 创建交易骨架。
  3. signrawtransactionwithkey 用私钥离线签名。
  4. sendrawtransaction 将已签名交易广播到网络。
    全部流程可在无网络环境下完成,保障冷钱包安全。

10. 进阶思考:Taproot 升级后的变化


11. 总结:三条铁律请牢记

  1. 私钥即主权,离线保存,零截图、零网盘。
  2. UTXO 像支票,用多少拆多少,找零别忘。
  3. 确认数 ≥6 才是尘埃落定,在此之前勿把“未确认”视作成功。

👉 点击深入一步,用交互式沙盒亲手试签交易

掌握以上环节,你对比特币支付流程的底层逻辑已了若指掌。祝每位读者都能安全、高效地管理自己的数字资产!