orderspec refactor for server and web
This commit is contained in:
17
db.js
17
db.js
@@ -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) )
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
3
main.js
3
main.js
@@ -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))
|
||||||
})
|
})
|
||||||
|
|||||||
25
order.js
25
order.js
@@ -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)])
|
||||||
|
|||||||
6
token.js
6
token.js
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user