|
| 1 | +import { MulticallWrapper } from 'ethers-multicall-provider'; |
| 2 | +import { ethers } from 'hardhat'; |
| 3 | +import { Datapool, Datapool__factory } from '../typechain'; |
| 4 | + |
| 5 | +(async () => { |
| 6 | + await deploy(); |
| 7 | +})(); |
| 8 | + |
| 9 | +export async function deploy() { |
| 10 | + console.log('Deploying datapool..'); |
| 11 | + const [deployer] = await ethers.getSigners(); |
| 12 | + console.log(`Deployer: ${deployer.address}`); |
| 13 | + const datapoolAddress = await new Datapool__factory(deployer) |
| 14 | + .deploy() |
| 15 | + .then((tx) => tx.deployed()) |
| 16 | + .then((contract) => contract.address); |
| 17 | + console.log(`Datapool: ${datapoolAddress}`); |
| 18 | + // const provider = ethers.getDefaultProvider(); |
| 19 | + const provider = MulticallWrapper.wrap(ethers.getDefaultProvider()); |
| 20 | + // ethers might already use batch-calls provider internally, lets force one |
| 21 | + console.log(`Using batch-calls provider ${MulticallWrapper.isMulticallProvider(provider)}`); |
| 22 | + let datapool = new ethers.Contract( |
| 23 | + datapoolAddress, |
| 24 | + new Datapool__factory().interface, |
| 25 | + provider, |
| 26 | + ).connect(deployer) as Datapool; |
| 27 | + |
| 28 | + const datasets = 5; |
| 29 | + await addDatasets(datasets); |
| 30 | + await getDatasets(); |
| 31 | + |
| 32 | + async function addDatasets(datasets: number) { |
| 33 | + console.log('From dataset providers:'); |
| 34 | + console.log(`Requested ${datasets} datasets`); |
| 35 | + const addDatasetCalls = []; |
| 36 | + for (let i = 0; i < datasets; i++) { |
| 37 | + const datasetAddress = await ethers.Wallet.createRandom().getAddress(); |
| 38 | + addDatasetCalls.push(datapool.addDataset(datasetAddress)); |
| 39 | + process.stdout.write(`Preparing datasets: ${i + 1}.. \r`); |
| 40 | + } |
| 41 | + await Promise.all(addDatasetCalls); |
| 42 | + const datasetsCount = Number(await datapool.datasetCount()); |
| 43 | + console.log(); |
| 44 | + console.log(`Datasets added`); |
| 45 | + console.log(`Dataset count is now: ${datasetsCount}`); |
| 46 | + } |
| 47 | + |
| 48 | + async function getDatasets() { |
| 49 | + console.log('From SMS:'); |
| 50 | + const start = new Date().getTime(); |
| 51 | + const datasetsCount = Number(await datapool.datasetCount()); |
| 52 | + const getDatasetCalls = []; |
| 53 | + for (let i = 0; i < datasetsCount; i++) { |
| 54 | + getDatasetCalls.push(datapool.datasets(i)); |
| 55 | + } |
| 56 | + const allDatasets = await Promise.all(getDatasetCalls); |
| 57 | + console.log(allDatasets); |
| 58 | + console.log(`Dataset found: ${allDatasets.length}`); |
| 59 | + const end = new Date().getTime(); |
| 60 | + console.log(`Took ${end - start}ms`); |
| 61 | + } |
| 62 | +} |
0 commit comments