Migrated project to Viem, removing Ethers completelly. Not finished tests.

This commit is contained in:
Filipe Soccol
2025-03-31 10:26:57 -03:00
parent 3227e3209c
commit e93cac6086
19 changed files with 672 additions and 469 deletions

View File

@@ -1,27 +1,52 @@
import p2pix from "@/utils/smart_contract_files/P2PIX.json";
import { updateWalletStatus } from "./wallet";
import { getProviderUrl, getP2PixAddress } from "./addresses";
import { BrowserProvider, JsonRpcProvider, Contract } from "ethers";
import { createPublicClient, createWalletClient, custom, http } from "viem";
import { sepolia, rootstock } from "viem/chains";
import { useViemStore } from "@/store/viem";
let provider: BrowserProvider | JsonRpcProvider | null = null;
let publicClient = null;
let walletClient = null;
const getProvider = (onlyAlchemyProvider: boolean = false) => {
if (onlyAlchemyProvider) return new JsonRpcProvider(getProviderUrl()); // alchemy provider
return provider;
const getPublicClient = (onlyRpcProvider = false) => {
if (onlyRpcProvider) {
const viemStore = useViemStore();
const rpcUrl = getProviderUrl();
return createPublicClient({
chain: viemStore.networkName === sepolia.id ? sepolia : rootstock,
transport: http(rpcUrl)
});
}
return publicClient;
};
const getContract = async (onlyAlchemyProvider: boolean = false) => {
const p = getProvider(onlyAlchemyProvider);
try {
const signer = await p?.getSigner();
return new Contract(getP2PixAddress(), p2pix.abi, signer);
} catch (err) {
return new Contract(getP2PixAddress(), p2pix.abi, p);
}
const getWalletClient = () => {
return walletClient;
};
const getContract = async (onlyRpcProvider = false) => {
const client = getPublicClient(onlyRpcProvider);
const address = getP2PixAddress();
const abi = p2pix.abi;
return { address, abi, client };
};
const connectProvider = async (p: any): Promise<void> => {
provider = new BrowserProvider(p, "any");
const viemStore = useViemStore();
const chain = viemStore.networkName === sepolia.id ? sepolia : rootstock;
publicClient = createPublicClient({
chain,
transport: custom(p)
});
walletClient = createWalletClient({
chain,
transport: custom(p)
});
await updateWalletStatus();
};
export { getProvider, getContract, connectProvider };
export { getPublicClient, getWalletClient, getContract, connectProvider };