diff --git a/src/blockchain/token.js b/src/blockchain/token.js
index 852f194..6ae3213 100644
--- a/src/blockchain/token.js
+++ b/src/blockchain/token.js
@@ -6,12 +6,14 @@ import {ethers} from "ethers";
// synchronous version may return null but will trigger a lookup
export function token(addr) {
+ console.log('token', addr)
if( !addr ) {
// console.log('ignoring call to token', addr)
return null
}
const s = useStore()
if( !(addr in s.tokens) ) {
+ // noinspection JSIgnoredPromiseFromCall
getToken(addr)
return null
}
diff --git a/src/components/Orders.vue b/src/components/Orders.vue
index c4cb47b..9bdbdb3 100644
--- a/src/components/Orders.vue
+++ b/src/components/Orders.vue
@@ -24,12 +24,7 @@
- {{ pairPrice(item.order.tokenIn, item.order.tokenOut, item.avg) }}
-
- {{ pair(item.order.tokenIn, item.order.tokenOut, vaultAddr, item.index) }}
-
+
Signing
@@ -101,12 +96,12 @@
import {FixedNumber} from "ethers";
import {useStore} from "@/store/store";
import {computed, defineAsyncComponent, reactive} from "vue";
-import {token} from "@/blockchain/token.js";
import Btn from "@/components/Btn.vue"
import {cancelAll, cancelOrder} from "@/blockchain/wallet.js";
-import {dateString} from "@/misc.js";
+import {dateString, pairPriceAddr} from "@/misc.js";
import {isOpen, OrderState} from "@/blockchain/orderlib.js";
import NewOrder from "@/components/NewOrder.vue";
+import PairPrice from "@/components/PairPrice.vue";
const TokenAmount = defineAsyncComponent(()=>import('./TokenAmount.vue'))
@@ -116,39 +111,6 @@ const vaultAddr = computed(()=>props.vault?props.vault:s.vault)
const inverted = reactive({})
-// todo create a Price component that keeps inversion flags in the store and defaults to stablecoins as the quote
-function pairPrice(inTokenAddr, outTokenAddr, price) {
- if( price === null )
- return ''
- const inToken = token(inTokenAddr)
- const outToken = token(outTokenAddr)
- if( !inToken || !outToken )
- return ''
-
- const decimals = inToken.decimals-outToken.decimals
- if( decimals > 0 )
- price /= 10 ** decimals
- else
- price *= 10 ** -decimals
- const token0 = inTokenAddr < outTokenAddr ? inTokenAddr : outTokenAddr
- const token1 = inTokenAddr > outTokenAddr ? inTokenAddr : outTokenAddr
- const invertedKey = [token0, token1];
- if( !(invertedKey in inverted) ) {
- // todo prefer stablecoins as the quote asset
- inverted[invertedKey] = false
- }
- const inv = inverted[invertedKey]
- return inv ? (1 / price).toPrecision(5) : price.toPrecision(5)
-}
-
-function pair(inTokenAddr, outTokenAddr, vaultAddr, index) {
- const inToken = token(inTokenAddr)
- const outToken = token(outTokenAddr)
- return !inToken || !outToken ? null : inverted[[vaultAddr,index]] ?
- outToken.symbol+'\\'+inToken.symbol : inToken.symbol+'\\'+outToken.symbol
-}
-
-
//
//
// | Date |
@@ -233,10 +195,14 @@ const orders = computed(()=>{
})
const fmtX18 = {decimals: 18, width: 256, signed: false};
st.filled = o.amountIsInput ? st.filledIn : st.filledOut
- st.avg = BigInt(st.filled) === 0n ? null :
- FixedNumber.fromValue(status.filledOut, 0, fmtX18)
- .div(FixedNumber.fromValue(status.filledIn, 0, fmtX18))
- .toUnsafeFloat().toPrecision(5) // todo precision
+ if(BigInt(st.filled) === 0n)
+ st.avg = null
+ else {
+ st.avg = FixedNumber.fromValue(status.filledOut, 0, fmtX18)
+ .div(FixedNumber.fromValue(status.filledIn, 0, fmtX18)).toUnsafeFloat();
+ if( o.tokenIn > o.tokenOut )
+ st.avg = 1/st.avg
+ }
st.trancheFilled = o.amountIsInput ? st.trancheFilledIn : st.trancheFilledOut
st.amountToken = o.amountIsInput ? o.tokenIn : o.tokenOut
st.input = o.amountIsInput ? o.amount : 0
@@ -270,12 +236,17 @@ function describeTrancheTime(st, isStart, t) {
function describeTrancheLine(st, isMin, b, m) {
// todo make this a PairPrice
if( b===0 && m===0 ) return ''
- // console.log('tranche line', isMin, b, m)
+ console.log('tranche line', isMin, b, m)
+ const inverted = st.order.tokenIn > st.order.tokenOut
+ const t0 = inverted ? st.order.tokenIn : st.order.tokenOut
+ const t1 = !inverted ? st.order.tokenIn : st.order.tokenOut
if( m !== 0 ) {
const limit = b + m * s.time
- return 'diagonal ' + pairPrice(st.order.tokenIn, st.order.tokenOut, limit)
+ const price = pairPriceAddr(t0, t1, limit);
+ return 'diagonal ' + (price === null ? null : price.toPrecision(5))
}
- return (isMin === st.order.amountIsInput ? 'dont-chase ' : 'limit ') + pairPrice(st.order.tokenIn, st.order.tokenOut, b)
+ const price = pairPriceAddr(t0, t1, b)
+ return (isMin === st.order.amountIsInput ? 'dont-chase ' : 'limit ') + (price === null ? null : price.toPrecision(5))
}
diff --git a/src/components/PairChoice.vue b/src/components/PairChoice.vue
index 9375598..d213553 100644
--- a/src/components/PairChoice.vue
+++ b/src/components/PairChoice.vue
@@ -42,11 +42,11 @@ const os = useOrderStore()
const tokenA = computed({
get() {
- return os.tokenA
+ return os.baseToken
},
set(value) {
- if( !os.tokenA || os.tokenA.address !== value.address ) {
- os.tokenA = value
+ if( !os.baseToken || os.baseToken.address !== value.address ) {
+ os.baseToken = value
routeFinder.invoke()
}
}
@@ -75,7 +75,7 @@ const routes = computed({
})
async function componentFindRoute() {
- const tokenA = os.tokenA
+ const tokenA = os.baseToken
const tokenB = os.tokenB
os.routes = []
if (!tokenA || !tokenB)
diff --git a/src/components/PairPrice.vue b/src/components/PairPrice.vue
index 8ef4760..24b1dd3 100644
--- a/src/components/PairPrice.vue
+++ b/src/components/PairPrice.vue
@@ -1,39 +1,38 @@
- {{adjValue}}
-
+
+ {{adjValue}}
+ {{pair}}
+
+