一个区块最多装多少笔交易?从字节地板到权重天花板的区间账 图 1
一个区块最多装多少笔交易?从字节地板到权重天花板的区间账 · 图 1

“一个比特币区块最多能装多少笔交易?“这个问题看似该有一个固定答案,实际上规则清单里根本没有”交易条数上限”这一项。条数天花板是由另外几条规则间接推出来的,而且不同算法能差出好几个数量级。把这笔账完整算一遍,比记住任何单一数字都有用。

三条真正起作用的约束

约束一是权重天花板。consensus/consensus.h 规定 MAX_BLOCK_WEIGHT 为四百万权重,这是区块体积的硬顶,交易再小也堆不过它。

约束二是每块预留。矿工要在区块里放 coinbase 交易、区块头序列化开销和交易条数的变长整数,源码为此设置了区块预留权重(默认两千),矿池可以调高但不能调低。思想实验里可以按最小值算。

约束三是每笔交易的地板。上一篇文章讲过:标准政策要求非见证部分不少于 65 字节;共识层对条数没有要求,但每笔交易至少有版本、输入计数、至少一个输入(前 36 字节的 outpoint 加序列号)、输出计数和锁定时字段——序列化下界比直觉大得多。

一个区块最多装多少笔交易?从字节地板到权重天花板的区间账 图 2
一个区块最多装多少笔交易?从字节地板到权重天花板的区间账 · 图 2

思想实验:把交易挤到极限

忽略所有政策层地板、只用共识规则,构造每笔交易尽量小:一个输入复用同一个前一输出引用、一个极小输出、字段全压到最短,理论单交易体积可以压到一两百字节量级。按非见证字节的权重折算,四百万权重减去预留后大约能装下几万笔这样的极端交易。这个数字的学术意义大于实际意义——真实世界里没有任何钱包生成这种交易,而且同祖先、同输入的极端重复会先撞上其他校验。

回到现实:2017 年之前没有见证机制,交易普遍是几百字节的裸签名,那时代单块经常装到接近一万笔。SegWit 之后见证字节打两五折,但真实交易因为多输入、找零和脚本复杂度平均更肥,现在拥堵时段每块常见的条数是几百笔到两千多笔,离几万笔的理论线差了两个数量级。

为什么实际条数总比理论小

原因不是规则而是市场。区块空间拍卖按费率排序,内存池里有几百万笔排队交易时,矿工会优先挑费率高、体积正常的,极端小交易要么根本没被构造出来,要么因为不标准进不了内存池。换句话说:条数上限在纸上,条数下限在钱包手里。区块装多少笔,最终取决于那段时间用户构造了什么样的交易。

换个问法更有意义

“最多装多少笔”之外,更能刻画区块容量的指标是权重使用率:区块头固定开销、coinbase 交易、每笔交易的锚定开销都是刚性成本,实际可拍卖给用户的权重比四百万略少。费率市场真正在分配的是这部分弹性权重,交易条数只是市场结果的副产品。拥堵期条数下降、单块权重逼近上限,说明空间被高价值交易占满;深夜块条数回升、费率归零,说明排队消失。同一根权重轴上,条数与费率的负相关比任何单块快照更能说明网络状态。

看真实数字用什么工具

自己的节点上跑 getblockstats,指定高度就能拿到该块的交易数、权重、体积和每笔交易的费率分布分位数;getchaintxstats 给滚动平均。想验证上面的思想实验,测试网节点上用 createrawtransaction 手工拼小交易、自己出块即可实测边界,不会污染主网。需要提醒的是,所有关于区块容量的讨论都应落在机制层面——容量如何变化取决于协议演进与费率市场,本文不对任何扩容方案的效果或价格影响做判断。