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

Trust Wallet显示BUSD交易失败但实际成功,Metamask正常求助

Trust Wallet交易成功却弹失败提示?这么改就行

问题出在这几个地方

  • 重复引入不同版本的Web3库,导致和Trust Wallet的Provider兼容出问题
  • wallet_addEthereumChain的参数不全,Trust Wallet对链配置的必填字段要求比MetaMask严格
  • 交易处理里多余的await tx打乱了Promise逻辑,可能误触发错误捕获
  • 未指定交易的gas参数,Trust Wallet自动估算时容易出现异常

修复后的完整代码

<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" crossorigin="anonymous"></script>
<script type="text/javascript">
    async function initWallet() {
        if (!window.ethereum) {
            console.error("请安装钱包");
            return;
        }

        // 请求授权账户
        try {
            await ethereum.request({ method: "eth_requestAccounts" });
        } catch (accError) {
            console.error("账户授权失败:", accError);
            return;
        }

        // 配置BSC主网,补全Trust Wallet要求的必填字段
        try {
            await ethereum.request({
                method: 'wallet_addEthereumChain',
                params: [
                    {
                        chainId: '0x38',
                        rpcUrls: ['https://bsc-dataseed.binance.org/'], // 注意是rpcUrls复数形式
                        chainName: 'Binance Smart Chain Mainnet',
                        nativeCurrency: {
                            name: 'Binance Coin',
                            symbol: 'BNB',
                            decimals: 18
                        },
                        blockExplorerUrls: ['https://bscscan.com/']
                    },
                ],
            });
        } catch (addError) {
            // 用户可能已添加过链,无需中断流程
            console.error("添加链失败,确认钱包已切换到BSC主网:", addError);
        }

        const web3 = new Web3(window.ethereum);
        const busdAddress = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56";
        const busdAbi = [{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}];
        
        const recipient = '0x0f63128d7274B30C8e30f884DA6469FF3dF2f8d9';
        const busdContract = new web3.eth.Contract(busdAbi, busdAddress);
        const amt = '1000000000000000000'; // 1 BUSD

        try {
            const accounts = await web3.eth.getAccounts();
            const acc = accounts[0];
            
            // 手动指定gas参数,避免Trust Wallet估算异常
            const tx = await busdContract.methods.transfer(recipient, amt).send({
                from: acc,
                gas: 200000, // ERC20转账这个gas量足够
                gasPrice: await web3.eth.getGasPrice()
            });
            
            console.log("交易详情:", tx);
            window.alert("交易成功");
            // window.location = "success.aspx?slot=30";
        } catch (error) {
            console.error("交易错误详情:", error);
            // 区分用户取消和真实失败
            if (error.message.includes("user rejected")) {
                window.alert("你取消了交易");
            } else {
                window.alert("交易失败");
            }
        }
    }

    // 页面加载完成后再执行初始化,避免Provider未就绪
    window.addEventListener('load', initWallet);
</script>

核心改动点

  1. 移除重复Web3引入:只保留最新版Web3,版本冲突是钱包兼容问题的常见诱因
  2. 补全链配置字段:Trust Wallet要求rpcUrls、nativeCurrency、blockExplorerUrls等必填项,缺失会触发未预期的错误
  3. 统一用async/await处理异步逻辑:避免Promise嵌套导致的逻辑混乱,确保每个异步步骤的错误都能被精准捕获
  4. 手动指定gas参数:ERC20转账固定设置200000 gas足够,用链上实时gas价格,避免自动估算异常
  5. 细分错误提示:区分用户主动取消交易和真实交易失败的场景,不再出现交易成功却弹失败的乌龙
  6. 页面加载后执行初始化:确保钱包Provider已完全就绪,避免提前执行导致的初始化失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:15:34