From 907a61c501028515024984f2e38d9356e8bf5774 Mon Sep 17 00:00:00 2001 From: Tim Olson <> Date: Wed, 27 Dec 2023 16:35:16 -0400 Subject: [PATCH] bugfix: vault creation loop --- src/blockchain/abi.js | 1 + src/blockchain/wallet.js | 15 ++++++++++++--- src/misc.js | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/blockchain/abi.js b/src/blockchain/abi.js index 28d00d1..f5e4f80 100644 --- a/src/blockchain/abi.js +++ b/src/blockchain/abi.js @@ -80,6 +80,7 @@ const SwapOrder = `( )` export const vaultAbi = [ + 'function version() view returns (uint8)', 'function withdraw(uint256 amount)', 'function withdrawTo(address payable recipient, uint256 amount)', 'function withdraw(address token, uint256 amount)', diff --git a/src/blockchain/wallet.js b/src/blockchain/wallet.js index 3f117e2..01be4c2 100644 --- a/src/blockchain/wallet.js +++ b/src/blockchain/wallet.js @@ -3,6 +3,7 @@ import {useStore} from "@/store/store"; import {socket} from "@/socket.js"; import {contractOrNull, vaultAddress} from "@/blockchain/contract.js"; import {vaultAbi} from "@/blockchain/abi.js"; +import {SingletonCoroutine, sleep} from "@/misc.js"; export function onChainChanged(chainId) { @@ -118,12 +119,13 @@ async function _discoverVaults(owner) { // todo multi-vault scan const num = 0 const addr = vaultAddress(owner, num) + console.log(`vault ${num} at`, addr) const s = useStore() const vault = new ethers.Contract(addr, vaultAbi, s.provider) let version = -1 try { version = await vault.version(); - if( version === 1 ) { + if( Number(version) === 1 ) { console.log(`found vault ${num} at ${addr}`) result.push(addr) } @@ -131,7 +133,7 @@ async function _discoverVaults(owner) { console.error(`bad vault version ${version}`) } catch (e) { - console.log(`no vault ${num}`) + console.log(`no vault ${num}`, e) } return result } @@ -157,9 +159,16 @@ export function ensureVault2(chainId, owner, num) { console.log('cannot create vault: no account logged in') return } - socket.emit('ensureVault', chainId, owner, num) + ensureVaultRoutine.invoke(chainId, owner, num) } +async function doEnsureVault(chainId, owner, num) { + socket.emit('ensureVault', chainId, owner, num) + await sleep() +} + +const ensureVaultRoutine = new SingletonCoroutine(doEnsureVault, 100, false) + export async function pendOrder(order) { console.log('order', JSON.stringify(order)) diff --git a/src/misc.js b/src/misc.js index 2b5758e..a7c5862 100644 --- a/src/misc.js +++ b/src/misc.js @@ -124,3 +124,5 @@ export function pairPrice(baseToken, quoteToken, price, decimals=null) { return price } +export const sleep = ms => new Promise(r => setTimeout(r, ms)) +