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.
- package/dist/cjs/classes/Contract.js +38 -34
- package/dist/cjs/classes/test/Contract/crv.test.js +146 -339
- package/dist/cjs/classes/test/Contract/ens-abi.d.ts +1 -1
- package/dist/cjs/classes/test/Contract/ens.test.js +9 -66
- package/dist/cjs/classes/test/Contract/fei.test.js +11 -11
- package/dist/cjs/classes/test/Contract/foo-abi.d.ts +1 -1
- package/dist/cjs/classes/test/Contract/uni.test.js +66 -164
- package/dist/cjs/classes/utils/clean-block.js +4 -4
- package/dist/cjs/classes/utils/clean-log.js +4 -4
- package/dist/cjs/classes/utils/clean-transaction-receipt.js +4 -4
- package/dist/cjs/classes/utils/clean-transaction.js +4 -4
- package/dist/cjs/classes/utils/encode-decode-transaction.js +10 -10
- package/dist/cjs/classes/utils/fetchers.d.ts +8 -2
- package/dist/cjs/classes/utils/fetchers.js +20 -12
- package/dist/cjs/classes/utils/prepare-transaction.js +4 -4
- package/dist/cjs/index.d.ts +21 -21
- package/dist/cjs/index.js +21 -21
- package/dist/cjs/index.umd.js +1 -1
- package/dist/cjs/index.umd.js.map +1 -1
- package/dist/cjs/logger/logger.js +79 -41
- package/dist/cjs/logger/package-version.d.ts +1 -1
- package/dist/cjs/logger/package-version.js +1 -1
- package/dist/cjs/providers/AlchemyProvider.d.ts +4 -0
- package/dist/cjs/providers/AlchemyProvider.js +84 -0
- package/dist/cjs/providers/BaseProvider.js +471 -404
- package/dist/cjs/providers/FallthroughProvider.js +74 -38
- package/dist/cjs/providers/JsonRpcProvider.js +52 -31
- package/dist/cjs/providers/test/fallthrough-provider/get-gas-price.test.js +9 -9
- package/dist/cjs/providers/test/get-transaction-count.test.js +54 -91
- package/dist/cjs/providers/test/json-rpc-provider/call.test.js +87 -148
- package/dist/cjs/providers/test/json-rpc-provider/estimate-gas.test.js +45 -116
- package/dist/cjs/providers/test/json-rpc-provider/get-balance.test.js +36 -74
- package/dist/cjs/providers/test/json-rpc-provider/get-block-number.test.js +27 -94
- package/dist/cjs/providers/test/json-rpc-provider/get-block.test.js +191 -278
- package/dist/cjs/providers/test/json-rpc-provider/get-code.test.js +106 -135
- package/dist/cjs/providers/test/json-rpc-provider/get-fee-data.test.js +48 -73
- package/dist/cjs/providers/test/json-rpc-provider/get-gas-price.test.js +29 -64
- package/dist/cjs/providers/test/json-rpc-provider/get-logs/get-logs.test.js +219 -0
- package/dist/cjs/providers/test/json-rpc-provider/get-logs/mocks.d.ts +14 -0
- package/dist/cjs/providers/test/json-rpc-provider/get-logs/mocks.js +149 -0
- package/dist/cjs/providers/test/json-rpc-provider/get-network.test.js +37 -79
- package/dist/cjs/providers/test/json-rpc-provider/get-transaction-receipt.test.js +136 -157
- package/dist/cjs/providers/test/json-rpc-provider/get-transaction.test.js +121 -162
- package/dist/cjs/providers/test/mock-of.d.ts +2 -0
- package/dist/cjs/providers/test/mock-of.js +9 -0
- package/dist/cjs/providers/test/rpc-urls.d.ts +1 -0
- package/dist/cjs/providers/test/rpc-urls.js +12 -6
- package/dist/cjs/providers/test/test-alchemy-provider.test.js +151 -0
- package/dist/cjs/providers/utils/chains-info.d.ts +5 -448
- package/dist/cjs/providers/utils/chains-info.js +13 -1344
- package/dist/cjs/shared/tiny-big/helpers.js +18 -18
- package/dist/cjs/shared/tiny-big/tiny-big.js +96 -56
- package/dist/cjs/shared/tiny-big/tiny-big.test.js +2 -2
- package/dist/cjs/shared/validate-type.d.ts +1 -1
- package/dist/cjs/shared/validate-type.js +4 -4
- package/dist/cjs/types/Block.types.d.ts +3 -3
- package/dist/cjs/types/Contract.types.d.ts +4 -4
- package/dist/cjs/types/Transaction.types.d.ts +5 -5
- package/dist/cjs/utils/bytes.d.ts +4 -4
- package/dist/cjs/utils/bytes.js +3 -3
- package/dist/cjs/utils/tests/bytes/arrayify.test.js +48 -24
- package/dist/cjs/utils/tests/bytes/concat.test.js +5 -3
- package/dist/cjs/utils/tests/bytes/hex-concat.test.js +15 -13
- package/dist/cjs/utils/tests/bytes/hex-data-length.test.js +49 -32
- package/dist/cjs/utils/tests/bytes/hex-data-slice.test.js +15 -16
- package/dist/cjs/utils/tests/bytes/hex-strip-zeros.test.js +57 -40
- package/dist/cjs/utils/tests/bytes/hex-value.test.js +118 -62
- package/dist/cjs/utils/tests/bytes/hex-zero-pad.test.js +71 -33
- package/dist/cjs/utils/tests/bytes/hexlify.test.js +45 -29
- package/dist/cjs/utils/tests/bytes/is-bytes-like.test.js +10 -11
- package/dist/cjs/utils/tests/bytes/is-bytes.test.js +70 -27
- package/dist/cjs/utils/tests/bytes/is-hex-string.test.js +37 -28
- package/dist/cjs/utils/tests/bytes/strip-zeros.test.js +94 -45
- package/dist/cjs/utils/tests/bytes/zero-pad.test.js +98 -34
- package/dist/cjs/utils/tests/compute-address.test.js +42 -20
- package/dist/cjs/utils/tests/compute-public-key.test.js +20 -9
- package/dist/cjs/utils/tests/ether-to-wei.test.js +5 -13
- package/dist/cjs/utils/tests/hash-message.test.js +26 -15
- package/dist/cjs/utils/tests/is-address.test.js +2 -9
- package/dist/cjs/utils/tests/keccak256.test.js +36 -12
- package/dist/cjs/utils/tests/solidity-keccak256.test.js +43 -42
- package/dist/cjs/utils/tests/split-signature.test.js +29 -8
- package/dist/cjs/utils/tests/to-checksum-address.test.js +1 -4
- package/dist/cjs/utils/tests/to-utf8-bytes.test.js +28 -8
- package/dist/cjs/utils/tests/wei-to-ether.test.js +10 -20
- package/dist/esm/classes/test/Contract/ens-abi.d.ts +1 -1
- package/dist/esm/classes/test/Contract/foo-abi.d.ts +1 -1
- package/dist/esm/classes/utils/fetchers.d.ts +8 -2
- package/dist/esm/classes/utils/fetchers.js +6 -3
- package/dist/esm/index.d.ts +21 -21
- package/dist/esm/index.js +16 -16
- package/dist/esm/logger/package-version.d.ts +1 -1
- package/dist/esm/logger/package-version.js +1 -1
- package/dist/esm/providers/AlchemyProvider.d.ts +4 -0
- package/dist/esm/providers/AlchemyProvider.js +7 -0
- package/dist/esm/providers/FallthroughProvider.js +15 -7
- package/dist/esm/providers/test/json-rpc-provider/get-logs/mocks.d.ts +14 -0
- package/dist/esm/providers/test/json-rpc-provider/get-logs/mocks.js +142 -0
- package/dist/esm/providers/test/mock-of.d.ts +2 -0
- package/dist/esm/providers/test/mock-of.js +1 -0
- package/dist/esm/providers/test/rpc-urls.d.ts +1 -0
- package/dist/esm/providers/test/rpc-urls.js +14 -6
- package/dist/esm/providers/utils/chains-info.d.ts +5 -448
- package/dist/esm/providers/utils/chains-info.js +13 -1344
- package/dist/esm/shared/validate-type.d.ts +1 -1
- package/dist/esm/types/Block.types.d.ts +3 -3
- package/dist/esm/types/Contract.types.d.ts +4 -4
- package/dist/esm/types/Transaction.types.d.ts +5 -5
- package/dist/esm/utils/bytes.d.ts +4 -4
- package/package.json +23 -51
- package/readme.md +16 -38
- 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
|
|
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
|
|
42
|
-
if (
|
|
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
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
|
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
|
|
78
|
-
|
|
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
|
|
81
|
-
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
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
|
|
184
|
-
import
|
|
185
|
-
import
|
|
186
|
-
import {
|
|
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
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
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
|
-
|
|
281
|
-
|
|
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
|
-
|
|
285
|
-
ethersProvider.getTransactionReceipt(transactionHash),
|
|
286
|
-
essentialEthProvider.getTransactionReceipt(transactionHash)
|
|
287
|
-
])
|
|
262
|
+
provider.getTransactionReceipt(transactionHash)
|
|
288
263
|
];
|
|
289
264
|
case 1:
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
])
|
|
294
|
-
|
|
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
|
|
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
|
|
42
|
-
if (
|
|
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
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
|
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
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
|
81
|
-
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
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
|
|
184
|
-
import
|
|
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
|
-
|
|
192
|
-
var
|
|
193
|
-
|
|
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
|
-
|
|
260
|
-
|
|
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
|
-
|
|
264
|
-
web3Provider.eth.getTransaction(transactionHash),
|
|
265
|
-
essentialEthProvider.getTransaction(transactionHash)
|
|
266
|
-
])
|
|
248
|
+
provider.getTransaction(transactionHash)
|
|
267
249
|
];
|
|
268
250
|
case 1:
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
])
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
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
|
];
|