符文知识科普:出块时间、费率选择及其相关原理

转载
178 天前
2712
Runes中文社区

文章转载来源: Runes中文社区

作者:比特里里

X/推:@lilyanna_btc

常见问题回答解释

1、为什么有的块打包四千多笔交易,而有的块只打包几百笔?

每个区块打包交易的上限是由 size 决定的,不是交易的数量决定的,简单说就是,交易小,一个区块能打包的笔数就多,交易太大,一个区块能打包的笔数就少了。如果区块里大多数都是转账或者普通的 mint 交易,大概能打包四千多笔。

但如果遇到带上千个 input 的钱包归集交易、图片文件非常大的铭文铭刻等 size 非常大的交易,那么可能几百笔交易就会填满这个块。

2、我打铭文/符文的时候明明选择了推荐费率里最高的那档,为什么还是上不了链?

推荐费率通常是按照当时内存池里交易的费率情况给出的,但内存池是动态的,没有人能完美预测最终区块打包时的费率。交易按照费率从高到低排,在区块大小限制内打包交易,费率足够高的可以在最新的区块上链,费率不够高的则被排到后面的块。所谓的最高档只是当时的「最高」,如果区块迟迟没有被打包,持续有新的交易被提交进内存池,费率比你高的交易会排在你前面,尤其是卡块或者有热门项目在进行时,你的交易就很有很大风险被挤出当前块。而连续爆块(例如 10 分钟出 3 个块)时费率会降下来,也是因为出块间隔太短,没有太多的新交易「插队」,连续打包交易会让内存池里等待的交易费率整体降低。

3、为什么钱包里明明有余额,但是转不走?为什么费率明明不高,我支付的时候网络费却异常的高?

网络费(network fee,也叫矿工费)= 费率(fee rate)* 交易 size(virtual size)而 size 和 input 数量成正相关,如果你的支付交易中,用到了很多个 input,网络费就会很高。钱包一般优先使用你的大额 UTXO,大额的不够支付了,才会拼稀碎的小 UTXO 来用。那这种情况怎么解决?稀碎的 UTXO 可以不管它,再往里转一些新的 BTC 用;或者等链上费率特别特别低的时候,可以适当进行合并。也是由于同样的原理,大部分钱包里最后一点余额是花不掉的,都是 600 聪、1200 聪这种小 UTXO,钱包算了算,把它们付出去花的网络费比它们自己都高,你又没有足够的其他 UTXO 来进行补贴,这个交易就没法提交啦。

4、卡块半个小时,是不是矿工的阴谋?卡块以后就连续爆块,是不是都是矿工前面攒好的?

矿工阴谋不了,如果部分矿工算出哈希恶意卡着不广播,其他矿工算出来并提交,他就亏大发了。直接提交拿至少 3.125 BTC的出块奖励,卡着为了拉那点费率,没必要。至于爆块,在上一个区块哈希广播前,矿工是无法提前计算下个区块的,攒不了,真的攒不了。整体的出块时间符合泊松分布,是真随机的。具体可以去看 mempool space 开发大哥的推特。

推特链接:

https://x.com/mononautical/status/1789485036812501319

5、为什么会出空块?

矿池会先给矿工发一个空模板,让他们拿空模板先挖着。再给发一个正经的带着待打包交易的模板。但是因为后面这个模板数据比较大,所以会多花一点点时间。如果正好有矿工打到这个时间差,不小心在收到正经模板之前挖出来了,他就带着空模板提交了下图中红色的是空块,横坐标是出块时间间隔,纵坐标是出现频次。可以看到大多数空块都是在出块时间非常短的时候出现的。

那么空块里是不是没有任何交易?不是的,有一个 0 号 coinbase 交易,就是矿工获得出块奖励的那一笔。不信你去找个空块看看~

6、前后都是将近 20 的费率,为什么这个块的最低费率是 1? 为什么这个区块的费率是 1,我的交易费率是 8,比它高,还没被打包?

大多数时候,都是费率高的交易优先被打包,但矿池有权利提交自己指定的交易,你看到的最低费率为 1 的区块,大概率是有这类交易存在。剩下的交易还是按照从高到低的费率来排,所以你的 8 费率的交易低于其他正常竞争的交易,没被打包是符合预期的。

基础原理

1、区块打包的原理

比特币挖矿的过程就是矿工咔咔计算来找到符合难度目标的哈希值的过程。谁先算出来第一个广播出去就能拿到这个区块的出块奖励和交易费用。而区块的打包时间(请近似理解为每个块花多久能算出来那个哈希值)宏观上由网络算力(Hashrate)和难度(Difficulty)决定,但存在较大随机性和波动,因此会出现「爆块」和「卡块」现象。网络算力:可以理解为所有矿工合集的计算能力,总算力越高,找到有效区块哈希值的速度越快(也就是出块时间越短的意思)。就是算的人越多,好用的脑子越多,有人算出来第一个正确答案的时间就越短,这个应该好懂。难度目标:这个难度目标是动态调整的,每 2016 个区块(约两周)调整一次挖矿难度,来保持平均出块时间在 10 分钟。就是每 2 周复盘一下,过去两周平均出块时间小于 10 分钟了,题出太简单了难不住这些矿工大哥了,就加点难度,让接下来两周的出块时间能稍微长点,回到 10 分钟的标准水平;如果两周出块平均时间大于 10 分钟,难度就稍微降降。(此处为了好理解讲得形象一点,实际上是算法自动调整的,不涉及任何人工干预)实际挖矿过程中,比特币价格、出块奖励(比如前段时间的减半)、电费成本波动等等外部因素,可能导致矿池调整策略(增减运行矿机等等),会间接影响到网络算力。但由于难度目标调整算法的存在,保证了比特币整体的出块时间均值在 10 分钟左右上下浮动,不会过于离谱。

2、关于打包交易的数量和顺序

①区块有大小限制,每个区块只能打包这么大空间的交易,满了就只能排到下个块,注意不是交易的数量,而是大小(可以近似理解为 size)

②续费都是给矿工/矿池的,所以矿工的打包策略会尽可能优先打包手续费高的交易。

③部分矿池有加速交易和定制区块的服务(比如 MARA),矿池是可以提交自己指定的交易的,即使费率低于内存池里其他的交易。(所以矿工无法控制出块时间,但其实是可以控制交易上链顺序的。但这种行为不常见,毕竟大多时候还是打包费率高的交易更挣钱)