修复生产中缺失的提供商

问题描述 投票:0回答:2

函数 getAllTickets 正在以提供者的身份调用合约。

问题是,当在 localHost 中运行应用程序时,此函数可以正常工作并且调用合约方法“getAllTickets”。

但是在生产环境(真实域)中运行应用程序时,我收到错误

未捕获的错误:缺少提供程序(参数=“provider”,值=未定义,代码=INVALID_ARGUMENT,版本=providers/5.5.3)

async getAllTickets({commit}) {
    try {
      const provider = new ethers.providers.Web3Provider(window.ethereum)
      const ticketsContract = new ethers.Contract(ticketsContractAddress, ticketsAbi, provider)
      const allTicketsHash = await ticketsContract.getAllTickets()
      const parcedTickets = allTicketsHash.map((ticket) => ({
        ticketOwner: ticket.ticket_owner,
        timestamp: new Date(ticket.timestamp.toNumber() * 1000).toLocaleString(),
        keyword: ticket.keyword,
        amount: parseInt(ticket.amount._hex) / (10 ** 18)
      }))
      commit('setAllTickets', parcedTickets)
      
    } catch (e) {
      console.error(e)
    }
  },
}

作为生产环境中的提供者,处理此合同方法的正确方法是什么?

我希望用户能够在不连接钱包的情况下调用此功能。

javascript vue.js solidity web3js ethers.js
2个回答
0
投票

我有一些简单的index.js,使用Provider JsonRPCPRovider而不使用Metamask。

const url = 'https://polygon-rpc.com'; 
const provider = new ethers.providers.JsonRpcProvider(url);
const signer = provider.getSigner('0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174');

0
投票

使用不同的浏览器和不同的钱包,帮助我解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.