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,14 +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
- function _arrayWithoutHoles(arr) {
10
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
11
- }
12
1
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
13
2
  try {
14
3
  var info = gen[key](arg);
@@ -23,7 +12,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
23
12
  Promise.resolve(value).then(_next, _throw);
24
13
  }
25
14
  }
26
- function _asyncToGenerator(fn) {
15
+ function _async_to_generator(fn) {
27
16
  return function() {
28
17
  var self = this, args = arguments;
29
18
  return new Promise(function(resolve, reject) {
@@ -38,54 +27,59 @@ function _asyncToGenerator(fn) {
38
27
  });
39
28
  };
40
29
  }
41
- function _iterableToArray(iter) {
42
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
30
+ function _define_property(obj, key, value) {
31
+ if (key in obj) {
32
+ Object.defineProperty(obj, key, {
33
+ value: value,
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true
37
+ });
38
+ } else {
39
+ obj[key] = value;
40
+ }
41
+ return obj;
43
42
  }
44
- function _iterableToArrayLimit(arr, i) {
45
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
46
- if (_i == null) return;
47
- var _arr = [];
48
- var _n = true;
49
- var _d = false;
50
- var _s, _e;
51
- try {
52
- for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
53
- _arr.push(_s.value);
54
- if (i && _arr.length === i) break;
55
- }
56
- } catch (err) {
57
- _d = true;
58
- _e = err;
59
- } finally{
60
- try {
61
- if (!_n && _i["return"] != null) _i["return"]();
62
- } finally{
63
- if (_d) throw _e;
43
+ function _object_spread(target) {
44
+ for(var i = 1; i < arguments.length; i++){
45
+ var source = arguments[i] != null ? arguments[i] : {};
46
+ var ownKeys = Object.keys(source);
47
+ if (typeof Object.getOwnPropertySymbols === "function") {
48
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
49
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
50
+ }));
64
51
  }
52
+ ownKeys.forEach(function(key) {
53
+ _define_property(target, key, source[key]);
54
+ });
65
55
  }
66
- return _arr;
67
- }
68
- function _nonIterableRest() {
69
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
70
- }
71
- function _nonIterableSpread() {
72
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
73
- }
74
- function _slicedToArray(arr, i) {
75
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
56
+ return target;
76
57
  }
77
- function _toConsumableArray(arr) {
78
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
58
+ function ownKeys(object, enumerableOnly) {
59
+ var keys = Object.keys(object);
60
+ if (Object.getOwnPropertySymbols) {
61
+ var symbols = Object.getOwnPropertySymbols(object);
62
+ if (enumerableOnly) {
63
+ symbols = symbols.filter(function(sym) {
64
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
65
+ });
66
+ }
67
+ keys.push.apply(keys, symbols);
68
+ }
69
+ return keys;
79
70
  }
80
- function _unsupportedIterableToArray(o, minLen) {
81
- if (!o) return;
82
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
83
- var n = Object.prototype.toString.call(o).slice(8, -1);
84
- if (n === "Object" && o.constructor) n = o.constructor.name;
85
- if (n === "Map" || n === "Set") return Array.from(n);
86
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
71
+ function _object_spread_props(target, source) {
72
+ source = source != null ? source : {};
73
+ if (Object.getOwnPropertyDescriptors) {
74
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
75
+ } else {
76
+ ownKeys(Object(source)).forEach(function(key) {
77
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
78
+ });
79
+ }
80
+ return target;
87
81
  }
88
- var __generator = this && this.__generator || function(thisArg, body) {
82
+ function _ts_generator(thisArg, body) {
89
83
  var f, y, t, g, _ = {
90
84
  label: 0,
91
85
  sent: function() {
@@ -179,119 +173,104 @@ var __generator = this && this.__generator || function(thisArg, body) {
179
173
  done: true
180
174
  };
181
175
  }
182
- };
183
- import { ethers } from "ethers";
184
- import omit from "just-omit";
185
- import Web3 from "web3";
186
- import { JsonRpcProvider } from "../../../index";
176
+ }
177
+ import * as unfetch from "isomorphic-unfetch";
178
+ import { cleanLog } from "../../../classes/utils/clean-log";
179
+ import { buildFetchInit, buildRPCPostBody } from "../../../classes/utils/fetchers";
180
+ import { hexToDecimal } from "../../../classes/utils/hex-to-decimal";
181
+ import { JsonRpcProvider, tinyBig } from "../../../index";
182
+ import { mockOf } from "../mock-of";
187
183
  import { rpcUrls } from "../rpc-urls";
184
+ jest.mock("isomorphic-unfetch");
188
185
  var rpcUrl = rpcUrls.mainnet;
189
- describe("provider.getTransactionReceipt", function() {
190
- var testTransactionReceiptEquality = function testTransactionReceiptEquality(transactionReceipt1, transactionReceipt2) {
191
- var typeCheckKeys = [];
192
- var omittable1 = [];
193
- var omittable2 = [];
194
- if (transactionReceipt1.confirmations) {
195
- // only ethers response has confirmations
196
- // requires manually comparing values via bigNum conversion
197
- typeCheckKeys = [
198
- "gasUsed",
199
- "cumulativeGasUsed",
200
- "effectiveGasPrice"
201
- ];
202
- omittable1 = typeCheckKeys;
203
- omittable2 = typeCheckKeys;
204
- typeCheckKeys.forEach(function(key) {
205
- expect(transactionReceipt1[key].toString()).toBe(transactionReceipt2[key].toString());
206
- });
207
- expect(Math.abs(transactionReceipt1.confirmations - transactionReceipt2.confirmations)).toBeLessThan(3);
208
- } else {
209
- typeCheckKeys = [
210
- "cumulativeGasUsed",
211
- "effectiveGasPrice",
212
- "from",
213
- "gasUsed",
214
- "status",
215
- "to",
216
- "type"
217
- ];
218
- omittable1 = typeCheckKeys;
219
- omittable2 = [
220
- "byzantium",
221
- "confirmations"
222
- ].concat(_toConsumableArray(typeCheckKeys));
223
- typeCheckKeys.forEach(function(key) {
224
- switch(key){
225
- case "cumulativeGasUsed":
226
- case "effectiveGasPrice":
227
- case "gasUsed":
228
- expect(transactionReceipt1[key].toString()).toBe(transactionReceipt2[key].toString());
229
- break;
230
- case "from":
231
- case "to":
232
- expect(transactionReceipt1[key]).toBe(transactionReceipt2[key].toLowerCase());
233
- break;
234
- }
235
- });
186
+ var mockBlocksBetween = 10;
187
+ var mockReceiptResponse = {
188
+ blockHash: "0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d",
189
+ blockNumber: 14578286,
190
+ contractAddress: "0xdfD9dE5f6FA60BD70636c0900752E93a6144AEd4",
191
+ cumulativeGasUsed: "0x7f110",
192
+ effectiveGasPrice: "0x7f110",
193
+ from: "0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf",
194
+ gasUsed: "0x7f110",
195
+ logs: [
196
+ {
197
+ address: "0x6B175474E89094C44Da98b954EedeAC495271d0F",
198
+ blockHash: "0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d",
199
+ blockNumber: "0xdeadc2",
200
+ data: "0x0000000000000000000000000000000000000000000000000000000000000000",
201
+ logIndex: "0x1d",
202
+ removed: false,
203
+ topics: [
204
+ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
205
+ "0x0000000000000000000000000000000000000000000000000000000000000000"
206
+ ],
207
+ transactionHash: "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789",
208
+ transactionIndex: "0x1d"
236
209
  }
237
- var omittedTransactionReceipt1 = omit(transactionReceipt1, omittable1);
238
- var omittedTransactionReceipt2 = omit(transactionReceipt2, omittable2);
239
- omittedTransactionReceipt1.logs = omittedTransactionReceipt1.logs.map(function(log) {
240
- return omit(log, [
241
- "id",
242
- "removed"
243
- ]);
244
- });
245
- expect(omittedTransactionReceipt1).toMatchObject(omittedTransactionReceipt2);
246
- };
247
- it("should match web3.js", /*#__PURE__*/ _asyncToGenerator(function() {
248
- var transactionHash, web3Provider, essentialEthProvider, _ref, web3TransactionReceipt, essentialEthTransactionReceipt;
249
- return __generator(this, function(_state) {
250
- switch(_state.label){
251
- case 0:
252
- transactionHash = "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789";
253
- web3Provider = new Web3(rpcUrl);
254
- essentialEthProvider = new JsonRpcProvider(rpcUrl);
255
- return [
256
- 4,
257
- Promise.all([
258
- web3Provider.eth.getTransactionReceipt(transactionHash),
259
- essentialEthProvider.getTransactionReceipt(transactionHash)
260
- ])
261
- ];
262
- case 1:
263
- _ref = _slicedToArray.apply(void 0, [
264
- _state.sent(),
265
- 2
266
- ]), web3TransactionReceipt = _ref[0], essentialEthTransactionReceipt = _ref[1];
267
- testTransactionReceiptEquality(web3TransactionReceipt, essentialEthTransactionReceipt);
268
- return [
269
- 2
270
- ];
271
- }
272
- });
273
- }));
274
- it("should match ethers", /*#__PURE__*/ _asyncToGenerator(function() {
275
- var transactionHash, ethersProvider, essentialEthProvider, _ref, ethersTransactionReceipt, essentialEthTransactionReceipt;
276
- return __generator(this, function(_state) {
210
+ ],
211
+ logsBloom: "0x0000000000000",
212
+ status: "0x1",
213
+ to: "0xdfD9dE5f6FA60BD70636c0900752E93a6144AEd4",
214
+ transactionHash: "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789",
215
+ transactionIndex: 29,
216
+ type: 2,
217
+ confirmations: mockBlocksBetween
218
+ };
219
+ var mockRpcReceiptResponse = JSON.stringify({
220
+ jsonrpc: "2.0",
221
+ id: 1,
222
+ result: mockReceiptResponse
223
+ });
224
+ var mockRpcBlockResponse = JSON.stringify({
225
+ jsonrpc: "2.0",
226
+ id: 1,
227
+ result: {
228
+ number: mockReceiptResponse.blockNumber + mockBlocksBetween - 1
229
+ }
230
+ });
231
+ var mockReceipt = _object_spread_props(_object_spread({}, mockReceiptResponse), {
232
+ cumulativeGasUsed: tinyBig(mockReceiptResponse.cumulativeGasUsed),
233
+ effectiveGasPrice: tinyBig(mockReceiptResponse.effectiveGasPrice),
234
+ gasUsed: tinyBig(mockReceiptResponse.gasUsed),
235
+ status: Number(hexToDecimal(mockReceiptResponse.status)),
236
+ logs: mockReceiptResponse.logs.map(function(log) {
237
+ return cleanLog(log, true);
238
+ }),
239
+ byzantium: true
240
+ });
241
+ describe("provider.getTransactionReceipt", function() {
242
+ it("should match mocked transaction receipt", /*#__PURE__*/ _async_to_generator(function() {
243
+ var transactionHash, provider, spy, transactionReceipt;
244
+ return _ts_generator(this, function(_state) {
277
245
  switch(_state.label){
278
246
  case 0:
279
247
  transactionHash = "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789";
280
- ethersProvider = new ethers.providers.StaticJsonRpcProvider(rpcUrl);
281
- essentialEthProvider = new JsonRpcProvider(rpcUrl);
248
+ provider = new JsonRpcProvider(rpcUrl);
249
+ mockOf(unfetch.default).mockResolvedValueOnce({
250
+ text: function() {
251
+ return Promise.resolve(mockRpcReceiptResponse);
252
+ }
253
+ });
254
+ mockOf(unfetch.default).mockResolvedValueOnce({
255
+ text: function() {
256
+ return Promise.resolve(mockRpcBlockResponse);
257
+ }
258
+ });
259
+ spy = jest.spyOn(unfetch, "default");
282
260
  return [
283
261
  4,
284
- Promise.all([
285
- ethersProvider.getTransactionReceipt(transactionHash),
286
- essentialEthProvider.getTransactionReceipt(transactionHash)
287
- ])
262
+ provider.getTransactionReceipt(transactionHash)
288
263
  ];
289
264
  case 1:
290
- _ref = _slicedToArray.apply(void 0, [
291
- _state.sent(),
292
- 2
293
- ]), ethersTransactionReceipt = _ref[0], essentialEthTransactionReceipt = _ref[1];
294
- testTransactionReceiptEquality(ethersTransactionReceipt, essentialEthTransactionReceipt);
265
+ transactionReceipt = _state.sent();
266
+ expect(spy).toHaveBeenCalledWith(rpcUrl, buildFetchInit(buildRPCPostBody("eth_getTransactionReceipt", [
267
+ transactionHash
268
+ ])));
269
+ expect(spy).toHaveBeenCalledWith(rpcUrl, buildFetchInit(buildRPCPostBody("eth_getBlockByNumber", [
270
+ "latest",
271
+ false
272
+ ])));
273
+ expect(JSON.stringify(transactionReceipt)).toBe(JSON.stringify(mockReceipt));
295
274
  return [
296
275
  2
297
276
  ];
@@ -1,14 +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
- function _arrayWithoutHoles(arr) {
10
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
11
- }
12
1
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
13
2
  try {
14
3
  var info = gen[key](arg);
@@ -23,7 +12,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
23
12
  Promise.resolve(value).then(_next, _throw);
24
13
  }
25
14
  }
26
- function _asyncToGenerator(fn) {
15
+ function _async_to_generator(fn) {
27
16
  return function() {
28
17
  var self = this, args = arguments;
29
18
  return new Promise(function(resolve, reject) {
@@ -38,54 +27,59 @@ function _asyncToGenerator(fn) {
38
27
  });
39
28
  };
40
29
  }
41
- function _iterableToArray(iter) {
42
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
30
+ function _define_property(obj, key, value) {
31
+ if (key in obj) {
32
+ Object.defineProperty(obj, key, {
33
+ value: value,
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true
37
+ });
38
+ } else {
39
+ obj[key] = value;
40
+ }
41
+ return obj;
43
42
  }
44
- function _iterableToArrayLimit(arr, i) {
45
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
46
- if (_i == null) return;
47
- var _arr = [];
48
- var _n = true;
49
- var _d = false;
50
- var _s, _e;
51
- try {
52
- for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
53
- _arr.push(_s.value);
54
- if (i && _arr.length === i) break;
55
- }
56
- } catch (err) {
57
- _d = true;
58
- _e = err;
59
- } finally{
60
- try {
61
- if (!_n && _i["return"] != null) _i["return"]();
62
- } finally{
63
- if (_d) throw _e;
43
+ function _object_spread(target) {
44
+ for(var i = 1; i < arguments.length; i++){
45
+ var source = arguments[i] != null ? arguments[i] : {};
46
+ var ownKeys = Object.keys(source);
47
+ if (typeof Object.getOwnPropertySymbols === "function") {
48
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
49
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
50
+ }));
64
51
  }
52
+ ownKeys.forEach(function(key) {
53
+ _define_property(target, key, source[key]);
54
+ });
65
55
  }
66
- return _arr;
67
- }
68
- function _nonIterableRest() {
69
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
70
- }
71
- function _nonIterableSpread() {
72
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
56
+ return target;
73
57
  }
74
- function _slicedToArray(arr, i) {
75
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
76
- }
77
- function _toConsumableArray(arr) {
78
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
58
+ function ownKeys(object, enumerableOnly) {
59
+ var keys = Object.keys(object);
60
+ if (Object.getOwnPropertySymbols) {
61
+ var symbols = Object.getOwnPropertySymbols(object);
62
+ if (enumerableOnly) {
63
+ symbols = symbols.filter(function(sym) {
64
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
65
+ });
66
+ }
67
+ keys.push.apply(keys, symbols);
68
+ }
69
+ return keys;
79
70
  }
80
- function _unsupportedIterableToArray(o, minLen) {
81
- if (!o) return;
82
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
83
- var n = Object.prototype.toString.call(o).slice(8, -1);
84
- if (n === "Object" && o.constructor) n = o.constructor.name;
85
- if (n === "Map" || n === "Set") return Array.from(n);
86
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
71
+ function _object_spread_props(target, source) {
72
+ source = source != null ? source : {};
73
+ if (Object.getOwnPropertyDescriptors) {
74
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
75
+ } else {
76
+ ownKeys(Object(source)).forEach(function(key) {
77
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
78
+ });
79
+ }
80
+ return target;
87
81
  }
88
- var __generator = this && this.__generator || function(thisArg, body) {
82
+ function _ts_generator(thisArg, body) {
89
83
  var f, y, t, g, _ = {
90
84
  label: 0,
91
85
  sent: function() {
@@ -179,125 +173,90 @@ var __generator = this && this.__generator || function(thisArg, body) {
179
173
  done: true
180
174
  };
181
175
  }
182
- };
183
- import { ethers } from "ethers";
184
- import omit from "just-omit";
185
- import Web3 from "web3";
186
- import { hexToDecimal } from "../../../classes/utils/hex-to-decimal";
176
+ }
177
+ import * as unfetch from "isomorphic-unfetch";
178
+ import { buildFetchInit, buildRPCPostBody } from "../../../classes/utils/fetchers";
187
179
  import { JsonRpcProvider, tinyBig } from "../../../index";
180
+ import { mockOf } from "../mock-of";
188
181
  import { rpcUrls } from "../rpc-urls";
182
+ jest.mock("isomorphic-unfetch");
189
183
  var rpcUrl = rpcUrls.mainnet;
184
+ var mockBlocksBetween = 10;
185
+ var mockTransactionResponse = {
186
+ blockHash: "0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d",
187
+ blockNumber: 14578286,
188
+ from: "0xdfD9dE5f6FA60BD70636c0900752E93a6144AEd4",
189
+ gas: "112163",
190
+ gasPrice: "48592426858",
191
+ maxPriorityFeePerGas: "1500000000",
192
+ maxFeePerGas: "67681261618",
193
+ hash: "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789",
194
+ input: "0x83259f170000000000000000000000000000000000000000000000000000000000000080000000000000000000000000dfd9de5f6fa60bd70636c0900752e93a6144aed400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000009e99ad11a214fd016b19dc3648678c5944859ae292b21c24ca94f857836c4596f1950c82dd0c23dd621af4763edc2f66466e63c5df9de0c1107b1cd16bf460fe93e43fd308e3444bc79c3d88a4cb961dc8367ab6ad048867afc76d193bca99cf3a068864ed4a7df1dbf1d4c52238eced3e5e05644b4040fc2b3ccb8557b0e99fff6131305a0ea2b8061b90bd418db5bbdd2e92129f52d93f90531465e309c4caec5b85285822b6196398d36f16f511811b61bbda6461e80e29210cd303118bdcee8df6fa0505ffbe8642094fd2ba4dd458496fe3b459ac880bbf71877c713e969ccf5ed7efab8a84ebc07e3939901371ca427e1192e455a8f35a6a1d7ad09e1475dd1758b36fa631dab5d70e99316b23c4c43094188d360cd9c3457355904e07c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000162074a7047f",
195
+ nonce: "129",
196
+ to: "0x39B72d136ba3e4ceF35F48CD09587ffaB754DD8B",
197
+ transactionIndex: 29,
198
+ value: "0",
199
+ type: 2,
200
+ accessList: [],
201
+ chainId: 1,
202
+ v: 0,
203
+ r: "0x59a7c15b12c18cd68d6c440963d959bff3e73831ffc938e75ecad07f7ee43fbc",
204
+ s: "0x1ebaf05f0d9273b16c2a7748b150a79d22533a8cd74552611cbe620fee3dcf1c",
205
+ confirmations: mockBlocksBetween
206
+ };
207
+ var mockRpcTransactionResponse = JSON.stringify({
208
+ jsonrpc: "2.0",
209
+ id: 1,
210
+ result: mockTransactionResponse
211
+ });
212
+ var mockRpcBlockResponse = JSON.stringify({
213
+ jsonrpc: "2.0",
214
+ id: 1,
215
+ result: {
216
+ number: mockTransactionResponse.blockNumber + mockBlocksBetween - 1
217
+ }
218
+ });
219
+ var mockTransaction = _object_spread_props(_object_spread({}, mockTransactionResponse), {
220
+ value: tinyBig(mockTransactionResponse.value),
221
+ nonce: tinyBig(mockTransactionResponse.nonce),
222
+ maxPriorityFeePerGas: tinyBig(mockTransactionResponse.maxPriorityFeePerGas),
223
+ gasPrice: tinyBig(mockTransactionResponse.gasPrice),
224
+ maxFeePerGas: tinyBig(mockTransactionResponse.maxFeePerGas),
225
+ gas: tinyBig(mockTransactionResponse.gas)
226
+ });
190
227
  describe("provider.getTransaction", function() {
191
- var testTransactionEquality = function testTransactionEquality(transaction1, transaction2) {
192
- var numCheckKeys = [];
193
- var omittable1 = [];
194
- var omittable2 = [];
195
- if (transaction1.confirmations) {
196
- // only the ethers response has confirmations
197
- // requires manually comparing values via bigNum conversion
198
- numCheckKeys = [
199
- "nonce",
200
- "value",
201
- "gas",
202
- "gasPrice",
203
- "maxFeePerGas",
204
- "maxPriorityFeePerGas",
205
- "confirmations"
206
- ];
207
- omittable1 = [
208
- "wait",
209
- "creates",
210
- "data",
211
- "gasLimit",
212
- "input"
213
- ].concat(_toConsumableArray(numCheckKeys));
214
- omittable2 = [
215
- "input"
216
- ].concat(_toConsumableArray(numCheckKeys));
217
- numCheckKeys.forEach(function(key) {
218
- var ethersKey = key;
219
- if (key === "gas") {
220
- ethersKey = "gasLimit";
221
- }
222
- // give small room for error in tests
223
- expect(tinyBig(transaction1[ethersKey]).minus(tinyBig(transaction2[key])).abs().lt(2)).toBe(true);
224
- });
225
- expect(Math.abs(transaction1.confirmations - transaction2.confirmations)).toBeLessThan(3);
226
- } else {
227
- numCheckKeys = [
228
- "chainId",
229
- "gas",
230
- "gasPrice",
231
- "maxFeePerGas",
232
- "maxPriorityFeePerGas",
233
- "nonce",
234
- "v",
235
- "value"
236
- ];
237
- omittable1 = _toConsumableArray(numCheckKeys);
238
- omittable2 = [
239
- "confirmations"
240
- ].concat(_toConsumableArray(numCheckKeys));
241
- numCheckKeys.forEach(function(key) {
242
- if (typeof transaction1[key] === "string" && transaction1[key].startsWith("0x")) {
243
- transaction1[key] = Number(hexToDecimal(transaction1[key]));
244
- }
245
- // give room for error in tests
246
- expect(tinyBig(transaction1[key]).minus(tinyBig(transaction2[key])).abs().lt(2)).toBe(true);
247
- });
248
- }
249
- var omittedTransaction1 = omit(transaction1, omittable1);
250
- var omittedTransaction2 = omit(transaction2, omittable2);
251
- expect(omittedTransaction1).toMatchObject(omittedTransaction2);
252
- };
253
- it("should match web3.js", /*#__PURE__*/ _asyncToGenerator(function() {
254
- var transactionHash, web3Provider, essentialEthProvider, _ref, web3Transaction, essentialEthTransaction;
255
- return __generator(this, function(_state) {
228
+ it("should fetch transaction and add confirmations properly", /*#__PURE__*/ _async_to_generator(function() {
229
+ var transactionHash, provider, spy, transaction;
230
+ return _ts_generator(this, function(_state) {
256
231
  switch(_state.label){
257
232
  case 0:
258
233
  transactionHash = "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789";
259
- web3Provider = new Web3(rpcUrl);
260
- essentialEthProvider = new JsonRpcProvider(rpcUrl);
234
+ provider = new JsonRpcProvider(rpcUrl);
235
+ mockOf(unfetch.default).mockResolvedValueOnce({
236
+ text: function() {
237
+ return Promise.resolve(mockRpcTransactionResponse);
238
+ }
239
+ });
240
+ mockOf(unfetch.default).mockResolvedValueOnce({
241
+ text: function() {
242
+ return Promise.resolve(mockRpcBlockResponse);
243
+ }
244
+ });
245
+ spy = jest.spyOn(unfetch, "default");
261
246
  return [
262
247
  4,
263
- Promise.all([
264
- web3Provider.eth.getTransaction(transactionHash),
265
- essentialEthProvider.getTransaction(transactionHash)
266
- ])
248
+ provider.getTransaction(transactionHash)
267
249
  ];
268
250
  case 1:
269
- _ref = _slicedToArray.apply(void 0, [
270
- _state.sent(),
271
- 2
272
- ]), web3Transaction = _ref[0], essentialEthTransaction = _ref[1];
273
- testTransactionEquality(web3Transaction, essentialEthTransaction);
274
- return [
275
- 2
276
- ];
277
- }
278
- });
279
- }));
280
- it("should match ethers.js", /*#__PURE__*/ _asyncToGenerator(function() {
281
- var transactionHash, ethersProvider, essentialEthProvider, _ref, ethersTransaction, essentialEthTransaction;
282
- return __generator(this, function(_state) {
283
- switch(_state.label){
284
- case 0:
285
- transactionHash = "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789";
286
- ethersProvider = new ethers.providers.StaticJsonRpcProvider(rpcUrl);
287
- essentialEthProvider = new JsonRpcProvider(rpcUrl);
288
- return [
289
- 4,
290
- Promise.all([
291
- ethersProvider.getTransaction(transactionHash),
292
- essentialEthProvider.getTransaction(transactionHash)
293
- ])
294
- ];
295
- case 1:
296
- _ref = _slicedToArray.apply(void 0, [
297
- _state.sent(),
298
- 2
299
- ]), ethersTransaction = _ref[0], essentialEthTransaction = _ref[1];
300
- testTransactionEquality(ethersTransaction, essentialEthTransaction);
251
+ transaction = _state.sent();
252
+ expect(spy).toHaveBeenCalledWith(rpcUrl, buildFetchInit(buildRPCPostBody("eth_getTransactionByHash", [
253
+ transactionHash
254
+ ])));
255
+ expect(spy).toHaveBeenCalledWith(rpcUrl, buildFetchInit(buildRPCPostBody("eth_getBlockByNumber", [
256
+ "latest",
257
+ false
258
+ ])));
259
+ expect(JSON.stringify(transaction)).toBe(JSON.stringify(mockTransaction));
301
260
  return [
302
261
  2
303
262
  ];