null & undefined handling

This commit is contained in:
Tim Olson
2024-01-07 23:12:57 -04:00
parent 8fabfe0d2b
commit 52a41c6f81
11 changed files with 52 additions and 20 deletions

View File

@@ -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)

View File

@@ -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
View 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>

View File

@@ -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)

View File

@@ -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>

View File

@@ -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

View File

@@ -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: '',

View File

@@ -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

View File

@@ -1,6 +1,6 @@
<template> <template>
<TimedOrder/> <!-- <TimedOrder/>-->
<!-- <Vault/>--> <Vault/>
</template> </template>
<script setup> <script setup>

View File

@@ -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>