104 lines
2.9 KiB
TypeScript
104 lines
2.9 KiB
TypeScript
import { useEtherStore } from "@/store/ether";
|
|
import { Contract, ethers } from "ethers";
|
|
|
|
import p2pix from "@/utils/smart_contract_files/P2PIX.json";
|
|
import { formatEther } from "ethers/lib/utils";
|
|
import { getContract } from "./provider";
|
|
import type { ValidDeposit } from "@/model/ValidDeposit";
|
|
import { getP2PixAddress, getTokenAddress } from "./addresses";
|
|
import { NetworkEnum } from "@/model/NetworkEnum";
|
|
|
|
const getNetworksLiquidity = async (): Promise<void> => {
|
|
const etherStore = useEtherStore();
|
|
|
|
const goerliProvider = new ethers.providers.JsonRpcProvider(
|
|
import.meta.env.VITE_GOERLI_API_URL,
|
|
5
|
|
); // goerli provider
|
|
const mumbaiProvider = new ethers.providers.JsonRpcProvider(
|
|
import.meta.env.VITE_MUMBAI_API_URL,
|
|
80001
|
|
); // mumbai provider
|
|
|
|
const p2pContractGoerli = new ethers.Contract(
|
|
getP2PixAddress(NetworkEnum.ethereum),
|
|
p2pix.abi,
|
|
goerliProvider
|
|
);
|
|
const p2pContractMumbai = new ethers.Contract(
|
|
getP2PixAddress(NetworkEnum.polygon),
|
|
p2pix.abi,
|
|
mumbaiProvider
|
|
);
|
|
|
|
etherStore.setLoadingNetworkLiquidity(true);
|
|
const depositListGoerli = await getValidDeposits(
|
|
getTokenAddress(NetworkEnum.ethereum),
|
|
p2pContractGoerli
|
|
);
|
|
|
|
const depositListMumbai = await getValidDeposits(
|
|
getTokenAddress(NetworkEnum.polygon),
|
|
p2pContractMumbai
|
|
);
|
|
|
|
etherStore.setDepositsValidListGoerli(depositListGoerli);
|
|
etherStore.setDepositsValidListMumbai(depositListMumbai);
|
|
etherStore.setLoadingNetworkLiquidity(false);
|
|
};
|
|
|
|
const getValidDeposits = async (
|
|
token: string,
|
|
contract?: Contract
|
|
): Promise<ValidDeposit[]> => {
|
|
let p2pContract: Contract;
|
|
|
|
if (contract) {
|
|
p2pContract = contract;
|
|
} else {
|
|
p2pContract = getContract(true);
|
|
}
|
|
|
|
const filterDeposits = p2pContract.filters.DepositAdded(null);
|
|
const eventsDeposits = await p2pContract.queryFilter(filterDeposits);
|
|
|
|
if (!contract) p2pContract = getContract(); // get metamask provider contract
|
|
const depositList: { [key: string]: ValidDeposit } = {};
|
|
|
|
await Promise.all(
|
|
eventsDeposits.map(async (deposit) => {
|
|
// Get liquidity only for the selected token
|
|
if (deposit.args?.token != token) return null;
|
|
|
|
const mappedBalance = await p2pContract.getBalance(
|
|
deposit.args?.seller,
|
|
token
|
|
);
|
|
|
|
const mappedPixTarget = await p2pContract.getPixTarget(
|
|
deposit.args?.seller,
|
|
token
|
|
);
|
|
|
|
let validDeposit: ValidDeposit | null = null;
|
|
|
|
if (mappedBalance._hex) {
|
|
validDeposit = {
|
|
token: token,
|
|
blockNumber: deposit.blockNumber,
|
|
remaining: Number(formatEther(mappedBalance._hex)),
|
|
seller: deposit.args?.seller,
|
|
pixKey: Number(mappedPixTarget._hex),
|
|
};
|
|
}
|
|
|
|
if (validDeposit)
|
|
depositList[deposit.args?.seller + token] = validDeposit;
|
|
})
|
|
);
|
|
|
|
return Object.values(depositList);
|
|
};
|
|
|
|
export { getValidDeposits, getNetworksLiquidity };
|