函数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)
}
},
}
在生产环境中作为提供者处理这个契约方法的正确方法是什么?
我希望用户能够在没有连接钱包的情况下调用这个函数。
我有一些简单的index.js,使用提供商JsonRPCPRovider没有元掩码。
const url = 'https://polygon-rpc.com';
const provider = new ethers.providers.JsonRpcProvider(url);
const signer = provider.getSigner('0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174');