admin 发表于 2025-8-13 19:16:52

波场跟evm地址如何互相转换

波场跟evm地址如何互相转换

admin 发表于 2025-8-13 19:18:44

波场(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。
工具实现:
[*]JavaScript(使用 tronweb 或 bs58 库):javascript





const bs58 = require('bs58');function tronToEvm(tronAddress) {    // Base58Check 解码    const bytes = bs58.decode(tronAddress.substring(1));    // 去掉第一个字节(0x41),取后20字节    const evmBytes = bytes.slice(1, 21);    // 转为 0x 开头的小写地址    return '0x' + Buffer.from(evmBytes).toString('hex');}console.log(tronToEvm('TNP4...')); // 输出 0x...

[*]在线工具:
使用 Tronscan 或 Tron-EVM 转换工具。
(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. 注意事项
[*]大小写敏感:EVM 地址通常小写,但校验时需注意大小写兼容性。
[*]校验和:Tron 的 Base58Check 编码自带校验,转换时无需额外处理。
[*]跨链使用:
[*]在 Tron 上,EVM 地址可通过转换后直接用于 TRC20 合约交互。
[*]在 EVM 链上,Tron 地址需转换为 0x 格式才能调用合约。

4. 常见场景
[*]在 MetaMask 中使用 Tron 地址:
将 Tron 地址转为 0x 格式后,可导入 MetaMask(私钥相同)。
[*]在 TronLink 中使用 EVM 地址:
将 0x 地址转为 T 开头格式即可。

页: [1]
查看完整版本: 波场跟evm地址如何互相转换