Lightning Network 锚输出解析:基础(第1部分)
发布: (2026年2月20日 GMT+8 12:43)
11 分钟阅读
原文: Dev.to
Source: Dev.to
欢迎回来,感谢你与我一起学习。
回顾:第 1 部分
- Problem: 预签名的 Lightning 承诺交易在需要广播时可能费用已过时。
- Solution: Anchor 输出让你稍后使用 CPFP(Child Pays For Parent)提升费用。
我们将在第 2 部分覆盖的内容
- CPFP 的真实工作原理 – 比特币协议层面的机制。
- 为什么是 330 sats? – “魔法数字”的解释。
- 单块延迟(CSV) – 为什么它对安全至关重要。
- 你的其他输出会怎样 – 快速概览。
- 带实际数字的真实案例。
1. CPFP 机制
基本概念
- 矿工希望最大化利润,因此他们会在每个区块中填入手续费最高的交易。
- 他们会把 交易包(父交易 + 子交易)一起考虑,并计算 综合手续费率。
真实数字示例
| 交易 | 大小 (vbytes) | 手续费 (sats) | 手续费率 (sat/vbyte) |
|---|---|---|---|
| 父交易(你的承诺交易) | 200 | 200 | 1 sat/vbyte ❌ 太低 |
| 子交易(花费 330 sat 的锚点) | 150 | 120 000 | — |
| 整体包 | 350 | 120 530 | 344 sat/vbyte ✅ |
- 子交易 无法被确认,除非父交易已被确认(因为它花费了父交易的输出)。
- 矿工必须 同时包含或同时不包含,因此子交易的高手续费会把父交易拉进区块。
2. 为什么是 330 sats?
- 尘埃限制 – 比特币会拒绝经济上过小的输出。
- 标准尘埃限制约为 546 sats。
- 锚点输出脚本 – 一种特殊的脚本类型,尘埃限制降低至 330 sats,成为不被视为尘埃的最小可花费输出。
- 共识 – 所有主要的闪电网络实现(LND、Core Lightning、Eclair、LDK)在 BOLT 规范中采用了 330 sats,确保兼容性。
为什么这个数字“恰到好处”
- 足够小,不会浪费通道容量。
- 足够大,能够被识别为有效输出并覆盖微小子交易的费用。
下面的示例在原始草案中被截断;如有需要,请自行补全缺失的数值。
你有一个闪电通道:
- 你的余额: 5,0… (数值在原文中继续)
(请使用你想展示的实际数值继续演示过程。)
TL;DR
- CPFP 能工作是因为矿工会评估父子交易包的 综合费用率。
- 330 sats 是锚点的最小非尘埃、可花费输出,已在各实现中标准化。
- 对所有非锚点输出施加 1 区块 CSV 锁,可防止对抗性的“钉住”攻击,并为你提供安全的费用提升窗口。
- 只有锚点输出 可以立即花费;其他所有输出因安全考虑会延迟一个区块。
通道概览
| 项目 | 金额(sats) | 金额(BTC) |
|---|---|---|
| 您的余额 | 5,000,000 | 0.05 BTC |
| 合作伙伴余额 | 3,000,000 | 0.03 BTC |
| 您的锚点 | 330 | – |
| 合作伙伴锚点 | 330 | – |
| 通道总容量 | 8,000,660 | – |
您的合作伙伴已离线,因此您必须 强制关闭 通道以取回您的资金。
1️⃣ 检查 mempool 费用市场
- 当前费用率:
250 sats/vbyte(高拥堵) - 承诺交易大小:
220 vbytes - 确认所需费用:
220 × 250 = 55,000 sats
问题: 您的预签名承诺交易仅包含
440 sat费用(≈ 2 sats/vbyte)。在当前市场费率下,它将在 mempool 中停留数天甚至数周。
2️⃣ Broadcast the commitment transaction
- Fee paid:
440 sats(far too low) - Status: Unconfirmed, stuck in the mempool
3️⃣ 创建 CPFP 子交易
| 参数 | 值 |
|---|---|
| 支出 | 您的 330‑sat 锚定输出 |
| 添加输入 | 来自您链上钱包的 60,000 sats |
| 创建输出 | 发送到您的钱包 |
| 大小 | 180 vbytes |
| 费用 | 54,560 sats(子交易)+ 330 sats(锚定)= 54,890 sats |
3.1 计算套餐费用率(父 + 子)
- 父交易大小:
220 vbytes - 子交易大小:
180 vbytes - 总大小:
400 vbytes
| 组成部分 | 费用(sats) |
|---|---|
| 父交易 | 440 |
| 子交易 | 54,890 |
| 总计 | 55,330 |
- 套餐费率:
55,330 ÷ 400 ≈ 138 sats/vbyte
这仍低于所需的 250 sats/vbyte。
4️⃣ 重新计算子交易费用以符合市场费率
- 目标总费用:
400 vbytes × 250 sats/vbyte = 100,000 sats - 父交易已支付:
440 sats - 子交易必须支付:
100,000 – 440 = 99,560 sats
创建子交易,费用为 99,560 sat。
4.1 最终套餐
| 项目 | 费用 (sats) |
|---|---|
| 父交易 | 440 |
| 子交易 | 99,560 |
| 总计 | 100,000 |
- 套餐费率:
100,000 ÷ 400 = 250 sats/vbyte✅
5️⃣ 确认与费用概览
- 链上总费用:
100,000 sats≈ $130 USD (按 $65 k/BTC 计算) - 已锁定资金:
5,000,000 sats(0.05 BTC ≈ $3,250 USD)
结果: 支付此费用值得,以便找回您的资金。
6️⃣ 费用情景(示例)
| 费用率(sats/vbyte) | 父交易费用(220 vbytes) | 子交易费用(180 vbytes) | 总费用(USD) |
|---|---|---|---|
| 5 | 1,100 sats(~$1.43) | 900 sats(~$1.17) | ≈ $2.60 ✅ |
| 200 | 44,000 sats(~$57) | 36,000 sats(~$47) | ≈ $104 ⚠️ |
| 500 | 110,000 sats(~$143) | 90,000 sats(~$117) | ≈ $260 💀 |
在高费用时期强制关闭可能代价高昂,这也是 Lightning 鼓励合作关闭的原因。
7️⃣ 为什么锚点输出很重要
- 没有锚点时,你可能无法关闭通道(在费用激增期间,父交易永远无法确认)。
- 有锚点时,你可以通过 CPFP 添加费用,为你提供恢复资金的途径。
常见问答
| 问题 | 答案 |
|---|---|
| 我可以多次花费锚点输出吗? | 不可以。 一旦锚点在子交易中被花费,就不能再次花费。如果该子交易仍未确认,你必须创建另一个子交易(“孙子交易”)来花费第一个子交易——这就是 CPFP 链接。 |
| 双方都有各自的锚点吗? | 可以。 每一方都可以创建自己的子交易。先确认的子交易会把父交易拉上链,所以任一方都能确保确认。 |
| 余额输出怎么办? | 它有 1 区块的 CSV 锁定。在承诺交易确认后必须等待一个区块,才能花费余额输出。锚点可以立即花费。 |
| 我可以使用 RBF 提高费用吗? | 不可靠。 RBF 需要对方配合(在强制关闭时几乎不可能),且容易受到 pinning 攻击。使用锚点的 CPFP 是更推荐的方式。 |
8️⃣ 关键要点
- CPFP 机制: 矿工会评估 父交易 + 子交易的综合费率,从而激励他们同时确认两笔交易。
- 330 sats 锚点: 最小的非尘埃可花费金额,在所有 Lightning 实现中统一。
- CSV 锁定: 对余额输出设置 1 区块的延迟,防止交易钉住攻击,并提供一个干净的费用提升窗口。
- 成本范围: 正常情况下几美元,极端拥堵时可达数百美元——仍比卡住更便宜。
- 经济激励: 高额的强制关闭费用促使用户倾向于合作关闭并选择可靠的通道伙伴。
9️⃣ 接下来怎么办?(第 3 部分 – 实用指南)
- 检查你的节点是否支持锚点输出(LND、Core Lightning、Eclair)。
- 在每个实现中启用/禁用锚点输出。
- 预留资金: 为应急费用提升预留多少链上比特币。
- 监控锚点输出和费用提升的工具与命令。
- 逐步操作:当强制关闭发生时的具体步骤。
我们已经从“锚点输出是什么?”(第 1 部分)→ “它们是如何工作的?”(第 2 部分)→ 动手使用(第 3 部分)。
如果第 2 部分的任何内容让你感到困惑,请告诉我——你的反馈有助于改进解释。
在第 3 部分见!
CSV 锁(1‑区块延迟)在余额输出上防止交易钉住攻击
- 只有锚点可以立即支出;所有其他输出必须等待 1 个区块。
- 实际费用 根据网络拥堵情况在 $3 到 $200+ 之间波动。
接下来(第 3 部分)
- 实际设置
- 实施指南
- 预备金管理
如果您有任何问题或反馈,请在评论中留言。