Numiscue 一个独立的数字资产机制档案库 · 十四份档案 · 2026 年 8 月 核验

指南 08 · 方法 · 哪个数会动

代币销毁和回购之后,哪个供应数字真的变了

ethereum.org 中文文档「Gas 与费用」页的基础费用一节,正文加粗写着基础费用会被销毁、从流通中移除,下方是逐区块最多 12.5% 的调整示例表
指南 08。2026 年 10 月 · ethereum.org 中文文档「Gas 与费用」的基础费用一节:本文讲协议自己把手续费烧掉那一段,依据是这一页加粗的那句「这个基础费用会被『销毁』,将其从流通中移除」,以及它下面那张每区块最多增减 12.5% 的示例表。

销毁会不会减少供应量,要看它具体做了什么。调用销毁函数会扣减合约记录的总量;仅把币转入死地址,可能只改变数据网站认定的供应量;回购本身则只是买入,是否销毁要另查交易。合约总量、数据网站总量、最大供应量和流通供应量必须分别核对,几个数字也可能同时变化。

burn 函数改小的是哪个数

先进合约里看,因为说得上话的那个数字住在那儿,不住在公告里。OpenZeppelin 的 ERC-20 实现,文档里写着一对互为镜像的内部函数。_mint 负责造币并记到某个账户名下,文档的说法是「通过从 address(0) 转账给它」的方式完成;_burn 则按原文,「从 account 销毁 value 数量的代币,降低总供应量」,并发出一条收款方被设为零地址的转账事件。两者走的是同一个处理函数 _update——文档把它描述成转账,或者当发送方、收款方之一是零地址时,改为铸造或销毁。

持币人要碰到这套机制,得靠一个可选扩展 ERC20Burnable,库里把它一句话总结为「销毁自己的代币」。它对外开两个口:burn(value) 销毁调用者自己的币,burnFrom(account, value) 销毁别人的币,并从调用者的授权额度里扣掉相应数量。这一页上有一句值得停一下:这个扩展被设计成让销毁行为能在链外通过分析事件被识别出来。换句话说,这类销毁从一开始就是打算让陌生人去数的。

这样一次调用会从账户余额和 totalSupply() 中扣除被销毁的数量,但不保证总供应量以后只减不增。ERC20Capped 在铸造时检查总量是否超过上限;若合约仍允许铸造,销毁就可能重新腾出额度。核对时要同时看销毁交易、铸造权限和上限检查,不能只看 burn 事件。

转入死地址,合约总量未必减少

另一种做法是把币转到被认为无人能控制的地址,例如末尾为 dEaD 的地址。若合约把这当成普通转账,余额只是换了地址,totalSupply() 不会因这笔转账减少。地址长什么样,并不能单独证明无人掌握私钥,也不能证明合约如何处理转账。尤其别把转入死地址和转入全零地址混为一谈:OpenZeppelin 的标准 ERC-20 实现会拒绝向零地址直接转账。

数据网站可以作出不同判断。CoinMarketCap 的总供应量定义会扣除可验证的销毁;它的流通量词条也讨论了销毁和无法取回的代币。两种统计都不等于直接照抄 totalSupply()。死地址余额和丢失私钥的钱包余额可能都还留在合约账上,但前者有公开转账记录,后者是否真的丢失通常不能仅凭链上记录证明。是否扣除、何时扣除,要看数据方采用的证据。

没有销毁函数的代币也可能允许持有人向死地址转账,不必为此升级合约。但转出仍要满足原钱包的签名要求,多签钱包仍需多签授权,代币自身也可能设有转账限制。判断这些币能否取回,还要查管理员能否改余额、升级逻辑或迁移资产,不能只凭「死地址」这个名称认定永久冻结。

协议自己把手续费烧掉

以太坊把这件事挪到了更下面一层。EIP-1559 引入了逐区块的基础费,区块用量高于 gas 目标时它往上走,低于目标时往下走,而规范对后果的交代只有一句:每单位 gas 的基础费被销毁。中文文档写得更白——「当区块被创建时,这个基础费用会被『销毁』,将其从流通中移除」,同一页还给了调整幅度:基础费用每个区块最多增加或减少 12.5%,目标区块大小是 gas 上限的一半。没有合约调用,也没有哪个金库做决定,协议在处理区块的过程中就把这部分以太币拿掉了,叠在上面的优先费归出块的那一方。以太坊那份档案跟的是这笔销毁和共识层增发之间的关系。

写规范的人看出了这个设计指向哪里,并且把它写了出来。安全性考量那一章里有个小标题是「ETH 销毁排除了固定供应量」。在一个给定时期内,供应净变化等于同期增发减去销毁,期末总供应量还要加上期初总量。销毁多少取决于同期实际消耗的 gas 和基础费。这把平常的阅读方向反了过来。按计划的发行量可以往前画好几年——供应与发行那一篇把这个画法走了一遍;一笔由使用量驱动的销毁只能事后观察,一个清淡的季度就会改掉答案。

回购把币从市场上拿走,不是从账上抹掉

回购是花钱——协议收入、金库储备或者公司利润——在公开市场上买币。随之而来有两件事,经常被揉成一件。一是这些币现在躺在项目控制的钱包里,二是合约里的总供应量一个单位都没动。它们之后会被销毁、分给质押者、用来付团队工资,还是悄悄卖回去,是另一个决定,时间更晚,拍板的还是同一批人。

数据方对此不得不表态。CoinMarketCap 的供应量方法论提到,有相当一批有收入的项目在做公开回购,被回购的代币全都处于解锁状态,但行业共识仍然是把它们排除在流通供应量之外——用那一页的话说,解锁状态不能成为判断某样东西是否在流通的唯一依据。同一份文档还排出四种市值口径,它们之间的差别只在于乘法里用的是哪个供应数字:完全摊薄市值用最大供应量,已铸造市值用扣掉销毁后的总供应量,而榜单上那个用的是公开流通量。

所以一段话里描述的一个计划,可能装着两件持久度完全不同的事。买入把币从可成交的那部分里拿走,一个下午就能反过来做;如果后面真的跟了一笔销毁,那一步才是不可逆的。BNB 的季度计划和垫在它下面的逐区块手续费销毁,写在 BNB 那份档案里;这里要说的是更窄的一点:这两半对不同的人负责。

稳定币供应下降,是因为钱被取回去了

法币储备型稳定币赎回时,代币供应量和对应储备会随结算减少。Circle Mint 面向机构客户,支持 USDC、EURC 和 cirBTC 的铸造与赎回;其中 USDC 和 EURC 分别按一比一赎回美元和欧元。这里要区分链上代币处理与银行付款:它们是赎回流程的不同环节,不能把链上销毁视为法币已到账的证明。

把它当成一次「变稀缺」来读就荒唐了:在足额储备并按面值完成赎回的前提下,储备资产与对应代币负债一起减少,剩余每枚代币的储备比例不会因此自动提高。供应变化可以反映净发行和赎回,却不能单独证明储备质量或未来需求——所以供应结构表把稳定币的供应减少归到赎回项下,而不是和上面几行的季度销毁放在一起;也所以稳定币靠什么背书那一篇把储备当成该盯的数字。

把一条销毁公告核到底

拿一条具体的公告来,依次核对下面五个问题。

币去了哪里?在前述 OpenZeppelin 实现中,销毁会留下收款方为零地址的 Transfer 事件,地址由 0x 后四十个十六进制的零组成。转入死地址则可能只是普通转账,不会扣减合约总量;数据网站仍可能据其规则调整统计。应把事件、交易执行逻辑和供应量变化一起看,事件本身不能替代代码核验。

合约现在怎么说?支持合约读取的区块浏览器可查询 totalSupply();原始整数要按该代币的 decimals() 换成代币单位。比较销毁前后相应区块的数据,并核对项目与数据网站统计的时间和定义。数字不同可能来自统计方法、更新时间或同期铸造,不能直接归咎于无人维护。

百分比是对着什么算的?同一笔销毁可以拿流通供应量当分母,也可以拿总供应量或者最大供应量——碰上锁仓比例很高的代币,这三个分母之间差的是倍数,不是零头。于是同样一笔币,既是流通量里一块听上去挺可观的份额,又是最终上限里微不足道的一点,两种说法在同一时刻都在算术上成立。若公告没有说明分母,先把这一项查清,再判断百分比的含义。

被烧掉的币是从哪儿来的?用户缴的手续费、一笔从来没发到公众手里的未售出金库配额,还是用真金白银在市场上买来的——对还拿着这个币的人来说,这三件事的含义完全不同,而「销毁」两个字单摆在那里,一个都不指。

第五个问题是会不会再来一次。协议销毁按当前有效规则执行,但规则可能经网络升级改变;项目定期销毁则要查承诺、执行记录和停止条件。一次销毁只能证明那次交易发生了,不能保证以后继续,也不能保证价格上涨。

主要出处

这里引用的合约行为,2026 年 10 月读自 OpenZeppelin 5.x 版文档,而实际在跑的代币用着各式各样别的实现——浏览器上那份合约的权威性高于任何一个库的文档页,包括上面引的这一个。数据方的定义和方法论会在不发通知的情况下修订。本页通篇刻意没有出现任何一笔具体销毁的数量:那些数字动得比一个档案库核得过来的速度更快。