This commit is contained in:
Tim Olson
2023-11-14 02:13:22 -04:00
parent d8fcf4209c
commit f0c0857d1c
6 changed files with 54 additions and 11 deletions

6
abi.js
View File

@@ -19,6 +19,12 @@ export const erc20Abi = [
] ]
export const mockErc20Abi = [
...erc20Abi,
'function mint(address,uint256)',
]
const factoryAbi = [ const factoryAbi = [
'function deployVault(address owner, uint8 num) returns (address vault)', 'function deployVault(address owner, uint8 num) returns (address vault)',
'event VaultCreated( address deployer, address owner )', 'event VaultCreated( address deployer, address owner )',

30
faucet.js Normal file
View File

@@ -0,0 +1,30 @@
import {ethers} from "ethers";
import {getProvider} from "./blockchain.js";
import {chainInfo} from "./chain.js";
import {vaultAddress} from "./vault.js";
import {mockErc20Abi} from "./abi.js";
export async function faucet( chainId, owner, vault=null ) {
if( chainId === 31337 ) {
if( vault === null )
vault = vaultAddress(chainId, owner)
const provider = getProvider(chainId);
let faucet = new ethers.Wallet(
// Dev Account #8
'0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97',
provider
)
let nonce = await provider.getTransactionCount(faucet.address, 'pending')
faucet = new ethers.NonceManager(faucet)
await faucet.sendTransaction({to:owner, value:1n *10n**18n, nonce: nonce++})
const info = chainInfo[31337]
if( info.mockCoins ) {
const [coinAddr, usdAddr] = info.mockCoins
const signer = await provider.getSigner()
await new ethers.Contract(coinAddr, mockErc20Abi, signer).mint(vault, 10n *10n**18n)
await new ethers.Contract(usdAddr, mockErc20Abi, signer).mint(vault, 10_1000n *10n**6n)
}
}
}

12
main.js
View File

@@ -2,9 +2,10 @@ 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} from "./vault.js"; import {ensureVault, loginAddress, vaultAddress} 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";
// setup socket.io // setup socket.io
@@ -18,13 +19,16 @@ io.on("connection", (socket) => {
socket.on('subPools', (chainId, addresses) => subPools(socket, chainId, addresses) ) socket.on('subPools', (chainId, addresses) => subPools(socket, chainId, addresses) )
socket.on('unsubPools', (chainId, addresses) => unsubPools(socket, chainId, addresses) ) socket.on('unsubPools', (chainId, addresses) => unsubPools(socket, chainId, addresses) )
socket.on('ensureVault', (chainId,owner,num) => ensureVault(socket, chainId, owner, num) ) socket.on('ensureVault', (chainId,owner,num) => ensureVault(socket, chainId, owner, num) )
if( 31337 in chainInfo && chainInfo[31337]?.mockenv )
socket.on('faucet', async (chainId, owner) => await faucet(chainId, owner))
socket.join('public') socket.join('public')
socket.emit('welcome', {chainInfo, vaultInitCodeHash:VAULT_INIT_CODE_HASH}) socket.emit('welcome', {chainInfo, vaultInitCodeHash:VAULT_INIT_CODE_HASH})
}); });
io.on("disconnection", (socket)=>{ // io.on("disconnection", (socket)=>{
socket.leave('public') // socket.leave('public') // todo isn't this automatic?
}) // todo unsub pools etc?
// })
const port = parseInt(process.env.DEXORDER_PORT) || 3000; const port = parseInt(process.env.DEXORDER_PORT) || 3000;
httpServer.listen(port) httpServer.listen(port)

View File

@@ -62,9 +62,7 @@ export async function recentOrders( socket, chainId, vault, limit=25 ) {
where oi.chain=${chainId} and oi.vault='${vault}' where oi.chain=${chainId} and oi.vault='${vault}'
and sd.series='o' and sd.key=concat('${vault}','|',to_char(oi.order_index, 'FM00000')) and sd.series='o' and sd.key=concat('${vault}','|',to_char(oi.order_index, 'FM00000'))
order by oi.order_index desc limit ${limit}`; order by oi.order_index desc limit ${limit}`;
console.log('sql',sql)
const query = await db.query(sql) const query = await db.query(sql)
console.log('got historical statuses', query)
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

@@ -12,6 +12,10 @@ const tokens = {
31337: std_arbitrum_tokens, 31337: std_arbitrum_tokens,
} }
export function erc20(chainId, addr, provider=null) {
return new ethers.Contract(addr, erc20Abi, provider?provider:getProvider(chainId));
}
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]
@@ -26,7 +30,7 @@ export async function lookupToken(chainId, address) {
// todo look in tokens project // todo look in tokens project
const addr = ethers.getAddress(address) const addr = ethers.getAddress(address)
// console.log('addr', addr) // console.log('addr', addr)
const token = new ethers.Contract(addr, erc20Abi, getProvider(chainId)) const token = erc20(chainId, addr)
const symbol = await token.symbol() const symbol = await token.symbol()
// console.log('symbol', symbol) // console.log('symbol', symbol)
const decimals = Number(await token.decimals()) const decimals = Number(await token.decimals())

View File

@@ -4,6 +4,7 @@ import {getProvider, getSigner} from "./blockchain.js";
import {vaultBalances, vaults} from './cache.js'; import {vaultBalances, vaults} from './cache.js';
import {chainInfo, VAULT_INIT_CODE_HASH} from "./chain.js"; import {chainInfo, VAULT_INIT_CODE_HASH} from "./chain.js";
import {sendVaultOrders} from "./order.js"; import {sendVaultOrders} from "./order.js";
import {faucet} from "./faucet.js";
// Vault // Vault
// address owner // address owner
@@ -90,22 +91,22 @@ async function createVault(chainId, owner, num) {
console.log('createVault', chainId, owner, num ) console.log('createVault', chainId, owner, num )
const signer = getSigner(chainId); const signer = getSigner(chainId);
const deployer = new ethers.Contract(chainInfo[chainId].factory, factoryAbi, signer) const deployer = new ethers.Contract(chainInfo[chainId].factory, factoryAbi, signer)
const addr = vaultAddress(chainId, owner, num) const vaultAddr = vaultAddress(chainId, owner, num)
try { try {
const tx = await deployer.deployVault(owner, num) const tx = await deployer.deployVault(owner, num)
// console.log(`deploying vault for ${owner} #${num} with tx ${tx.hash}`) // console.log(`deploying vault for ${owner} #${num} with tx ${tx.hash}`)
await tx.wait() await tx.wait()
} }
catch (e) { catch (e) {
const vault = new ethers.Contract(addr, vaultAbi, getProvider(chainId)) const vault = new ethers.Contract(vaultAddr, vaultAbi, getProvider(chainId))
try { try {
const ver = await vault.version() const ver = await vault.version()
console.log(`vault already deployed at ${addr} with version ${ver}`) console.log(`vault already deployed at ${vaultAddr} with version ${ver}`)
} }
catch (e2) { catch (e2) {
console.error('could not deploy vault:',e) console.error('could not deploy vault:',e)
return null return null
} }
} }
return addr return vaultAddr
} }