From f69efad6b07e2933c57a20a3a70dcc5fe3693e04 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 25 Mar 2024 21:03:40 -0400 Subject: [PATCH] new faucet --- faucet.js | 29 ++++++++++++++++++++++------- main.js | 5 ++--- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/faucet.js b/faucet.js index e968dba..6cd44fc 100644 --- a/faucet.js +++ b/faucet.js @@ -1,24 +1,39 @@ import {ethers} from "ethers"; import {getProvider} from "./blockchain.js"; import {chainInfo} from "./chain.js"; -import {vaultAddress} from "./vault.js"; import {mockErc20Abi} from "./abi.js"; +import {erc20} from "./token.js"; +const mock_token_decimals = {} -export async function faucet( chainId, owner, vault=null ) { +export async function gib( chainId, owner, vault, tokenAmounts ) { if( chainId === 31337 || chainId === 1337 ) { - 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') + const address = faucet.address; faucet = new ethers.NonceManager(faucet) - console.log('faucet sending native coin to owner:', owner) - await faucet.sendTransaction({to:owner, value:1n *10n**18n, nonce: nonce++}) + let nonce = await provider.getTransactionCount(address, 'pending') + const signer = await provider.getSigner() // regular server signer not the #8 faucet + for (const [token, amount] of Object.entries(tokenAmounts)) { + if (!(token in mock_token_decimals)) { + const contract = erc20(chainId, token) + mock_token_decimals[token] = Number(await contract.decimals()) + } + const bAmount = BigInt(Math.trunc(amount * 10**mock_token_decimals[token])) + if (token==='') { + console.log(`faucet sending native coin to ${owner}`) + await faucet.sendTransaction({to:owner, value:bAmount, nonce: nonce++}) + } + else { + console.log(`sending ${token} coin to ${vault}`) + await new ethers.Contract(token, mockErc20Abi, signer).mint(vault, bAmount) + } + } + console.log('faucet sending native coin to vault:', vault) await faucet.sendTransaction({to:vault, value:1n *10n**18n, nonce: nonce++}) const info = chainInfo[chainId] diff --git a/main.js b/main.js index 1ed0d69..afee4a1 100644 --- a/main.js +++ b/main.js @@ -5,7 +5,7 @@ import {httpServer, io} from "./io.js"; import {ensureVault, loginAddress} from "./vault.js"; import {chainInfo, VAULT_INIT_CODE_HASH} from "./chain.js"; import {subOHLCs, subPools, unsubOHLCs, unsubPools} from "./pool.js"; -import {faucet} from "./faucet.js"; +import {gib} from "./faucet.js"; // setup socket.io @@ -20,8 +20,7 @@ io.on("connection", (socket) => { 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) ) - if( 31337 in chainInfo && chainInfo[31337]?.mockenv || 1337 in chainInfo && chainInfo[1337]?.mockenv ) - socket.on('faucet', async (chainId, owner) => await faucet(chainId, owner)) + socket.on('gib', async (chainId, owner, vault, tokenAmounts) => await gib(chainId, owner, vault, tokenAmounts)) socket.join('public') });