| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
-
- import {JsonRpcProvider} from 'ethers'
- import { readFileSync, writeFileSync } from 'fs';
-
- let providerUtil: JsonRpcProvider = null;
-
- function getElapsed(time: number,lens: number = 1000): number {
- let elapsed = Date.now() - time;
- return elapsed / lens;
- //return Math.floor(elapsed/lens);
- }
- async function sleep(ms: number, message: string = 'wait..... ') {
- //console.log(message);
- return new Promise((resolve) => {
- setTimeout(resolve, ms);
- });
- }
-
- function setProvider(provider: JsonRpcProvider) {
- providerUtil = provider;
- }
-
- async function checkReceipt(txids: any[], label: string = ''): Promise<boolean> {
-
- const now = Date.now();
- let counter = 0;
- if(label != '')
- console.log(`wait... ${label}`);
-
- let finCounter = 0;
- while(true) {
-
-
- for(let i = 0; i < txids.length; i++) {
- let txid = txids[i].txid;
- if(txids[i].finished) {
- continue;
- }
- const receipt = await providerUtil.send('eth_getTransactionReceipt',[txid]);
- if(receipt != null) {
- txids[i].finished = true;
- ++finCounter;
- if(receipt.status = 1) {
- // if(label != '') {
- // console.log(`${label} finished`);
- // }
- txids[i].status = true;
- } else {
- txids[i].status = false;
- }
- //console.log(receipt);
- }
- sleep(5)
- }
-
- //console.log(`finsounter = ${finCounter}`);
- if(finCounter == txids.length) {
- // console.log(`finCounter = ${finCounter}`);
- const elapsed = getElapsed(now,1000);
- console.log(`receipt check elapsed = ${elapsed}`);
- return true
- }
- counter++;
- if(counter > 300) {
- console.log(`Receipt check timed out ${finCounter}`);
- return false;
- }
- await sleep(50);
- }
- return false;
- }
-
- async function checkReceipt2(txids: Map<string,boolean>,startEndTx: string[], label: string = ''): Promise<Map<string,any>> {
-
- const now = Date.now();
- let counter = 0;
- if(label != '') {
- console.log(`${label}`);
- } else {
- console.log(`wait for txs is finished... `);
- }
-
-
- let returnMap = new Map<string,string>();
-
- const loop = 300;
- let finCounter = 0;
- let receipts = [];
- while(true) {
- receipts = [];
- //console.log(`size of sended tx... ${txids.size}`);
- if(txids.size == 0) {
- console.log('all tx finalized');
- return returnMap;
- }
-
-
- txids.forEach( (value: boolean, key: string) => {
- if(!value) {
- // console.log(key);
- const receipt = providerUtil.send('eth_getTransactionReceipt',[key]);
- receipts.push(receipt);
- }
- });
-
- let recs = await Promise.all(receipts);
- recs.forEach( res => {
- if(res != null) {
- //console.log(res.transactionHash);
- startEndTx.forEach(txid => {
- if(res.transactionHash == txid) {
- returnMap.set(txid,res.blockHash);
- }
- })
- txids.delete(res.transactionHash);
- }
- })
- counter++;
- if(counter > loop) {
- console.log(`Receipt check timed out ${finCounter}`);
- return returnMap;
- }
-
- await sleep(50);
- }
- return returnMap;
- }
-
- async function getBlockInfo(blockHash: string, verbose: boolean = true): Promise<any> {
- const info = await providerUtil.send('eth_getBlockByHash',[blockHash,verbose]);
- return info;
- }
-
- async function getNonce(addr: string): Promise<number> {
- const nonce = await providerUtil.getTransactionCount(addr);
- return nonce;
- }
-
- const DEPLOYMENTS_JSON_FILE = 'deployments.json';
- export function saveDeploymentAddresses(
- name: string,
- deployments: any,
- ) {
- const filename = name + '_' + DEPLOYMENTS_JSON_FILE;
- try {
- writeFileSync(filename, JSON.stringify(deployments, null, 2), 'utf-8');
- } catch (_) {
- console.log(`❕ no deployments file found with name ${filename}`);
- }
- }
-
- export function getDeploymentAddresses(name:string): any {
- const filename = name + '_' + DEPLOYMENTS_JSON_FILE;
- try {
- return JSON.parse(readFileSync(filename, 'utf-8'));
- } catch (_) {
- console.log(`❕ no deployments file found with name ${filename}`);
- return {};
- }
- }
-
- export {checkReceipt,checkReceipt2, sleep, getElapsed, setProvider,getBlockInfo,getNonce }
|