From 6c8adab392803830070edf3fab4f0622187cbea6 Mon Sep 17 00:00:00 2001 From: Tim Olson <> Date: Thu, 7 Dec 2023 18:37:11 -0400 Subject: [PATCH] orderspec refactor for server and web --- db.js | 17 +++++++++++++++++ main.js | 3 +-- order.js | 25 ++++++++++++++----------- token.js | 6 +++++- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/db.js b/db.js index 7932107..713af59 100644 --- a/db.js +++ b/db.js @@ -9,3 +9,20 @@ export const dbpool = new pg.Pool({ dbpool.on('connect', (client) => { client.query("SET TIME ZONE 'UTC'") }) + + +export async function withDb(cb) { + const db = await dbpool.connect() + try { + return await cb(db) + } + finally { + db.release() + } +} + + +export async function sql(query) { + return await withDb(async (db)=>await db.query(query) ) +} + diff --git a/main.js b/main.js index 758fa99..3f3b8a4 100644 --- a/main.js +++ b/main.js @@ -2,7 +2,7 @@ import 'dotenv/config' import {lookupToken} from "./token.js"; import {httpServer, io} from "./io.js"; -import {ensureVault, loginAddress, vaultAddress} from "./vault.js"; +import {ensureVault, loginAddress} from "./vault.js"; import {chainInfo, VAULT_INIT_CODE_HASH} from "./chain.js"; import {subPools, unsubPools} from "./pool.js"; import {faucet} from "./faucet.js"; @@ -11,7 +11,6 @@ import {faucet} from "./faucet.js"; // setup socket.io io.on("connection", (socket) => { - // initially, only anonymous messages are allowed socket.on('lookupToken', (chainId, address, callback) => { lookupToken(chainId, address).then((result)=>callback(result)).catch(()=>callback(null)) }) diff --git a/order.js b/order.js index d6b4967..99980ac 100644 --- a/order.js +++ b/order.js @@ -1,10 +1,9 @@ import {orderFilled, orderStatuses, vaultOpenOrders} from "./cache.js" import {applyFills} from "../web/src/blockchain/common.js" -import {dbpool} from "./db.js"; +import {dbpool, sql} from "./db.js"; export function sendVaultOrders( socket, chainId, vault ) { - vaultOpenOrders.get(chainId, vault).then(async (orderIndexes)=>{ const statuses = {} if( orderIndexes !== null ) { @@ -29,10 +28,10 @@ export function sendVaultOrders( socket, chainId, vault ) { await Promise.all(proms) const result = [] for( const index of Object.keys(statuses).sort()) - result.push([index, statuses[index]]) + result.push([parseInt(index), statuses[index]]) socket.emit('os', chainId, vault, result) }) - }) + }).catch((reason)=>console.error('Could not send orders', reason)) } export function unsubVaultOrders( socket, chainId, vault ) { @@ -56,13 +55,17 @@ async function fillOrderStatus( chainId, orderKey, status ) { } export async function recentOrders( socket, chainId, vault, limit=25 ) { - const db = await dbpool.connect() - const sql = - `select oi.order_index, sd.value from seriesdict sd, orderindex oi - where oi.chain=${chainId} and oi.vault='${vault}' - and sd.series='o' and sd.key=concat('${vault}','|',to_char(oi.order_index, 'FM00000')) - order by oi.order_index desc limit ${limit}`; - const query = await db.query(sql) + const query = await sql( + `select oi.order_index, sd.value + from seriesdict sd, + orderindex oi + where oi.chain = ${chainId} + and oi.vault = '${vault}' + and sd.series = 'o' + and sd.key = concat('${vault}', '|', to_char(oi.order_index, 'FM00000')) + order by oi.order_index desc + limit ${limit}` + ) const result = [] for( const {order_index, value} of query.rows) result.push([order_index,JSON.parse(value)]) diff --git a/token.js b/token.js index 3eabb91..479419d 100644 --- a/token.js +++ b/token.js @@ -17,11 +17,15 @@ export function erc20(chainId, addr, provider=null) { return new ethers.Contract(addr, erc20Abi, provider?provider:getProvider(chainId)); } +let _loggedNoTokensForChain = false export async function lookupToken(chainId, address) { // console.log('lookupToken', chainId, address) const chainTokens = tokens[chainId] if( chainTokens === undefined ) { - console.log('no tokens for chain', chainId) + if( !_loggedNoTokensForChain ) { + console.log('no tokens for chain', chainId) + _loggedNoTokensForChain = true + } return null } try {