@walletconnect/react-native-dapp认证后signTransaction无确认提示求助
问题排查与解决方案
针对你调用signTransaction后钱包打开但无确认弹窗的问题,以下是具体排查方向和修复方案:
1. 补全交易必填参数
钱包会严格校验交易合法性,缺少关键参数会直接忽略请求:
value字段:ETH转账必须显式指定金额,空值或undefined会被判定为无效交易:value: Web3js.utils.toHex(Web3js.utils.toWei('0.01', 'ether')) // 替换为实际转账金额chainId字段:必须添加对应链的ID(如主网1、Goerli测试网5),确保与钱包当前网络匹配:data字段:如果无合约交互需求,需设为'0x'而非空值或undefined- 规范字段名:部分钱包更认可
gasLimit而非gas,建议统一使用gasLimit
修正后的基础交易示例:
let txObj = { from: userWallet, to: receiver_address!, value: Web3js.utils.toHex(Web3js.utils.toWei('0.01', 'ether')), gasLimit: Web3js.utils.toHex(21000), // ETH转账固定gasLimit为21000 chainId: 1, data: data || '0x', };
2. 兼容EIP-1559交易格式
MetaMask、Rainbow等主流钱包默认使用EIP-1559标准,建议替换旧的gasPrice为maxFeePerGas和maxPriorityFee:
let txObj = { from: userWallet, to: receiver_address!, value: Web3js.utils.toHex(Web3js.utils.toWei('0.01', 'ether')), gasLimit: Web3js.utils.toHex(100000), chainId: 1, maxFeePerGas: Web3js.utils.toHex(Web3js.utils.toWei('20', 'gwei')), maxPriorityFee: Web3js.utils.toHex(Web3js.utils.toWei('2', 'gwei')), data: data || '0x', };
3. 检查WalletConnect初始化配置
确保初始化时指定了正确的链信息,避免应用与钱包网络不匹配:
const connector = useWalletConnect({ chainId: 1, // 默认链ID supportedChains: [1, 5], // 支持的链列表 });
同时建议将@walletconnect/react-native-dapp升级到最新稳定版,旧版本对EIP-1559交易兼容性较差。
4. 修复代码拼写错误
你的代码中singTrasaction是拼写错误,修正后避免后续逻辑异常:
const signedTransaction = await connector.signTransaction(txObj);
5. 测试最小可用交易
先构造最简ETH转账请求,排除非必要参数干扰:
const minimalTx = { from: userWallet, to: receiver_address!, value: Web3js.utils.toHex(Web3js.utils.toWei('0.001', 'ether')), gasLimit: Web3js.utils.toHex(21000), chainId: 1, }; const result = await connector.signTransaction(minimalTx);
如果该请求能正常弹窗,说明问题出在原data字段或其他参数格式上,可逐步排查。
内容的提问来源于stack exchange,提问作者Pankaj Sonava
相关产品推荐
相关产品推荐

