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 = [
'function deployVault(address owner, uint8 num) returns (address vault)',
'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 {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 {subPools, unsubPools} from "./pool.js";
import {faucet} from "./faucet.js";
// setup socket.io
@@ -18,13 +19,16 @@ io.on("connection", (socket) => {
socket.on('subPools', (chainId, addresses) => subPools(socket, chainId, addresses) )
socket.on('unsubPools', (chainId, addresses) => unsubPools(socket, chainId, addresses) )
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.emit('welcome', {chainInfo, vaultInitCodeHash:VAULT_INIT_CODE_HASH})
});
io.on("disconnection", (socket)=>{
socket.leave('public')
})
// io.on("disconnection", (socket)=>{
// socket.leave('public') // todo isn't this automatic?
// todo unsub pools etc?
// })
const port = parseInt(process.env.DEXORDER_PORT) || 3000;
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}'
and sd.series='o' and sd.key=concat('${vault}','|',to_char(oi.order_index, 'FM00000'))
order by oi.order_index desc limit ${limit}`;
console.log('sql',sql)
const query = await db.query(sql)
console.log('got historical statuses', query)
const result = []
for( const {order_index, value} of query.rows)
result.push([order_index,JSON.parse(value)])

View File

@@ -12,6 +12,10 @@ const 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) {
// console.log('lookupToken', chainId, address)
const chainTokens = tokens[chainId]
@@ -26,7 +30,7 @@ export async function lookupToken(chainId, address) {
// todo look in tokens project
const addr = ethers.getAddress(address)
// console.log('addr', addr)
const token = new ethers.Contract(addr, erc20Abi, getProvider(chainId))
const token = erc20(chainId, addr)
const symbol = await token.symbol()
// console.log('symbol', symbol)
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 {chainInfo, VAULT_INIT_CODE_HASH} from "./chain.js";
import {sendVaultOrders} from "./order.js";
import {faucet} from "./faucet.js";
// Vault
// address owner
@@ -90,22 +91,22 @@ async function createVault(chainId, owner, num) {
console.log('createVault', chainId, owner, num )
const signer = getSigner(chainId);
const deployer = new ethers.Contract(chainInfo[chainId].factory, factoryAbi, signer)
const addr = vaultAddress(chainId, owner, num)
const vaultAddr = vaultAddress(chainId, owner, num)
try {
const tx = await deployer.deployVault(owner, num)
// console.log(`deploying vault for ${owner} #${num} with tx ${tx.hash}`)
await tx.wait()
}
catch (e) {
const vault = new ethers.Contract(addr, vaultAbi, getProvider(chainId))
const vault = new ethers.Contract(vaultAddr, vaultAbi, getProvider(chainId))
try {
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) {
console.error('could not deploy vault:',e)
return null
}
}
return addr
return vaultAddr
}