You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TronWeb中使用多签功能转账USDT?

解决TRON多签地址调用USDT合约转账的错误

以下是修正后的可运行代码示例,同时说明你代码中的问题点:

问题点分析

  1. 重复参数冗余:triggerSmartContract的第一个参数已经是合约地址,options中无需再次传入contractAddress,重复参数会导致交易构造异常。
  2. 参数大小写错误:PermissionId应改为小写permissionId,TRON Web3 API对参数大小写敏感。
  3. 签名对象传错:tronWeb.trx.multiSign需要传入的是交易对象(即transferData.transaction),而非整个transferData返回结果。
  4. 地址格式不匹配:USDT合约的transfer方法中,address类型参数需要传入HEX格式地址(而非base58),需提前转换。

修正后的代码示例

async function multiSignUSDTTransfer() {
    const multiSigAddressBase58 = "你的多签地址(base58格式)";
    const contractAddressBase58 = "USDT合约地址(base58格式)";
    const toAddressBase58 = "接收地址(base58格式)";
    const amount = "1000000"; // USDT最小单位为6位小数,此值代表1 USDT
    const privateKey = "你的多签账户私钥";
    const permissionId = 2; // 多签权限ID,根据实际配置调整

    // 转换地址为HEX格式(适配USDT合约参数要求)
    const contractAddressHex = tronWeb.address.toHex(contractAddressBase58);
    const toAddressHex = tronWeb.address.toHex(toAddressBase58);

    try {
        // 构造触发智能合约的交易
        const triggerResult = await tronWeb.transactionBuilder.triggerSmartContract(
            contractAddressHex, // 合约地址需传入HEX格式
            'transfer(address,uint256)',
            {
                feeLimit: 100000000, // 设置足够的手续费限制
                callValue: 0,
                from: multiSigAddressBase58, // 发起地址使用base58格式
                permissionId: permissionId // 参数名改为小写
            },
            [
                { type: 'address', value: toAddressHex }, // 接收地址传入HEX格式
                { type: 'uint256', value: amount }
            ]
        );

        if (!triggerResult.result || !triggerResult.result.success) {
            throw new Error(`交易构造失败: ${triggerResult.result.message}`);
        }

        const unsignedTx = triggerResult.transaction;

        // 第一次签名(多签需收集足够数量签名,此处示例单个签名,后续可重复调用收集其他签名)
        let signedTx = await tronWeb.trx.multiSign(unsignedTx, privateKey, permissionId);

        // 若需多签,重复调用multiSign传入上一次签名后的交易及其他私钥
        // signedTx = await tronWeb.trx.multiSign(signedTx, anotherPrivateKey, permissionId);

        // 广播已完成签名的交易
        const broadcastResult = await tronWeb.trx.sendRawTransaction(signedTx);
        console.log("交易广播结果:", broadcastResult);
    } catch (error) {
        console.error("错误:", error);
    }
}

额外注意事项

  • 多签签名收集:多签交易需满足配置的签名阈值(比如2/3),每次调用multiSign时传入上一次签名后的交易对象和新的私钥即可累加签名。
  • 手续费限制:确保feeLimit设置足够,避免因手续费不足导致交易失败。
  • 地址格式适配:TRON API在不同场景下要求的地址格式不同,智能合约参数中的address类型必须用HEX格式,交易的from字段用base58格式即可。

内容的提问来源于stack exchange,提问作者nemo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:03:24