🧰 UtlKit

ETH 地址校验怎么用: 0x 必须小写, 正好 40 位十六进制, 首尾空格先被去掉, EIP-55 的大小写由 keccak256 一位一位决定, 大写格式连 0x 前缀都变成 0X

逐步走通 ETH 地址校验工具的确切行为: 小写 0x 要求, 40 位十六进制否则失败, 首尾空格被去掉, 摘要位大于等于 8 就大写的 keccak256 规则, 以及三种结果状态与三种可复制格式.

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 管线.

相关工具

常见问题

校验和会改变地址本身吗?

不会. 大小写不是 20 字节地址的一部分: 小写, 大写, 混合形式都指向同一个账户. 校验和只标记哪种精确拼写是标准形式, 所以大小写错误的地址是同一个目的地, 只是没通过拼写检查.

空输入或格式错误的输入会怎样?

报告红色的 地址格式无效 状态, 没有别的. 不崩溃, 也没有额外错误信息. 空输入, 缺 0x, 大写的 X, 十六进制位数不对, 以及任何非十六进制字符, 都产生同一个单一结果.

地址会被发送到某处做验证吗?

不会. keccak256 函数打包在页面里, 在浏览器中运行, 所以地址在本地被哈希, 从不离开你的机器. 访问之间也不存任何东西.

为什么全小写的地址会显示校验和不匹配?

因为校验和形式大约有一半的字母是大写, 由哈希决定. 全小写的字符串永远不可能等于那个形式, 所以有效的小写地址一直停留在不匹配状态, 直到你换成校验和版本.

三种输出里该复制哪一个?

EIP-55 校验和那个. 它是唯一带有效校验和的形式, 也是大多数钱包和交易所表单期望的形式. 小写副本方便对比, 而大写副本连 0x 前缀都变成 0X, 所以是那个该避免粘贴到任何地方的.

相关文章