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

