faucet
This commit is contained in:
6
abi.js
6
abi.js
@@ -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
30
faucet.js
Normal 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
12
main.js
@@ -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)
|
||||||
|
|||||||
2
order.js
2
order.js
@@ -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)])
|
||||||
|
|||||||
6
token.js
6
token.js
@@ -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())
|
||||||
|
|||||||
9
vault.js
9
vault.js
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user