VEP 16: 账户地址规范

账户地址在区块链中使用一个 21 字节的数字表示,其中前 20 字节为地址,最后 1 字节为账户类型。

前 20 字节的生成规则为:

  • 对于用户账户,对用户账户的公钥计算一个长度为 20 字节的哈希,作为用户账户地址的前 20 个字节。
  • 对于合约账户,用合约创建账户的地址、创建合约请求交易的高度、创建合约请求交易的前一个账户块的哈希计算一个长度为 20 字节的哈希,作为合约账户地址的前 20 个字节。

最后 1 字节值为 0 表示用户账户,值为 1 表示合约账户。

在展示时,使用长度为 55 的字符串表示。

数字转换为字符串过程如下:

  • 对于用户账户,字符串为: vite_ + 前 20 字节的十六进制字符串 + 校验码的十六进制字符串。
  • 对于合约账户,字符串为: vite_ + 前 20 字节的十六进制字符串 + 校验码按位取反后的十六进制字符串。

字符串转换为数字的过程如下:

取字符串的第 6 ~ 第 45 位十六进制字符串,作为前 20 字节。对前 20 字节取校验码,如果校验码的十六进制字符串和原字符串的第 46 ~ 第 55 位一致,则为用户账户,第 21 位数字为 0;如果校验码取反后的十六进制字符串和原字符串的第 46 ~ 第 55 位一致,则为合约账户,第 21 位数字为 1。

其中校验码计算方式为取前 20 字节计算一个长度为 5 字节的哈希。