DEV Community

drake
drake

Posted on

EVM 小写地址转换为标准地址:(大小写混合)

from eth_utils import keccak, to_checksum_address def explain_checksum_address(address): """ 展示 EIP-55 校验和地址的生成过程 """ # 移除 0x 前缀,转换为小写  address_lower = address.lower().replace('0x', '') print(f"1. 原始地址(小写): {address_lower}\n") # 对小写地址进行 Keccak-256 哈希  hash_bytes = keccak(text=address_lower) hash_hex = hash_bytes.hex() print(f"2. 地址的Keccak-256哈希: {hash_hex}\n") # 根据哈希值决定每个字符的大小写  checksum_address = '0x' print("3. 大小写转换规则:") for i, char in enumerate(address_lower): if char in '0123456789': # 数字保持不变  checksum_address += char print(f" 位置{i}: '{char}' -> '{char}' (数字)") else: # 字母:哈希对应位置的值 >= 8 则大写,否则小写  hash_digit = int(hash_hex[i], 16) if hash_digit >= 8: checksum_address += char.upper() print(f" 位置{i}: '{char}' -> '{char.upper()}' (哈希值{hash_digit} >= 8)") else: checksum_address += char print(f" 位置{i}: '{char}' -> '{char}' (哈希值{hash_digit} < 8)") print(f"\n4. 最终校验和地址: {checksum_address}") return checksum_address # 示例 address = "0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed" result = explain_checksum_address(address) 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)