orderspec refactor for server and web
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
export function applyFills( orderStatus, filled ) {
|
||||
// console.log('apply fills', orderStatus, filled)
|
||||
console.log('apply fills', orderStatus, filled)
|
||||
orderStatus[4] = filled[0][0]
|
||||
orderStatus[5] = filled[0][1]
|
||||
for( const i in filled[1] ) {
|
||||
@@ -7,7 +7,7 @@ export function applyFills( orderStatus, filled ) {
|
||||
orderStatus[6][i] = filledIn
|
||||
orderStatus[7][i] = filledOut
|
||||
}
|
||||
// console.log('applied fills', orderStatus)
|
||||
console.log('applied fills', orderStatus)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import {useStore} from "@/store/store.js";
|
||||
|
||||
export function vaultAddress( owner, num=0) {
|
||||
const s = useStore()
|
||||
// console.log('vaultAddress', owner, s.factory, s.vaultInitCodeHash)
|
||||
console.log('vaultAddress', owner, s.factory, s.vaultInitCodeHash)
|
||||
if( !owner )
|
||||
return null
|
||||
const salt = ethers.solidityPackedKeccak256(['address','uint8'],[owner,num])
|
||||
|
||||
@@ -86,16 +86,91 @@ export function newTranche({
|
||||
}
|
||||
}
|
||||
|
||||
// enum Exchange {
|
||||
// UniswapV2,
|
||||
// UniswapV3
|
||||
// }
|
||||
export const Exchange = {
|
||||
UniswapV2: 0,
|
||||
UniswapV3: 1,
|
||||
}
|
||||
|
||||
export function sqrtX96(value) {
|
||||
return BigInt(Math.round(Math.sqrt(value * 2 ** (96*2))))
|
||||
export const OrderState = {
|
||||
Signing: -1,
|
||||
Unknown: 0,
|
||||
Open: 1,
|
||||
Canceled: 2,
|
||||
Filled: 3,
|
||||
Expired: 4,
|
||||
Underfunded: 5,
|
||||
}
|
||||
|
||||
export function parseOrderStatus(status) {
|
||||
let [
|
||||
order,
|
||||
state,
|
||||
start,
|
||||
ocoGroup,
|
||||
filledIn,
|
||||
filledOut,
|
||||
trancheFilledIn,
|
||||
trancheFilledOut,
|
||||
] = status
|
||||
order = parseOrder(order)
|
||||
filledIn = BigInt(filledIn)
|
||||
filledOut = BigInt(filledOut)
|
||||
trancheFilledIn = trancheFilledIn.map((f)=>BigInt(f))
|
||||
trancheFilledOut = trancheFilledOut.map((f)=>BigInt(f))
|
||||
return {
|
||||
order, state, start, ocoGroup, filledIn, filledOut, trancheFilledIn, trancheFilledOut,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function parseOrder(order) {
|
||||
let [
|
||||
tokenIn,
|
||||
tokenOut,
|
||||
route,
|
||||
amount,
|
||||
minFillAmount,
|
||||
amountIsInput,
|
||||
outputDirectlyToOwner,
|
||||
chainOrder,
|
||||
tranches,
|
||||
] = order
|
||||
route = parseRoute(route)
|
||||
amount = BigInt(amount)
|
||||
minFillAmount = BigInt(minFillAmount)
|
||||
tranches = tranches.map(parseTranche)
|
||||
return {
|
||||
tokenIn, tokenOut, route, amount, minFillAmount, amountIsInput, outputDirectlyToOwner, chainOrder, tranches
|
||||
}
|
||||
}
|
||||
|
||||
export function parseRoute(route) {
|
||||
let [exchange, fee] = route
|
||||
return {exchange, fee} // todo enum?
|
||||
}
|
||||
|
||||
export function parseTranche(tranche) {
|
||||
let [
|
||||
fraction,
|
||||
startTimeIsRelative,
|
||||
endTimeIsRelative,
|
||||
minIsBarrier,
|
||||
maxIsBarrier,
|
||||
marketOrder,
|
||||
_reserved5,
|
||||
_reserved6,
|
||||
_reserved7,
|
||||
_reserved8,
|
||||
_reserved16,
|
||||
startTime,
|
||||
endTime,
|
||||
minIntercept,
|
||||
minSlope,
|
||||
maxIntercept,
|
||||
maxSlope,
|
||||
] = tranche
|
||||
return {
|
||||
fraction, startTimeIsRelative, endTimeIsRelative, minIsBarrier, maxIsBarrier, marketOrder,
|
||||
startTime, endTime, minIntercept, minSlope, maxIntercept, maxSlope,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,10 @@ import {ethers} from "ethers";
|
||||
|
||||
// synchronous version may return null but will trigger a lookup
|
||||
export function token(addr) {
|
||||
if( !addr ) {
|
||||
// console.log('ignoring call to token', addr)
|
||||
return null
|
||||
}
|
||||
const s = useStore()
|
||||
if( !(addr in s.tokens) ) {
|
||||
getToken(addr)
|
||||
@@ -23,35 +27,48 @@ export async function getToken(addr) {
|
||||
return s.tokens[addr]
|
||||
}
|
||||
|
||||
|
||||
const _inFlightLookups = {}
|
||||
|
||||
export async function addExtraToken(addr) {
|
||||
const prom = new Promise((resolve) => {
|
||||
const s = useStore()
|
||||
const chainId = s.chainId
|
||||
console.log('querying token', addr)
|
||||
socket.emit('lookupToken', chainId, addr, (info) => {
|
||||
console.log('server token info', info)
|
||||
if (info !== null) {
|
||||
s.addToken(chainId, info)
|
||||
resolve(info)
|
||||
}
|
||||
else {
|
||||
if( s.provider===null ) {
|
||||
console.log('warning: token lookup cancelled due to null provider', addr)
|
||||
resolve(null)
|
||||
return
|
||||
}
|
||||
const token = new ethers.Contract(addr, erc20Abi, s.provider)
|
||||
Promise.all( [token.symbol(), token.decimals()] ).then((symbol,decimals)=>{
|
||||
info = {
|
||||
address: addr,
|
||||
symbol: symbol,
|
||||
decimals: decimals,
|
||||
}
|
||||
if( !addr ) {
|
||||
console.log('ignoring call to add extra token', addr)
|
||||
return
|
||||
}
|
||||
if( !_inFlightLookups[addr] ) {
|
||||
_inFlightLookups[addr] = true
|
||||
const prom = new Promise((resolve) => {
|
||||
const s = useStore()
|
||||
const chainId = s.chainId
|
||||
console.log('querying token', addr)
|
||||
socket.emit('lookupToken', chainId, addr, (info) => {
|
||||
console.log('server token info', addr, info)
|
||||
if (info !== null) {
|
||||
s.addToken(chainId, info)
|
||||
resolve(info)
|
||||
})
|
||||
}
|
||||
}
|
||||
else {
|
||||
if( s.provider===null ) {
|
||||
console.log('warning: token lookup cancelled due to null provider', addr)
|
||||
resolve(null)
|
||||
}
|
||||
else {
|
||||
const token = new ethers.Contract(addr, erc20Abi, s.provider)
|
||||
Promise.all( [token.symbol(), token.decimals()] ).then((symbol,decimals)=>{
|
||||
info = {
|
||||
address: addr,
|
||||
symbol: symbol,
|
||||
decimals: decimals,
|
||||
}
|
||||
s.addToken(chainId, info)
|
||||
resolve(info)
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
return await prom
|
||||
const result = await prom
|
||||
delete _inFlightLookups[addr]
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,6 +96,7 @@ let pendingOrders = []
|
||||
|
||||
function discoverVaults(owner) {
|
||||
const s = useStore()
|
||||
console.log('discoverVaults', owner)
|
||||
if( owner === null )
|
||||
s.vaults = []
|
||||
else
|
||||
@@ -112,6 +113,7 @@ function discoverVaults(owner) {
|
||||
}
|
||||
|
||||
async function _discoverVaults(owner) {
|
||||
console.log('_discoverVaults',owner)
|
||||
const result = []
|
||||
// todo multi-vault scan
|
||||
const num = 0
|
||||
@@ -174,6 +176,7 @@ export async function pendOrder(order) {
|
||||
|
||||
|
||||
export async function cancelOrder(vault, orderIndex) {
|
||||
console.log('cancel order', vault, orderIndex)
|
||||
pendTransaction(async (signer)=> {
|
||||
const contract = contractOrNull(vault, vaultAbi, signer)
|
||||
if( contract === null ) {
|
||||
|
||||
Reference in New Issue
Block a user