null & undefined handling
This commit is contained in:
@@ -5,8 +5,7 @@ import {useStore} from "@/store/store.js";
|
|||||||
|
|
||||||
export function vaultAddress( owner, num=0) {
|
export function vaultAddress( owner, num=0) {
|
||||||
const s = useStore()
|
const s = useStore()
|
||||||
console.log('vaultAddress', owner, s.factory, s.vaultInitCodeHash)
|
if( !owner || !s.factory || !s.vaultInitCodeHash )
|
||||||
if( !owner )
|
|
||||||
return null
|
return null
|
||||||
const salt = ethers.solidityPackedKeccak256(['address','uint8'],[owner,num])
|
const salt = ethers.solidityPackedKeccak256(['address','uint8'],[owner,num])
|
||||||
return ethers.getCreate2Address(s.factory, salt, s.vaultInitCodeHash)
|
return ethers.getCreate2Address(s.factory, salt, s.vaultInitCodeHash)
|
||||||
|
|||||||
@@ -106,13 +106,21 @@ function discoverVaults(owner) {
|
|||||||
|
|
||||||
const doDiscoverVaults = new SingletonCoroutine(_discoverVaults, 50, false)
|
const doDiscoverVaults = new SingletonCoroutine(_discoverVaults, 50, false)
|
||||||
async function _discoverVaults(owner) {
|
async function _discoverVaults(owner) {
|
||||||
console.log('_discoverVaults',owner)
|
|
||||||
const result = []
|
const result = []
|
||||||
|
const s = useStore()
|
||||||
|
if( !owner || !s.chainId || !s.account) {
|
||||||
|
s.vaults = []
|
||||||
|
return
|
||||||
|
}
|
||||||
// todo multi-vault scan
|
// todo multi-vault scan
|
||||||
|
// console.log('_discoverVaults',owner)
|
||||||
const num = 0
|
const num = 0
|
||||||
const addr = vaultAddress(owner, num)
|
const addr = vaultAddress(owner, num)
|
||||||
console.log(`vault ${num} at`, addr)
|
// console.log(`vault ${num} at`, addr)
|
||||||
const s = useStore()
|
if( addr === null ) {
|
||||||
|
s.vaults = []
|
||||||
|
return
|
||||||
|
}
|
||||||
const vault = new ethers.Contract(addr, vaultAbi, s.provider)
|
const vault = new ethers.Contract(addr, vaultAbi, s.provider)
|
||||||
let version = -1
|
let version = -1
|
||||||
try {
|
try {
|
||||||
@@ -127,7 +135,7 @@ async function _discoverVaults(owner) {
|
|||||||
catch (e) {
|
catch (e) {
|
||||||
console.log(`no vault ${num}`)
|
console.log(`no vault ${num}`)
|
||||||
}
|
}
|
||||||
if( s.account === owner ) { // double-check the account since it could have changed during our await
|
if( s.account == owner ) { // double-check the account since it could have changed during our await
|
||||||
s.vaults = result
|
s.vaults = result
|
||||||
if( pendingOrders.length )
|
if( pendingOrders.length )
|
||||||
if( result.length )
|
if( result.length )
|
||||||
|
|||||||
25
src/components/Footer.vue
Normal file
25
src/components/Footer.vue
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<template>
|
||||||
|
<v-footer class="text-center d-flex flex-column">
|
||||||
|
<div>
|
||||||
|
<v-btn icon="mdi-facebook" @click="window.open('https://facebook.com','facebook')"/>
|
||||||
|
<v-btn icon="mdi-twitter" @click="window.open('https://x.com','twitter')"/>
|
||||||
|
<v-btn icon="mdi-reddit" @click="window.open('https://reddit.com','reddit')"/>
|
||||||
|
<v-btn icon="mdi-discord" @click="window.open('https://discord.com','discord')"/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
Dexorder
|
||||||
|
</div>
|
||||||
|
</v-footer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {useStore} from "@/store/store";
|
||||||
|
|
||||||
|
const s = useStore()
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@use "src/styles/vars" as *;
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -26,7 +26,7 @@ function invert() {
|
|||||||
prefs.inverted[k] = !prefs.inverted[k]
|
prefs.inverted[k] = !prefs.inverted[k]
|
||||||
}
|
}
|
||||||
|
|
||||||
const adjValue = computed(() => !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).toPrecision(5))
|
||||||
|
|
||||||
const pair = computed(() => {
|
const pair = computed(() => {
|
||||||
const inToken = props.baseToken ? props.baseToken : token(props.baseAddr)
|
const inToken = props.baseToken ? props.baseToken : token(props.baseAddr)
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-app>
|
<v-app>
|
||||||
<default-bar/>
|
<app-bar/>
|
||||||
<nav-drawer/>
|
<nav-drawer/>
|
||||||
<default-view/>
|
<main-view/>
|
||||||
|
<footer/>
|
||||||
</v-app>
|
</v-app>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import DefaultBar from './AppBar.vue'
|
import AppBar from './AppBar.vue'
|
||||||
import DefaultView from './View.vue'
|
import MainView from './MainView.vue'
|
||||||
import {useStore} from "@/store/store.js";
|
|
||||||
import NavDrawer from "@/components/NavDrawer.vue";
|
import NavDrawer from "@/components/NavDrawer.vue";
|
||||||
|
import Footer from "@/components/Footer.vue";
|
||||||
|
import {useStore} from "@/store/store.js";
|
||||||
|
|
||||||
const s = useStore()
|
const s = useStore()
|
||||||
</script>
|
</script>
|
||||||
@@ -28,6 +28,7 @@ export class SingletonCoroutine {
|
|||||||
catch (e) {
|
catch (e) {
|
||||||
if( self.retry ) {
|
if( self.retry ) {
|
||||||
console.log('retrying', this.f, 'due to error', e)
|
console.log('retrying', this.f, 'due to error', e)
|
||||||
|
self.timeout = null
|
||||||
self.invoke(self.args)
|
self.invoke(self.args)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { createRouter, createWebHistory } from 'vue-router'
|
|||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
component: () => import('@/layouts/default/Default.vue'),
|
component: () => import('@/layouts/default/Layout.vue'),
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import {knownTokens} from "@/knownTokens.js";
|
import {knownTokens} from "@/knownTokens.js";
|
||||||
import {computed, ref} from "vue";
|
import {computed, ref} from "vue";
|
||||||
import {ethers} from "ethers";
|
|
||||||
import {onChainChanged} from "@/blockchain/wallet.js";
|
|
||||||
|
|
||||||
|
|
||||||
// USING THE STORE:
|
// USING THE STORE:
|
||||||
//
|
//
|
||||||
@@ -141,7 +138,7 @@ export const useOrderStore = defineStore('order', ()=> {
|
|||||||
// Order Input Forms
|
// Order Input Forms
|
||||||
// const tokenA = ref(null) // defined at top
|
// const tokenA = ref(null) // defined at top
|
||||||
// const tokenB = ref(null)
|
// const tokenB = ref(null)
|
||||||
const buy = ref(false)
|
const buy = ref(true)
|
||||||
const inverted = ref(false)
|
const inverted = ref(false)
|
||||||
const amount = ref(100) // todo adjust default
|
const amount = ref(100) // todo adjust default
|
||||||
const amountIsTokenA = ref(false) // todo adjust default
|
const amountIsTokenA = ref(false) // todo adjust default
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<TimedOrder/>
|
<!-- <TimedOrder/>-->
|
||||||
<!-- <Vault/>-->
|
<Vault/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
<!-- todo needs account -->
|
<!-- todo needs account -->
|
||||||
<needs-signer>
|
<needs-signer>
|
||||||
<vault :owner="s.account" :num="0"/>
|
<vault :owner="s.account" :num="0"/>
|
||||||
<new-order class="my-6"/>
|
|
||||||
<faucet class="mt-3"/>
|
<faucet class="mt-3"/>
|
||||||
|
<new-order class="my-6"/>
|
||||||
</needs-signer>
|
</needs-signer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user