approvals; vault creation by backend
This commit is contained in:
@@ -11,11 +11,11 @@ DEXORDER_RPC_URL_42161=http://localhost:8545
|
|||||||
# Mockchain
|
# Mockchain
|
||||||
DEXORDER_DEPLOYMENT_31337=latest
|
DEXORDER_DEPLOYMENT_31337=latest
|
||||||
DEXORDER_RPC_URL_31337=http://localhost:8545
|
DEXORDER_RPC_URL_31337=http://localhost:8545
|
||||||
# dev account #2
|
|
||||||
DEXORDER_ACCOUNTS_31337=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a
|
|
||||||
|
|
||||||
# Devchain
|
# Devchain
|
||||||
DEXORDER_DEPLOYMENT_1337=latest
|
DEXORDER_DEPLOYMENT_1337=latest
|
||||||
DEXORDER_RPC_URL_1337=http://localhost:8545
|
DEXORDER_RPC_URL_1337=http://localhost:8545
|
||||||
# dev account #2
|
|
||||||
DEXORDER_ACCOUNTS_1337=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a
|
# use this in the URL to bypass IP country check for development / debug
|
||||||
|
# http://localhost:3000/...?approval=...
|
||||||
|
DEXORDER_REGION_APPROVAL=6ehWWH98diqv39gWZcPo
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ function approveIP(ipAddress) {
|
|||||||
if (!approved)
|
if (!approved)
|
||||||
// todo log ban & report
|
// todo log ban & report
|
||||||
console.warn(`IP ${ipAddress} from ${country} is banned`)
|
console.warn(`IP ${ipAddress} from ${country} is banned`)
|
||||||
|
console.debug(`IP ${ipAddress} from ${country} is ${approved ? 'approved' : 'rejected'}`)
|
||||||
return approved
|
return approved
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
@@ -40,7 +41,9 @@ function approveIP(ipAddress) {
|
|||||||
|
|
||||||
export function approveRegion(socket, bypass) {
|
export function approveRegion(socket, bypass) {
|
||||||
const ipAddress = socket.handshake.address
|
const ipAddress = socket.handshake.address
|
||||||
const approved = bypass === '6ehWWH98diqv39gWZcPo' || approveIP(ipAddress)
|
const debug = bypass === process.env.DEXORDER_REGION_APPROVAL;
|
||||||
|
const approved = debug || approveIP(ipAddress)
|
||||||
socket.emit('approvedRegion', approved)
|
socket.emit('approvedRegion', approved)
|
||||||
|
if(debug)
|
||||||
|
console.info(`approved admin at ${ipAddress}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
5
db.js
5
db.js
@@ -22,6 +22,11 @@ export async function withDb(cb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function dbAddr(addr) {
|
||||||
|
// format an 0x-style address into postgres bytes
|
||||||
|
return '\\' + addr.slice(1)
|
||||||
|
}
|
||||||
|
|
||||||
export async function sql(query) {
|
export async function sql(query) {
|
||||||
return await withDb(async (db)=>await db.query(query) )
|
return await withDb(async (db)=>await db.query(query) )
|
||||||
}
|
}
|
||||||
|
|||||||
24
main.js
24
main.js
@@ -1,29 +1,11 @@
|
|||||||
import 'dotenv/config'
|
import 'dotenv/config'
|
||||||
|
import {httpServer} from "./io.js";
|
||||||
import {lookupToken} from "./token.js";
|
import {initIO} from "./route.js";
|
||||||
import {httpServer, io} from "./io.js";
|
|
||||||
import {ensureVault, loginAddress} from "./vault.js";
|
|
||||||
import {subOHLCs, subPools, unsubOHLCs, unsubPools} from "./pool.js";
|
|
||||||
import {gib} from "./faucet.js";
|
|
||||||
import {approveRegion} from "./approval.js";
|
|
||||||
|
|
||||||
|
|
||||||
// setup socket.io
|
// setup socket.io
|
||||||
|
|
||||||
io.on("connection", (socket) => {
|
initIO();
|
||||||
socket.on('lookupToken', (chainId, address, callback) => {
|
|
||||||
lookupToken(chainId, address).then((result)=>callback(result)).catch(()=>callback(null))
|
|
||||||
})
|
|
||||||
socket.on('address', (chainId, address) => loginAddress(socket, chainId, address) )
|
|
||||||
socket.on('subPools', (chainId, addresses) => subPools(socket, chainId, addresses) )
|
|
||||||
socket.on('unsubPools', (chainId, addresses) => unsubPools(socket, chainId, addresses) )
|
|
||||||
socket.on('subOHLCs', async (chainId, poolPeriods) => await subOHLCs(socket, chainId, poolPeriods) )
|
|
||||||
socket.on('unsubOHLCs', (chainId, poolPeriods) => unsubOHLCs(socket, chainId, poolPeriods) )
|
|
||||||
socket.on('ensureVault', (chainId,owner,num) => ensureVault(socket, chainId, owner, num) )
|
|
||||||
socket.on('gib', async (chainId, owner, vault, tokenAmounts) => await gib(chainId, owner, vault, tokenAmounts))
|
|
||||||
socket.on('approveRegion', (bypass) => approveRegion(socket, bypass))
|
|
||||||
socket.join('public')
|
|
||||||
});
|
|
||||||
|
|
||||||
// io.on("disconnection", (socket)=>{
|
// io.on("disconnection", (socket)=>{
|
||||||
// socket.leave('public') // todo isn't this automatic?
|
// socket.leave('public') // todo isn't this automatic?
|
||||||
|
|||||||
@@ -176,5 +176,3 @@ export function countryForIP(ipAddress) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const ip = '64.178.217.35'
|
|
||||||
console.log(`ip: ${ip}`, countryForIP(ip))
|
|
||||||
|
|||||||
2
pool.js
2
pool.js
@@ -1,6 +1,6 @@
|
|||||||
import {ohlcs, prices} from "./cache.js";
|
import {ohlcs, prices} from "./cache.js";
|
||||||
|
|
||||||
export function subPools( socket, chainId, addresses) {
|
export function subPools( socket, chainId, addresses ) {
|
||||||
for(const address of addresses) {
|
for(const address of addresses) {
|
||||||
const room = `${chainId}|${address}`;
|
const room = `${chainId}|${address}`;
|
||||||
socket.join(room)
|
socket.join(room)
|
||||||
|
|||||||
25
route.js
Normal file
25
route.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import {io} from "./io.js";
|
||||||
|
import {lookupToken} from "./token.js";
|
||||||
|
import {requestVault, loginAddress} from "./vault.js";
|
||||||
|
import {subOHLCs, subPools, unsubOHLCs, unsubPools} from "./pool.js";
|
||||||
|
import {gib} from "./faucet.js";
|
||||||
|
import {approveRegion} from "./approval.js";
|
||||||
|
|
||||||
|
// Server route handling
|
||||||
|
|
||||||
|
export function initIO() {
|
||||||
|
io.on("connection", (socket) => {
|
||||||
|
socket.on('lookupToken', (chainId, address, callback) => {
|
||||||
|
lookupToken(chainId, address).then((result) => callback(result)).catch(() => callback(null))
|
||||||
|
})
|
||||||
|
socket.on('address', (chainId, address) => loginAddress(socket, chainId, address))
|
||||||
|
socket.on('subPools', (chainId, addresses) => subPools(socket, chainId, addresses))
|
||||||
|
socket.on('unsubPools', (chainId, addresses) => unsubPools(socket, chainId, addresses))
|
||||||
|
socket.on('subOHLCs', async (chainId, poolPeriods) => await subOHLCs(socket, chainId, poolPeriods))
|
||||||
|
socket.on('unsubOHLCs', (chainId, poolPeriods) => unsubOHLCs(socket, chainId, poolPeriods))
|
||||||
|
socket.on('ensureVault', (chainId, owner, num) => requestVault(socket, chainId, owner, num))
|
||||||
|
socket.on('gib', async (chainId, owner, vault, tokenAmounts) => await gib(chainId, owner, vault, tokenAmounts))
|
||||||
|
socket.on('approveRegion', (bypass) => approveRegion(socket, bypass))
|
||||||
|
socket.join('public')
|
||||||
|
});
|
||||||
|
}
|
||||||
18
vault.js
18
vault.js
@@ -5,6 +5,7 @@ import {chainInfo} from "./chain.js";
|
|||||||
import {sendVaultOrders} from "./order.js";
|
import {sendVaultOrders} from "./order.js";
|
||||||
import {newContract} from "./contract.js";
|
import {newContract} from "./contract.js";
|
||||||
import {approveWallet} from "./approval.js";
|
import {approveWallet} from "./approval.js";
|
||||||
|
import {sql} from "./db.js";
|
||||||
|
|
||||||
|
|
||||||
export function vaultAddress(chainId, owner, num=0) {
|
export function vaultAddress(chainId, owner, num=0) {
|
||||||
@@ -48,8 +49,10 @@ async function sendVaultInfo(socket, chainId, owner) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function loginAddress(socket, chainId, address) {
|
export async function loginAddress(socket, chainId, address) {
|
||||||
if( socket.user_room !== undefined)
|
if( socket.user_room !== undefined) {
|
||||||
socket.leave(socket.user_room)
|
socket.leave(socket.user_room)
|
||||||
|
console.log('left user room', socket.user_room)
|
||||||
|
}
|
||||||
if( address ) {
|
if( address ) {
|
||||||
const approved = approveWallet(address)
|
const approved = approveWallet(address)
|
||||||
socket.emit('approvedWallet', approved)
|
socket.emit('approvedWallet', approved)
|
||||||
@@ -64,7 +67,7 @@ export async function loginAddress(socket, chainId, address) {
|
|||||||
|
|
||||||
const ensuring = {}
|
const ensuring = {}
|
||||||
|
|
||||||
export async function ensureVault(socket, chainId, owner, num) {
|
export async function ensureVault_OLD(socket, chainId, owner, num) {
|
||||||
if (!approveWallet(owner))
|
if (!approveWallet(owner))
|
||||||
return
|
return
|
||||||
const key = [chainId, owner, num]
|
const key = [chainId, owner, num]
|
||||||
@@ -103,6 +106,7 @@ async function createVault(chainId, owner, num) {
|
|||||||
return
|
return
|
||||||
const signer = getSigner(chainId);
|
const signer = getSigner(chainId);
|
||||||
const factory = chainInfo[chainId].factory;
|
const factory = chainInfo[chainId].factory;
|
||||||
|
owner = ethers.getAddress(owner);
|
||||||
console.log('createVault', chainId, owner, num, factory, chainInfo[chainId].vaultInitCodeHash )
|
console.log('createVault', chainId, owner, num, factory, chainInfo[chainId].vaultInitCodeHash )
|
||||||
const deployer = await newContract(factory, 'IVaultFactory', signer)
|
const deployer = await newContract(factory, 'IVaultFactory', signer)
|
||||||
const vaultAddr = vaultAddress(chainId, owner, num)
|
const vaultAddr = vaultAddress(chainId, owner, num)
|
||||||
@@ -129,3 +133,13 @@ async function createVault(chainId, owner, num) {
|
|||||||
}
|
}
|
||||||
return vaultAddr
|
return vaultAddr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export async function requestVault(socket, chainId, owner, num) {
|
||||||
|
const ipAddress = socket.handshake.address
|
||||||
|
const time = new Date().toISOString();
|
||||||
|
const query = `insert into vaultcreationrequest (chain, owner, num, time, ipaddr) values (${chainId}, '${owner}', ${num}, '${time}', '${ipAddress}') ON CONFLICT DO NOTHING`;
|
||||||
|
console.log('query:', query)
|
||||||
|
await sql(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user