比特币交易全解:从UTXO到脚本验证的血肉细节

·

关键词:比特币交易、UTXO、脚本验证、P2PKH、多重签名、P2SH、锁定脚本、解锁脚本、比特币地址、交易费用


交易在比特币世界里的中心地位

如果把区块链比作高速公路,交易就是那辆辆呼啸而过的载重卡车。共识算法负责维护路面畅通、惩罚不守规矩的司机;密码学确保货物不会被偷;而UTXO模型则是车厢里一格一格密封的货柜,谁有钥匙谁才能打开。本文就跟着 Alice 和 Bob 的一杯咖啡交易,拆解这整套运转机制。


场景示例:Alice 用 0.015 BTC 买咖啡

  1. Alice 打开钱包 → 扫描 Bob 咖啡馆的 比特币地址
  2. 钱包自动挑选大额 UTXO(假设是 0.1 BTC,要找零 0.0845 BTC,矿工费 0.0005 BTC)。
  3. 交易广播到全网 → 矿工打包进区块 → 区块确认 → Bob 收款成功。

在区块浏览器里,这笔看似简单的交易背后藏着三张王牌:输入 vin输出 vout脚本验证

👉 想知道下一笔高收益挖矿区块如何被人抢走?点击查看实时追踪技巧。


UTXO:比特币的“零钱桶”

未花费交易输出(UTXO) 是比特币记账的核心概念:

一张思维小例
想象你有 3 张钞票:10 元、5 元、1 元,一共 16 元。买一杯 7 元咖啡,你需要组合 10 元钞票 + 找回 3 元新零钞。UTXO 就是那张 10 元,而找零的 3 元就成了新的 UTXO


输入(vin):出示钥匙才能花币

字段作用
txid指向父亲交易的哈希,即你的钱来自哪个 UTXO
vout指定那一笔父亲交易的第几个输出
scriptSig 解锁脚本必须给出一套“对得上”的证据(例如私钥签出的签名+公钥)
sequence可选,用来构造复杂条件的“相对时间锁”,日常用 0xFFFFFFFF 即可

矿工检查 scriptSig 是否满足 锁定脚本 的条件,验证不通过直接被丢进内存池的垃圾堆。


输出(vout):把币锁起来

每个输出包含两项:

  1. value 以 satoshi 计量的比特币金额。
  2. scriptPubKey 锁定脚本 定义未来的解锁条件,通常指向某个 比特币地址

常见锁定脚本写法:

OP_DUP OP_HASH160 <地址公钥哈希> OP_EQUALVERIFY OP_CHECKSIG

意译过来:“只要你给出与这个哈希匹配的公钥,并用对应私钥签名,就立刻放行。”


交易脚本:两把钥匙怎么对上锁

术语别称身份
锁定脚本 ScriptPubKey"锁" / "难题"控制谁能领币
解锁脚本 ScriptSig"钥匙" / "回答"真正领币时提交

验证流程(矿工自动完成):

  1. 先把解锁脚本推入堆栈;
  2. 再执行锁定脚本;
  3. 如果结果栈顶为 TRUE,才算过关。

这种堆栈式脚本基于 反向波兰表达式,图灵非完备——没有循环,防止死循环攻击。


高阶脚本类型

1. P2PKH(最常见)

锁定脚本把币锁定在 公钥哈希 即地址;解锁只需提供公钥+签名。几乎覆盖 80% 以上的交易。

2. 多重签名(Multisig,M-N)

“两把钥匙同时转才能开保险箱”——例如 2-3:任意两把钥匙即可完成支付。常见于团队共管钱。缺点是锁定脚本冗长,N 越大越占区块钱包费。

3. P2SH 把复杂锁简化

把冗长的脚本哈希成 20 字节,锁定脚本只剩:"OP_HASH160 <脚本哈希> OP_EQUAL";真正代码转移至赎回脚本(Redeem Script)。付款方脚本极短、上传费用降低,复杂验证扔给接收方完成,一举两得。


FAQ:你可能关心的问题

Q1:我的比特币到底存在哪?
A:不存在 “账户余额文件” 里,而以若干 UTXO 形式散落于区块链。钱包唯一做的事是把属于你的 UTXO 收集并显示总面额。

Q2:为什么有时交易 10 分钟就到账,有时 1 小时还在排队?
A:区块容量有限,手续费出价低的交易被矿工优先级下调;高峰期需加价。👉 利用实时费率计算器抢占打包首班车。

Q3:误把 BTC 发到空地址怎么办?
A:没有私钥等于永久丢失。创建钱包时务必备份助记词,并进行离线冷存。

Q4:P2SH 能节省多少手续费?
A:若锁定脚本原本 500 字节,用 P2SH 后链上记录只剩 20+19 ≈ 40 字节,折扣可达 90%。对 3-5、5-7 多签尤其明显。

Q5:能自定义脚本玩花活吗?
A:可以。脚本语言支持时间锁、哈希锁、甚至闪电网络 HTLC。新手切勿手撸,否则可能锁死自己资产。

Q6:UTXO 碎片太多会导致钱包变慢吗?
A:部分轻钱包会卡顿;拥有大量小额 UTXO 的手续费也可能激增。定期 合并 UTXO(自己给自己发一笔交易)可避免“零钱”太多。


总结

一次比特币交易 = 输入(消耗旧 UTXO)+ 输出(创建新 UTXO)+ 手续费给矿工
矿工验证 = 运行脚本,核对签名、哈希是否对上
最终目的 → 让 账本所有人认同:Alice 的比特币真的合法地转到了 Bob 地址。

掌握 UTXO 与脚本,才算打开 比特币底层世界 的第一道门。祝你链上交易一路安全,一路省钱。