88 lines
2.8 KiB
JavaScript
88 lines
2.8 KiB
JavaScript
import { defineStore } from "pinia";
|
|
import { useTokenStore } from "./tokens";
|
|
import Web3 from "web3";
|
|
export const useWalletStore = defineStore("wallet", {
|
|
state: () => ({
|
|
count: 0,
|
|
alchemy: null,
|
|
connected: false,
|
|
address: null,
|
|
web3: null
|
|
}),
|
|
getters: {
|
|
},
|
|
actions: {
|
|
increment() {
|
|
this.count++;
|
|
},
|
|
connectWallet() {
|
|
console.log("window.ethereum", window.ethereum);
|
|
// if (window.ethereum) {
|
|
window.ethereum
|
|
.request({ method: "eth_requestAccounts" })
|
|
.then((data) => {
|
|
console.log("data", data);
|
|
this.isConnected();
|
|
// this.address = data[0];
|
|
// this.connected = true;
|
|
// const tokenStore = useTokenStore();
|
|
// if (tokenStore.activeToken.address) {
|
|
// //Token selected but not refreshed
|
|
// this.getTokenBalance(tokenStore.activeToken.address).then(
|
|
// (data) => (tokenStore.activeToken.balance = data)
|
|
// );
|
|
// }
|
|
// console.log("permissions", permissions);
|
|
})
|
|
.catch((error) => {
|
|
if (error.code === 4001) {
|
|
// EIP-1193 userRejectedRequest error
|
|
console.log("Please connect to MetaMask.");
|
|
} else {
|
|
console.error(error);
|
|
}
|
|
});
|
|
// }
|
|
},
|
|
async getTokenBalance(token) {
|
|
const tokenStore = useTokenStore();
|
|
const contract = tokenStore.getTokenContract(token);
|
|
const result = await contract.methods.balanceOf(this.address).call();
|
|
return result;
|
|
},
|
|
async isConnected() {
|
|
try {
|
|
this.loading = true;
|
|
const accounts = await window.ethereum.request({ method: "eth_accounts" });
|
|
if (accounts.length) {
|
|
this.connected = true;
|
|
this.address = accounts[0];
|
|
console.log(`You're connected to: ${accounts[0]}`);
|
|
const web3 = new Web3(window.ethereum);
|
|
const tokenStore = useTokenStore();
|
|
console.log("tokenStore.activeToken", tokenStore.activeToken);
|
|
if (tokenStore.activeToken.contractAddress) {
|
|
tokenStore.activeToken.balance = await this.getTokenBalance(
|
|
tokenStore.activeToken
|
|
);
|
|
tokenStore.activeToken.allowance = await tokenStore.allowance();
|
|
}
|
|
tokenStore.memeBurner.contract = new web3.eth.Contract(
|
|
tokenStore.memeBurner.config.abi,
|
|
tokenStore.memeBurner.config.contractAddress
|
|
);
|
|
} else {
|
|
console.log("Metamask is not connected");
|
|
this.connected = false;
|
|
}
|
|
} catch (error) {
|
|
console.log("error", error);
|
|
} finally {
|
|
this.loading = false;
|
|
}
|
|
|
|
}
|
|
},
|
|
persist: true,
|
|
});
|