essential-eth 0.7.0 → 0.9.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.
Files changed (37) hide show
  1. package/dist/cjs/index.d.ts +2 -1
  2. package/dist/cjs/index.js +2 -1
  3. package/dist/cjs/index.umd.js +1 -1
  4. package/dist/cjs/index.umd.js.map +1 -1
  5. package/dist/cjs/logger/package-version.d.ts +1 -1
  6. package/dist/cjs/logger/package-version.js +1 -1
  7. package/dist/cjs/providers/AlchemyProvider.d.ts +4 -0
  8. package/dist/cjs/providers/AlchemyProvider.js +84 -0
  9. package/dist/cjs/providers/BaseProvider.d.ts +2 -0
  10. package/dist/cjs/providers/BaseProvider.js +59 -0
  11. package/dist/cjs/providers/FallthroughProvider.js +12 -8
  12. package/dist/cjs/providers/test/json-rpc-provider/get-block-number.test.js +19 -90
  13. package/dist/cjs/providers/test/json-rpc-provider/get-block.test.js +0 -24
  14. package/dist/cjs/providers/test/json-rpc-provider/get-fee-data.test.js +212 -0
  15. package/dist/cjs/providers/test/json-rpc-provider/get-gas-price.test.js +22 -60
  16. package/dist/cjs/providers/test/mock-of.d.ts +2 -0
  17. package/dist/cjs/providers/test/mock-of.js +14 -0
  18. package/dist/cjs/providers/test/rpc-urls.js +11 -6
  19. package/dist/cjs/providers/test/test-alchemy-provider.test.js +151 -0
  20. package/dist/cjs/types/FeeData.types.d.ts +7 -0
  21. package/dist/cjs/types/FeeData.types.js +1 -0
  22. package/dist/esm/index.d.ts +2 -1
  23. package/dist/esm/index.js +2 -1
  24. package/dist/esm/logger/package-version.d.ts +1 -1
  25. package/dist/esm/logger/package-version.js +1 -1
  26. package/dist/esm/providers/AlchemyProvider.d.ts +4 -0
  27. package/dist/esm/providers/AlchemyProvider.js +7 -0
  28. package/dist/esm/providers/BaseProvider.d.ts +2 -0
  29. package/dist/esm/providers/BaseProvider.js +15 -0
  30. package/dist/esm/providers/FallthroughProvider.js +12 -4
  31. package/dist/esm/providers/test/mock-of.d.ts +2 -0
  32. package/dist/esm/providers/test/mock-of.js +1 -0
  33. package/dist/esm/providers/test/rpc-urls.js +11 -6
  34. package/dist/esm/types/FeeData.types.d.ts +7 -0
  35. package/dist/esm/types/FeeData.types.js +1 -0
  36. package/package.json +6 -6
  37. package/readme.md +31 -1
@@ -1,11 +1,3 @@
1
- function _arrayLikeToArray(arr, len) {
2
- if (len == null || len > arr.length) len = arr.length;
3
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
- return arr2;
5
- }
6
- function _arrayWithHoles(arr) {
7
- if (Array.isArray(arr)) return arr;
8
- }
9
1
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
10
2
  try {
11
3
  var info = gen[key](arg);
@@ -35,44 +27,6 @@ function _asyncToGenerator(fn) {
35
27
  });
36
28
  };
37
29
  }
38
- function _iterableToArrayLimit(arr, i) {
39
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
40
- if (_i == null) return;
41
- var _arr = [];
42
- var _n = true;
43
- var _d = false;
44
- var _s, _e;
45
- try {
46
- for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
47
- _arr.push(_s.value);
48
- if (i && _arr.length === i) break;
49
- }
50
- } catch (err) {
51
- _d = true;
52
- _e = err;
53
- } finally{
54
- try {
55
- if (!_n && _i["return"] != null) _i["return"]();
56
- } finally{
57
- if (_d) throw _e;
58
- }
59
- }
60
- return _arr;
61
- }
62
- function _nonIterableRest() {
63
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
64
- }
65
- function _slicedToArray(arr, i) {
66
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
67
- }
68
- function _unsupportedIterableToArray(o, minLen) {
69
- if (!o) return;
70
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
71
- var n = Object.prototype.toString.call(o).slice(8, -1);
72
- if (n === "Object" && o.constructor) n = o.constructor.name;
73
- if (n === "Map" || n === "Set") return Array.from(n);
74
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
75
- }
76
30
  var __generator = this && this.__generator || function(thisArg, body) {
77
31
  var f, y, t, g, _ = {
78
32
  label: 0,
@@ -168,31 +122,39 @@ var __generator = this && this.__generator || function(thisArg, body) {
168
122
  };
169
123
  }
170
124
  };
171
- import { ethers } from "ethers";
125
+ import unfetch from "isomorphic-unfetch";
126
+ import z from "zod";
172
127
  import { JsonRpcProvider } from "../../../index";
128
+ import { mockOf } from "../mock-of";
173
129
  import { rpcUrls } from "../rpc-urls";
130
+ import { TinyBig } from "./../../../shared/tiny-big/tiny-big";
131
+ jest.mock("isomorphic-unfetch");
132
+ var mockPostResponse = JSON.stringify({
133
+ jsonrpc: "2.0",
134
+ id: 1,
135
+ result: "0xa"
136
+ });
174
137
  var rpcUrl = rpcUrls.mainnet;
175
138
  describe("provider.getGasPrice", function() {
176
- it("should match ethers and essential-eth", /*#__PURE__*/ _asyncToGenerator(function() {
177
- var ethersProvider, essentialEthProvider, _ref, ethersGasPrice, essentialEthGasPrice;
139
+ it("should get TinyBig integer", /*#__PURE__*/ _asyncToGenerator(function() {
140
+ var provider, gasPrice;
178
141
  return __generator(this, function(_state) {
179
142
  switch(_state.label){
180
143
  case 0:
181
- ethersProvider = new ethers.providers.StaticJsonRpcProvider(rpcUrl);
182
- essentialEthProvider = new JsonRpcProvider(rpcUrl);
144
+ provider = new JsonRpcProvider(rpcUrl);
145
+ mockOf(unfetch).mockResolvedValueOnce({
146
+ text: function() {
147
+ return Promise.resolve(mockPostResponse);
148
+ }
149
+ });
183
150
  return [
184
151
  4,
185
- Promise.all([
186
- ethersProvider.getGasPrice(),
187
- essentialEthProvider.getGasPrice()
188
- ])
152
+ provider.getGasPrice()
189
153
  ];
190
154
  case 1:
191
- _ref = _slicedToArray.apply(void 0, [
192
- _state.sent(),
193
- 2
194
- ]), ethersGasPrice = _ref[0], essentialEthGasPrice = _ref[1];
195
- expect(ethersGasPrice.sub(essentialEthGasPrice.toString()).toNumber()).toBeLessThan(100);
155
+ gasPrice = _state.sent();
156
+ expect(z.instanceof(TinyBig).safeParse(gasPrice).success).toBe(true);
157
+ expect(gasPrice.toString()).toBe("10");
196
158
  return [
197
159
  2
198
160
  ];
@@ -0,0 +1,2 @@
1
+ /// <reference types="jest" />
2
+ export declare const mockOf: <FunctionParameters extends unknown[], FunctionReturnType>(fn: (...args: FunctionParameters) => FunctionReturnType) => jest.Mock<FunctionReturnType, FunctionParameters>;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Helper function for mocking other functions.
3
+ *
4
+ * Import it using this:
5
+ * ```ts
6
+ * import { mockOf } from '@earnifi/shared/src/utils/testing/mock-of';
7
+ * ```
8
+ *
9
+ * @param fn
10
+ * @example mockOf(stripe.checkout.sessions.create).mockResolvedValue(mockSession);
11
+ * @see https://twitter.com/scastiel/status/1631354119192473601?s=20
12
+ */ export var mockOf = function(fn) {
13
+ return fn;
14
+ };
@@ -1,11 +1,16 @@
1
+ import z from "zod";
1
2
  export var fakeUrls = {
2
3
  notRPCButRealHttp: "https://httpstat.us/200"
3
4
  };
5
+ var RPC_ORIGIN = process.env.RPC_ORIGIN;
6
+ if (!z.string().url().safeParse(RPC_ORIGIN).success) {
7
+ throw new Error("RPC_ORIGIN is not defined or is invalid URL");
8
+ }
4
9
  export var rpcUrls = {
5
- mainnet: "".concat(process.env.RPC_ORIGIN, "/api/eth"),
6
- matic: "".concat(process.env.RPC_ORIGIN, "/api/MATIC"),
7
- gno: "".concat(process.env.RPC_ORIGIN, "/api/gno"),
8
- bnb: "".concat(process.env.RPC_ORIGIN, "/api/bnb"),
9
- arb1: "".concat(process.env.RPC_ORIGIN, "/api/arb1"),
10
- gor: "".concat(process.env.RPC_ORIGIN, "/api/gor")
10
+ mainnet: "".concat(RPC_ORIGIN, "/api/eth"),
11
+ matic: "".concat(RPC_ORIGIN, "/api/MATIC"),
12
+ gno: "".concat(RPC_ORIGIN, "/api/gno"),
13
+ bnb: "".concat(RPC_ORIGIN, "/api/bnb"),
14
+ arb1: "".concat(RPC_ORIGIN, "/api/arb1"),
15
+ gor: "".concat(RPC_ORIGIN, "/api/gor")
11
16
  };
@@ -0,0 +1,151 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
+ try {
3
+ var info = gen[key](arg);
4
+ var value = info.value;
5
+ } catch (error) {
6
+ reject(error);
7
+ return;
8
+ }
9
+ if (info.done) {
10
+ resolve(value);
11
+ } else {
12
+ Promise.resolve(value).then(_next, _throw);
13
+ }
14
+ }
15
+ function _asyncToGenerator(fn) {
16
+ return function() {
17
+ var self = this, args = arguments;
18
+ return new Promise(function(resolve, reject) {
19
+ var gen = fn.apply(self, args);
20
+ function _next(value) {
21
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
+ }
23
+ function _throw(err) {
24
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
+ }
26
+ _next(undefined);
27
+ });
28
+ };
29
+ }
30
+ var __generator = this && this.__generator || function(thisArg, body) {
31
+ var f, y, t, g, _ = {
32
+ label: 0,
33
+ sent: function() {
34
+ if (t[0] & 1) throw t[1];
35
+ return t[1];
36
+ },
37
+ trys: [],
38
+ ops: []
39
+ };
40
+ return g = {
41
+ next: verb(0),
42
+ "throw": verb(1),
43
+ "return": verb(2)
44
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
45
+ return this;
46
+ }), g;
47
+ function verb(n) {
48
+ return function(v) {
49
+ return step([
50
+ n,
51
+ v
52
+ ]);
53
+ };
54
+ }
55
+ function step(op) {
56
+ if (f) throw new TypeError("Generator is already executing.");
57
+ while(_)try {
58
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
59
+ if (y = 0, t) op = [
60
+ op[0] & 2,
61
+ t.value
62
+ ];
63
+ switch(op[0]){
64
+ case 0:
65
+ case 1:
66
+ t = op;
67
+ break;
68
+ case 4:
69
+ _.label++;
70
+ return {
71
+ value: op[1],
72
+ done: false
73
+ };
74
+ case 5:
75
+ _.label++;
76
+ y = op[1];
77
+ op = [
78
+ 0
79
+ ];
80
+ continue;
81
+ case 7:
82
+ op = _.ops.pop();
83
+ _.trys.pop();
84
+ continue;
85
+ default:
86
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
87
+ _ = 0;
88
+ continue;
89
+ }
90
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
91
+ _.label = op[1];
92
+ break;
93
+ }
94
+ if (op[0] === 6 && _.label < t[1]) {
95
+ _.label = t[1];
96
+ t = op;
97
+ break;
98
+ }
99
+ if (t && _.label < t[2]) {
100
+ _.label = t[2];
101
+ _.ops.push(op);
102
+ break;
103
+ }
104
+ if (t[2]) _.ops.pop();
105
+ _.trys.pop();
106
+ continue;
107
+ }
108
+ op = body.call(thisArg, _);
109
+ } catch (e) {
110
+ op = [
111
+ 6,
112
+ e
113
+ ];
114
+ y = 0;
115
+ } finally{
116
+ f = t = 0;
117
+ }
118
+ if (op[0] & 5) throw op[1];
119
+ return {
120
+ value: op[0] ? op[1] : void 0,
121
+ done: true
122
+ };
123
+ }
124
+ };
125
+ import { z } from "zod";
126
+ import { AlchemyProvider, TinyBig } from "../../index";
127
+ var ALCHEMY_API_KEY = process.env.ALCHEMY_API_KEY;
128
+ if (!ALCHEMY_API_KEY) {
129
+ throw new Error("ALCHEMY_API_KEY is not defined in the environment variables.");
130
+ }
131
+ var provider = new AlchemyProvider(ALCHEMY_API_KEY);
132
+ describe("alchemyProvider.getGasPrice", function() {
133
+ it("should return the current gas price", /*#__PURE__*/ _asyncToGenerator(function() {
134
+ var gasPrice;
135
+ return __generator(this, function(_state) {
136
+ switch(_state.label){
137
+ case 0:
138
+ return [
139
+ 4,
140
+ provider.getGasPrice()
141
+ ];
142
+ case 1:
143
+ gasPrice = _state.sent();
144
+ expect(z.instanceof(TinyBig).safeParse(gasPrice).success).toBe(true);
145
+ return [
146
+ 2
147
+ ];
148
+ }
149
+ });
150
+ }));
151
+ });
@@ -0,0 +1,7 @@
1
+ import type { TinyBig } from '../shared/tiny-big/tiny-big';
2
+ export interface FeeData {
3
+ gasPrice: TinyBig;
4
+ lastBaseFeePerGas: TinyBig | null;
5
+ maxFeePerGas: TinyBig | null;
6
+ maxPriorityFeePerGas: TinyBig | null;
7
+ }
@@ -0,0 +1 @@
1
+ export { };
@@ -1,4 +1,5 @@
1
1
  import { BaseContract, Contract } from './classes/Contract';
2
+ import { AlchemyProvider } from './providers/AlchemyProvider';
2
3
  import { ConstructorOptions, FallthroughProvider } from './providers/FallthroughProvider';
3
4
  import { JsonRpcProvider, jsonRpcProvider } from './providers/JsonRpcProvider';
4
5
  import { tinyBig, TinyBig } from './shared/tiny-big/tiny-big';
@@ -22,4 +23,4 @@ export * from './utils/bytes';
22
23
  export * from './utils/hash-message';
23
24
  export * from './utils/keccak256';
24
25
  export * from './utils/solidity-keccak256';
25
- export { etherToWei, etherToGwei, isAddress, jsonRpcProvider, JsonRpcProvider, FallthroughProvider, tinyBig, toChecksumAddress, weiToEther, gweiToEther, hashMessage, splitSignature, toUtf8Bytes, computeAddress, computePublicKey, Contract, TinyBig, BaseContract, BlockResponse, ContractTypes, Filter, FilterByBlockHash, JSONABI, JSONABIArgument, Network, TransactionResponse, RPCBlock, RPCTransaction, RPCTransactionReceipt, TransactionRequest, RPCTransactionRequest, TransactionReceipt, BlockTag, RPCLog, Log, BlockTransactionResponse, ConstructorOptions, };
26
+ export { etherToWei, etherToGwei, isAddress, jsonRpcProvider, JsonRpcProvider, FallthroughProvider, AlchemyProvider, tinyBig, toChecksumAddress, weiToEther, gweiToEther, hashMessage, splitSignature, toUtf8Bytes, computeAddress, computePublicKey, Contract, TinyBig, BaseContract, BlockResponse, ContractTypes, Filter, FilterByBlockHash, JSONABI, JSONABIArgument, Network, TransactionResponse, RPCBlock, RPCTransaction, RPCTransactionReceipt, TransactionRequest, RPCTransactionRequest, TransactionReceipt, BlockTag, RPCLog, Log, BlockTransactionResponse, ConstructorOptions, };
package/dist/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { BaseContract, Contract } from './classes/Contract';
2
+ import { AlchemyProvider } from './providers/AlchemyProvider';
2
3
  import { FallthroughProvider, } from './providers/FallthroughProvider';
3
4
  import { JsonRpcProvider, jsonRpcProvider } from './providers/JsonRpcProvider';
4
5
  import { tinyBig, TinyBig } from './shared/tiny-big/tiny-big';
@@ -17,4 +18,4 @@ export * from './utils/bytes';
17
18
  export * from './utils/hash-message';
18
19
  export * from './utils/keccak256';
19
20
  export * from './utils/solidity-keccak256';
20
- export { etherToWei, etherToGwei, isAddress, jsonRpcProvider, JsonRpcProvider, FallthroughProvider, tinyBig, toChecksumAddress, weiToEther, gweiToEther, hashMessage, splitSignature, toUtf8Bytes, computeAddress, computePublicKey, Contract, TinyBig, BaseContract, };
21
+ export { etherToWei, etherToGwei, isAddress, jsonRpcProvider, JsonRpcProvider, FallthroughProvider, AlchemyProvider, tinyBig, toChecksumAddress, weiToEther, gweiToEther, hashMessage, splitSignature, toUtf8Bytes, computeAddress, computePublicKey, Contract, TinyBig, BaseContract, };
@@ -1 +1 @@
1
- export declare const version = "0.7.0";
1
+ export declare const version = "0.9.0";
@@ -1 +1 @@
1
- export const version = '0.7.0';
1
+ export const version = '0.9.0';
@@ -0,0 +1,4 @@
1
+ import { JsonRpcProvider } from './JsonRpcProvider';
2
+ export declare class AlchemyProvider extends JsonRpcProvider {
3
+ constructor(apiKey: string, network?: string);
4
+ }
@@ -0,0 +1,7 @@
1
+ import { JsonRpcProvider } from './JsonRpcProvider';
2
+ export class AlchemyProvider extends JsonRpcProvider {
3
+ constructor(apiKey, network = 'mainnet') {
4
+ const alchemyUrl = `https://eth-${network}.alchemyapi.io/v2/${apiKey}`;
5
+ super(alchemyUrl);
6
+ }
7
+ }
@@ -1,5 +1,6 @@
1
1
  import type { TinyBig } from '../shared/tiny-big/tiny-big';
2
2
  import type { BlockResponse, BlockTag } from '../types/Block.types';
3
+ import type { FeeData } from '../types/FeeData.types';
3
4
  import type { Filter, FilterByBlockHash } from '../types/Filter.types';
4
5
  import type { Network } from '../types/Network.types';
5
6
  import type { Log, TransactionReceipt, TransactionRequest, TransactionResponse } from '../types/Transaction.types';
@@ -19,6 +20,7 @@ export declare abstract class BaseProvider {
19
20
  getBalance(address: string, blockTag?: BlockTag): Promise<TinyBig>;
20
21
  getCode(address: string, blockTag?: BlockTag): Promise<string>;
21
22
  estimateGas(transaction: TransactionRequest): Promise<TinyBig>;
23
+ getFeeData(): Promise<FeeData>;
22
24
  getLogs(filter: Filter | FilterByBlockHash): Promise<Array<Log>>;
23
25
  call(transaction: TransactionRequest, blockTag?: BlockTag): Promise<string>;
24
26
  }
@@ -120,6 +120,21 @@ export class BaseProvider {
120
120
  return tinyBig(hexToDecimal(gasUsed));
121
121
  });
122
122
  }
123
+ getFeeData() {
124
+ return __awaiter(this, void 0, void 0, function* () {
125
+ const [block, gasPrice] = yield Promise.all([
126
+ this.getBlock('latest'),
127
+ this.getGasPrice(),
128
+ ]);
129
+ let lastBaseFeePerGas = null, maxFeePerGas = null, maxPriorityFeePerGas = null;
130
+ if (block && block.baseFeePerGas) {
131
+ lastBaseFeePerGas = block.baseFeePerGas;
132
+ maxPriorityFeePerGas = tinyBig('1500000000');
133
+ maxFeePerGas = tinyBig(block.baseFeePerGas.mul(2).add(maxPriorityFeePerGas));
134
+ }
135
+ return { lastBaseFeePerGas, maxFeePerGas, maxPriorityFeePerGas, gasPrice };
136
+ });
137
+ }
123
138
  getLogs(filter) {
124
139
  return __awaiter(this, void 0, void 0, function* () {
125
140
  const filterByRange = filter;
@@ -1,9 +1,17 @@
1
1
  import { logger } from '../logger/logger';
2
2
  import { BaseProvider } from './BaseProvider';
3
- const promiseTimeout = (prom, time) => Promise.race([
4
- prom,
5
- new Promise((_r, reject) => setTimeout(() => reject('Promise timed out'), time)),
6
- ]);
3
+ const promiseTimeout = (prom, time) => new Promise((resolve, reject) => {
4
+ const timeout = setTimeout(() => reject(new Error('Promise timed out')), time);
5
+ prom
6
+ .then((result) => {
7
+ clearTimeout(timeout);
8
+ resolve(result);
9
+ })
10
+ .catch((error) => {
11
+ clearTimeout(timeout);
12
+ reject(error);
13
+ });
14
+ });
7
15
  const DEFAULT_TIMEOUT_DURATION = 8000;
8
16
  export class FallthroughProvider extends BaseProvider {
9
17
  constructor(rpcUrls, options = {}) {
@@ -0,0 +1,2 @@
1
+ /// <reference types="jest" />
2
+ export declare const mockOf: <FunctionParameters extends unknown[], FunctionReturnType>(fn: (...args: FunctionParameters) => FunctionReturnType) => jest.Mock<FunctionReturnType, FunctionParameters>;
@@ -0,0 +1 @@
1
+ export const mockOf = (fn) => fn;
@@ -1,11 +1,16 @@
1
+ import z from 'zod';
1
2
  export const fakeUrls = {
2
3
  notRPCButRealHttp: 'https://httpstat.us/200',
3
4
  };
5
+ const RPC_ORIGIN = process.env.RPC_ORIGIN;
6
+ if (!z.string().url().safeParse(RPC_ORIGIN).success) {
7
+ throw new Error('RPC_ORIGIN is not defined or is invalid URL');
8
+ }
4
9
  export const rpcUrls = {
5
- mainnet: `${process.env.RPC_ORIGIN}/api/eth`,
6
- matic: `${process.env.RPC_ORIGIN}/api/MATIC`,
7
- gno: `${process.env.RPC_ORIGIN}/api/gno`,
8
- bnb: `${process.env.RPC_ORIGIN}/api/bnb`,
9
- arb1: `${process.env.RPC_ORIGIN}/api/arb1`,
10
- gor: `${process.env.RPC_ORIGIN}/api/gor`,
10
+ mainnet: `${RPC_ORIGIN}/api/eth`,
11
+ matic: `${RPC_ORIGIN}/api/MATIC`,
12
+ gno: `${RPC_ORIGIN}/api/gno`,
13
+ bnb: `${RPC_ORIGIN}/api/bnb`,
14
+ arb1: `${RPC_ORIGIN}/api/arb1`,
15
+ gor: `${RPC_ORIGIN}/api/gor`,
11
16
  };
@@ -0,0 +1,7 @@
1
+ import type { TinyBig } from '../shared/tiny-big/tiny-big';
2
+ export interface FeeData {
3
+ gasPrice: TinyBig;
4
+ lastBaseFeePerGas: TinyBig | null;
5
+ maxFeePerGas: TinyBig | null;
6
+ maxPriorityFeePerGas: TinyBig | null;
7
+ }
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "essential-eth",
3
3
  "description": "Ultralight JS for Ethereum",
4
- "version": "0.7.0",
4
+ "version": "0.9.0",
5
5
  "license": "MIT",
6
6
  "sideEffects": false,
7
7
  "private": false,
@@ -30,17 +30,17 @@
30
30
  "name": "JsonRpcProvider",
31
31
  "path": "src/index.ts",
32
32
  "import": "{ JsonRpcProvider }",
33
- "limit": "20.24kb"
33
+ "limit": "20.32kb"
34
34
  },
35
35
  {
36
36
  "name": "Contract",
37
37
  "path": "src/index.ts",
38
38
  "import": "{ Contract }",
39
- "limit": "15.87kb"
39
+ "limit": "15.38kb"
40
40
  }
41
41
  ],
42
42
  "scripts": {
43
- "size": "size-limit",
43
+ "size": "npx size-limit",
44
44
  "test": "npm-run-all --parallel jest compile lint",
45
45
  "test:all-node-versions": "npx trevor",
46
46
  "lint": "eslint --cache --fix .",
@@ -90,12 +90,12 @@
90
90
  "perf_hooks": "^0.0.1",
91
91
  "prettier": "^2.8.4",
92
92
  "prettier-plugin-organize-imports": "^2.3.4",
93
- "size-limit": "^7.0.8",
94
93
  "ts-jest": "^27.1.4",
95
94
  "ts-node": "^10.2.1",
96
95
  "typedoc": "^0.22.15",
97
96
  "typescript": "^4.6.4",
98
- "web3": "^1.8.1"
97
+ "web3": "^1.8.1",
98
+ "zod": "^3.21.4"
99
99
  },
100
100
  "dependencies": {
101
101
  "@noble/secp256k1": "^1.5.5",
package/readme.md CHANGED
@@ -91,6 +91,7 @@
91
91
  - [`getBlock`](#getblock)
92
92
  - [`getBlockNumber`](#getblocknumber)
93
93
  - [`getCode`](#getcode)
94
+ - [`getFeeData`](#getfeedata)
94
95
  - [`getGasPrice`](#getgasprice)
95
96
  - [`getLogs`](#getlogs)
96
97
  - [`getNetwork`](#getnetwork)
@@ -128,7 +129,7 @@ Browsers:
128
129
 
129
130
  ```html
130
131
  <!-- index.html -->
131
- <script src="https://unpkg.com/essential-eth@0.7.0"></script>
132
+ <script src="https://unpkg.com/essential-eth@0.9.0"></script>
132
133
  ```
133
134
 
134
135
  <!-- ⛔️ AUTO-GENERATED-CONTENT:END (UNPKG_SCRIPT_TAG) -->
@@ -1195,6 +1196,34 @@ await jsonRpcProvider().getCode(
1195
1196
 
1196
1197
  <br/>
1197
1198
 
1199
+ #### [`getFeeData`](https://eeth.dev/docs/api/classes/JsonRpcProvider#getfeedata)
1200
+
1201
+ ```typescript
1202
+ provider.getFeeData(): Promise<FeeData>
1203
+ ```
1204
+
1205
+ <details>
1206
+ <summary>View Example</summary>
1207
+
1208
+ ```js
1209
+ import { JsonRpcProvider } from 'essential-eth';
1210
+ const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
1211
+ ```
1212
+
1213
+ ```javascript
1214
+ await provider.getFeeData();
1215
+ // {
1216
+ // gasPrice: { TinyBig: "14184772639" },
1217
+ // lastBaseFeePerGas: { TinyBig: "14038523098" },
1218
+ // maxFeePerGas: { TinyBig: "29577046196" },
1219
+ // maxPriorityFeePerGas: { TinyBig: "1500000000" }
1220
+ // }
1221
+ ```
1222
+
1223
+ </details>
1224
+
1225
+ <br/>
1226
+
1198
1227
  #### [`getGasPrice`](https://eeth.dev/docs/api/classes/JsonRpcProvider#getgasprice)
1199
1228
 
1200
1229
  ```typescript
@@ -1554,6 +1583,7 @@ Note: In `web3.js`, almost every method or function can be passed a callback. `e
1554
1583
 
1555
1584
  - [📓 View full docs](https://eeth.dev)
1556
1585
  - [📓 View changelog (by looking at releases diff)](https://github.com/dawsbot/essential-eth/releases)
1586
+ - [📋 View our project board](https://github.com/dawsbot/essential-eth/projects/1)
1557
1587
 
1558
1588
  ### GitPOAP
1559
1589