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

如何在无钱包连接时用Ethers.js调用Solidity合约公共视图函数

用Ethers.js匿名访问Solidity合约(无需钱包)

要实现完全匿名、无需用户安装钱包就能访问合约的只读函数(比如getSomeData这类view/pure方法),你需要替换依赖钱包的Web3Provider,改用直接连接区块链节点的JsonRpcProvider——它不需要依赖用户浏览器注入的window.ethereum对象。

解决方案代码

// 替换为目标链的RPC节点URL,比如以太坊主网、测试网的公共节点或你自己的节点
const rpcUrl = "https://mainnet.infura.io/v3/YOUR_INFURA_KEY"; 
// 测试可用公共节点示例:"https://eth-mainnet.g.alchemy.com/v2/demo"

// 初始化JsonRpcProvider,无需钱包
const provider = new ethers.providers.JsonRpcProvider(rpcUrl);

const contract = new ethers.Contract(
  contractAddress,
  Contract.abi,
  provider
);

// 调用只读函数,完全匿名
const result = await contract.getSomeData();

关键说明

  • 替换原因:Web3Provider是为钱包注入的window.ethereum设计的,必须依赖用户安装MetaMask等钱包才能工作;而JsonRpcProvider直接和区块链节点通信,不需要用户端有任何钱包。
  • 适用范围:这种方式仅支持合约的只读操作(view/pure修饰的函数),因为写入操作需要私钥签名,匿名状态下无法完成签名流程。
  • RPC节点选择:可以使用Infura、Alchemy等服务商的节点(需注册获取API Key),也可以用公共测试节点,但公共节点通常有请求限制,生产环境建议用付费节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:40:29