chart-based route finding
This commit is contained in:
10
src/components/ChartPairSelector.vue
Normal file
10
src/components/ChartPairSelector.vue
Normal file
@@ -0,0 +1,10 @@
|
||||
<template>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
||||
11
src/components/NeedsChart.vue
Normal file
11
src/components/NeedsChart.vue
Normal file
@@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<slot v-if="co.chartReady"/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {useChartOrderStore} from "@/orderbuild.js";
|
||||
const co = useChartOrderStore()
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
</style>
|
||||
@@ -33,7 +33,7 @@
|
||||
import TokenChoice from "@/components/TokenChoice.vue"
|
||||
import {useOrderStore, useStore} from "@/store/store";
|
||||
import RoutePrice from "@/components/RoutePrice.vue";
|
||||
import {findRoute} from "@/blockchain/route.js";
|
||||
import {findRoute, routeFinder} from "@/blockchain/route.js";
|
||||
import {SingletonCoroutine, routeInverted} from "@/misc.js";
|
||||
import {computed, ref} from "vue";
|
||||
import {queryHelperContract} from "@/blockchain/contract.js";
|
||||
@@ -46,7 +46,7 @@ const tokenA = computed({
|
||||
return os.tokenA
|
||||
},
|
||||
set(value) {
|
||||
if( !os.tokenA || os.tokenA.address !== value.address ) {
|
||||
if( !os.tokenA || os.tokenA.a !== value.a ) {
|
||||
os.tokenA = value
|
||||
routeFinder.invoke()
|
||||
}
|
||||
@@ -57,7 +57,7 @@ const tokenB = computed({
|
||||
return os.tokenB
|
||||
},
|
||||
set(value) {
|
||||
if( !os.tokenB || os.tokenB.address !== value.address ) {
|
||||
if( !os.tokenB || os.tokenB.a !== value.address ) {
|
||||
os.tokenB = value
|
||||
routeFinder.invoke()
|
||||
}
|
||||
@@ -75,36 +75,6 @@ const routes = computed({
|
||||
}
|
||||
})
|
||||
|
||||
async function componentFindRoute() {
|
||||
const tokenA = os.tokenA
|
||||
const tokenB = os.tokenB
|
||||
os.routes = []
|
||||
if (!tokenA || !tokenB)
|
||||
return
|
||||
console.log('finding route', s.chainId.value, tokenA, tokenB)
|
||||
os.routesPending = true
|
||||
try {
|
||||
console.log('getting query helper')
|
||||
const helper = await queryHelperContract(s.helper, s.provider)
|
||||
if (!helper) {
|
||||
console.log('no helper')
|
||||
}
|
||||
else {
|
||||
const result = await findRoute(helper, s.chainId.value, tokenA, tokenB)
|
||||
console.log('found route', result)
|
||||
os.routes = result
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.log('ignoring routes exception', e)
|
||||
}
|
||||
finally {
|
||||
os.routesPending = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const routeFinder = new SingletonCoroutine(componentFindRoute,10)
|
||||
routeFinder.invoke()
|
||||
|
||||
|
||||
|
||||
@@ -14,8 +14,25 @@
|
||||
import {useChartOrderStore} from "@/orderbuild.js";
|
||||
import Toolbar from "@/components/chart/Toolbar.vue";
|
||||
import BuilderFactory from "@/components/chart/BuilderFactory.vue";
|
||||
import {addSymbolChangedCallback, removeSymbolChangedCallback} from "@/charts/chart.js";
|
||||
import {onBeforeUnmount} from "vue";
|
||||
import {useOrderStore} from "@/store/store.js";
|
||||
|
||||
import {routeFinder} from "@/blockchain/route.js";
|
||||
|
||||
const co = useChartOrderStore()
|
||||
const os = useOrderStore()
|
||||
|
||||
function changeSymbol(symbol) {
|
||||
console.log('changeSymbol', symbol)
|
||||
os.tokenA = symbol.base
|
||||
os.tokenB = symbol.quote
|
||||
routeFinder.invoke()
|
||||
}
|
||||
|
||||
|
||||
const oldSymbolChanged = addSymbolChangedCallback(changeSymbol)
|
||||
onBeforeUnmount(() => removeSymbolChangedCallback(changeSymbol) )
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user