handle observable errors
This commit is contained in:
@ -1,7 +1,8 @@
|
||||
import 'dotenv/config.js';
|
||||
import { WebSocketProvider, formatUnits } from 'ethers';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map, scan } from 'rxjs/operators';
|
||||
import { sortBy } from 'lodash';
|
||||
import { Observable, throwError } from 'rxjs';
|
||||
import { catchError, map, scan, retry } from 'rxjs/operators';
|
||||
|
||||
import { GasPrices } from '../types/gasPrices';
|
||||
|
||||
@ -16,13 +17,14 @@ const blockGasPricesObservable = new Observable<GasPrices>((observer) => {
|
||||
|
||||
if (!block) throw new Error(`Error fetching block! ${blockNumber}`);
|
||||
|
||||
const gasPrices = block.prefetchedTransactions.map((tx) => tx.gasPrice).sort();
|
||||
const gasPrices = sortBy(block.prefetchedTransactions, ['gasPrice']).map(x => x.gasPrice);
|
||||
const fast = Number(formatUnits(gasPrices[Math.floor(gasPrices.length * 0.9)], "gwei"));
|
||||
const average = Number(formatUnits(gasPrices[Math.floor(gasPrices.length / 2)], "gwei"));
|
||||
const slow = Number(formatUnits(gasPrices[Math.floor(gasPrices.length * 0.05)], "gwei"));
|
||||
|
||||
// Log averages every 10 blocks
|
||||
if (blockNumber % 10 == 0) console.log(`Found new block data for ${blockNumber}! Base average transaction cost: ${slow} Gwei`)
|
||||
if (blockNumber % 10 == 0) console.log(`Found new block data for ${blockNumber}!
|
||||
Gas price spreads: ⚡ ${fast.toFixed(2)} ⦚⦚ 🚶 ${average.toFixed(2)} ⦚⦚ 🐢 ${slow.toFixed(2)} Gwei`)
|
||||
|
||||
observer.next({ fast, average, slow } as GasPrices);
|
||||
} catch (error) {
|
||||
@ -46,7 +48,9 @@ const averageGasPricesObservable = blockGasPricesObservable.pipe(
|
||||
average: Math.round(average / blocks.length),
|
||||
slow: Math.round(slow / blocks.length),
|
||||
} as GasPrices;
|
||||
})
|
||||
}),
|
||||
catchError(err => throwError(() => new Error(err))),
|
||||
retry(2)
|
||||
);
|
||||
|
||||
export { averageGasPricesObservable };
|
Reference in New Issue
Block a user