improved order statuses
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user