关键词:比特币支付流程、非对称加密、数字签名、交易广播、钱包地址、公钥私钥、交易验证、UTXO
1. 一言以蔽之:一次比特币转账到底发生什么事?
想像你把一枚金币邮寄给朋友,你要告诉全网:
“这枚金币现在归我朋友了,我之前从张三那收到它,我用专属钥匙盖了章,大家帮我记账!”
在比特币网络里,这段话被翻译成四步:创建交易 → 签名 → 广播 → 区块确认。接下来我们把每一步拉成慢镜头。
2. 钱包、公钥与地址:一把钥匙三段妙用
- 私钥
256 位随机数,保密到底,丢失即永远失去掌控权。 - 公钥
由私钥经椭圆曲线算法推导,对外公开,相当于“身份证”。 - 地址
将公钥两次哈希后再转 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 后,无须联网即可在本地完成验证:
- 溯源:查找 UTXO 库里
Previous Tx Hash对应输出是否未被花费。 - 校验公钥:将附带公钥做
SHA256+RIPEMD160,比对地址一致。 - 验签:用公钥解开数字签名,还原哈希,与当前交易哈希比对。
提示:Bob 的这轮校验只能验证字面正确,真正防双花要等 6 个区块确认。
6. 广播与挖矿:从广播到写入区块链
Alice 把签名后交易广播给相邻节点,节点再级联转发。矿工按手续费高低、字节数决定收录优先顺序。
一旦被打包并在后续 6 个区块后继续追加,此笔 0.1 BTC 所有权 就正式转入 Bob 手中。
7. 解构 UTXO:为何没有“账户余额”,而是一张张“支票”
比特币网络不记录“账户”数额,只记录未使用交易输出(UTXO)集合。
举例:
- Alice 3 天前收两笔:0.05 BTC & 0.15 BTC。
- 她今日发给 Bob 0.1 BTC 时,必须使用 0.15 BTC 的 UTXO 做输入,再把找零 0.05 BTC 打回给自己。
这就是为什么钱包余额需把所有 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)
- 安装 bitcoin-cli。
createrawtransaction创建交易骨架。signrawtransactionwithkey用私钥离线签名。sendrawtransaction将已签名交易广播到网络。
全部流程可在无网络环境下完成,保障冷钱包安全。
10. 进阶思考:Taproot 升级后的变化
- 引入了 Musig2 聚合签名,多签地址体积更小。
- Schnorr 签名让交易更省字节,间接降低手续费。
- Merklized Abstract Syntax Trees (MAST) 隐藏未解锁脚本分支,提高隐私。
未来转账流程将与本文案例大体相同,只是签名算法、字节结构升级了。
11. 总结:三条铁律请牢记
- 私钥即主权,离线保存,零截图、零网盘。
- UTXO 像支票,用多少拆多少,找零别忘。
- 确认数 ≥6 才是尘埃落定,在此之前勿把“未确认”视作成功。
掌握以上环节,你对比特币支付流程的底层逻辑已了若指掌。祝每位读者都能安全、高效地管理自己的数字资产!