不知道大家有没有注意到,不管是ImToken/Metamask还是交易所,钱包地址都是大小写混杂的:
文章图片
但是如果你在etherscan上查交易信息,所有地址都是小写字母。这两者有什么区别呢?其中暗藏着什么玄机?
在以太坊上,钱包地址就是你资产的唯一标识。但是,钱包地址长度为20个字节,40个字符,基本没人记得住,而且很容易输错。假如你要转一些以太给一个朋友,他把他的钱包地址发给你,但是一不小心把其中一个字符写错了,会发生什么?你的以太可能会转入一个“以太坊黑洞”,也就是一个没人拥有私钥的地址,再也取不出来了。。。
比特币上不会有这个问题,因为比特币地址中包含有“校验和”信息。为了弥补这一缺陷,以太坊出台了EIP55,用于验证以太坊地址的有效性。具体过程是这样的:
- 首先把地址中的所有字母变成小写,然后计算地址的哈希值v
- 然后依次扫描地址中的每个字符,如果是数字则原样输出,如果是字母,则判断v中第4*i位的值,如果是1则输出大写字母,否则输出小写字母(i是该字母在地址中的位置)
- 最后验证原始地址和输出的地址是否完全一致,不一致则该地址可能是一个非法地址
from ethereum import utilsdef checksum_encode(addr): # Takes a 20-byte binary address as input
o = ''
v = utils.big_endian_to_int(utils.sha3(addr.hex()))
for i, c in enumerate(addr.hex()):
if c in '0123456789':
o += c
else:
o += c.upper() if (v & (2**(255 - 4*i))) else c.lower()
return '0x'+odef test(addrstr):
assert(addrstr == checksum_encode(bytes.fromhex(addrstr[2:])))test('0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed')
test('0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359')
test('0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB')
test('0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb')
注:上面代码中先通过bytes.fromhex()把字符转换为16进制数,然后再通过hex()转换回来,这样得到的就是全小写字母的地址。
据官网披露,各种主流钱包都已经应用了这项技术:(包括ImToken)
文章图片
各大主流交易所也已经增加了支持:
文章图片
参考:【以太坊钱包地址为什么是大小写混杂()】更多文章欢迎关注“鑫鑫点灯”专栏:https://blog.csdn.net/turkeycock
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md
或关注飞久微信公众号:
文章图片
推荐阅读
- 推动NFT走出监管困境,BSN推出支持NFT基础设施网络
- 腾讯|SaaS的收入模型有哪些(终于有人讲明白了)
- 就业方向上什么才是最重要的(--- 来自程序猿的迷茫。(C++?Java?or算法?))
- 区块链中加密货币的含义
- 波场万倍潜力币HYL23号21:09分 正式上线JustSwap
- 《瀚兰房地产开发区块链应用及案例分享》BSN培训精华回顾
- 对联盟链而言,跨链协议为什么重要()
- 区块链能够应用在哪些行业
- BSN区块链服务网络中密钥托管模式和公钥上传模式有啥区别()
- 币圈人物传|币圈大佬今何在 唯有一诺正当时