@lido-nestjs/execution 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { ExtendedJsonRpcBatchProvider } from '../provider/extended-json-rpc-batch-provider';
3
+ import { SimpleFallbackJsonRpcBatchProvider } from '../provider/simple-fallback-json-rpc-batch-provider';
4
+ export declare const MIN_BLOCKCOUNT = 1;
5
+ export declare const MAX_BLOCKCOUNT = 1024;
6
+ export interface FeeHistory {
7
+ oldestBlock: number;
8
+ baseFeePerGas: BigNumber[];
9
+ gasUsedRatio: number[];
10
+ reward: BigNumber[][];
11
+ }
12
+ export declare function getFeeHistory(this: ExtendedJsonRpcBatchProvider | SimpleFallbackJsonRpcBatchProvider, blockCount: number, newestBlock?: string | null | number, rewardPercentiles?: number[]): Promise<FeeHistory>;
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var bignumber = require('@ethersproject/bignumber');
6
+ var bytes = require('@ethersproject/bytes');
7
+ var formatBlockNumber = require('./format-block-number.js');
8
+ var logger$1 = require('@ethersproject/logger');
9
+
10
+ /* eslint-disable @typescript-eslint/no-explicit-any */
11
+ const logger = new logger$1.Logger('packages/execution');
12
+ const MIN_BLOCKCOUNT = 1;
13
+ const MAX_BLOCKCOUNT = 1024;
14
+ async function getFeeHistory(blockCount, newestBlock, rewardPercentiles) {
15
+ var _a;
16
+ await this.getNetwork();
17
+ if (blockCount < MIN_BLOCKCOUNT || blockCount > MAX_BLOCKCOUNT) {
18
+ logger.throwArgumentError('Invalid blockCount for `getFeeHistory`. Should be between 1 and 1024.', 'blockCount', blockCount);
19
+ }
20
+ const params = {
21
+ blockCount: bytes.hexValue(blockCount),
22
+ newestBlock: formatBlockNumber.formatBlockNumber(newestBlock),
23
+ rewardPercentiles,
24
+ };
25
+ const result = await this.perform('getFeeHistory', params);
26
+ return {
27
+ baseFeePerGas: result.baseFeePerGas.map((x) => bignumber.BigNumber.from(x)),
28
+ gasUsedRatio: result.gasUsedRatio,
29
+ oldestBlock: bignumber.BigNumber.from(result.oldestBlock).toNumber(),
30
+ reward: ((_a = result.reward) !== null && _a !== void 0 ? _a : []).map((x) => x.map((y) => bignumber.BigNumber.from(y))),
31
+ };
32
+ }
33
+
34
+ exports.MAX_BLOCKCOUNT = MAX_BLOCKCOUNT;
35
+ exports.MIN_BLOCKCOUNT = MIN_BLOCKCOUNT;
36
+ exports.getFeeHistory = getFeeHistory;
@@ -0,0 +1 @@
1
+ export declare const formatBlockNumber: (blockNumber: string | null | number | undefined) => string;
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var bytes = require('@ethersproject/bytes');
6
+
7
+ const formatBlockNumber = (blockNumber) => {
8
+ if (blockNumber === 'latest' ||
9
+ blockNumber === 'earliest' ||
10
+ blockNumber === 'pending') {
11
+ return blockNumber;
12
+ }
13
+ else if (blockNumber !== null &&
14
+ typeof blockNumber !== 'undefined' &&
15
+ (typeof blockNumber === 'number' || bytes.isHexString(blockNumber))) {
16
+ return bytes.hexValue(blockNumber);
17
+ }
18
+ return 'latest';
19
+ };
20
+
21
+ exports.formatBlockNumber = formatBlockNumber;
@@ -9,6 +9,7 @@ import { BigNumber, BigNumberish } from '@ethersproject/bignumber';
9
9
  import { BlockTag } from '../ethers/block-tag';
10
10
  import { TransactionRequest } from '@ethersproject/abstract-provider/src.ts/index';
11
11
  import { MiddlewareCallback, MiddlewareService } from '@lido-nestjs/middleware';
12
+ import { FeeHistory } from '../ethers/fee-history';
12
13
  export interface RequestPolicy {
13
14
  jsonRpcMaxBatchSize: number;
14
15
  maxConcurrentRequests: number;
@@ -70,6 +71,8 @@ export declare class ExtendedJsonRpcBatchProvider extends JsonRpcProvider {
70
71
  static getFormatter(): Formatter;
71
72
  protected _batchAggregatorTick(): void;
72
73
  protected _startBatchAggregator(): void;
74
+ getFeeHistory(blockCount: number, newestBlock?: string | null | number, rewardPercentiles?: number[]): Promise<FeeHistory>;
75
+ prepareRequest(method: string, params: any): [string, Array<any>];
73
76
  use(callback: MiddlewareCallback<Promise<any>>): void;
74
77
  send(method: string, params: Array<unknown>): Promise<unknown>;
75
78
  detectNetwork(): Promise<Network>;
@@ -12,6 +12,7 @@ var common = require('@nestjs/common');
12
12
  var promiseLimit = require('../common/promise-limit.js');
13
13
  var formatterWithEip1898 = require('../ethers/formatter-with-eip1898.js');
14
14
  var middleware = require('@lido-nestjs/middleware');
15
+ var feeHistory = require('../ethers/fee-history.js');
15
16
 
16
17
  exports.ExtendedJsonRpcBatchProvider = class ExtendedJsonRpcBatchProvider extends providers.JsonRpcProvider {
17
18
  constructor(url, network, requestPolicy, fetchMiddlewares = []) {
@@ -102,6 +103,20 @@ exports.ExtendedJsonRpcBatchProvider = class ExtendedJsonRpcBatchProvider extend
102
103
  this._batchAggregator = setTimeout(this._batchAggregatorTick.bind(this), this._requestPolicy.batchAggregationWaitMs);
103
104
  }
104
105
  }
106
+ async getFeeHistory(blockCount, newestBlock, rewardPercentiles) {
107
+ return feeHistory.getFeeHistory.call(this, blockCount, newestBlock, rewardPercentiles);
108
+ }
109
+ prepareRequest(method, params) {
110
+ switch (method) {
111
+ case 'getFeeHistory':
112
+ return [
113
+ 'eth_feeHistory',
114
+ [params.blockCount, params.newestBlock, params.rewardPercentiles],
115
+ ];
116
+ default:
117
+ return super.prepareRequest(method, params);
118
+ }
119
+ }
105
120
  use(callback) {
106
121
  this._fetchMiddlewareService.use(callback);
107
122
  }
@@ -9,6 +9,7 @@ import { BigNumber, BigNumberish } from '@ethersproject/bignumber';
9
9
  import { Deferrable } from '@ethersproject/properties';
10
10
  import { TransactionRequest } from '@ethersproject/abstract-provider/src.ts/index';
11
11
  import { EventType, Listener } from '@ethersproject/abstract-provider';
12
+ import { FeeHistory } from '../ethers/fee-history';
12
13
  /**
13
14
  * EIP-1898 support
14
15
  * https://eips.ethereum.org/EIPS/eip-1898
@@ -37,6 +38,7 @@ export declare class SimpleFallbackJsonRpcBatchProvider extends BaseProvider {
37
38
  static _formatter: Formatter | null;
38
39
  static getFormatter(): Formatter;
39
40
  on(eventName: EventType, listener: Listener): this;
41
+ getFeeHistory(blockCount: number, newestBlock?: string | null | number, rewardPercentiles?: number[]): Promise<FeeHistory>;
40
42
  protected get provider(): FallbackProvider;
41
43
  protected switchToNextProvider(): void;
42
44
  protected errorShouldBeReThrown(error: Error | unknown): boolean;
@@ -12,6 +12,7 @@ var networks = require('../common/networks.js');
12
12
  var noNewBlocksWhilePolling_error = require('../error/no-new-blocks-while-polling.error.js');
13
13
  var errors = require('../common/errors.js');
14
14
  var allProvidersFailed_error = require('../error/all-providers-failed.error.js');
15
+ var feeHistory = require('../ethers/fee-history.js');
15
16
 
16
17
  exports.SimpleFallbackJsonRpcBatchProvider = class SimpleFallbackJsonRpcBatchProvider extends providers.BaseProvider {
17
18
  constructor(config, logger) {
@@ -70,6 +71,9 @@ exports.SimpleFallbackJsonRpcBatchProvider = class SimpleFallbackJsonRpcBatchPro
70
71
  }
71
72
  return super.on(eventName, listener);
72
73
  }
74
+ async getFeeHistory(blockCount, newestBlock, rewardPercentiles) {
75
+ return feeHistory.getFeeHistory.call(this, blockCount, newestBlock, rewardPercentiles);
76
+ }
73
77
  get provider() {
74
78
  if (this.activeFallbackProviderIndex > this.fallbackProviders.length - 1) {
75
79
  this.activeFallbackProviderIndex = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lido-nestjs/execution",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
@@ -34,6 +34,8 @@
34
34
  "access": "public"
35
35
  },
36
36
  "dependencies": {
37
+ "@ethersproject/bignumber": "^5.5.0",
38
+ "@ethersproject/bytes": "^5.5.0",
37
39
  "@ethersproject/logger": "^5.5.0",
38
40
  "@ethersproject/networks": "^5.5.2",
39
41
  "@ethersproject/properties": "^5.5.0",