route price lookup fixes

This commit is contained in:
Tim Olson
2023-11-18 15:57:50 -04:00
parent d1e304a562
commit 7293c101f8
5 changed files with 20 additions and 11 deletions

View File

@@ -4,6 +4,7 @@ import {useStore} from "@/store/store.js";
export function vaultAddress( owner, num=0) {
console.log('va', owner, num)
if( !owner )
return null
const s = useStore()

View File

@@ -2,7 +2,7 @@ import {socket} from "@/socket.js";
import {useStore} from "@/store/store.js";
import {Exchange} from "@/blockchain/orderlib.js";
import {uniswapV3PoolAddress} from "@/blockchain/uniswap.js";
import {ethers} from "ethers";
import {ethers, FixedNumber} from "ethers";
import {uniswapV3PoolAbi} from "@/blockchain/abi.js";
const subscriptionCounts = {} // key is route and value is a subscription counter
@@ -82,8 +82,12 @@ async function getPriceForRoute(route) {
const pool = new ethers.Contract(addr, uniswapV3PoolAbi, provider)
const got = await pool.slot0()
const [sqrtPrice,,,,,,] = got
const spn = Number(sqrtPrice)
const price = spn*spn/2**(96*2) * 10**(route.token0.decimals-route.token1.decimals)
const spn = BigInt(sqrtPrice)
let price = spn*spn * 10n**BigInt(route.token0.decimals-route.token1.decimals)
const format = {decimals:38,width:512,signed:false}; // 38 decimals is 127 bits
price = FixedNumber.fromValue(price,0,format)
price = price.div(FixedNumber.fromValue(2n**(96n*2n),0,format))
price = price.round(18).toString()
console.log(`price for ${route.token0.symbol}/${route.token1.symbol}`,price)
store.poolPrices[addr] = price
return price

View File

@@ -109,7 +109,7 @@ function discoverVaults() {
if( result.length )
flushOrders(result[0])
else
ensureVault()
ensureVault2(s.chainId, owner, 0)
}
})
}
@@ -136,15 +136,20 @@ async function _discoverVaults(owner) {
export function ensureVault() {
const s = useStore()
if( !s.chain ) {
ensureVault2(s.chainId, s.account, 0)
}
export function ensureVault2(chainId, owner, num) {
if( !chainId ) {
console.log('cannot create vault: no chain selected')
return
}
if( !s.account ) {
if( !owner ) {
console.log('cannot create vault: no account logged in')
return
}
socket.emit('ensureVault', s.chainId, s.account, 0)
socket.emit('ensureVault', chainId, owner, num)
}

View File

@@ -21,11 +21,10 @@ const price = computed(()=>{
if( !route || !(route.pool in s.poolPrices) )
return ''
let p = s.poolPrices[route.pool]
console.log('pool price is',typeof p, p)
if( !p )
return ''
p = Number(p) // TODO: Temporary workaround. Better to fix reason for p being set to string.
console.log('pool price is',typeof p, p)
p = FixedNumber.fromString(p)
p = FixedNumber.fromString(p).toUnsafeFloat()
if( props.inverted )
p = 1/p
return p.toPrecision(props.precision)

View File

@@ -31,7 +31,7 @@ socket.on('p', async (chainId, pool, price) => {
return
const prices = {}
prices[pool] = price
console.log('pool price from message', pool, price)
console.log('pool price from message', pool, typeof price, price)
const poolPrices = s.poolPrices
poolPrices[pool] = price
s.poolPrices = poolPrices