orderspec refactor for server and web

This commit is contained in:
Tim Olson
2023-12-07 18:37:11 -04:00
parent 597ab0b7b5
commit 6c8adab392
4 changed files with 37 additions and 14 deletions

17
db.js
View File

@@ -9,3 +9,20 @@ export const dbpool = new pg.Pool({
dbpool.on('connect', (client) => { dbpool.on('connect', (client) => {
client.query("SET TIME ZONE 'UTC'") 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) )
}

View File

@@ -2,7 +2,7 @@ import 'dotenv/config'
import {lookupToken} from "./token.js"; import {lookupToken} from "./token.js";
import {httpServer, io} from "./io.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 {chainInfo, VAULT_INIT_CODE_HASH} from "./chain.js";
import {subPools, unsubPools} from "./pool.js"; import {subPools, unsubPools} from "./pool.js";
import {faucet} from "./faucet.js"; import {faucet} from "./faucet.js";
@@ -11,7 +11,6 @@ import {faucet} from "./faucet.js";
// setup socket.io // setup socket.io
io.on("connection", (socket) => { io.on("connection", (socket) => {
// initially, only anonymous messages are allowed
socket.on('lookupToken', (chainId, address, callback) => { socket.on('lookupToken', (chainId, address, callback) => {
lookupToken(chainId, address).then((result)=>callback(result)).catch(()=>callback(null)) lookupToken(chainId, address).then((result)=>callback(result)).catch(()=>callback(null))
}) })

View File

@@ -1,10 +1,9 @@
import {orderFilled, orderStatuses, vaultOpenOrders} from "./cache.js" import {orderFilled, orderStatuses, vaultOpenOrders} from "./cache.js"
import {applyFills} from "../web/src/blockchain/common.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 ) { export function sendVaultOrders( socket, chainId, vault ) {
vaultOpenOrders.get(chainId, vault).then(async (orderIndexes)=>{ vaultOpenOrders.get(chainId, vault).then(async (orderIndexes)=>{
const statuses = {} const statuses = {}
if( orderIndexes !== null ) { if( orderIndexes !== null ) {
@@ -29,10 +28,10 @@ export function sendVaultOrders( socket, chainId, vault ) {
await Promise.all(proms) await Promise.all(proms)
const result = [] const result = []
for( const index of Object.keys(statuses).sort()) 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) socket.emit('os', chainId, vault, result)
}) })
}) }).catch((reason)=>console.error('Could not send orders', reason))
} }
export function unsubVaultOrders( socket, chainId, vault ) { 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 ) { export async function recentOrders( socket, chainId, vault, limit=25 ) {
const db = await dbpool.connect() const query = await sql(
const sql = `select oi.order_index, sd.value
`select oi.order_index, sd.value from seriesdict sd, orderindex oi from seriesdict sd,
where oi.chain=${chainId} and oi.vault='${vault}' orderindex oi
and sd.series='o' and sd.key=concat('${vault}','|',to_char(oi.order_index, 'FM00000')) where oi.chain = ${chainId}
order by oi.order_index desc limit ${limit}`; and oi.vault = '${vault}'
const query = await db.query(sql) 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 = [] const result = []
for( const {order_index, value} of query.rows) for( const {order_index, value} of query.rows)
result.push([order_index,JSON.parse(value)]) result.push([order_index,JSON.parse(value)])

View File

@@ -17,11 +17,15 @@ export function erc20(chainId, addr, provider=null) {
return new ethers.Contract(addr, erc20Abi, provider?provider:getProvider(chainId)); return new ethers.Contract(addr, erc20Abi, provider?provider:getProvider(chainId));
} }
let _loggedNoTokensForChain = false
export async function lookupToken(chainId, address) { export async function lookupToken(chainId, address) {
// console.log('lookupToken', chainId, address) // console.log('lookupToken', chainId, address)
const chainTokens = tokens[chainId] const chainTokens = tokens[chainId]
if( chainTokens === undefined ) { if( chainTokens === undefined ) {
console.log('no tokens for chain', chainId) if( !_loggedNoTokensForChain ) {
console.log('no tokens for chain', chainId)
_loggedNoTokensForChain = true
}
return null return null
} }
try { try {