提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- [1.BTC UTXO 账户模型](#1.BTC UTXO 账户模型)
-
- [1.1 什么是 UTXO?](#1.1 什么是 UTXO?)
- [1.2 UTXO ⼯作原理](#1.2 UTXO ⼯作原理)
- [1.3 UTXO 交易详细流程](#1.3 UTXO 交易详细流程)
-
- [步骤 1: 选择输⼊(Input Selection)](#步骤 1: 选择输⼊(Input Selection))
- [步骤 2: 构建交易(Transaction Construction)](#步骤 2: 构建交易(Transaction Construction))
- [步骤 3: 签名验证(Signature Verification)](#步骤 3: 签名验证(Signature Verification))
- [步骤 4: 交易确认(Confirmation)](#步骤 4: 交易确认(Confirmation))
- [1.4 UTXO 的优势与劣势](#1.4 UTXO 的优势与劣势)
- [1.5 UTXO 集(UTXO Set)管理](#1.5 UTXO 集(UTXO Set)管理)
- [1.6 实际案例:比特币转账全流程](#1.6 实际案例:比特币转账全流程)
-
- [1. 钱包扫描阶段(0-1 秒)](#1. 钱包扫描阶段(0-1 秒))
- [2. 交易构建阶段(1-2 秒)](#2. 交易构建阶段(1-2 秒))
- [3. 签名阶段(2-3 秒)](#3. 签名阶段(2-3 秒))
- [4. 广播阶段(3-10 秒)](#4. 广播阶段(3-10 秒))
- [5. 确认阶段(10 分钟 - 1 小时)](#5. 确认阶段(10 分钟 - 1 小时))
- [1.7 UTXO 常见问题](#1.7 UTXO 常见问题)
-
- [Q1: 为什么我的比特币钱包显示多个地址?](#Q1: 为什么我的比特币钱包显示多个地址?)
- [Q2: 如何避免高额矿工费?](#Q2: 如何避免高额矿工费?)
- [Q3: 什么是粉尘攻击(Dust Attack)?](#Q3: 什么是粉尘攻击(Dust Attack)?)
1.BTC UTXO 账户模型
1.1 什么是 UTXO?
UTXO(Unspent Transaction Output) 即"未花费的交易输出",是⽐特币采⽤的账户模型。与传统银⾏账户不同,⽐特币没有"余额"的概念,⽽是通过追踪所有未花费的交易输出来计算⽤户的资产。
核⼼概念:
- 没有账户余额:⽐特币⽹络不存储每个地址的余额
- 交易输出即资产:所有的⽐特币都以 UTXO 的形式存在
- ⼀次性使⽤:每个 UTXO 只能被花费⼀次,花费后会⽣成新的 UTXO
- 找零机制:如果 UTXO ⾦额⼤于⽀付⾦额,需要将剩余部分作为"找零"返回
1.2 UTXO ⼯作原理

1.3 UTXO 交易详细流程
步骤 1: 选择输⼊(Input Selection)
当 Alice 想要向 Bob 发送 3 BTC 时:
- 查询可⽤ UTXO:钱包扫描区块链,找到属于 Alice 的所有未花费 UTXO
UTXO1: 5 BTC (来⾃交易 A)
UTXO2: 3 BTC (来⾃交易 B)
UTXO3: 2 BTC (来⾃交易 C)
- 选择策略
最优匹配:优先选择⾦额接近的 UTXO(如选择 3 BTC)
合并⼩额:合并多个⼩ UTXO(如 3 BTC + 2 BTC = 5 BTC)
避免找零:尽量选择恰好等于⽀付⾦额的 UTXO
步骤 2: 构建交易(Transaction Construction)

交易示例(JSON 格式):
{
"version": 2,
"inputs": [
{
"previous_tx": "a1b2c3d4...", // 前一笔交易的哈希
"output_index": 0, // 引用的输出索引
"script_sig": "304502...", // 签名脚本(证明所有权)
"sequence": 4294967295
}
],
"outputs": [
{
"value": 300000000, // 3 BTC (单位: Satoshi)
"script_pub_key": "OP_DUP OP_HASH160 <Bob公钥哈希> OP_EQUALVERIFY OP_CHECKSIG"
},
{
"value": 699000000, // 6.99 BTC (找零)
"script_pub_key": "OP_DUP OP_HASH160 <Alice公钥哈希> OP_EQUALVERIFY OP_CHECKSIG"
}
],
"locktime": 0
}
步骤 3: 签名验证(Signature Verification)

验证过程:
- 签名验证:
验证 ScriptSig + ScriptPubKey = TRUE执行栈操作:
- 压入签名
- 压入公钥
- OP_DUP 复制公钥
- OP_HASH160 对公钥做哈希
- 压入公钥哈希(来自ScriptPubKey)
- OP_EQUALVERIFY 验证哈希是否匹配
- OP_CHECKSIG 验证签名
- 双花检查:确保该 UTXO 未被花费
- 金额验证:输入总额 ≥ 输出总额
步骤 4: 交易确认(Confirmation)

确认次数建议:
- 1 确认:⼩额⽀付(<$100)
- 3 确认:中等⾦额(100-1000)
- 6 确认:⼤额交易(>$1000)- 约 1 ⼩时
1.4 UTXO 的优势与劣势
优势
- 并行处理能力强

- 不同 UTXO 的交易可以并⾏验证提⾼⽹络吞吐量
- 隐私性更好
每次交易可以使⽤新地址(找零地址)难以追踪⽤户的总资产
示例:
Alice地址1: 5 BTC
Alice地址2: 3 BTC
Alice地址3: 2 BTC
外界⽆法轻易判断这些地址属于同⼀⼈
- 简单的双花防护
- UTXO 要么存在(未花费),要么不存在(已花费)
- ⼆进制状态易于验证
- ⽆状态验证
- 节点只需验证交易引⽤的 UTXO 是否有效
- ⽆需维护全局账户状态
劣势
- 存储开销⼤
每个UTXO需要存储:
- 交易哈希: 32 字节- 输出索引: 4 字节
- ⾦额: 8 字节
- 锁定脚本: 可变⻓度
当前⽐特币UTXO集约 5GB+
- 交易体积⼤
- 需要引⽤完整的前置交易信息
- 多输⼊交易体积更⼤→ Gas 费更⾼示例:
简单交易: 1 输⼊ + 2 输出≈ 250 字节
复杂交易: 5 输⼊ + 2 输出≈ 850 字节
- 找零复杂性
- 需要钱包管理⼤量找零地址
- ⽤户体验不如账户模型直观
- 智能合约⽀持有限
- 脚本语⾔(Script)功能受限
- 难以实现复杂的业务逻辑
1.5 UTXO 集(UTXO Set)管理

数据结构示例(简化):
1.6 实际案例:比特币转账全流程
场景: Alice 想向 Bob 发送 0.5 BTC

详细步骤说明:
1. 钱包扫描阶段(0-1 秒)
查询Alice的UTXO:
- UTXO_A: 1.2 BTC (够用)
- UTXO_B: 0.3 BTC
选择策略:选择 UTXO_A (最小化输入数量)
2. 交易构建阶段(1-2 秒)
输入:
- Previous TX: 7a3f2c... (UTXO_A的来源交易)
- Output Index: 0
输出:
- Output 0: 0.5 BTC → Bob地址 (bc1q...)
- Output 1: 0.6999 BTC → Alice找零地址 (bc1p...)
矿工费: 1.2 - 0.5 - 0.6999 = 0.0001 BTC
3. 签名阶段(2-3 秒)
签名步骤:
- 对交易数据做 SHA256 哈希
- 使用 Alice 私钥(ECDSA)生成签名
- 将签名和公钥填入 ScriptSig
4. 广播阶段(3-10 秒)
- 连接到 8+ 对等节点
- 节点验证后继续转发
- 10 秒内传播到全网大部分节点
5. 确认阶段(10 分钟 - 1 小时)
确认1: 被打包进区块 (平均 10 分钟)
确认 2-6: 每次约 10 分钟
总耗时: 约 1 小时达到 6 确认
1.7 UTXO 常见问题
Q1: 为什么我的比特币钱包显示多个地址?
A: 这是 UTXO 模型的特性。为保护隐私,钱包会为每次找零生成新地址:
交易1: 找零到地址A
交易2: 找零到地址B
交易 3: 找零到地址C
所有地址的UTXO总和 = 你的余额
Q2: 如何避免高额矿工费?
A: 合并小额 UTXO 或使用批量支付:
不推荐: 10个小UTXO分别支付 → 10笔交易 → 高费用
推荐: 先合并成1个大UTXO → 1笔交易 → 低费用
Q3: 什么是粉尘攻击(Dust Attack)?
A: 攻击者向⼤量地址发送极⼩⾦额(如 546 Satoshi),⽬的是:
- 追踪这些 UTXO 何时被合并使用
- 分析地址关联性,破坏隐私
防护措施: - 不要花费来源不明的小额 UTXO
- 使用隔离见证(SegWit)降低交易费用

