P2Pix-Front-End/src/utils/blockchain.ts

146 lines
4.3 KiB
TypeScript

import { useEtherStore } from "@/store/ether";
import { BigNumber, ethers } from "ethers";
// smart contract imports
import mockToken from "./smart_contract_files/MockToken.json";
import p2pix from "./smart_contract_files/P2PIX.json";
import addresses from "./smart_contract_files/localhost.json";
import { wallets } from "./smart_contract_files/wallets.json"
const updateWalletStatus = async (walletAddress: string) => {
const etherStore = useEtherStore();
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const contract = new ethers.Contract(addresses.token, mockToken.abi, signer);
const balance = await contract.balanceOf(walletAddress);
etherStore.setBalance(String(balance));
etherStore.setWalletAddress(walletAddress);
};
const connectProvider = async () => {
const etherStore = useEtherStore();
const window_ = window as any;
const connection = window_.ethereum;
let provider: ethers.providers.Web3Provider | null = null;
if (!connection) return;
provider = new ethers.providers.Web3Provider(connection);
const signer = provider.getSigner();
const contract = new ethers.Contract(addresses.token, mockToken.abi, signer);
const walletAddress = await provider.send("eth_requestAccounts", []);
const balance = await contract.balanceOf(walletAddress[0]);
etherStore.setWalletAddress(walletAddress[0]);
etherStore.setBalance(String(balance));
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const filter = p2pContract.filters.DepositAdded(null);
const events = await p2pContract.queryFilter(filter);
console.log(events)
etherStore.setDepositList(events);
connection.on("accountsChanged", (accounts: string[]) => {
updateWalletStatus(accounts[0]);
});
};
const splitTokens = async () => {
const etherStore = useEtherStore();
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const contract = new ethers.Contract(addresses.token, mockToken.abi, signer);
for (var i = 0; i < wallets.length; i++){
const tx = await contract.transfer(wallets[i], ethers.utils.parseEther("4000000.0"));
await tx.wait()
updateWalletStatus(etherStore.walletAddress);
}
};
const mockDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
const etherStore = useEtherStore();
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const tokenContract = new ethers.Contract(addresses.token, mockToken.abi, signer);
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
// first get the approval
const apprv = await tokenContract.approve(addresses.p2pix, ethers.utils.parseEther(tokenQty));
await apprv.wait();
// deposit
const deposit = await p2pContract.deposit(addresses.token, ethers.utils.parseEther(tokenQty), pixKey);
await deposit.wait();
updateWalletStatus(etherStore.walletAddress);
const filter = p2pContract.filters.DepositAdded(null);
const events = await p2pContract.queryFilter(filter);
console.log(events)
etherStore.setDepositList(events);
};
const countDeposit = async () => {
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const contract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const count = await contract.depositCount();
console.log(Number(count))
};
const mapDeposits = async (depositId: BigNumber) => {
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const contract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const deposit = await contract.mapDeposits(depositId);
console.log(deposit)
};
const formatEther = (balance: string) => {
const formatted = ethers.utils.formatEther(balance);
return formatted;
};
const verifyDepositAmmount = (ammountBigNumber: BigNumber): string => {
return ethers.utils.formatEther(ammountBigNumber)
}
const getProvider = (): ethers.providers.Web3Provider | null => {
const window_ = window as any;
const connection = window_.ethereum;
if (!connection) return null;
return new ethers.providers.Web3Provider(connection);
};
export default { connectProvider, formatEther, splitTokens, mockDeposit, countDeposit, mapDeposits, verifyDepositAmmount };