主页 > imtoken钱包官方苹果 > 为什么以太坊钱包地址大小写不一?
为什么以太坊钱包地址大小写不一?
imtoken钱包官方苹果 2023-03-12 05:28:32
不知道大家有没有注意到,无论是ImToken/Metamask还是交易所,钱包地址都是大小写混合的:
但是如果你在 etherscan 上查找交易信息比特币地址多少位数,所有地址都是小写的。两者有什么区别?其中隐藏着什么奥秘?
在以太坊上,钱包地址是您资产的唯一标识符。但是钱包地址是20个字节40个字符长,几乎没人记得,很容易出错。如果你想把一些以太币转给朋友,他给你发了他的钱包地址,但不小心把其中一个字符写错了怎么办?你的以太币最终可能会进入一个“以太坊黑洞”比特币地址多少位数,一个没有人拥有私钥并且永远无法再次检索的地址。 . .
比特币没有这个问题,因为“校验和”信息包含在比特币地址中。为了弥补这一不足,以太坊引入了EIP55,用于验证以太坊地址的有效性。具体流程如下:
对应的代码如下:
from ethereum import utils
def 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'+o
def test(addrstr):
assert(addrstr == checksum_encode(bytes.fromhex(addrstr[2:])))
test('0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed')
test('0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359')
test('0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB')
test('0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb')
注意:在上面的代码中,字符首先通过bytes.fromhex()传递。转换成十六进制数,再通过hex()转换回来,这样就得到了所有小写字母的地址。
据官网介绍,各种主流钱包都应用了该技术:(包括ImToken)
主要主流交易公司还增加了支持:
参考:
更多文章请关注“鑫鑫照明”专栏: