improved order statuses

This commit is contained in:
Tim Olson
2023-11-09 23:23:04 -04:00
parent f1bc632074
commit a41ca81ab2
9 changed files with 103 additions and 38 deletions

View File

@@ -36,9 +36,7 @@ export async function poolContract(addr) {
return contractOrNull(addr, uniswapV3PoolAbi, s.provider)
}
export async function vaultContract(num, signer) {
const s = useStore()
if( num >= s.vaults.length )
return null
return contractOrNull(s.vaults[num], vaultAbi, signer)
export async function vaultContract(owner, num, provider) {
const addr = vaultAddress(owner, num)
return new ethers.Contract(addr, vaultAbi, provider)
}

View File

@@ -1,7 +1,7 @@
import {ethers} from "ethers";
import {setProvider, useStore} from "@/store/store";
import {socket} from "@/socket.js";
import {contractOrNull} from "@/blockchain/contract.js";
import {contractOrNull, vaultAddress} from "@/blockchain/contract.js";
import {vaultAbi} from "@/blockchain/abi.js";
@@ -29,6 +29,14 @@ function changeAccounts(accounts) {
else {
const store = useStore()
store.account = accounts[0].address
if( pendingOrders.length ) {
if( store.vault )
flushOrders()
else
ensureVault()
}
else
discoverVaults()
flushTransactions()
socket.emit('address', store.chainId, accounts[0].address)
}
@@ -86,7 +94,39 @@ export async function connectWallet() {
await s.provider.getSigner()
}
const pendingOrders = []
let pendingOrders = []
function discoverVaults() {
const s = useStore()
const owner = s.account
_discoverVaults(owner).then((result)=>{
if( s.account === owner ) { // double-check the account since it could have changed during our await
s.vaults = result
if( result.length && pendingOrders.length )
flushOrders(result[0])
}
})
}
async function _discoverVaults(owner) {
const result = []
// todo multi-vault scan
const addr = vaultAddress(owner, 0)
const s = useStore()
const vault = new ethers.Contract(addr, vaultAbi, s.provider)
let version = -1
try {
version = await vault.version();
if( version === 1 )
result.push(addr)
else
console.error(`bad vault version ${version}`)
}
catch (e) {
}
return result
}
export function ensureVault() {
@@ -120,6 +160,8 @@ export async function pendOrder(order) {
export function flushOrders(vault) {
for( const order of pendingOrders )
pendOrderAsTransaction(vault, order)
pendingOrders = []
flushTransactions()
}