import {ethers} from "ethers"; import {factoryAbi, queryHelperAbi, vaultAbi} from "@/blockchain/abi.js"; import {useStore} from "@/store/store.js"; export function vaultAddress( owner, num=0) { const s = useStore() if( !owner || !s.factory || !s.vaultInitCodeHash ) return null const salt = ethers.solidityPackedKeccak256(['address','uint8'],[owner,num]) return ethers.getCreate2Address(s.factory, salt, s.vaultInitCodeHash) } export function contractOrNull(addr,abi,provider) { try { return new ethers.Contract(addr,abi,provider) } catch (e) { return null } } export async function factoryContract() { const s = useStore() return contractOrNull(s.factory, factoryAbi, s.provider) } export async function queryHelperContract() { const s = useStore() return contractOrNull(s.helper, queryHelperAbi, s.provider) } export async function poolContract(addr) { const s = useStore() return contractOrNull(addr, uniswapV3PoolAbi, s.provider) } export async function vaultContract(owner, num, provider) { const addr = vaultAddress(owner, num) return new ethers.Contract(addr, vaultAbi, provider) }