使用TronWeb创建TRC-20钱包及交易遇解构错误求助
解决TronWeb解构错误+TRC-20钱包创建/交易实操
先搞定依赖和初始化的核心问题
你遇到的两个解构错误,本质是TronWeb的Protobuf依赖没加载到位,不管是正式版还是beta版都可能踩这个坑,按下面步骤来:
1. 清掉旧依赖,装稳定版
别折腾beta版了,先切到经过验证的5.3.0稳定版:
rm -rf node_modules package-lock.json yarn.lock npm install tronweb@5.3.0
2. 手动挂载TronWebProto
在代码最开头加这段,直接把Protobuf挂载到全局,避免globalThis.TronWebProto未定义:
const TronWeb = require('tronweb'); const protobuf = require('protobufjs'); // 手动加载Tron的proto文件并挂载到全局 const protoRoot = protobuf.loadSync('./node_modules/tronweb/lib/commonjs/protos/tron.proto'); globalThis.TronWebProto = protoRoot.nested.protocol;
完整TRC-20钱包创建代码
const TronWeb = require('tronweb'); // 初始化TronWeb节点(主网/测试网二选一) const tronWeb = new TronWeb({ fullHost: 'https://api.trongrid.io', // 主网节点 // fullHost: 'https://api.shasta.trongrid.io', // 测试网节点 headers: { "TRON-PRO-API-KEY": "你的Trongrid API密钥" }, // 去Trongrid官网申请免费密钥 privateKey: '' // 创建钱包后再填私钥 }); // 创建新钱包 async function createTRC20Wallet() { try { const newAccount = tronWeb.createAccount(); console.log('钱包地址(Base58):', newAccount.address.base58); console.log('私钥:', newAccount.privateKey); // *务必把私钥存到安全地方,丢了找不回* return newAccount; } catch (err) { console.error('创建钱包失败:', err); } } // 执行创建 createTRC20Wallet();
TRC-20代币转账实操(以USDT为例)
async function sendTRC20Token(fromPrivateKey, toAddress, amount) { try { // 设置发送方私钥 tronWeb.setPrivateKey(fromPrivateKey); // USDT主网合约地址,测试网换对应的合约地址 const usdtContractAddr = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'; const tokenContract = await tronWeb.contract().at(usdtContractAddr); // 转换金额到最小单位(USDT是6位小数,所以乘10^6) const transferAmount = tronWeb.toBigNumber(amount).shiftedBy(6).toFixed(); // 发起转账交易 const txHash = await tokenContract.transfer(toAddress, transferAmount).send({ feeLimit: 100000000, // 手续费上限,单位sun(1TRX=1e6 sun) callValue: 0 }); console.log('交易哈希:', txHash); console.log('交易状态:', await tronWeb.getTransaction(txHash)); } catch (err) { console.error('转账失败:', err); } } // 调用示例:转1.5 USDT // sendTRC20Token('你的私钥', '接收方Base58地址', '1.5');
避坑提醒
- Node.js版本必须16.x及以上,低版本会有模块兼容问题
- 测试网操作前,先领测试TRX(通过Trongrid的测试币分发工具)
- 如果用ES模块(import语法),要把package.json里加上
"type": "module",导入改成import TronWeb from 'tronweb'
内容的提问来源于stack exchange,提问作者Ubong James
相关产品推荐
相关产品推荐

