token amount bugfixes

This commit is contained in:
Tim
2024-03-27 16:18:44 -04:00
parent 204c63f1b9
commit 6a01e5bab8
3 changed files with 20 additions and 19 deletions

View File

@@ -1,7 +1,7 @@
<template> <template>
<span> <span>
{{adjValue}} {{adjValue}}
<btn v-if="showBtn && adjValue!==null" size="small" variant="plain" @click="invert()">{{pair}}</btn> <btn v-if="showBtn && adjValue!==null" size="small" variant="plain" @click="invert()">{{pair?pair.toPrecision(5):''}}</btn>
</span> </span>
<!-- todo optional pair label and inversion button --> <!-- todo optional pair label and inversion button -->
</template> </template>
@@ -18,20 +18,20 @@ const props = defineProps(['value', 'baseToken', 'quoteToken', 'baseAddr', 'quot
const s = useStore() const s = useStore()
const prefs = usePrefStore() const prefs = usePrefStore()
const base = computed(() => props.baseToken ? props.baseToken : token(props.baseAddr)) const base = computed(() => props.baseToken ? props.baseToken : token(s.chainId, props.baseAddr))
const quote = computed(() => props.quoteToken ? props.quoteToken : token(props.quoteAddr)) const quote = computed(() => props.quoteToken ? props.quoteToken : token(s.chainId, props.quoteAddr))
function invert() { function invert() {
const k = pairKey(base.value,quote.value) const k = pairKey(base.value,quote.value)
prefs.inverted[k] = !prefs.inverted[k] prefs.inverted[k] = !prefs.inverted[k]
} }
const adjValue = computed(() => props.value === null || props.value === undefined || !base.value || !quote.value ? null : pairPrice(base.value, quote.value, props.value, props.decimals).toPrecision(5)) const adjValue = computed(() => props.value === null || props.value === undefined || !base.value || !quote.value ? null : pairPrice(base.value, quote.value, props.value, props.decimals))
const pair = computed(() => { const pair = computed(() => {
const inToken = props.baseToken ? props.baseToken : token(props.baseAddr) const inToken = props.baseToken ? props.baseToken : token(s.chainId, props.baseAddr)
const outToken = props.quoteToken ? props.quoteToken : token(props.quoteAddr) const outToken = props.quoteToken ? props.quoteToken : token(s.chainId, props.quoteAddr)
return !inToken || !outToken ? '___\\___' : prefs.inverted[pairKey(inToken, outToken)] ? return !inToken || !outToken ? '___\\___' : prefs.inverted[pairKey(s.chainId, inToken, outToken)] ?
outToken.symbol + '\\' + inToken.symbol : inToken.symbol + '\\' + outToken.symbol outToken.symbol + '\\' + inToken.symbol : inToken.symbol + '\\' + outToken.symbol
}) })

View File

@@ -6,11 +6,11 @@
import {useStore} from "@/store/store"; import {useStore} from "@/store/store";
import {getToken} from "@/blockchain/token.js"; import {getToken} from "@/blockchain/token.js";
import {FixedNumber} from "ethers"; import {FixedNumber} from "ethers";
import {computed, ref} from "vue"; import {computed} from "vue";
const s = useStore() const s = useStore()
const props = defineProps(['addr', 'amount', 'raw']) const props = defineProps(['addr', 'amount', 'raw'])
const token = await getToken(props.addr) const token = await getToken(s.chainId, props.addr)
const fmtAmount = computed(() => { const fmtAmount = computed(() => {
if( props.amount === null || props.amount === undefined ) if( props.amount === null || props.amount === undefined )
return '' return ''

View File

@@ -90,33 +90,34 @@ export function timestamp(date = null) {
} }
export function pairKey(tokenA, tokenB) { export function pairKey(chainId, tokenA, tokenB) {
const token0 = tokenA.a < tokenB.a ? tokenA.a : tokenB.a const token0 = tokenA.a < tokenB.a ? tokenA.a : tokenB.a
const token1 = tokenA.a > tokenB.a ? tokenA.a : tokenB.a const token1 = tokenA.a > tokenB.a ? tokenA.a : tokenB.a
return [token0, token1]; return [chainId, token0, token1];
} }
export function pairPriceAddr(baseTokenAddr, quoteTokenAddr, price) { export function pairPriceAddr(chainId, baseTokenAddr, quoteTokenAddr, price) {
const baseToken = token(baseTokenAddr) const baseToken = token(chainId, baseTokenAddr)
const quoteToken = token(quoteTokenAddr) const quoteToken = token(chainId, quoteTokenAddr)
if (!baseToken || !quoteToken) if (!baseToken || !quoteToken)
return null return null
return pairPrice(baseToken, quoteToken, price) return pairPrice(chainId, baseToken, quoteToken, price)
} }
export function pairPrice(baseToken, quoteToken, price, decimals = null) { export function pairPrice(chainId, baseToken, quoteToken, price, decimals = null) {
if (!price) return null
console.log('pairPrice', chainId, baseToken, quoteToken, price, decimals)
if (price === null || price === undefined) if (price === null || price === undefined)
return price return price
if (decimals === null) if (decimals === null)
decimals = baseToken.decimals - quoteToken.decimals decimals = baseToken.d - quoteToken.d
console.log('pairPrice', baseToken, quoteToken, price, decimals)
if (decimals >= 0) if (decimals >= 0)
price /= 10 ** decimals price /= 10 ** decimals
else else
price *= 10 ** -decimals price *= 10 ** -decimals
const invertedKey = pairKey(baseToken, quoteToken); const invertedKey = pairKey(chainId, baseToken, quoteToken);
const prefs = usePrefStore() const prefs = usePrefStore()
if (!(invertedKey in prefs.inverted)) { if (!(invertedKey in prefs.inverted)) {
// todo prefer stablecoins as the quote asset // todo prefer stablecoins as the quote asset