Graffiti 字段:验证者在以太坊区块上刻的 32 字节印记 图 1
Graffiti 字段:验证者在以太坊区块上刻的 32 字节印记 · 图 1

打开任何一个以太坊区块浏览器,点进最新区块的详情,总能看到一格几乎没人认真读的内容:graffiti。多数时候它是空的,偶尔是一段文字、一串表情、一个客户端版本号。这个字段在协议里没有任何功能,却可能是整条链上最有“人味”的地方。本文讲清楚:它在哪、被什么约束、名字从哪来、实际被用来做什么。

协议里的位置:Body 里的一格 Bytes32

在信标链规范(共识规格仓库的 phase0 定义)里,graffiti 是区块体 BeaconBlockBody 的一个 Bytes32 字段,随区块提案一起提交,和 RANDAO 揭示、存款、罚没证据等并列。协议对它的处理只有一件事:检查长度正好 32 字节,内容本身完全不验证、不解释、不进状态计算。两个验证者对同一槽位提出内容不同 graffiti 的区块,在分叉选择看来没有任何区别。换句话说,这是协议里唯一一块“出块者说了算”的自留地。这个开关在共识层客户端的启动参数里(各家用 graffiti 类参数名,以当期文档为准),填进去的字符串会被补零或截断到 32 字节。

Graffiti 字段:验证者在以太坊区块上刻的 32 字节印记 图 2
Graffiti 字段:验证者在以太坊区块上刻的 32 字节印记 · 图 2

名字的来历:矿井里的刻痕

graffiti 一词借自意大利语 graffito——矿工在矿井石壁上刻下的记号,证明自己到过这处矿脉。早期以太坊开发者借这个词时显然带着挖矿时代的记忆:PoW 时代比特币的 coinbase 字段脚本里,矿工们也早就刻过矿池标语、段子和新闻标题(创世块里中本聪刻的那行泰晤士报头版就是最著名的例子)。从 coinbase 脚本到信标区块 graffiti,功能一字未改:出块者向历史留名的地方。以太坊转 PoS 后,这格字段等于把矿工的刻刀原样交给了验证者。

实践中大家都在刻什么

翻主流区块浏览器的历史区块,能看到的用法大致五类。一是身份广告:矿池与大型质押服务商刻自家名字或标语,方便统计自家出块份额。二是客户端版本指纹:不少运维把客户端名与版本号写进去,排查网络异质性时特别有用——重组事故复盘里,graffiti 常常是判断“哪个客户端在发坏块”的第一手证据。三是测试链上的标记:测试网验证者常用它给区块编号、标注实验节点。四是行为艺术:表情、诗歌、时事评论。五是个人的存在感:有人刻家人名字,有人刻自己的域名。32 字节的容量意味着大约八个汉字或二十来个 ASCII 字符,表情感情的话一两个 emoji 就把格子占满了——UTF-8 里一个常见表情占 4 字节。

刻之前要过的三条边界

第一,它是公开、永久、可检索的:链上一旦落块,内容随全节点存档到永远,任何区块浏览器都能按内容反查你的出块记录——机构运维把它当日志标签用,也就把自己暴露在同样的检索里。第二,别写承诺性内容:把“某年化收益多少”“某项目必涨”刻进区块,等于给营销话术盖一个不可篡改的戳,监管与纠纷视角都更难看。第三,它是弱信号不是身份:任何人可以刻任何字符串,它证明不了出块者是谁——验证者密钥对应的提款与签名才是身份证据,graffiti 只是恰好由同一人填的便签。

快速问答

问:graffiti 影响区块有效性吗? 答:只要长度是 32 字节就完全不影响;它是协议里少数“内容零验证”的字段。

问:为什么很多区块里它是 0x00 一串? 答:客户端默认填空(零值补齐),没配置就是零——这也是统计“多少验证者懒得改默认值”的依据。

问:比特币上有对应物吗? 答:功能对应的是 coinbase 交易脚本里的自由字节,容量与规则各不相同(受区块体积与标准脚本规则约束),精神同源。

风险提示

在区块公开字段中写入个人信息或营销内容后无法删除、无法收回,且可能被用于画像与追责。运维配置前建议明确机构对公开痕迹的策略。本文不构成投资或质押收益相关建议。