order placement works, including automatic vault creation

This commit is contained in:
Tim Olson
2023-10-06 19:49:31 -04:00
parent c206607547
commit c637e82ac3
8 changed files with 279 additions and 56 deletions

View File

@@ -1,20 +1,48 @@
import {ethers} from "ethers";
import {factoryAbi, queryHelperAbi} from "@/blockchain/abi.js";
import {factoryAbi, queryHelperAbi, vaultAbi} from "@/blockchain/abi.js";
import {useStore} from "@/store/store.js";
import {provider} from "@/blockchain/wallet.js";
export function vaultAddress( owner, num ) {
const s = useStore()
if( s.vaultInitCodeHash === null || s.factory === null )
return null
const abiCoder = ethers.AbiCoder.defaultAbiCoder();
console.log('vaultAddress owner', owner)
const salt = ethers.keccak256(abiCoder.encode(['address','uint8'],[owner,num]))
const result = ethers.getCreate2Address(s.factory, salt, s.vaultInitCodeHash)
console.log('vaultAddress', result, s.factory, salt, s.vaultInitCodeHash)
return result
}
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 new ethers.Contract(s.helper, factoryAbi, provider)
return contractOrNull(s.factory, factoryAbi, provider)
}
export async function queryHelperContract() {
const s = useStore()
return new ethers.Contract(s.helper, queryHelperAbi, provider)
return contractOrNull(s.helper, queryHelperAbi, provider)
}
export async function poolContract(addr) {
const s = useStore()
return new ethers.Contract(addr, poolAbi, provider)
return contractOrNull(addr, poolAbi, provider)
}
export async function vaultContract(num, signer) {
const s = useStore()
if( num >= s.vaults.length )
return null
return contractOrNull(s.vaults[num], vaultAbi, signer)
}