137 lines
4.4 KiB
JavaScript
137 lines
4.4 KiB
JavaScript
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;
|
|
},
|
|
},
|
|
});
|