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

React Native Expo对接Infura sendTransaction报missing response错误

问题根因

missing response 是ethers.js发起RPC请求时未拿到合法返回值时抛出的通用错误,对应这个场景的触发原因按概率从高到低排序:

  • 环境适配问题:Expo/React Native运行时的全局网络请求实现和ethers.js v5默认的请求逻辑不兼容,RPC请求发出后无法被正确解析响应,是该类场景下的最高发诱因。
  • 网络配置失效:代码中指定的ropsten测试网已于2022年底正式关停,Infura已全面停止该网络的节点服务,所有发往ropsten节点的请求都会被直接拒绝,无法返回合法响应。
  • 代码逻辑错误:对SecureStore读取到的私钥做了无意义的JSON.parse操作,如果私钥存储时没有做JSON序列化包装,解析后会得到null/非法值,导致签名、发交易流程异常,连带抛出响应缺失错误。
  • 服务/网络限制:Infura项目ID填写错误、控制台未开启对应测试网访问权限,或设备网络存在拦截导致RPC请求无法抵达Infura节点。
修复方案

按以下步骤逐次调整即可解决问题:

  • 替换废弃测试网:将网络参数从ropsten替换为当前官方支持的sepolia测试网。
  • 补全请求polyfill:显式给ethers传入适配Expo环境的fetch实现,绕过全局请求的兼容问题。
  • 修正私钥读取逻辑:移除不必要的JSON.parse处理,SecureStore默认存取字符串类型值,不需要额外序列化解析。
  • 补全错误捕获:给所有异步逻辑包裹try/catch,避免未处理的Promise拒绝异常。
  • 校验服务配置:登录Infura控制台确认Sepolia网络已启用,项目ID填写正确,设备网络可正常访问RPC服务。

修复后的可运行代码参考:

import * as SecureStore from 'expo-secure-store';
import { ethers } from 'ethers';
// 导入适配Expo的fetch实现,若未安装先执行 expo install cross-fetch
import fetch from 'cross-fetch';

const sendTx = async (to, INFURA_PROJECT_ID) => {
  try {
    // 读取私钥,移除多余JSON.parse
    const SIGNER_PRIVATE_KEY = await SecureStore.getItemAsync('Ethereum.privatekey');
    if (!SIGNER_PRIVATE_KEY) throw new Error('私钥不存在');

    // 初始化provider,替换为sepolia网络,显式传入fetch实现
    const provider = new ethers.providers.InfuraProvider(
      'sepolia',
      INFURA_PROJECT_ID,
      { fetch }
    );

    // 初始化签名钱包
    const signer = new ethers.Wallet(SIGNER_PRIVATE_KEY, provider);

    // 发交易
    const tx = await signer.sendTransaction({
      to,
      value: ethers.utils.parseEther("0.001"),
    });
    console.log("Mining transaction...");
    console.log(`Transaction hash: ${tx.hash}`);

    // 等待上链
    const receipt = await tx.wait();
    console.log(`Mined in block ${receipt.blockNumber}`);

    return tx;
  } catch (err) {
    // 统一捕获错误
    console.error('交易发送失败:', err);
    throw err;
  }
}

补充说明:如果使用的是ethers.js v6版本,初始化InfuraProvider时传入自定义fetch的参数位置有调整,需要放到provider构造函数的第三个option参数的staticNetwork配置同级位置,兼容逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:51:27