order placement doesnt crash

This commit is contained in:
Tim Olson
2023-10-14 22:06:43 -04:00
parent b699d76073
commit dc23ecdd20
7 changed files with 52 additions and 20 deletions

View File

@@ -7,7 +7,7 @@ export let provider = null
export function onChainChanged(chainId) {
chainId = Number(chainId)
// console.log('chain changed', chainId)
console.log('chain changed', chainId)
const store = useStore()
if( chainId !== store.chainId ) {
store.chainId = chainId
@@ -29,8 +29,8 @@ function onAccountsChanged(accounts) {
else if (accounts[0] !== store.account) {
store.account = accounts[0].address
flushOrders()
socket.emit('address', store.chainId, accounts[0].address)
}
socket.emit('address', store.chainId, accounts[0].address)
}
export async function watchWallet() {
@@ -79,7 +79,7 @@ export async function connectWallet() {
export async function pendOrder(order) {
console.log('order', order)
console.log('order', JSON.stringify(order))
const s = useStore()
s.pendingOrders.push(order)
const signer = await connectWallet()
@@ -98,18 +98,40 @@ export function flushOrders() {
export async function asyncFlushOrders() {
const s = useStore()
const orders = s.pendingOrders
if(!orders.length || !s.account)
if (!orders.length)
return
const contract = await vaultContract(0, await provider.getSigner())
if( !contract )
let signer
try {
signer = await provider.getSigner();
} catch (e) {
console.log('signer denied')
return
const proms = []
}
const contract = await vaultContract(0, signer)
if (!contract) {
console.error(`no contract for vault 0 of ${signer.address}`)
return
}
for (const order of orders)
proms.push(contract.placeOrder(order))
s.pendingOrders = []
const txs = await Promise.all(proms)
for( const tx of txs )
doPlaceOrder(s, contract, order)
}
function doPlaceOrder(s, contract, order) {
contract.placeOrder(order).then((tx)=>{
console.log('placed order', tx)
s.removePendingOrder(order)
tx.wait().then((tr)=>console.log('tx receipt',tr))
}).catch((e)=>{
if( e.info.error.code === 4001 ) {
console.log(`user rejected order`, order)
s.removePendingOrder(order)
}
else {
console.error('error placing order', order, e.reason, e.info)
s.removePendingOrder(order)
// todo retry?
}
})
}
socket.on('vaults', (vaults)=>{