波场(Tron)的地址和以太坊虚拟机(EVM)兼容链的地址(如以太坊、BSC、Polygon等)在格式上有所不同,但可以通过一定的规则互相转换。以下是详细的转换方法: 1. 波场(Tron)地址 ↔ EVM 地址基础概念Tron 地址:以 T 开头(例如 TNP4...),基于 Base58Check 编码。 EVM 地址:以 0x 开头(例如 0x5A...),基于 16 进制编码。 底层原理:两者的地址本质上是同一公钥的哈希值,只是编码方式不同。
2. 转换方法(1) Tron 地址 → EVM 地址步骤: 去掉 T 前缀:得到 Base58Check 编码的字符串(例如 NP4...)。 Base58Check 解码:解码为字节数组(通常是 21 字节,含地址类型前缀 0x41)。 去掉前缀 0x41:保留后 20 字节(即 EVM 地址的原始字节)。 转换为 0x 开头:将这 20 字节转为 16 进制字符串,并添加 0x。
工具实现: (2) EVM 地址 → Tron 地址步骤: 去掉 0x 前缀:得到 40 字符的 16 进制字符串。 添加前缀 0x41:在开头补上 1 字节的 Tron 地址标识符(0x41)。 Base58Check 编码:将合并后的 21 字节进行 Base58Check 编码。 添加 T 前缀:最终生成 Tron 地址。
工具实现: JavaScript: javascript
const bs58 = require('bs58');function evmToTron(evmAddress) { // 去掉 0x,转为字节 const evmBytes = Buffer.from(evmAddress.substring(2), 'hex'); // 合并 0x41 前缀 const tronBytes = Buffer.concat([Buffer.from([0x41), evmBytes); // Base58Check 编码 return 'T' + bs58.encode(tronBytes);}console.log(evmToTron('0x5A...')); // 输出 T...
Python: python
import base58def evm_to_tron(evm_address): evm_bytes = bytes.fromhex(evm_address[2:) tron_bytes = b'\x41' + evm_bytes return 'T' + base58.b58encode_check(tron_bytes).decode('utf-8')
3. 注意事项 4. 常见场景
|