【问题标题】:Fix missing provider in production修复生产中缺少的提供者
【发布时间】:2023-02-14 01:08:35
【问题描述】:

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

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

但是在生产环境(真实域)中运行应用程序时出现错误

未捕获的错误:缺少提供程序(argument="provider",value=undefined,code=INVALID_ARGUMENT,version=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)
    }
  },
}

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

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

【问题讨论】:

  • 我不知道这是否有帮助,但您可以尝试其中的一些操作:尝试在 dev 和 prod 中 console.log provider 变量。另外当你说它在本地主机上工作时,它是在开发服务器模式下吗?或者您是否在生产模式下但在本地主机上尝试过?如果有,本地主机生产模式是否有效?

标签: javascript vue.js solidity web3js ethers.js


【解决方案1】:

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

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

【讨论】:

  • 嗨 Kaoos,请将最后两行添加到代码块中以使其易于理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多