如果你曾经观察过以太坊(Ethereum)地址,一定会注意到它们那独特的、由42个字符组成的格式。0x742d35Cc6634C0532925a3b844Bc454e4438f44e,这些地址通常以 0x 开头,后面跟着一长串字母和数字,最引人注目的,往往是地址中间部分那个看似随机的数字

很多人会好奇:这个数字是账户的“余额”吗?是某种“编号”或“ID”吗?它背后隐藏着什么秘密?

这个数字既不是余额,也不是简单的编号,它的含义与以太坊地址的生成方式紧密相连,理解它,就能一窥区块链地址背后的密码学原理。

核心答案:它是地址的“校验和”

以太坊地址中间的数字(更准确地说是所有字符)是整个地址的“校验和”(Checksum),它的唯一目的,就是防止地址输入错误

听起来很简单,但这个校验和背后有一套精密的设计,为了彻底理解它,我们需要从以太坊地址的诞生说起。

地址的诞生:从私钥到公钥再到地址

一个以太坊地址并非凭空产生,它是一个“一长串”计算过程的最终结果,这个过程可以简化为以下三步:

  1. 生成私钥

    • 这一切始于一个私钥,私钥本质上是一个巨大的、完全随机的数字(通常通过随机数生成器产生),它就像你的银行卡密码,必须绝对保密,谁拥有了你的私钥,谁就拥有了你的资产。
    • 私钥的长度是256位(二进制)。
  2. 从私钥推导出公钥

    • 通过一种叫做椭圆曲线算法的数学运算,可以从你的私钥生成一个公钥
    • 公钥是一个同样巨大的数字,但它与私钥不同,可以公开分享,它就像你的银行卡账号,你可以告诉别人,让他们向你转账。
    • 这个过程是单向的:你可以用私钥轻松计算出公钥,但无法用公钥反推出私钥,这保证了安全性。
  3. 从公钥生成最终地址

    • 我们有了公钥,但以太坊网络使用的并不是公钥本身,而是基于公钥进一步计算出的地址
    • 对公钥进行 Keccak-256 哈希运算,哈希是一种将任意长度的数据转换成固定长度(在这里是256位)的、看似随机字符串的算法。
    • 取这个哈希值的后40位(160位,即20个字节)。
    • 在这40位字符前加上 0x 前缀,就构成了我们最终看到的42个字符的以太坊地址。

至此,我们得到了地址的基础版本。 但问题来了:这个地址是一长串字母和数字的组合,如果用户在转账时手滑输错一个字符,会发生什么?钱很可能会发送到一个不存在的地址,然后永远消失。

校验和的诞生:防止“笔误”

为了解决这个问题,以太坊借鉴了比特币的思想,并进行了改进,引入了校验和地址

这个校验和巧妙地利用了地址本身的生成过程,具体步骤如下:

  1. 获取原始地址:就是我们刚刚通过 Keccak-256 哈希计算出的、以 0x 开头的40个字符的字符串。0x742d35cc6634c0532925a3b844bc454e4438f44e

  2. 对地址进行哈希:将这个原始地址(去掉 0x)再进行一次 Keccak-256随机配图