import {ethers} from "ethers"; import {getProvider} from "./blockchain.js"; import {chainInfo} from "./chain.js"; import {mockErc20Abi} from "./abi.js"; import {erc20} from "./token.js"; const mock_token_decimals = {} export async function gib( chainId, owner, vault, tokenAmounts ) { if( chainId === 31337 || chainId === 1337 ) { const provider = getProvider(chainId); let faucet = new ethers.Wallet( // Dev Account #8 '0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97', provider ) const address = faucet.address; faucet = new ethers.NonceManager(faucet) 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] if( info.mockCoins ) { const [coinAddr, usdAddr] = info.mockCoins const signer = await provider.getSigner() console.log('faucet minting tokens to', vault) await new ethers.Contract(coinAddr, mockErc20Abi, signer).mint(vault, 10n *10n**18n) await new ethers.Contract(usdAddr, mockErc20Abi, signer).mint(vault, 10_000n *10n**6n) } } }