比特币手续费详解:sat/vB、内存池与提高手续费
了解比特币交易大小、sat/vB、内存池需求、手续费估算、RBF 与 CPFP 如何影响链上转账成本和确认的可能性。
本指南内容手续费是对比特币区块空间的支付
简短摘要
比特币交易手续费通常根据交易的虚拟大小和费率计算:以聪计的手续费 = 以 vB 计的虚拟大小 × 每个虚拟字节的聪数(sat/vB)。发送的 BTC 数量本身并不是手续费的计价依据。手续费估算反映的是不断变化的网络状况,无法承诺确认时间。
手续费是对比特币区块空间的支付
比特币交易会花费一个或多个尚未花费的交易输出(UTXO),并创建新的输出。输入总价值与输出总价值之间的差额就是交易手续费。将该交易纳入区块的矿工会收到手续费。协议不会从发送金额中扣除一定比例,这笔费用也不同于钱包服务商收取的服务费。
交易会竞争有限的区块空间。构建区块的矿工可以考虑各笔交易提供的手续费,以及交易之间的依赖关系。在其他条件相近时,较高费率可能让交易更有吸引力,但不会为它预留下一个区块中的固定位置。最终结果取决于手续费市场、交易依赖关系、矿工的选择,以及交易是否传达到相关节点。
本文讨论使用比特币网络进行的链上比特币交易。交易所提现可能另收交易所自己的费用,而闪电网络支付采用不同的交易路径和费用结构。钱包可能在同一屏幕上合并多项成本,因此要确认显示的数字是网络手续费、服务费,还是两者都有。Bitcoin.org 的手续费指南介绍了交易大小、sat/vB 与区块空间需求之间的关系。
总手续费与费率回答的是不同问题
总手续费是该笔交易支付的聪数。手续费率表示每个虚拟字节支付多少聪,写作 sat/vB。用总手续费除以交易的虚拟大小即可得到费率;用虚拟大小乘以所选费率,则可估算总手续费。钱包通常允许用户选择或查看费率,因为大小不同的交易即使采用相同费率,总手续费也可能不同。
假设有一笔虚拟大小为 140 vB、费率为 25 sat/vB 的示例交易。手续费为 140 × 25 = 3,500 聪。1 BTC 等于 100,000,000 聪,因此 3,500 sats 等于 0.000035 BTC。如果同样大小的交易改用 40 sat/vB,手续费就是 5,600 sats,即 0.000056 BTC。这些数字只用于展示计算方法,并非当前手续费估算或建议。
费率不是相对于付款金额的百分比。如果两笔交易的虚拟大小和费率相同,即使发送的 BTC 数量不同,手续费也可能相同。如果一笔小额支付需要更多输入数据,或者使用更高费率,它的成本可能高于金额更大的支付。找零输出也会占用空间:当输入总额高于付款额时,交易可能创建一个输出,把差额退还给发送者。
虚拟大小反映交易占用的区块空间
比特币钱包通常使用虚拟大小(vsize)计算手续费,而不是把序列化后的每个字节都视为相同。SegWit 交易数据有相应的权重。按 BIP 141 的公式,weight = 3 × base size + total size,其中 total size 包含 witness 数据。随后 vsize = weight ÷ 4,并向上取整到下一个整数 vB。这个公式考虑了 witness 数据适用的不同权重,并不等同于原始文件大小。
输入和输出增加的数据量不同。输入必须引用之前的输出,并提供满足其花费条件的数据。具体大小取决于输出类型和解锁数据,其中包括签名。输出则指定金额和锁定脚本。因此,即使总发送金额相同,包含多个小额输入的交易也可能比只有一个输入的交易更大。
当钱包合并许多小额收款输出来支付款项时,输入数量尤其重要。交易必须花费每个选中的输出,而每个输入都会增加数据。钱包也可能创建找零输出,进一步增加字节数。不同地址和脚本类型的大小可能不同,签名长度也会变化。因此,“典型交易”的显示大小只是示例,并不是每笔比特币支付的固定大小。
选择不同的币、添加收款人、更换找零地址类型或修改费率,都可能让钱包的估算发生变化。所以只检查付款金额并不足够。交易构成决定 vsize,费率决定每个 vB 提供多少聪。BIP 141定义了用于处理 witness 数据的虚拟大小计算方式。
内存池记录未确认交易,但全网并没有一个统一队列
广播之后,交易可能保存在已收到并接受它的节点的内存池(mempool)中。内存池是各节点本地保存的未确认交易集合,并不是全网同步共享的单一队列。不同节点看到交易的顺序可能不同,采用的转发政策和容量限制也可能不同;某些节点甚至可能完全没有收到特定交易。
矿工会根据共识规则和自己的筛选政策,从已知交易中选择候选区块的内容。花费其他未确认交易所创建输出的交易存在依赖关系。在这种情况下,矿工可能会把父交易与一个或多个后代交易放在一起评估,而不是将每笔交易都视为带有独立费率的单独条目。因此,第三方网站显示的简单“排名”可能不完整,也可能只是暂时的。
当更多用户争夺区块空间时,可能较早被纳入区块的费率会升高。需求缓和时,低费率交易可能重新变得更有竞争力。竞争程度,以及钱包或节点已知的交易集合,都可能迅速变化。一笔交易出现在某个浏览器或钱包的内存池视图中,并不能证明所有矿工或节点看到的状态都一样。
没有显示为已确认的交易仍是未确认状态;这个标签本身不表示交易丢失或无效。根据节点政策和不断变化的内存池状况,一笔未确认交易可能不再出现在某个节点的内存池中,之后又被重新广播或接受。如果钱包仍将其标记为待处理,不要假定其输入已经可以用于另一笔支付。再次尝试花费之前,请查看交易状态和钱包的官方说明。

手续费估算是目标,不是确认保证
钱包可能显示经济、普通、优先等选项,或给出目标区块数。这些都是根据已观察到的状况估计一个可能具有竞争力的费率。Bitcoin Core 的手续费估算文档说明:当估算器拥有足够历史数据时,会给出一个大致费率,目标是在指定区块数内开始确认。如果近期数据不足,可能无法提供估算。其他钱包和服务可能采用不同的数据、模型、刷新间隔和目标定义。
“下一个区块”目标并不代表交易一定会进入下一个区块。在交易传播期间,估算所依据的条件可能已经变化,新的高费率交易也可能参与竞争。交易之间的依赖关系同样会影响区块筛选。目标区块数只是估算的一个输入,并不是与矿工签订的协议。
请查看手续费报价的更新时间,并确认钱包显示的是费率还是只有总额。如果交易并不紧急,可以有意选择较低费率等待,但确认时间仍然不确定。如果交易对时间敏感,请将钱包的估算与当前手续费信息对照,并了解状况变化时钱包会采取什么措施。“以防万一”提高费率可能会增加成本,却不能保证进入某个特定区块。
估算器给出的费率也不能决定每个节点愿意转发交易的最低费率。转发政策、内存池限制、钱包设置和确认时间估算彼此相关,但回答的是不同问题。Bitcoin Core 的内存池设计文档说明交易依赖关系如何影响筛选和替换政策。不要把某个软件版本或单个节点的政策当成全网永久不变的规则。
RBF 可以让钱包用高费率版本替换待处理交易
按费用替换(Replace-by-fee,RBF)是在钱包及相关节点政策允许时,用一笔支付更高手续费、与未确认交易冲突的新交易来替换原交易。替换交易至少会花费一个相同的输入,因此两个冲突版本不能同时作为对该输入的有效花费得到确认。钱包可能提供“提高手续费”功能,但该选项是否可用、有什么要求以及新手续费是多少,都取决于钱包和交易结构。
不要再照搬“交易必须以特定方式声明支持 RBF 才能替换”的旧规则。Bitcoin Core 当前的政策文档说明,自 28.0 版本起,full RBF 是默认政策;在该政策下,替换交易不再需要信号。其他节点、钱包、服务或旧版本软件的行为可能不同。钱包中的按钮不可用,并不意味着所有节点都采用相同政策;这也可能是钱包自身的限制或交易结构造成的。
替换通常不只是“多付一个聪”。根据 Bitcoin Core 当前政策,替换交易的绝对手续费至少要达到原交易手续费的合计,还要覆盖替换交易额外占用的中继带宽成本,并改善 mempool 的费率图。有关联的交易可能让计算更复杂,不能只挑一个更高的数字。当前替换政策详细说明了这些条件。
RBF 不是撤销按钮,也不能逆转已确认的交易。它是在互相竞争的未确认花费中进行替换。若收款方把未确认付款视为最终到账,就可能面临被替换的风险;未确认交易并不等同于已确认付款。如果你正在收款,请遵循接收服务的确认政策,不要假定最先看到的版本最终会被确认。
CPFP 可能提高矿工同时打包父子交易的动力
子为父付费(Child Pays for Parent,CPFP)会创建一笔新的子交易,花费尚未确认的父交易输出。子交易可以提供足够高的费率,让矿工有动力把两笔交易一起纳入区块。需要考虑的是两笔交易的总手续费和总虚拟大小;子交易不会消除父交易的手续费,也不会让两笔交易免费合并。
钱包需要控制一个适合使用的未确认输出,并支持构建子交易。父子关系、转发和交易包政策,以及矿工的筛选都会产生影响。合计手续费可能高于你为单笔交易选择的金额,而且仍无法保证纳入区块。如果你不了解子交易会花费哪个输出,以及钱包如何处理找零,就不要手动创建子交易。
RBF 和 CPFP 处理的是相关但不同的情况。RBF 创建一个与待处理交易冲突的新版本。CPFP 添加一笔依赖交易,可能提高矿工打包父子交易包的动力。钱包可能支持其中一种、两种都支持,也可能都不支持。Bitcoin Core 的内存池设计和具体版本的政策决定节点接受什么,因此这些是交易机制,不是确认时间承诺。
交易所提现费可能不同于比特币网络手续费
交易所可以按照自己的费率表设定提现费用。它可能是固定金额、定期调整,也可能反映交易所批量处理客户提现的方式。因此,交易所收取的金额不一定等于单笔链上交易的费率。交易所可能把多笔提现合并到一笔交易中,而自托管钱包通常会针对你选定的输出构建交易。
提现之前,请查看页面是否列出了提现费、实际到账金额和目标网络。不要据此推断交易所费用就是实时 sat/vB 费率。即使平台将某项费用标为“网络手续费”,它也可能是平台计算的金额,而不是针对你这笔具体交易直接估算的结果。请核对平台公布的费率表和预览详情。
反过来,钱包也可能只显示网络手续费,不含任何服务商费用。被纳入区块的比特币交易支付链上手续费;钱包界面不会按转账金额的百分比收取它。比较交易所提现和自托管钱包链上转账时,请一起比较收款方实际收到的金额、所选网络和分项费用。发送前可使用加密货币转账检查清单检查网络和地址。以太坊采用另一种 gas 费用计算方式,详见以太坊 Gas 费用指南。
签名前检查交易详情
确认比特币付款前,请检查网络、收款地址、金额、总手续费,以及钱包显示时的费率。确认这是链上比特币交易,而不是另一种支付路径。选择收款方和输入后,请查看费用预览,因为交易构成发生变化时,即使费率不变,虚拟大小和总手续费也可能变化。
如果交易仍在等待,请先确认钱包是否支持 RBF 或 CPFP,以及适用条件,再决定如何操作。没有弄清原交易是否仍可能确认之前,不要把同一笔付款作为一笔独立的新交易重新发送。保存交易 ID,并在钱包或可信的区块浏览器中查看状态。交易从某个服务消失,并不能单独证明它已确认、已取消或可以安全替换。
请根据紧急程度和可等待时间选择费率,同时记住任何报价都不会承诺进入某个区块。如果手续费看起来异常高,请检查输入数量和输出结构;转账金额本身无法解释交易大小。如果钱包只显示总额,请打开详情页或官方文档,确认其中包含哪些费用。本文中的数字都是假设示例,不是实时报价。
常见问题
Q1比特币手续费是我发送金额的百分比吗?
不是。网络手续费通常根据交易的虚拟大小和费率计算。如果 vsize 和费率不变,即使付款金额不同,手续费也可能相同。
Q2交易尚未确认,是否表示我的比特币丢失了?
不一定。交易可能仍在等待,而且不同节点的内存池状态可能变化。请检查交易 ID 和钱包状态;不要假定待处理交易已经取消或可以安全重发。
Q3提高 sat/vB 就能保证进入下一个区块吗?
不能。在条件相近时,较高费率可能让交易更有竞争力,但手续费市场、交易依赖关系、转发和矿工筛选都会变化。估算无法承诺进入某个区块。
资料来源与延伸阅读
报告问题
我们会准备一封包含本文链接的邮件。发送后,Mark 才会收到你的反馈
快速检查
读完指南后,用 3 道题检查一下
问题 01
一笔假设交易的大小为 140 vB,费率为 25 sat/vB。总手续费是多少?
选择答案即可查看解释