feeRecipient 字段:出块者收手续费的地址,藏在执行层区块头里 图 1
feeRecipient 字段:出块者收手续费的地址,藏在执行层区块头里 · 图 1

以太坊的区块不是一张大支票,而是两本账:共识层记账奖励和罚没,执行层记账手续费。后者的去向由执行层区块头里的一个字段决定——feeRecipient(早期版本和口语里也常叫 coinbase 或 etherbase,名字在不同客户端的历史文档里换了三轮)。字段本身平平无奇:一个 20 字节的地址。但它位于两条链的接缝上,出错时安静得可怕:区块完全有效,钱照收,只是收的人不是你。本文拆解这个字段的完整链路。

协议里的位置与历史名字

执行层区块头包含 feeRecipient 字段(以太坊执行层接口与共识规范里的正式名),协议规定:这一块内所有交易支付的优先费(tip)付给这个地址——机制上等价于向该地址即时转入一笔收入。这个字段不是新发明:在合并之前它就存在于工作量证明的区块头里,那时它叫 coinbase 地址,决定矿工的出块奖励与手续费归属,Geth 命令行里的历史参数名甚至用过 etherbase;PoS 转换后奖励结构搬家到共识层,但“手续费给谁”这格没有消失,只是继续留在执行层区块头里。验证者对应的共识层区块(含签名、投票与 graffiti 等)则是另一层包装。

feeRecipient 字段:出块者收手续费的地址,藏在执行层区块头里 图 2
feeRecipient 字段:出块者收手续费的地址,藏在执行层区块头里 · 图 2

两段链路:验证者声明,构建者填充

合并后的出块流程里,这个字段要经过两次经手。第一段是声明:验证者进程在自己的本地配置里设定 feeRecipient(各客户端有自己的参数名与默认值,主流客户端通常默认填验证者自己的执行层地址或提醒未设置),它随出块任务交给执行层客户端。第二段是填充:如果验证者用 mev-boost 之类的中间件把“造块”外包给 builder,那么真实写进区块头的是 builder 造块时填入的值——中继注册环节会把验证者声明的 feeRecipient 一并登记,builder 必须按登记值出块才拿得到投标资格,但“声明了却没有生效”的断层在这条链路上仍是真实存在的故障类别。区块上链后任何人用执行层接口读块头即可核对最终值。

收益结构:这格地址收什么钱

feeRecipient 收的是执行层现金流:每笔交易出价中超出基础费的小费部分。注意两类钱不从这里走:共识层的质押奖励、罚没与 inactivity leak 调整记录在信标状态里,走的是验证者自己的余额与提款凭证,和 feeRecipient 无关。换句话说:这个字段管“这一块的过路费”,不管“质押本金的收益”。对独立验证者它是自己钱包的一部分;对质押服务商,它常被集中到运营方地址——这也是“交易所代投的收益到底来自哪格”的可查证入口之一:看服务商是否公开其出块的 feeRecipient 与再分配条款。

翻车场景与自查

最常见的故障有三类。其一,忘设参数:客户端日志会警告 feeRecipient 未设置,区块照样出,小费进默认地址(可能是零地址或旧地址)。其二,迁移事故:换执行层客户端或重装系统后配置未迁移,新节点用默认值静默运行数月。其三,builder 错配:通过中间件出块时地址传错或被盗改,收益进了第三方地址——所有事故的共同特征是“链上一切正常”,只有查账能发现。自查方法固定:随机抽查自己出块的若干个区块,读执行层区块头的 feeRecipient 与预期地址逐字节比对;质押服务商则看其是否提供公开的每块收益归集说明。把 feeRecipient 当成一个独立的“手续费收款人”来管理(热地址、监控、可换),比和主钱包混用一个地址更稳。

快速问答

问:填错地址区块会作废吗? 答:不会。协议不校验 feeRecipient 与提案者身份的关系,填谁都合法,错的只是收益归属。

问:能用它做慈善或销毁吗? 答:可以——指向黑洞地址等于把这一块小费永久销毁,历史上确有验证者这么做过;也说明它只是地址字段,不代表任何意图声明。

问:和提款地址是一回事吗? 答:不是。提款凭证管共识层本金与奖励的去处,feeRecipient 管执行层手续费,两者可以完全不同且各自独立变更。

风险提示

手续费收款地址常为可动用的热地址,配置泄露会直接持续漏损收益;更换与迁移期间需双重核对链上实际值。本文描述的默认参数随客户端版本变化,以你所用客户端当期文档为准。本文不构成质押收益或投资承诺。