链的第一块图纸:EIP-7949与创世文件格式 图 1
链的第一块图纸:EIP-7949与创世文件格式 · 图 1

创世文件是干什么的

一条链从零启动时,协议里还没有任何区块和账户。创世文件就是那次”第一块”的说明书:链的基本参数(链 ID、各类升级触发条件)、初始区块的头字段(时间戳、难度或随机数、父区块哈希等),以及最关键的一张初始分配表——哪些地址在第一条区块里就带有多少余额、带什么代码和存储。公链的创世文件在诞生那天写定后基本不再变;但测试网、私有链、Rollup 内测链会频繁地生成新创世文件,这类场景正是 EIP-7949 服务的对象。

混乱从哪来

以太坊主网只有一份创世,问题不大。可过去十年里,无数条测试链沿用了 Geth 客户端那份 genesis.json 的结构,又在外面各加各的扩展字段;不同工具解析同一份文件时,对字段类型、十六进制写法、可选字段的默认值各有理解。想换客户端跑同一条测试网,有时得改文件;想把创世配置存进版本库、用脚本批量生成,则随时可能踩到解析差异。缺的不是功能,是一张大家都认的字段表。

EIP-7949 定了什么

EIP-7949 于 2025 年 5 月创建,由多位客户端与基础设施维护者署名,状态为草案。它做三件事:第一,规定创世文件必须是带固定顶层字段的 JSON 对象——config(链配置)、alloc(初始分配表)、nonce、timestamp、extraData、gasLimit、difficulty 或 baseFeePerGas、mixHash 等,逐个给出类型与示例;第二,明确数值一律用十六进制字符串表示,避免”到底是十进制还是十六进制”的歧义;第三,附带一份 JSON Schema,让工具可以直接做格式校验。它明确以 Geth 的事实格式为对齐基准,因为各家客户端早已事实上向它靠拢,标准化只是把既成事实写清楚。

谁会用到它

日常使用主网的钱包用户完全不会接触创世文件。真正的用户是三类人:搭本地测试链的开发者(一行命令生成合规文件而不是抄旧项目);起新测试网的社区(多客户端兼容性从一开始就有据可查);以及做基础设施工具的团队(校验、转换、比较创世配置的工具可以只对着一个 Schema 写)。对想验证”两条链是否同源”的人,创世哈希仍是最可靠的指纹,而标准化的文件结构让哈希的生成过程更可复现。

一次创世生成会经过哪些手

现代启动一条链的过程大致是:脚本或初始化工具生成 alloc 名单(测试币分发、系统合约预置),拼出配置与头字段,写入 genesis.json,再交给多个客户端各自生成创世块。多客户端测试网最容易出问题的环节恰恰是”同一份文件、各自解释”:同一个十六进制前缀的缺省规则、同一个可选字段的隐含默认值,都可能让两条节点跑出不同的创世哈希,然后整网卡在握手阶段互不相认。EIP-7949 想消灭的就是这一整类”图纸歧义”导致的联调时间。

一条理解线

可以把创世文件想成”建链图纸”:config 是城市规划条例,决定未来每次升级在哪个高度生效;alloc 是第一批住户名单;头字段则是地基本身。EIP-7949 没有改变建链的任何工艺,它只是把图纸的制图标准统一了——正如 EIP-7840 把 blob 参数收进配置表、EIP-7910 统一 RPC 配置命名一样,属于同一类”不碰协议、只碰工程接口”的标准化工作。

快速问答

问:主网的创世文件能改吗? 答:不能。创世内容参与创世哈希,改一个字段就是另一条链。

问:我的测试网文件是旧格式,会被拒载吗? 答:草案阶段不构成强制;多数客户端仍以宽松兼容为先,新工具会更严格照 Schema 校验。

风险提示

本文为技术科普,不构成投资建议。搭建或加入任何网络前请确认其合法性与安全性,链上操作存在资产损失风险。