import { defineStore } from "pinia"; import { markRaw } from "vue"; import Web3 from "web3"; import { useWalletStore } from "./wallet"; import { useContractStore } from "./contracts"; import { ethers } from "ethers"; import { useMemeburnerStore } from "./memeburner"; import Meme1Json from "@/assets/contracts/Meme1.json"; import Meme2Json from "@/assets/contracts/Meme2.json"; import MemeToken from "@/assets/contracts/MemeToken.json"; import MemeBurnerJson from "@/assets/contracts/MemeBurner.json"; export const useTokenStore = defineStore("token", { state: () => ({ token: [ { name: "$PEPE", logo: "/src/assets/img/token/pepe.png", logoMobile: "/src/assets/img/token/pepeMobile.png", vamp: { logo: "/src/assets/img/token/pepevamp.png", name: "$PEPE Vamp Token", }, backgroundColor: "#4b8501", abi: Meme1Json.abi, contractAddress: Meme1Json.contractAddress, ethcontract: null, }, { name: "$SHIB", logo: "/src/assets/img/token/shib.png", logoMobile: "/src/assets/img/token/shibMobile.png", vamp: { logo: "/src/assets/img/token/shibvamp.png", name: "$SHIBA Vamp Token", }, abi: Meme2Json.abi, contractAddress: Meme2Json.contractAddress, }, // { // name: "$ELON", // logo: "/src/assets/img/token/elon.png", // logoMobile: "/src/assets/img/token/elonMobile.png", // vamp: { // logo: "/src/assets/img/token/shibvamp.png", // name: "$ELON Vamp Token", // }, // abi: null, // contractAddress: null, // }, ], activeToken: { address: null, abi: null, balance: null, contract: null, allowance: null, }, loading: false, memeToken: { config: { abi: MemeToken.abi, contractAddress: MemeToken.contractAddress, }, }, }), getters: {}, actions: { async init() { console.log("-----------init token-------------"); const walletStore = useWalletStore(); for (let index = 0; index < this.token.length; index++) { const token = this.token[index]; token.contract = new walletStore.web3.eth.Contract(token.abi, token.contractAddress); token.decimals = parseInt(await token.contract.methods.decimals().call()); } //MemeToken init this.memeToken.contract = new walletStore.web3.eth.Contract( this.memeToken.config.abi, this.memeToken.config.contractAddress ); this.memeToken.decimals = parseInt(await this.memeToken.contract.methods.decimals().call()); }, async changeActiveToken(token) { this.activeToken = token; const web3 = new Web3(window.ethereum); this.contract = new web3.eth.Contract(token.abi, token.contractAddress); const walletStore = useWalletStore(); if (walletStore.connected) { this.activeToken.balance = await walletStore.getTokenBalance(token); this.activeToken.allowance = await this.allowance(); } }, async allowance() { console.log("allowance"); const walletStore = useWalletStore(); const memeBurnerStore = useMemeburnerStore(); var allowance = await this.contract.methods .allowance(walletStore.address, memeBurnerStore.config.contractAddress) .call(); var decimals = await this.contract.methods.decimals().call(); console.log("decimals", decimals); console.log("Math.pow(10, decimals)", Math.pow(10, decimals)); allowance = BigInt(allowance / Math.pow(10, decimals)); return allowance; }, async approveToken(amount) { try { this.loading = true; const walletStore = useWalletStore(); const memeBurnerStore = useMemeburnerStore(); var approve = await this.contract.methods .approve(memeBurnerStore.config.contractAddress, amount) .send({ from: walletStore.address}); //todo parameter value übergeben in eth web3.utils.toHex(web3.utils.toWei(amount, 'ether')) // .send({ from: walletStore.address, value: 0.5 }); this.activeToken.allowance = await this.allowance(); return approve; } catch (error) { console.error(error); } finally { this.loading = false; } }, getTokenContract(token) { console.log("token", token); const contractAddress = token.contractAddress; const activeToken = this.token.find((obj) => obj.contractAddress === contractAddress); const web3 = new Web3(window.ethereum); const contract = new web3.eth.Contract(activeToken.abi, contractAddress); return contract; }, }, });