vault fixes; order total fill reactivity fix; provider fix
This commit is contained in:
@@ -117,7 +117,7 @@ export function isOpen(state) {
|
|||||||
return state >= 1 && state < 3
|
return state >= 1 && state < 3
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseOrderStatus(status) {
|
export function parseOrderStatus(chainId, status) {
|
||||||
let [
|
let [
|
||||||
order,
|
order,
|
||||||
fillFeeBP,
|
fillFeeBP,
|
||||||
@@ -135,7 +135,7 @@ export function parseOrderStatus(status) {
|
|||||||
trancheFilledIn = trancheFilledIn.map((f)=>BigInt(f))
|
trancheFilledIn = trancheFilledIn.map((f)=>BigInt(f))
|
||||||
trancheFilledOut = trancheFilledOut.map((f)=>BigInt(f))
|
trancheFilledOut = trancheFilledOut.map((f)=>BigInt(f))
|
||||||
return {
|
return {
|
||||||
order, fillFeeBP, state, start, ocoGroup, filledIn, filledOut, trancheFilledIn, trancheFilledOut,
|
chainId, order, fillFeeBP, state, start, ocoGroup, filledIn, filledOut, trancheFilledIn, trancheFilledOut,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,7 @@ import {vaultAbi} from "@/blockchain/abi.js";
|
|||||||
import {SingletonCoroutine, uuid} from "@/misc.js";
|
import {SingletonCoroutine, uuid} from "@/misc.js";
|
||||||
import {defineStore} from "pinia";
|
import {defineStore} from "pinia";
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
import {metadata, metadataMap} from "@/version.js";
|
import {metadataMap} from "@/version.js";
|
||||||
import {OrderState} from "@/blockchain/orderlib.js";
|
|
||||||
|
|
||||||
|
|
||||||
export const useWalletStore = defineStore('wallet', ()=>{
|
export const useWalletStore = defineStore('wallet', ()=>{
|
||||||
@@ -36,13 +35,16 @@ export function onChainChanged(chainId) {
|
|||||||
const store = useStore()
|
const store = useStore()
|
||||||
const ws = useWalletStore()
|
const ws = useWalletStore()
|
||||||
if( chainId !== ws.chainId ) {
|
if( chainId !== ws.chainId ) {
|
||||||
console.log('chain changed', chainId)
|
console.log('wallet chain changed', chainId)
|
||||||
ws.chainId = chainId
|
ws.chainId = chainId
|
||||||
if (chainId.toString() in metadataMap) {
|
if (chainId.toString() in metadataMap) {
|
||||||
console.log('app chain changed', chainId)
|
console.log('app chain changed', chainId)
|
||||||
store.chainId = chainId
|
store.chainId = chainId
|
||||||
store.account = null
|
store.account = null
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
console.log('app chain NOT changed')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,7 +126,7 @@ const errorHandlingProxy = {
|
|||||||
|
|
||||||
|
|
||||||
export async function connectProvider(chainId) {
|
export async function connectProvider(chainId) {
|
||||||
console.log('connecting provider to chainId', chainId)
|
console.log('connectProvider', chainId)
|
||||||
try {
|
try {
|
||||||
return new ethers.BrowserProvider(window.ethereum, chainId)
|
return new ethers.BrowserProvider(window.ethereum, chainId)
|
||||||
}
|
}
|
||||||
@@ -143,6 +145,7 @@ export async function connectWallet(chainId) {
|
|||||||
const p = await connectProvider(chainId)
|
const p = await connectProvider(chainId)
|
||||||
if (p!==null) {
|
if (p!==null) {
|
||||||
try {
|
try {
|
||||||
|
console.log('getSigner')
|
||||||
return await p.getSigner();
|
return await p.getSigner();
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
@@ -195,7 +198,12 @@ async function _discoverVaults(owner) {
|
|||||||
s.vaults = []
|
s.vaults = []
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const vault = new ethers.Contract(addr, vaultAbi, s.provider)
|
const provider = s.provider;
|
||||||
|
if (!provider) {
|
||||||
|
console.log('No provider')
|
||||||
|
return // do not change whatever was already found
|
||||||
|
}
|
||||||
|
const vault = new ethers.Contract(addr, vaultAbi, provider)
|
||||||
let version = -1
|
let version = -1
|
||||||
try {
|
try {
|
||||||
version = await vault.version();
|
version = await vault.version();
|
||||||
@@ -211,6 +219,7 @@ async function _discoverVaults(owner) {
|
|||||||
console.log(`no vault ${num} at ${addr}`)
|
console.log(`no vault ${num} at ${addr}`)
|
||||||
else
|
else
|
||||||
console.error(`discoverVaults failed`, e)
|
console.error(`discoverVaults failed`, e)
|
||||||
|
return // do not change what was already found todo is this correct?
|
||||||
}
|
}
|
||||||
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
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ import Btn from "@/components/Btn.vue";
|
|||||||
import {socket} from "@/socket.js";
|
import {socket} from "@/socket.js";
|
||||||
import {metadata} from "@/version.js";
|
import {metadata} from "@/version.js";
|
||||||
|
|
||||||
|
const DISABLED_DURATION = 60_000;
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
text: {default:'GIB!'},
|
text: {default:'GIB!'},
|
||||||
})
|
})
|
||||||
@@ -78,7 +80,7 @@ function gib() {
|
|||||||
if (Object.keys(tokenAmounts).length>0) {
|
if (Object.keys(tokenAmounts).length>0) {
|
||||||
disabled.value = true
|
disabled.value = true
|
||||||
socket.emit('gib', s.chainId, s.account, s.vault, tokenAmounts )
|
socket.emit('gib', s.chainId, s.account, s.vault, tokenAmounts )
|
||||||
setTimeout(()=>disabled.value=false, 60_000)
|
setTimeout(()=>disabled.value=false, DISABLED_DURATION)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,20 +14,15 @@ let lastValue = props.touch
|
|||||||
|
|
||||||
function pulse() {
|
function pulse() {
|
||||||
if (props.touch === lastValue) return
|
if (props.touch === lastValue) return
|
||||||
console.log(`value changed from ${lastValue} to ${props.touch}`)
|
|
||||||
lastValue = props.touch
|
lastValue = props.touch
|
||||||
const e = element.value;
|
const e = element.value;
|
||||||
console.log('element', e)
|
|
||||||
if (!e.classList.contains('pulse')) {
|
if (!e.classList.contains('pulse')) {
|
||||||
// add class for the first time
|
// add class for the first time
|
||||||
console.log('first pulse')
|
|
||||||
e.classList.add('pulse')
|
e.classList.add('pulse')
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// restart
|
// restart
|
||||||
console.log('reset pulse')
|
|
||||||
e.getAnimations().forEach((a) => {
|
e.getAnimations().forEach((a) => {
|
||||||
console.log('animation', a)
|
|
||||||
a.cancel();
|
a.cancel();
|
||||||
a.play();
|
a.play();
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -4,29 +4,37 @@
|
|||||||
item-selectable="selectable" :show-select="false" :show-expand="true">
|
item-selectable="selectable" :show-select="false" :show-expand="true">
|
||||||
<template v-slot:item.start="{ value }">{{ dateString(value) }}</template>
|
<template v-slot:item.start="{ value }">{{ dateString(value) }}</template>
|
||||||
<template v-slot:item.input="{ item }">
|
<template v-slot:item.input="{ item }">
|
||||||
<suspense>
|
<span v-if="item.order.amountIsInput">
|
||||||
<span v-if="item.order.amountIsInput">
|
<span v-if="item.state > OrderState.Signing">
|
||||||
<pulse :touch="item.filledIn">
|
<suspense>
|
||||||
<token-amount :addr="item.order.tokenIn" :amount="item.filledIn" :raw="true"/>
|
<pulse :touch="item.filledIn">
|
||||||
</pulse>
|
<token-amount :chain-id="item.chainId" :addr="item.order.tokenIn" :amount="item.filledIn" :raw="true"/>
|
||||||
|
</pulse>
|
||||||
|
</suspense>
|
||||||
/
|
/
|
||||||
<token-amount :addr="item.order.tokenIn" :amount="item.order.amount"/>
|
|
||||||
</span>
|
</span>
|
||||||
</suspense>
|
<suspense>
|
||||||
|
<token-amount :chain-id="item.chainId" :addr="item.order.tokenIn" :amount="item.order.amount"/>
|
||||||
|
</suspense>
|
||||||
|
</span>
|
||||||
<suspense>
|
<suspense>
|
||||||
<token-symbol :addr="item.order.tokenIn" v-if="!item.order.amountIsInput"/>
|
<token-symbol :addr="item.order.tokenIn" v-if="!item.order.amountIsInput"/>
|
||||||
</suspense>
|
</suspense>
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:item.output="{ item }">
|
<template v-slot:item.output="{ item }">
|
||||||
<suspense>
|
<span v-if="!item.order.amountIsInput">
|
||||||
<span v-if="!item.order.amountIsInput">
|
<span v-if="item.state > OrderState.Signing">
|
||||||
<pulse :touch="item.filledOut">
|
<suspense>
|
||||||
<token-amount :addr="item.order.tokenOut" :amount="item.filledOut" :raw="true"/>
|
<pulse :touch="item.filledOut">
|
||||||
</pulse>
|
<token-amount :chain-id="item.chainId" :addr="item.order.tokenOut" :amount="item.filledOut" :raw="true"/>
|
||||||
|
</pulse>
|
||||||
|
</suspense>
|
||||||
/
|
/
|
||||||
<token-amount :addr="item.order.tokenOut" :amount="item.order.amount"/>
|
|
||||||
</span>
|
</span>
|
||||||
</suspense>
|
<suspense>
|
||||||
|
<token-amount :chain-id="item.chainId" :addr="item.order.tokenOut" :amount="item.order.amount"/>
|
||||||
|
</suspense>
|
||||||
|
</span>
|
||||||
<suspense>
|
<suspense>
|
||||||
<token-symbol :addr="item.order.tokenOut" v-if="item.order.amountIsInput"/>
|
<token-symbol :addr="item.order.tokenOut" v-if="item.order.amountIsInput"/>
|
||||||
</suspense>
|
</suspense>
|
||||||
@@ -94,14 +102,14 @@
|
|||||||
<suspense>
|
<suspense>
|
||||||
<span v-if="item.state > OrderState.Signing">
|
<span v-if="item.state > OrderState.Signing">
|
||||||
<pulse :touch="item.trancheFilled[i]">
|
<pulse :touch="item.trancheFilled[i]">
|
||||||
<token-amount :addr="item.amountToken" :amount="item.trancheFilled[i]" :raw="true"/>
|
<token-amount :chain-id="item.chainId" :addr="item.amountToken" :amount="item.trancheFilled[i]" :raw="true"/>
|
||||||
</pulse>
|
</pulse>
|
||||||
/
|
/
|
||||||
</span>
|
</span>
|
||||||
</suspense>
|
</suspense>
|
||||||
<suspense>
|
<suspense>
|
||||||
<span>
|
<span>
|
||||||
<token-amount :addr="item.amountToken" :amount="item.order.amount*BigInt(t.fraction)/65535n"/>
|
<token-amount :chain-id="item.chainId" :addr="item.amountToken" :amount="item.order.amount*BigInt(t.fraction)/65535n"/>
|
||||||
</span>
|
</span>
|
||||||
</suspense>
|
</suspense>
|
||||||
</td>
|
</td>
|
||||||
@@ -209,6 +217,7 @@ const orders = computed(()=>{
|
|||||||
for (const pend of ws.pendingOrders) {
|
for (const pend of ws.pendingOrders) {
|
||||||
console.log('pended order', pend)
|
console.log('pended order', pend)
|
||||||
result.push({
|
result.push({
|
||||||
|
chainId: pend.chainId,
|
||||||
id: pend.id,
|
id: pend.id,
|
||||||
start: pend.placementTime,
|
start: pend.placementTime,
|
||||||
order: pend.order,
|
order: pend.order,
|
||||||
@@ -222,19 +231,23 @@ const orders = computed(()=>{
|
|||||||
const vault = vaultAddr.value;
|
const vault = vaultAddr.value;
|
||||||
if( vault in s.orders ) {
|
if( vault in s.orders ) {
|
||||||
for (const [index, status] of Object.entries(s.orders[vault]).reverse()) {
|
for (const [index, status] of Object.entries(s.orders[vault]).reverse()) {
|
||||||
const st = {...status}
|
// const st = {...status}
|
||||||
const o = {...st.order}
|
// const o = {...st.order}
|
||||||
|
const st = status
|
||||||
|
const o = st.order
|
||||||
st.order = o
|
st.order = o
|
||||||
console.log('order status', st)
|
console.log('order status', st)
|
||||||
result.push(st)
|
result.push(st)
|
||||||
st.id = `${vault}|${index}`
|
st.id = `${vault}|${index}`
|
||||||
st.index = parseInt(index)
|
st.index = parseInt(index)
|
||||||
|
/*
|
||||||
o.tranches = o.tranches.map((tranche)=>{
|
o.tranches = o.tranches.map((tranche)=>{
|
||||||
const t = {...tranche}
|
const t = {...tranche}
|
||||||
// t.startTime = t.startTimeIsRelative ? intervalString(t.startTime) : dateString(t.startTime)
|
// t.startTime = t.startTimeIsRelative ? intervalString(t.startTime) : dateString(t.startTime)
|
||||||
// t.endTime = t.endTimeIsRelative ? intervalString(t.endTime) : dateString(t.endTime)
|
// t.endTime = t.endTimeIsRelative ? intervalString(t.endTime) : dateString(t.endTime)
|
||||||
return t
|
return t
|
||||||
})
|
})
|
||||||
|
*/
|
||||||
const fmtX18 = {decimals: 18, width: 256, signed: false};
|
const fmtX18 = {decimals: 18, width: 256, signed: false};
|
||||||
st.filled = o.amountIsInput ? st.filledIn : st.filledOut
|
st.filled = o.amountIsInput ? st.filledIn : st.filledOut
|
||||||
if(BigInt(st.filled) === 0n)
|
if(BigInt(st.filled) === 0n)
|
||||||
|
|||||||
@@ -3,14 +3,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import {useStore} from "@/store/store";
|
|
||||||
import {getToken} from "@/blockchain/token.js";
|
import {getToken} from "@/blockchain/token.js";
|
||||||
import {FixedNumber} from "ethers";
|
import {FixedNumber} from "ethers";
|
||||||
import {computed} from "vue";
|
import {computed} from "vue";
|
||||||
|
|
||||||
const s = useStore()
|
const props = defineProps(['chainId', 'addr', 'amount', 'raw'])
|
||||||
const props = defineProps(['addr', 'amount', 'raw'])
|
const token = await getToken(props.chainId, props.addr)
|
||||||
const token = await getToken(s.chainId, props.addr)
|
|
||||||
const fmtAmount = computed(() => {
|
const fmtAmount = computed(() => {
|
||||||
if( props.amount === null || props.amount === undefined )
|
if( props.amount === null || props.amount === undefined )
|
||||||
return ''
|
return ''
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ socket.on('vb', async (chainId, vault, balances) => {
|
|||||||
|
|
||||||
socket.on('vaults', (chainId, owner, vaults)=>{
|
socket.on('vaults', (chainId, owner, vaults)=>{
|
||||||
const s = useStore()
|
const s = useStore()
|
||||||
console.log('vaults', vaults)
|
console.log('vaults', chainId, owner, vaults)
|
||||||
if( s.chainId !== chainId || s.account !== owner )
|
if( s.chainId !== chainId || s.account !== owner )
|
||||||
return
|
return
|
||||||
if( vaults.length > s.vaults.length ) {
|
if( vaults.length > s.vaults.length ) {
|
||||||
@@ -56,7 +56,7 @@ function handleOrderStatus(chainId, vault, orderIndex, status) {
|
|||||||
if( s.chainId !== chainId )
|
if( s.chainId !== chainId )
|
||||||
return
|
return
|
||||||
// message 'o' is a single order status
|
// message 'o' is a single order status
|
||||||
const parsed = parseOrderStatus(status);
|
const parsed = parseOrderStatus(chainId, status);
|
||||||
console.log('o', chainId, vault, orderIndex, status, parsed)
|
console.log('o', chainId, vault, orderIndex, status, parsed)
|
||||||
if( !(vault in s.orders) )
|
if( !(vault in s.orders) )
|
||||||
s.orders[vault] = {}
|
s.orders[vault] = {}
|
||||||
@@ -95,6 +95,6 @@ socket.on( 'of', (chainId, vault, orderIndex, filled)=>{
|
|||||||
status.trancheFilledIn[i] = BigInt(filledIn)
|
status.trancheFilledIn[i] = BigInt(filledIn)
|
||||||
status.trancheFilledOut[i] = BigInt(filledOut)
|
status.trancheFilledOut[i] = BigInt(filledOut)
|
||||||
}
|
}
|
||||||
s.orders[vault][orderIndex] = status
|
// s.orders[vault][orderIndex] = status
|
||||||
console.log('applied fills', status)
|
console.log('applied fills', status)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -63,14 +63,15 @@ export const useStore = defineStore('app', ()=> {
|
|||||||
const chainId = computed({
|
const chainId = computed({
|
||||||
get() {return _chainId.value},
|
get() {return _chainId.value},
|
||||||
set(v) {
|
set(v) {
|
||||||
console.log('setting chainid',_chainId.value, v)
|
console.log('setting app chainid',_chainId.value, v)
|
||||||
if (_chainId.value!==v) {
|
const changed = _chainId.value!==v;
|
||||||
|
if (changed) {
|
||||||
console.log('do set')
|
console.log('do set')
|
||||||
_chainId.value = v
|
_chainId.value = v
|
||||||
account.value = null
|
account.value = null
|
||||||
}
|
}
|
||||||
if (_chainId.value!==v || _provider.value === null) {
|
if (changed || _provider.value === null) {
|
||||||
console.log('update provider')
|
console.log('invalidating provider')
|
||||||
_provider.value = UNKNOWN_PROVIDER
|
_provider.value = UNKNOWN_PROVIDER
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user