React Native中WalletConnect调用Rainbow转账显示MATIC而非POZ问题
Rainbow钱包转账弹窗显示MATIC而非POZ代币的解决方法
问题背景
我开发的React Native移动应用基于Polygon RPC网络,支持Rainbow、MetaMask等外部钱包通过WalletConnect完成转账操作。调用合约transfer方法发起POZ代币转账时,MetaMask的确认弹窗能正确显示POZ代币,但Rainbow弹窗始终显示MATIC,与实际转账代币不符。
问题代码示例
let toAddress = pozPouchFundWallet; // 转账目标地址 let decimals = BigNumber(18); let amount1 = new BigNumber(amountValue); let value = amount1.times(new BigNumber(10).pow(decimals)); let contract = new Web3js.eth.Contract(App_ABI, POZ_TOKEN!); try { let dataa = await contract.methods .transfer(toAddress, value.toString()) .encodeABI(); let txObj = { // gas: Web3js.utils.toHex(100000), data: Web3js.utils.toHex(dataa), from: userWallet, to: POZ_TOKEN, // 代币合约地址 }; try { const transactionHash = await connector .sendTransaction(txObj) .catch((_err: any) => { Toast.show({ autoHide: true, text1: t('topUpPoz.transactionFailed'), type: 'error', }); }); console.log('transactionHash is =', transactionHash); resolve(transactionHash); } catch (error) { console.log('the connector error is = ', error); reject(error); } } catch (err) { console.log('contact error is = ', err); reject(err); }
问题截图

解决方法
1. 显式设置原生币转账金额为0
Rainbow钱包对ERC20合约交易的识别逻辑可能依赖value字段,当该字段缺失时,默认判定为原生MATIC转账。在txObj中添加value: '0x0',明确告知钱包这是ERC20代币交易,而非原生币转账:
let txObj = { data: Web3js.utils.toHex(dataa), from: userWallet, to: POZ_TOKEN, // 代币合约地址 value: '0x0', // 显式设置原生币金额为0 gasLimit: Web3js.utils.toHex(100000) // 可选:添加gas限制,帮助钱包准确计算 };
2. 确认Rainbow钱包已添加POZ代币
如果POZ代币未在Rainbow钱包中添加,钱包无法识别合约交易对应的代币类型,会默认显示原生MATIC。可以引导用户手动添加代币(通过合约地址、符号、小数位数),确保钱包能正确识别POZ代币。
3. 检查合约ABI与调用方法的正确性
确保App_ABI中包含正确的transfer方法定义,且POZ_TOKEN地址无误。错误的ABI或合约地址可能导致钱包无法解析交易内容,从而显示错误的代币类型。
内容的提问来源于stack exchange,提问作者Pankaj Sonava
相关产品推荐
相关产品推荐

