vault balance tracking
This commit is contained in:
40
vault.js
40
vault.js
@@ -1,7 +1,7 @@
|
||||
import {ethers} from "ethers";
|
||||
import {getAbi} from "./abi.js";
|
||||
import {getProvider, getSigner} from "./blockchain.js";
|
||||
import {vaults} from './cache.js';
|
||||
import {vaultBalances, vaults} from './cache.js';
|
||||
import {chainInfo, VAULT_INIT_CODE_HASH} from "./chain.js";
|
||||
|
||||
// Vault
|
||||
@@ -27,6 +27,13 @@ export function vaultAddress(chainId, owner, num=0) {
|
||||
}
|
||||
|
||||
|
||||
async function emitBalances(socket, chainId, vault) {
|
||||
const balances = await vaultBalances.get(chainId, vault);
|
||||
socket.emit('vb', vault, balances !== null ? balances : '{}')
|
||||
return balances;
|
||||
}
|
||||
|
||||
|
||||
export async function loginAddress(socket, chainId, address) {
|
||||
if( socket.user_room !== undefined)
|
||||
socket.leave(socket.user_room)
|
||||
@@ -36,11 +43,15 @@ export async function loginAddress(socket, chainId, address) {
|
||||
else {
|
||||
socket.user_room = `${chainId}|${address}`
|
||||
socket.join(socket.user_room)
|
||||
console.log('joined room', socket.user_room)
|
||||
const found = []
|
||||
for( let num = 0; ; num++ ) {
|
||||
const vault = vaultAddress(chainId, address, num)
|
||||
if(vault !== null && await vaults.contains(chainId, vault))
|
||||
if(vault !== null && await vaults.contains(chainId, vault)) {
|
||||
found.push(vault)
|
||||
const balances = await emitBalances(socket, chainId, vault);
|
||||
console.log('found vault', vault, balances)
|
||||
}
|
||||
else
|
||||
break
|
||||
}
|
||||
@@ -58,8 +69,10 @@ export async function ensureVault(socket, chainId, owner, num) {
|
||||
try {
|
||||
const vault = await createVault(chainId, owner, num)
|
||||
console.log(vault)
|
||||
if (vault !== null)
|
||||
if (vault !== null) {
|
||||
socket.emit('vaults', [vault])
|
||||
await emitBalances(socket, chainId, vault)
|
||||
}
|
||||
else
|
||||
console.error('got null vault for chainId', chainId)
|
||||
} catch {
|
||||
@@ -93,24 +106,3 @@ async function createVault(chainId, owner, num) {
|
||||
}
|
||||
return addr
|
||||
}
|
||||
|
||||
|
||||
export async function watchErc20Transfer(provider, db, event) {
|
||||
console.log('Transfer', event)
|
||||
const [from, to, amount] = event.args
|
||||
let vault = vaults[from]
|
||||
let delta = 0
|
||||
if (vault !== undefined)
|
||||
delta = -amount
|
||||
else {
|
||||
vault = vaults[to]
|
||||
if (vault !== undefined)
|
||||
delta = amount
|
||||
}
|
||||
if (vault) {
|
||||
let oldBalance = vault.balances[event.address]
|
||||
if (oldBalance === undefined) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user