ETH 地址校验工具回答以太坊地址的一个问题: 字母的大小写是否符合 EIP-55 规定的形式? 粘贴一个地址, 按下 验证, 工具用 keccak256 对地址做哈希, 推出标准的大小写混合形式, 再和你输入的版本逐字母对比. 全部在浏览器里完成: keccak256 函数打包在页面里, 不上传, 地址不会离开你的机器.
粘贴地址并按下验证
这里没有实时检查: 输入只在按下 验证 按钮时被读取. 在空输入上按, 结果就是红色的 地址格式无效 状态, 不崩溃, 也没有特殊提示. 当输入通过格式门后, 工具把你的字符串与校验和形式逐字母对比, 结果要么是 校验和有效, 两者完全一致时; 要么是 格式有效但校验和不匹配, 字母都对但大小写不对时.
格式门: 0x 加正好 40 位十六进制
这道门是一条正则表达式, 三个要求. 地址必须以小写的 0x 前缀开头: 大写的 X 会被拒绝, 哪怕后面的内容完全没问题. 之后必须正好跟 40 个十六进制字符, 整个字符串因此是 42 个字符; 少一位或多一位都不行. 最后, 检查前会去掉首尾空格, 所以复制时带进来的首尾填充不会导致失败, 而字符串内部任何位置的空格都不是十六进制字符, 会失败.
EIP-55 如何决定每个字母的大小写
格式有效后, 工具计算标准形式. 去掉 0x 前缀, 把 40 位十六进制字符变成小写, 送入 keccak256, 得到一个 64 字符的十六进制摘要. 然后逐位走地址: 对 40 个位置中的每一个, 看摘要对应位置上的字符, 如果那个摘要数字的值大于等于 8, 也就是 8, 9, 或字母 a 到 f, 该位置的地址字母变成大写; 否则保持小写. 大约一半的字母变成大写, 具体哪些完全由哈希决定.
三种结果状态各是什么意思
绿色的 校验和有效 意味着你的字符串与标准的大小写混合形式完全一致, 这正是 EIP-55 设计要产生的形式. 警告状态 格式有效但校验和不匹配 意味着 40 位十六进制都对, 但至少一个字母的大小写不对; 地址仍然指向同一个账户, 只是没通过拼写检查. 全小写的地址是不匹配状态的典型例子: 格式有效, 校验和永远不匹配. 小写 0x 加 40 位全大写十六进制也一样: 格式门通过, 但标准形式的前缀里永远有小写的 x, 两者不可能相等. 而大写字母 X 前缀的字符串连比较都到不了, 因为光前缀规则就已经让它失败了.
你可以拿走的三份副本
格式有效时出现三个结果卡片, 每个都有自己的复制按钮. 第一个显示全小写的整个字符串. 第二个显示全大写, 而且因为转换作用于整个字符串, 前缀也变成 0X, 这种形式不该粘进钱包. 第三个显示 EIP-55 校验和形式, 这才是值得复制的: 它的大小写自带有效性证明.
大小写为什么重要
在链上, 大小写没有含义: 小写, 大写, 混合写都是同一个账户, 因为以太坊地址是 20 字节, 字母大小写不是这些字节的一部分. 校验和是为交易的人类一侧而存在的. 发到打错字的地址是不可恢复的, 而 EIP-55 把大约一半的字母变成大小写敏感的校验位, 所以一位输错或颠倒的字符通常产生一个校验和不匹配的字符串, 钱包和交易所表单可以在钱动之前拒掉它.
这里没有什么, 以及下一步去哪
工具刻意得很窄: 一个输入, 一个按钮, 不存历史, 也没有交换控件, 因为没什么可换的. 如果你想看驱动大小写决策的那个哈希, Keccak-256 哈希生成器 对任何输入都计算同样的 keccak256 摘要. 如果你处理其他哈希家族, 哈希生成器 覆盖它们; 如果你的以太坊工作主要是编码函数调用和数据而不是地址, ABI编码解码器 负责那一边, 而 ABI 编码教程 从编码方向走一遍同样的 keccak256 管线.