essential-eth 0.8.0 → 0.9.1-next.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 (112) hide show
  1. package/dist/cjs/classes/Contract.js +38 -34
  2. package/dist/cjs/classes/test/Contract/crv.test.js +146 -339
  3. package/dist/cjs/classes/test/Contract/ens-abi.d.ts +1 -1
  4. package/dist/cjs/classes/test/Contract/ens.test.js +9 -66
  5. package/dist/cjs/classes/test/Contract/fei.test.js +11 -11
  6. package/dist/cjs/classes/test/Contract/foo-abi.d.ts +1 -1
  7. package/dist/cjs/classes/test/Contract/uni.test.js +66 -164
  8. package/dist/cjs/classes/utils/clean-block.js +4 -4
  9. package/dist/cjs/classes/utils/clean-log.js +4 -4
  10. package/dist/cjs/classes/utils/clean-transaction-receipt.js +4 -4
  11. package/dist/cjs/classes/utils/clean-transaction.js +4 -4
  12. package/dist/cjs/classes/utils/encode-decode-transaction.js +10 -10
  13. package/dist/cjs/classes/utils/fetchers.d.ts +8 -2
  14. package/dist/cjs/classes/utils/fetchers.js +20 -12
  15. package/dist/cjs/classes/utils/prepare-transaction.js +4 -4
  16. package/dist/cjs/index.d.ts +21 -21
  17. package/dist/cjs/index.js +21 -21
  18. package/dist/cjs/index.umd.js +1 -1
  19. package/dist/cjs/index.umd.js.map +1 -1
  20. package/dist/cjs/logger/logger.js +79 -41
  21. package/dist/cjs/logger/package-version.d.ts +1 -1
  22. package/dist/cjs/logger/package-version.js +1 -1
  23. package/dist/cjs/providers/AlchemyProvider.d.ts +4 -0
  24. package/dist/cjs/providers/AlchemyProvider.js +84 -0
  25. package/dist/cjs/providers/BaseProvider.js +471 -404
  26. package/dist/cjs/providers/FallthroughProvider.js +74 -38
  27. package/dist/cjs/providers/JsonRpcProvider.js +52 -31
  28. package/dist/cjs/providers/test/fallthrough-provider/get-gas-price.test.js +9 -9
  29. package/dist/cjs/providers/test/get-transaction-count.test.js +54 -91
  30. package/dist/cjs/providers/test/json-rpc-provider/call.test.js +87 -148
  31. package/dist/cjs/providers/test/json-rpc-provider/estimate-gas.test.js +45 -116
  32. package/dist/cjs/providers/test/json-rpc-provider/get-balance.test.js +36 -74
  33. package/dist/cjs/providers/test/json-rpc-provider/get-block-number.test.js +27 -94
  34. package/dist/cjs/providers/test/json-rpc-provider/get-block.test.js +191 -278
  35. package/dist/cjs/providers/test/json-rpc-provider/get-code.test.js +106 -135
  36. package/dist/cjs/providers/test/json-rpc-provider/get-fee-data.test.js +48 -73
  37. package/dist/cjs/providers/test/json-rpc-provider/get-gas-price.test.js +29 -64
  38. package/dist/cjs/providers/test/json-rpc-provider/get-logs/get-logs.test.js +219 -0
  39. package/dist/cjs/providers/test/json-rpc-provider/get-logs/mocks.d.ts +14 -0
  40. package/dist/cjs/providers/test/json-rpc-provider/get-logs/mocks.js +149 -0
  41. package/dist/cjs/providers/test/json-rpc-provider/get-network.test.js +37 -79
  42. package/dist/cjs/providers/test/json-rpc-provider/get-transaction-receipt.test.js +136 -157
  43. package/dist/cjs/providers/test/json-rpc-provider/get-transaction.test.js +121 -162
  44. package/dist/cjs/providers/test/mock-of.d.ts +2 -0
  45. package/dist/cjs/providers/test/mock-of.js +9 -0
  46. package/dist/cjs/providers/test/rpc-urls.d.ts +1 -0
  47. package/dist/cjs/providers/test/rpc-urls.js +12 -6
  48. package/dist/cjs/providers/test/test-alchemy-provider.test.js +151 -0
  49. package/dist/cjs/providers/utils/chains-info.d.ts +5 -448
  50. package/dist/cjs/providers/utils/chains-info.js +13 -1344
  51. package/dist/cjs/shared/tiny-big/helpers.js +18 -18
  52. package/dist/cjs/shared/tiny-big/tiny-big.js +96 -56
  53. package/dist/cjs/shared/tiny-big/tiny-big.test.js +2 -2
  54. package/dist/cjs/shared/validate-type.d.ts +1 -1
  55. package/dist/cjs/shared/validate-type.js +4 -4
  56. package/dist/cjs/types/Block.types.d.ts +3 -3
  57. package/dist/cjs/types/Contract.types.d.ts +4 -4
  58. package/dist/cjs/types/Transaction.types.d.ts +5 -5
  59. package/dist/cjs/utils/bytes.d.ts +4 -4
  60. package/dist/cjs/utils/bytes.js +3 -3
  61. package/dist/cjs/utils/tests/bytes/arrayify.test.js +48 -24
  62. package/dist/cjs/utils/tests/bytes/concat.test.js +5 -3
  63. package/dist/cjs/utils/tests/bytes/hex-concat.test.js +15 -13
  64. package/dist/cjs/utils/tests/bytes/hex-data-length.test.js +49 -32
  65. package/dist/cjs/utils/tests/bytes/hex-data-slice.test.js +15 -16
  66. package/dist/cjs/utils/tests/bytes/hex-strip-zeros.test.js +57 -40
  67. package/dist/cjs/utils/tests/bytes/hex-value.test.js +118 -62
  68. package/dist/cjs/utils/tests/bytes/hex-zero-pad.test.js +71 -33
  69. package/dist/cjs/utils/tests/bytes/hexlify.test.js +45 -29
  70. package/dist/cjs/utils/tests/bytes/is-bytes-like.test.js +10 -11
  71. package/dist/cjs/utils/tests/bytes/is-bytes.test.js +70 -27
  72. package/dist/cjs/utils/tests/bytes/is-hex-string.test.js +37 -28
  73. package/dist/cjs/utils/tests/bytes/strip-zeros.test.js +94 -45
  74. package/dist/cjs/utils/tests/bytes/zero-pad.test.js +98 -34
  75. package/dist/cjs/utils/tests/compute-address.test.js +42 -20
  76. package/dist/cjs/utils/tests/compute-public-key.test.js +20 -9
  77. package/dist/cjs/utils/tests/ether-to-wei.test.js +5 -13
  78. package/dist/cjs/utils/tests/hash-message.test.js +26 -15
  79. package/dist/cjs/utils/tests/is-address.test.js +2 -9
  80. package/dist/cjs/utils/tests/keccak256.test.js +36 -12
  81. package/dist/cjs/utils/tests/solidity-keccak256.test.js +43 -42
  82. package/dist/cjs/utils/tests/split-signature.test.js +29 -8
  83. package/dist/cjs/utils/tests/to-checksum-address.test.js +1 -4
  84. package/dist/cjs/utils/tests/to-utf8-bytes.test.js +28 -8
  85. package/dist/cjs/utils/tests/wei-to-ether.test.js +10 -20
  86. package/dist/esm/classes/test/Contract/ens-abi.d.ts +1 -1
  87. package/dist/esm/classes/test/Contract/foo-abi.d.ts +1 -1
  88. package/dist/esm/classes/utils/fetchers.d.ts +8 -2
  89. package/dist/esm/classes/utils/fetchers.js +6 -3
  90. package/dist/esm/index.d.ts +21 -21
  91. package/dist/esm/index.js +16 -16
  92. package/dist/esm/logger/package-version.d.ts +1 -1
  93. package/dist/esm/logger/package-version.js +1 -1
  94. package/dist/esm/providers/AlchemyProvider.d.ts +4 -0
  95. package/dist/esm/providers/AlchemyProvider.js +7 -0
  96. package/dist/esm/providers/FallthroughProvider.js +15 -7
  97. package/dist/esm/providers/test/json-rpc-provider/get-logs/mocks.d.ts +14 -0
  98. package/dist/esm/providers/test/json-rpc-provider/get-logs/mocks.js +142 -0
  99. package/dist/esm/providers/test/mock-of.d.ts +2 -0
  100. package/dist/esm/providers/test/mock-of.js +1 -0
  101. package/dist/esm/providers/test/rpc-urls.d.ts +1 -0
  102. package/dist/esm/providers/test/rpc-urls.js +14 -6
  103. package/dist/esm/providers/utils/chains-info.d.ts +5 -448
  104. package/dist/esm/providers/utils/chains-info.js +13 -1344
  105. package/dist/esm/shared/validate-type.d.ts +1 -1
  106. package/dist/esm/types/Block.types.d.ts +3 -3
  107. package/dist/esm/types/Contract.types.d.ts +4 -4
  108. package/dist/esm/types/Transaction.types.d.ts +5 -5
  109. package/dist/esm/utils/bytes.d.ts +4 -4
  110. package/package.json +23 -51
  111. package/readme.md +16 -38
  112. package/dist/cjs/providers/test/json-rpc-provider/get-logs.test.js +0 -361
@@ -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);
@@ -20,7 +12,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
20
12
  Promise.resolve(value).then(_next, _throw);
21
13
  }
22
14
  }
23
- function _asyncToGenerator(fn) {
15
+ function _async_to_generator(fn) {
24
16
  return function() {
25
17
  var self = this, args = arguments;
26
18
  return new Promise(function(resolve, reject) {
@@ -35,45 +27,7 @@ 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
- var __generator = this && this.__generator || function(thisArg, body) {
30
+ function _ts_generator(thisArg, body) {
77
31
  var f, y, t, g, _ = {
78
32
  label: 0,
79
33
  sent: function() {
@@ -83,13 +37,13 @@ var __generator = this && this.__generator || function(thisArg, body) {
83
37
  trys: [],
84
38
  ops: []
85
39
  };
86
- return(g = {
40
+ return g = {
87
41
  next: verb(0),
88
42
  "throw": verb(1),
89
43
  "return": verb(2)
90
44
  }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
91
45
  return this;
92
- }), g);
46
+ }), g;
93
47
  function verb(n) {
94
48
  return function(v) {
95
49
  return step([
@@ -167,16 +121,16 @@ var __generator = this && this.__generator || function(thisArg, body) {
167
121
  done: true
168
122
  };
169
123
  }
170
- };
171
- import { StaticJsonRpcProvider } from "@ethersproject/providers";
172
- import Web3 from "web3";
173
- import { JsonRpcProvider } from "../../../index";
124
+ }
125
+ import * as unfetch from "isomorphic-unfetch";
126
+ import { buildFetchInit, buildRPCPostBody } from "../../../classes/utils/fetchers";
127
+ import { JsonRpcProvider, tinyBig } from "../../../index";
174
128
  import { rpcUrls } from "./../rpc-urls";
175
129
  // Using Polygon to be able to access archive blocks
176
130
  // Choosing to use Ethereum mainnet means that as new blocks are generated, block numbers used in testing may be inaccessible and cause tests to fail
177
131
  var rpcUrl = rpcUrls.matic;
178
- // can't test for earliest block (at least for Ethereum) as it's very unlikely there was a smart contract on the first block
179
- var inputs = [
132
+ jest.mock("isomorphic-unfetch");
133
+ var validInputs = [
180
134
  {
181
135
  address: "0x00153ab45951268d8813BCAb403152A059B99CB1",
182
136
  blockTag: undefined
@@ -194,114 +148,131 @@ var inputs = [
194
148
  blockTag: 28114328
195
149
  }
196
150
  ];
197
- describe("provider.getCode", function() {
198
- var essentialEthProvider = new JsonRpcProvider(rpcUrl);
199
- var ethersProvider = new StaticJsonRpcProvider(rpcUrl);
200
- var web3Provider = new Web3(rpcUrl);
201
- it("should match ethers.js", /*#__PURE__*/ _asyncToGenerator(function() {
202
- return __generator(this, function(_state) {
151
+ var invalidInput = {
152
+ address: "0xd31a02A126Bb7ACD359BD61E9a8276959408855E",
153
+ blockTag: 28314328
154
+ };
155
+ var mockCodeResult = "0x06060060600606006060060600606006060";
156
+ var mockInvalidResult = "0x";
157
+ var provider = new JsonRpcProvider(rpcUrl);
158
+ function testGetCode(input, mockResult) {
159
+ return _testGetCode.apply(this, arguments);
160
+ }
161
+ function _testGetCode() {
162
+ _testGetCode = _async_to_generator(function(input, mockResult) {
163
+ var spy, code, _input_blockTag, expectedBlockTag;
164
+ return _ts_generator(this, function(_state) {
203
165
  switch(_state.label){
204
166
  case 0:
167
+ spy = jest.spyOn(unfetch, "default");
168
+ spy.mockResolvedValueOnce({
169
+ text: function() {
170
+ return Promise.resolve(JSON.stringify({
171
+ jsonrpc: "2.0",
172
+ id: 1,
173
+ result: mockResult
174
+ }));
175
+ }
176
+ });
205
177
  return [
206
178
  4,
207
- inputs.forEach(function() {
208
- var _ref = _asyncToGenerator(function(input) {
209
- var _ref, essentialEthCode, ethersCode;
210
- return __generator(this, function(_state) {
211
- switch(_state.label){
212
- case 0:
213
- return [
214
- 4,
215
- Promise.all([
216
- essentialEthProvider.getCode(input.address, input.blockTag),
217
- ethersProvider.getCode(input.address, input.blockTag)
218
- ])
219
- ];
220
- case 1:
221
- _ref = _slicedToArray.apply(void 0, [
222
- _state.sent(),
223
- 2
224
- ]), essentialEthCode = _ref[0], ethersCode = _ref[1];
225
- expect(essentialEthCode).toStrictEqual(ethersCode);
226
- return [
227
- 2
228
- ];
229
- }
230
- });
231
- });
232
- return function(input) {
233
- return _ref.apply(this, arguments);
234
- };
235
- }())
179
+ provider.getCode(input.address, input.blockTag)
236
180
  ];
237
181
  case 1:
238
- _state.sent();
182
+ code = _state.sent();
183
+ expect(code).toBe(mockResult);
184
+ expectedBlockTag = typeof input.blockTag === "number" ? tinyBig(input.blockTag).toHexString() : (_input_blockTag = input.blockTag) !== null && _input_blockTag !== void 0 ? _input_blockTag : "latest";
185
+ expect(spy).toHaveBeenCalledWith(rpcUrl, buildFetchInit(buildRPCPostBody("eth_getCode", [
186
+ input.address,
187
+ expectedBlockTag
188
+ ])));
239
189
  return [
240
190
  2
241
191
  ];
242
192
  }
243
193
  });
244
- }));
245
- it("should match web3.js", /*#__PURE__*/ _asyncToGenerator(function() {
246
- return __generator(this, function(_state) {
194
+ });
195
+ return _testGetCode.apply(this, arguments);
196
+ }
197
+ describe("provider.getCode with Mock", function() {
198
+ it("should return the correct code for the given input", /*#__PURE__*/ _async_to_generator(function() {
199
+ var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, input, err;
200
+ return _ts_generator(this, function(_state) {
247
201
  switch(_state.label){
248
202
  case 0:
203
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
204
+ _state.label = 1;
205
+ case 1:
206
+ _state.trys.push([
207
+ 1,
208
+ 6,
209
+ 7,
210
+ 8
211
+ ]);
212
+ _iterator = validInputs[Symbol.iterator]();
213
+ _state.label = 2;
214
+ case 2:
215
+ if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
216
+ 3,
217
+ 5
218
+ ];
219
+ input = _step.value;
249
220
  return [
250
221
  4,
251
- inputs.forEach(function() {
252
- var _ref = _asyncToGenerator(function(input) {
253
- var _ref, essentialEthCode, web3Code;
254
- return __generator(this, function(_state) {
255
- switch(_state.label){
256
- case 0:
257
- return [
258
- 4,
259
- Promise.all([
260
- essentialEthProvider.getCode(input.address, input.blockTag),
261
- web3Provider.eth.getCode(input.address, input.blockTag)
262
- ])
263
- ];
264
- case 1:
265
- _ref = _slicedToArray.apply(void 0, [
266
- _state.sent(),
267
- 2
268
- ]), essentialEthCode = _ref[0], web3Code = _ref[1];
269
- expect(essentialEthCode).toStrictEqual(web3Code);
270
- return [
271
- 2
272
- ];
273
- }
274
- });
275
- });
276
- return function(input) {
277
- return _ref.apply(this, arguments);
278
- };
279
- }())
222
+ testGetCode(input, mockCodeResult)
280
223
  ];
281
- case 1:
224
+ case 3:
282
225
  _state.sent();
226
+ _state.label = 4;
227
+ case 4:
228
+ _iteratorNormalCompletion = true;
229
+ return [
230
+ 3,
231
+ 2
232
+ ];
233
+ case 5:
234
+ return [
235
+ 3,
236
+ 8
237
+ ];
238
+ case 6:
239
+ err = _state.sent();
240
+ _didIteratorError = true;
241
+ _iteratorError = err;
242
+ return [
243
+ 3,
244
+ 8
245
+ ];
246
+ case 7:
247
+ try {
248
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
249
+ _iterator.return();
250
+ }
251
+ } finally{
252
+ if (_didIteratorError) {
253
+ throw _iteratorError;
254
+ }
255
+ }
256
+ return [
257
+ 7
258
+ ];
259
+ case 8:
283
260
  return [
284
261
  2
285
262
  ];
286
263
  }
287
264
  });
288
265
  }));
289
- it("should return `0x` when a contract does not exist", /*#__PURE__*/ _asyncToGenerator(function() {
290
- var invalidInput, essentialEthCode;
291
- return __generator(this, function(_state) {
266
+ it("should return `0x` when a contract does not exist", /*#__PURE__*/ _async_to_generator(function() {
267
+ return _ts_generator(this, function(_state) {
292
268
  switch(_state.label){
293
269
  case 0:
294
- invalidInput = {
295
- address: "0xd31a02A126Bb7ACD359BD61E9a8276959408855E",
296
- blockTag: 28314328
297
- };
298
270
  return [
299
271
  4,
300
- essentialEthProvider.getCode(invalidInput.address, invalidInput.blockTag)
272
+ testGetCode(invalidInput, mockInvalidResult)
301
273
  ];
302
274
  case 1:
303
- essentialEthCode = _state.sent();
304
- expect(essentialEthCode).toBe("0x");
275
+ _state.sent();
305
276
  return [
306
277
  2
307
278
  ];
@@ -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);
@@ -20,7 +12,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
20
12
  Promise.resolve(value).then(_next, _throw);
21
13
  }
22
14
  }
23
- function _asyncToGenerator(fn) {
15
+ function _async_to_generator(fn) {
24
16
  return function() {
25
17
  var self = this, args = arguments;
26
18
  return new Promise(function(resolve, reject) {
@@ -35,45 +27,7 @@ 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
- var __generator = this && this.__generator || function(thisArg, body) {
30
+ function _ts_generator(thisArg, body) {
77
31
  var f, y, t, g, _ = {
78
32
  label: 0,
79
33
  sent: function() {
@@ -167,42 +121,63 @@ var __generator = this && this.__generator || function(thisArg, body) {
167
121
  done: true
168
122
  };
169
123
  }
170
- };
171
- import { StaticJsonRpcProvider } from "@ethersproject/providers";
124
+ }
125
+ import * as unfetch from "isomorphic-unfetch";
126
+ import { buildFetchInit, buildRPCPostBody } from "../../../classes/utils/fetchers";
172
127
  import { JsonRpcProvider } from "../../JsonRpcProvider";
128
+ import { mockOf } from "../mock-of";
173
129
  import { rpcUrls } from "./../rpc-urls";
174
130
  var rpcUrl = rpcUrls.mainnet;
175
131
  var essentialEthProvider = new JsonRpcProvider(rpcUrl);
176
- var ethersProvider = new StaticJsonRpcProvider(rpcUrl);
132
+ jest.mock("isomorphic-unfetch");
133
+ // essentialEthProvider.getFeeData() calls these methods internally
134
+ var mockGetBlockResponse = JSON.stringify({
135
+ jsonrpc: "2.0",
136
+ id: 1,
137
+ result: {
138
+ baseFeePerGas: "0xa"
139
+ }
140
+ });
141
+ var mockGetGasPriceResponse = JSON.stringify({
142
+ jsonrpc: "2.0",
143
+ id: 1,
144
+ result: "0xa"
145
+ });
177
146
  describe("provider.getFeeData", function() {
178
- it("should match ethers.js", /*#__PURE__*/ _asyncToGenerator(function() {
179
- var _ref, ethersFeeData, eeFeeData;
180
- return __generator(this, function(_state) {
147
+ it("should match mocked responses", /*#__PURE__*/ _async_to_generator(function() {
148
+ var spy, feeData;
149
+ return _ts_generator(this, function(_state) {
181
150
  switch(_state.label){
182
151
  case 0:
152
+ mockOf(unfetch.default).mockResolvedValueOnce({
153
+ text: function() {
154
+ return Promise.resolve(mockGetBlockResponse);
155
+ }
156
+ });
157
+ mockOf(unfetch.default).mockResolvedValueOnce({
158
+ text: function() {
159
+ return Promise.resolve(mockGetGasPriceResponse);
160
+ }
161
+ });
162
+ spy = jest.spyOn(unfetch, "default");
183
163
  return [
184
164
  4,
185
- Promise.all([
186
- ethersProvider.getFeeData(),
187
- essentialEthProvider.getFeeData()
188
- ])
165
+ essentialEthProvider.getFeeData()
189
166
  ];
190
167
  case 1:
191
- _ref = _slicedToArray.apply(void 0, [
192
- _state.sent(),
193
- 2
194
- ]), ethersFeeData = _ref[0], eeFeeData = _ref[1];
195
- expect(eeFeeData.gasPrice.toString()).toBe(// @ts-ignore
196
- ethersFeeData === null || ethersFeeData === void 0 ? void 0 : ethersFeeData.gasPrice.toString());
197
- // @ts-ignore
198
- expect(eeFeeData.lastBaseFeePerGas.toString()).toBe(// @ts-ignore
199
- ethersFeeData === null || ethersFeeData === void 0 ? void 0 : ethersFeeData.lastBaseFeePerGas.toString());
200
- // @ts-ignore
201
- expect(eeFeeData.maxFeePerGas.toString()).toBe(// @ts-ignore
202
- ethersFeeData === null || ethersFeeData === void 0 ? void 0 : ethersFeeData.maxFeePerGas.toString());
203
- // @ts-ignore
204
- expect(eeFeeData.maxPriorityFeePerGas.toString()).toBe(// @ts-ignore
205
- ethersFeeData === null || ethersFeeData === void 0 ? void 0 : ethersFeeData.maxPriorityFeePerGas.toString());
168
+ feeData = _state.sent();
169
+ expect(feeData.gasPrice.toString()).toBe("10");
170
+ // lastBaseFeePerGas should be equal to the mocked baseFeePerGas value
171
+ expect(feeData.lastBaseFeePerGas.toString()).toBe("10");
172
+ // maxFeePerGas is calculated as (baseFeePerGas * 2) + maxPriorityFeePerGas, (10 * 2) + 1500000000 = 1500000020
173
+ expect(feeData.maxFeePerGas.toString()).toBe("1500000020");
174
+ // maxPriorityFeePerGas is a constant value (1500000000) in the getFeeData function
175
+ expect(feeData.maxPriorityFeePerGas.toString()).toBe("1500000000");
176
+ expect(spy).toHaveBeenCalledWith(rpcUrl, buildFetchInit(buildRPCPostBody("eth_getBlockByNumber", [
177
+ "latest",
178
+ false
179
+ ])));
180
+ expect(spy).toHaveBeenCalledWith(rpcUrl, buildFetchInit(buildRPCPostBody("eth_gasPrice", [])));
206
181
  return [
207
182
  2
208
183
  ];
@@ -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);
@@ -20,7 +12,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
20
12
  Promise.resolve(value).then(_next, _throw);
21
13
  }
22
14
  }
23
- function _asyncToGenerator(fn) {
15
+ function _async_to_generator(fn) {
24
16
  return function() {
25
17
  var self = this, args = arguments;
26
18
  return new Promise(function(resolve, reject) {
@@ -35,45 +27,7 @@ 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
- var __generator = this && this.__generator || function(thisArg, body) {
30
+ function _ts_generator(thisArg, body) {
77
31
  var f, y, t, g, _ = {
78
32
  label: 0,
79
33
  sent: function() {
@@ -167,32 +121,43 @@ var __generator = this && this.__generator || function(thisArg, body) {
167
121
  done: true
168
122
  };
169
123
  }
170
- };
171
- import { ethers } from "ethers";
124
+ }
125
+ import * as unfetch from "isomorphic-unfetch";
126
+ import z from "zod";
127
+ import { buildFetchInit, buildRPCPostBody } from "../../../classes/utils/fetchers";
172
128
  import { JsonRpcProvider } from "../../../index";
129
+ import { mockOf } from "../mock-of";
173
130
  import { rpcUrls } from "../rpc-urls";
131
+ import { TinyBig } from "./../../../shared/tiny-big/tiny-big";
132
+ jest.mock("isomorphic-unfetch");
133
+ var mockPostResponse = JSON.stringify({
134
+ jsonrpc: "2.0",
135
+ id: 1,
136
+ result: "0xa"
137
+ });
174
138
  var rpcUrl = rpcUrls.mainnet;
175
139
  describe("provider.getGasPrice", function() {
176
- it("should match ethers and essential-eth", /*#__PURE__*/ _asyncToGenerator(function() {
177
- var ethersProvider, essentialEthProvider, _ref, ethersGasPrice, essentialEthGasPrice;
178
- return __generator(this, function(_state) {
140
+ it("should get TinyBig integer", /*#__PURE__*/ _async_to_generator(function() {
141
+ var provider, spy, gasPrice;
142
+ return _ts_generator(this, function(_state) {
179
143
  switch(_state.label){
180
144
  case 0:
181
- ethersProvider = new ethers.providers.StaticJsonRpcProvider(rpcUrl);
182
- essentialEthProvider = new JsonRpcProvider(rpcUrl);
145
+ provider = new JsonRpcProvider(rpcUrl);
146
+ mockOf(unfetch.default).mockResolvedValueOnce({
147
+ text: function() {
148
+ return Promise.resolve(mockPostResponse);
149
+ }
150
+ });
151
+ spy = jest.spyOn(unfetch, "default");
183
152
  return [
184
153
  4,
185
- Promise.all([
186
- ethersProvider.getGasPrice(),
187
- essentialEthProvider.getGasPrice()
188
- ])
154
+ provider.getGasPrice()
189
155
  ];
190
156
  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);
157
+ gasPrice = _state.sent();
158
+ expect(z.instanceof(TinyBig).safeParse(gasPrice).success).toBe(true);
159
+ expect(gasPrice.toString()).toBe("10");
160
+ expect(spy).toHaveBeenCalledWith(rpcUrl, buildFetchInit(buildRPCPostBody("eth_gasPrice", [])));
196
161
  return [
197
162
  2
198
163
  ];