ABI's from //contract/out URLs; arbsep; placement fee considers upcoming fee changes; vault detection bugfixes; order placement bugfixes; BETA

This commit is contained in:
Tim
2024-07-03 16:18:29 -04:00
parent 104b798d4f
commit d38baccd49
18 changed files with 200 additions and 170 deletions

View File

@@ -1,9 +1,8 @@
import {BrowserProvider, ethers} from "ethers";
import {useStore} from "@/store/store";
import {socket} from "@/socket.js";
import {contractOrNull, vaultAddress} from "@/blockchain/contract.js";
import {SingletonCoroutine, uuid} from "@/misc.js";
import {factoryAbi, vaultAbi} from "@/blockchain/abi.js";
import {newContract, vaultAddress, vaultContract} from "@/blockchain/contract.js";
import {SingletonCoroutine, timestamp, uuid} from "@/misc.js";
import {defineStore} from "pinia";
import {ref} from "vue";
import {metadataMap, version} from "@/version.js";
@@ -217,7 +216,7 @@ async function _discoverVaults(owner) {
console.log('No provider')
return // do not change whatever was already found
}
const vault = new ethers.Contract(addr, vaultAbi, provider)
const vault = await vaultContract(addr, provider)
try {
const version = Number(await vault.version())
console.log(`found vault #${num} v${version} at ${addr}`)
@@ -295,11 +294,24 @@ export const PendingOrderState = {
Sent: -102, // tx is awaiting blockchain mining
}
const placementFeeSelector = 'placementFee((address,address,(uint8,uint24),uint256,uint256,bool,bool,uint64,(uint16,bool,bool,bool,bool,bool,bool,bool,bool,uint16,uint24,uint32,uint32,uint32,uint32,uint32,uint32)[]),(uint8,uint8,uint8,uint8,uint8))'
export async function placementFee(vault, order) {
const v = new ethers.Contract(vault, vaultAbi, provider)
const [orderFee, gasFee] = await v.placementFee(order)
console.log('computed fees', orderFee, gasFee)
export async function placementFee(vault, order, window=300) {
// If the fees are about to change within `window` seconds of now, we send the higher native amount of the two fees.
// If the fees sent are too much, the vault will refund the sender.
const v = await vaultContract(vault, provider)
const feeManagerAddr = await v.feeManager()
const feeManager = await newContract(feeManagerAddr, 'IFeeManager', provider)
const [sched, changeTimestamp] = await Promise.all([feeManager.fees(), feeManager.proposedFeeActivationTime()])
console.log('sched', order, sched)
let [orderFee, gasFee] = await v[placementFeeSelector](order, [...sched])
console.log('placementFee', orderFee, gasFee)
if (Number(changeTimestamp) - timestamp() < window) {
const nextSched = await feeManager.proposedFees()
const [nextOrderFee, nextGasFee] = await v[placementFeeSelector](order, [...nextSched])
if (nextOrderFee + nextGasFee > orderFee + gasFee)
[orderFee, gasFee] = [nextOrderFee, nextGasFee]
}
return [orderFee, gasFee]
}
@@ -324,7 +336,7 @@ export async function pendOrder(order, fee=null) {
export async function cancelOrder(vault, orderIndex) {
console.log('cancel order', vault, orderIndex)
pendTransaction(async (signer)=> {
const contract = contractOrNull(vault, vaultAbi, signer)
const contract = await vaultContract(vault, signer)
if( contract === null ) {
console.error('vault contract was null while canceling order', vault, orderIndex)
return null
@@ -335,7 +347,7 @@ export async function cancelOrder(vault, orderIndex) {
export async function cancelAll(vault) {
pendTransaction(async (signer)=> {
const contract = contractOrNull(vault, vaultAbi, signer)
const contract = await vaultContract(vault, signer)
if( contract === null ) {
console.error('vault contract was null while canceling order', vault)
return null
@@ -364,8 +376,12 @@ export function flushOrders(vault) {
function pendOrderAsTransaction(pend) {
pendTransaction(async (signer)=> {
const contract = contractOrNull(pend.vault, vaultAbi, signer)
if( contract === null ) {
// console.log('pendTransaction')
let contract
try {
contract = await vaultContract(pend.vault, signer)
}
catch (e) {
console.error('vault contract was null while sending order transaction', pend.vault)
return null
}
@@ -491,15 +507,17 @@ export async function detectUpgrade() {
}
try {
console.log('factory', info.factory)
const factory = new ethers.Contract(info.factory, factoryAbi, provider)
const vault = new ethers.Contract(s.vault, vaultAbi, provider)
const [factory, vault] = await Promise.all([
newContract(info.factory, 'IVaultFactory', provider),
newContract(s.vault, 'IVault', provider),
])
const vaultLogic = await vault.logic()
const latestLogic = await factory.logic()
// const [vaultLogic, latestLogic] = await Promise.all( vault.logic(), factory.logic() )
console.log('vaultLogic / latestLogic', vaultLogic, latestLogic)
if ( vaultLogic !== latestLogic ) {
s.upgrade = latestLogic
const logic = new ethers.Contract(latestLogic, vaultAbi, provider)
const logic = await newContract(latestLogic, 'IVault', provider)
const version = await logic.version()
console.log(`found vault version ${version}`)
return version
@@ -514,7 +532,7 @@ export async function detectUpgrade() {
function upgradeSender(vault, logic) {
return async function (signer) {
const v = new ethers.Contract(vault, vaultAbi, signer)
const v = await vaultContract(vault, signer)
v.upgrade(logic)
}
}