diff --git a/src/components/Btn.vue b/src/components/Btn.vue index 1c04d4f..74e0c58 100644 --- a/src/components/Btn.vue +++ b/src/components/Btn.vue @@ -1,6 +1,6 @@ - +  {{text}} @@ -10,7 +10,7 @@ import {useStore} from "@/store/store"; import {useAttrs} from "vue"; const s = useStore() -const props = defineProps(['icon', 'color']) +const props = defineProps(['icon', 'color', 'text']) const attrs = useAttrs() diff --git a/src/components/LadderOrder.vue b/src/components/LadderOrder.vue index 17bfa47..ddb8a74 100644 --- a/src/components/LadderOrder.vue +++ b/src/components/LadderOrder.vue @@ -1,22 +1,96 @@ - - - + + + + + + + + + FractionAmountPrice + + + + {{(100*fractions[i]).toFixed(1)}}% + {{(amounts[i]).toPrecision(5)}} {{os.amountToken.symbol}} + {{r}} + + + diff --git a/src/layouts/default/AppBar.vue b/src/layouts/default/AppBar.vue index 81f8911..daf0ddf 100644 --- a/src/layouts/default/AppBar.vue +++ b/src/layouts/default/AppBar.vue @@ -9,8 +9,7 @@ - - + diff --git a/src/orderbuild.js b/src/orderbuild.js index 77fcbf7..8fbe28f 100644 --- a/src/orderbuild.js +++ b/src/orderbuild.js @@ -2,16 +2,23 @@ import {routeInverted} from "@/misc.js"; import {newLimitConstraint, newTimeConstraint, TimeMode} from "@/blockchain/orderlib.js"; import {useOrderStore, useStore} from "@/store/store.js"; -export function limitConstraint() { - const s = useStore() - if (!s.limitPrice) - return null - const route = s.route + +export const maxFraction = 65535n // by contract definition of uint16 fraction + + +export function limitConstraint(price=null) { + const os = useOrderStore() + if( price === null ) { + price = os.limitPrice + if (!price) + return null + } + const route = os.route const inverted = routeInverted(route) - const isAbove = s.limitIsMinimum ^ inverted + const isAbove = os.limitIsMinimum ^ inverted const isRatio = false // todo ratios - const decimals = 10 ** (s.tokenA.decimals - s.tokenB.decimals) - const limit = inverted ? decimals / s.limitPrice : s.limitPrice / decimals + const decimals = 10 ** (os.tokenA.decimals - os.tokenB.decimals) + const limit = inverted ? decimals / price : price / decimals return newLimitConstraint(isAbove, isRatio, limit) } @@ -32,9 +39,8 @@ export function timesliceTranches() { } else { window = Math.round(duration / n) } - const oneHundredPercent = 65535n // by contract definition of uint16 fraction - const ceil = oneHundredPercent % BigInt(n) ? 1n : 0n - const amtPerTranche = oneHundredPercent / BigInt(n) + ceil + const ceil = maxFraction % BigInt(n) ? 1n : 0n + const amtPerTranche = maxFraction / BigInt(n) + ceil duration -= 15 // subtract 15 seconds so the last tranche completes before the deadline for (let i = 0; i < n; i++) { const start = Math.floor(i * (duration / Math.max((n - 1), 1))) diff --git a/src/router/index.js b/src/router/index.js index fb534b4..ed286fb 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -28,7 +28,12 @@ const routes = [ // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. - component: () => import(/* webpackChunkName: "ordersview" */ '@/views/TwapView.vue'), + component: () => import(/* webpackChunkName: "twap" */ '@/components/TimedOrder.vue'), + }, + { + path: '/ladder', + name: 'Ladder', + component: () => import(/* webpackChunkName: "ladder" */ '@/components/LadderOrder.vue'), }, { path: '/vault', diff --git a/src/views/OrdersView.vue b/src/views/OrdersView.vue index a443ea9..6a5a58c 100644 --- a/src/views/OrdersView.vue +++ b/src/views/OrdersView.vue @@ -3,8 +3,8 @@ - New Dexorder + @@ -15,8 +15,8 @@ import Orders from "@/components/Orders.vue"; import NeedsSigner from "@/components/NeedsSigner.vue"; import NeedsProvider from "@/components/NeedsProvider.vue"; -import Btn from "@/components/Btn.vue"; import PhoneCard from "@/components/PhoneCard.vue"; +import NewOrder from "@/components/NewOrder.vue";