import { defineStore } from "pinia"; import { useWalletStoreV2 } from "@/stores/walletV2"; import QuoterJson from "@/assets/contracts/Quoter.json"; import UniswapPoolJson from "@/assets/contracts/UniswapPool.json"; import BloodlineJson from "@/assets/contracts/Bloodline.json"; import { useMemeburnerStore } from "@/stores/memeburner"; import { useTokenStore } from "@/stores/tokens"; import { getContract, multicall } from "@wagmi/core"; export const useUniswapStore = defineStore("uniswap", { state: () => ({ quoateV3Contract: {}, quoateV2Contract: {}, uniswapPoolContract: {}, poolData: { token0: null, token1: null, fee: null, }, }), getters: {}, actions: { init() { console.log("init uniswap"); const walletStore = useWalletStoreV2(); this.quoateV3Contract = getContract({ address: QuoterJson.contractAddress, abi: QuoterJson.abi, walletClient: walletStore.walletClient || walletStore.publicClient, }); this.uniswapPoolContract = getContract({ address: UniswapPoolJson.contractAddress, abi: UniswapPoolJson.abi, walletClient: walletStore.walletClient || walletStore.publicClient, }); this.getPoolData(); }, async quoteExactInputSingle(amount, ethBase) { try { console.log("quoteExactInputSingle"); const memeBurnerStore = useMemeburnerStore(); const tokenStore = useTokenStore(); const tokenOut = tokenStore.memeToken.contractAddress; // tokenIn - WETH const tokenIn = BigInt(this.poolData.token0) == BigInt(tokenOut) ? this.poolData.token1 : this.poolData.token0; console.log("quoteExactInputSingle-parameter", { tokenIn: tokenIn, // WETH tokenOut: tokenOut, // BLOOD fee: this.poolData.fee, amountEthBase: ethBase, pricelimit: 0, //sqrtPriceLimitX96 }); const quotedAmountOut = await this.quoateV3Contract.read.quoteExactInputSingle([ tokenIn, //weth tokenOut, //bloodline this.poolData.fee, ethBase, 0, //sqrtPriceLimitX96 ]); console.log("quotedAmountOut", quotedAmountOut); return {result: true, amount: quotedAmountOut}; } catch (error) { return { result: false, amount: null }; } }, async getPoolData() { console.log("getPoolData"); const contracts = []; contracts.push( { ...this.uniswapPoolContract, functionName: "token0", }, { ...this.uniswapPoolContract, functionName: "token1", }, { ...this.uniswapPoolContract, functionName: "fee", } ); const data = await multicall({ contracts, }); this.poolData.token0 = data[0].result; this.poolData.token1 = data[1].result; this.poolData.fee = data[2].result; console.log("this.poolData", this.poolData); }, }, });