diff --git a/cache.js b/cache.js index c7019b5..348decb 100644 --- a/cache.js +++ b/cache.js @@ -1,6 +1,9 @@ import {createClient} from "redis"; -export const redis = createClient({url: process.env.DEXORDER_REDIS_URL || 'redis://localhost:6379'}) +export const redis = createClient({ + url: process.env.DEXORDER_REDIS_URL || 'redis://localhost:6379', + returnBuffers: false, +}) redis.on('error', (err) => console.log('Redis Client Error', err)); await redis.connect(); @@ -28,7 +31,8 @@ export class CacheDict { } async get(chain, key) { - return await redis.hGet(`${chain}|${this.series}`, key) + const result = await redis.hGet(`${chain}|${this.series}`, key) + return result === null ? null : '' + result } async contains(chain, key) { @@ -37,6 +41,21 @@ export class CacheDict { } +export class CacheDictObject { + constructor(series) { + this.series = series + } + + async get(chain, key) { + return await redis.json.get(`${chain}|${this.series}`, key) + } + + async contains(chain, key) { + return await redis.json.get(`${chain}|${this.series}`, key) !== null + } +} + + export class CacheObject { constructor(series) { this.series = series @@ -57,5 +76,5 @@ async function latestBlock(chain) { } export const vaults = new CacheDict('v') -export const vaultTokens = new CacheDict('vt') +export const vaultBalances = new CacheDict('vb') export const prices = new CacheDict('p') diff --git a/main.js b/main.js index 6983c27..dbb0619 100644 --- a/main.js +++ b/main.js @@ -14,8 +14,8 @@ io.on("connection", (socket) => { lookupToken(chainId, address).then((result)=>callback(result)).catch(()=>callback(null)) }) socket.on('address', (chainId, address) => loginAddress(socket, chainId, address) ) - socket.on('subPools', (chainId, addresses) => { for(const address of addresses) socket.join(`${chainId}|p|${address}`) } ) - socket.on('unsubPools', (chainId, addresses) => { for(const address of addresses) socket.leave(`${chainId}|p|${address}`) } ) + socket.on('subPools', (chainId, addresses) => { for(const address of addresses) socket.join(`${chainId}|${address}`) } ) + socket.on('unsubPools', (chainId, addresses) => { for(const address of addresses) socket.leave(`${chainId}|${address}`) } ) socket.on('ensureVault', (chainId,owner,num) => ensureVault(socket, chainId, owner, num) ) socket.join('public') socket.emit('welcome', {chainInfo, vaultInitCodeHash:VAULT_INIT_CODE_HASH}) diff --git a/vault.js b/vault.js index e629bc6..f94b9f2 100644 --- a/vault.js +++ b/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) { - - } - } -}