I'm using thirdweb to communicate with smartcontract. It was working but suddenly I started getting this error.
query.ts:446 Error: Could not resolve metadata for contract at 0xaf9e4aC14663312A7935F0130A7b0E72115454a9 at fetchContractMetadataFromAddress (contract-publisher-d55c8d8a.browser.esm.js:4362:13)
Here is the file where I'm using the contract
import React, { useContext, createContext } from "react";
import {
useAddress,
useContract,
useMetamask,
useContractWrite,
} from "@thirdweb-dev/react";
import { ethers } from "ethers";
const StateContext = createContext();
export const StateContextProvider = ({ children }) => {
const { contract } = useContract(
"0xaf9e4aC14663312A7935F0130A7b0E72115454a9"
);
const { mutateAsync: createCampaign } = useContractWrite(
contract,
"createCampaign"
);
const address = useAddress();
const connect = useMetamask();
const publishCampaign = async (form) => {
try {
const data = await createCampaign({
args: [
address,
form.title,
form.description,
form.target,
new Date(form.deadline).getTime(),
form.image,
],
});
console.log("contract call success", data);
} catch (error) {
console.log("contract call failure", error);
}
};
const getCampaigns = async () => {
const campaigns = await contract.call("getCampaigns");
const parsedCampaigns = campaigns.map((campaign, i) => ({
owner: campaign.owner,
title: campaign.title,
description: campaign.description,
target: ethers.utils.formatEther(campaign.target.toString()),
deadline: campaign.deadline.toNumber(),
amountCollected: ethers.utils.formatEther(
campaign.amountCollected.toString()
),
image: campaign.image,
pId: i,
}));
return parsedCampaigns;
};
const getUserCampaigns = async () => {
const allCampaigns = await getCampaigns();
const filteredCampaigns = allCampaigns.filter(
(campaign) => campaign.owner === address
);
return filteredCampaigns;
};
const donate = async (pId, amount) => {
const data = await contract.call("donateToCampaign", [pId], {
value: ethers.utils.parseEther(amount),
});
return data;
};
const getDonations = async (pId) => {
const donations = await contract.call("getDonators", [pId]);
const numberOfDonations = donations[0].length;
const parsedDonations = [];
for (let i = 0; i < numberOfDonations; i++) {
parsedDonations.push({
donator: donations[0][i],
donation: ethers.utils.formatEther(donations[1][i].toString()),
});
}
return parsedDonations;
};
const refund = async (pId) => {
try {
const data = await contract.call("refundCampaign", [pId]);
console.log("refund call success", data);
} catch (error) {
console.log("refund call failure", error);
}
};
return (
<StateContext.Provider
value={{
address,
contract,
connect,
createCampaign: publishCampaign,
getCampaigns,
getUserCampaigns,
donate,
getDonations,
refund,
}}
>
{children}
</StateContext.Provider>
);
};
export const useStateContext = () => useContext(StateContext);
and here is the main.jsx
import React from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
import { ThirdwebProvider } from "@thirdweb-dev/react";
import { Sepolia } from "@thirdweb-dev/chains";
import "./styles/globals.css";
import { StateContextProvider } from "./context";
const activeChain = "ethereum";
const container = document.getElementById("root");
const root = createRoot(container);
root.render(
<React.StrictMode>
<ThirdwebProvider
activeChain={Sepolia}
clientId="a82c3a6dcea35d5623fc769446c4fdf3"
>
<StateContextProvider>
<App />
</StateContextProvider>
</ThirdwebProvider>
</React.StrictMode>
);