@subql/node-ethereum 6.2.2-0 → 6.3.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 (44) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/utils/string.js +2 -1
  4. package/dist/utils/string.js.map +1 -1
  5. package/package.json +3 -4
  6. package/dist/blockchain.service.test.d.ts +0 -1
  7. package/dist/blockchain.service.test.js +0 -27
  8. package/dist/blockchain.service.test.js.map +0 -1
  9. package/dist/ethereum/api.ethereum.test.d.ts +0 -1
  10. package/dist/ethereum/api.ethereum.test.js +0 -266
  11. package/dist/ethereum/api.ethereum.test.js.map +0 -1
  12. package/dist/ethereum/api.service.ethereum.test.d.ts +0 -1
  13. package/dist/ethereum/api.service.ethereum.test.js +0 -91
  14. package/dist/ethereum/api.service.ethereum.test.js.map +0 -1
  15. package/dist/ethereum/ethers/celo/celo-ws-provider.spec.d.ts +0 -1
  16. package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js +0 -33
  17. package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js.map +0 -1
  18. package/dist/ethereum/ethers/json-rpc-batch-provider.spec.d.ts +0 -1
  19. package/dist/ethereum/ethers/json-rpc-batch-provider.spec.js +0 -63
  20. package/dist/ethereum/ethers/json-rpc-batch-provider.spec.js.map +0 -1
  21. package/dist/ethereum/ethers/op/op-provider.spec.d.ts +0 -1
  22. package/dist/ethereum/ethers/op/op-provider.spec.js +0 -32
  23. package/dist/ethereum/ethers/op/op-provider.spec.js.map +0 -1
  24. package/dist/indexer/dictionary/utils.spec.d.ts +0 -1
  25. package/dist/indexer/dictionary/utils.spec.js +0 -101
  26. package/dist/indexer/dictionary/utils.spec.js.map +0 -1
  27. package/dist/indexer/dictionary/v1/ethDictionaryV1.spec.d.ts +0 -1
  28. package/dist/indexer/dictionary/v1/ethDictionaryV1.spec.js +0 -519
  29. package/dist/indexer/dictionary/v1/ethDictionaryV1.spec.js.map +0 -1
  30. package/dist/indexer/dictionary/v2/ethDictionaryV2.spec.d.ts +0 -1
  31. package/dist/indexer/dictionary/v2/ethDictionaryV2.spec.js +0 -585
  32. package/dist/indexer/dictionary/v2/ethDictionaryV2.spec.js.map +0 -1
  33. package/dist/indexer/dictionary/v2/utils.spec.d.ts +0 -1
  34. package/dist/indexer/dictionary/v2/utils.spec.js +0 -92
  35. package/dist/indexer/dictionary/v2/utils.spec.js.map +0 -1
  36. package/dist/indexer/unfinalizedBlocks.service.spec.d.ts +0 -1
  37. package/dist/indexer/unfinalizedBlocks.service.spec.js +0 -169
  38. package/dist/indexer/unfinalizedBlocks.service.spec.js.map +0 -1
  39. package/dist/utils/project.spec.d.ts +0 -1
  40. package/dist/utils/project.spec.js +0 -99
  41. package/dist/utils/project.spec.js.map +0 -1
  42. package/dist/utils/string.spec.d.ts +0 -1
  43. package/dist/utils/string.spec.js +0 -103
  44. package/dist/utils/string.spec.js.map +0 -1
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /* eslint-disable */
4
- const json_rpc_batch_provider_1 = require("./json-rpc-batch-provider");
5
- describe('JsonRpcBatchProvider', () => {
6
- let batchProvider;
7
- let fetchJsonMock;
8
- beforeEach(() => {
9
- // Create a new instance of the JsonRpcBatchProvider before each test
10
- batchProvider = new json_rpc_batch_provider_1.JsonRpcBatchProvider('http://localhost:8545');
11
- // Mock the fetchJson function from the ethers package to simulate server responses
12
- fetchJsonMock = jest.spyOn(require('./web'), 'fetchJson');
13
- });
14
- afterEach(() => {
15
- // Reset the fetchJson mock after each test
16
- fetchJsonMock.mockRestore();
17
- });
18
- test('adjustBatchSize properly adjusts batch size based on success rate', async () => {
19
- // Mock fetchJson to return a successful response
20
- fetchJsonMock.mockImplementation(async (connection, payload) => {
21
- const requests = JSON.parse(payload);
22
- return requests.map((request) => ({
23
- id: request.id,
24
- jsonrpc: '2.0',
25
- result: '0x1',
26
- }));
27
- });
28
- // Execute the send method multiple times to simulate successful requests
29
- const requestCount = 20;
30
- const promises = [];
31
- for (let i = 0; i < requestCount; i++) {
32
- const promise = batchProvider.send('eth_call', []);
33
- promises.push(promise);
34
- }
35
- await Promise.all(promises);
36
- // Check if the batch size has increased due to the success rate
37
- expect(batchProvider['batchSize']).toBeGreaterThan(1);
38
- // Now, mock fetchJson to return an error response
39
- fetchJsonMock.mockImplementation(async (connection, payload) => {
40
- const requests = JSON.parse(payload);
41
- return requests.map((request) => ({
42
- id: request.id,
43
- jsonrpc: '2.0',
44
- error: { code: -32603, message: 'Batch size limit exceeded' },
45
- }));
46
- });
47
- // Execute the send method multiple times to simulate failed requests
48
- const failedPromises = [];
49
- for (let i = 0; i < requestCount + 10; i++) {
50
- const failedPromise = batchProvider.send('eth_call', []);
51
- failedPromises.push(failedPromise);
52
- }
53
- try {
54
- await Promise.all(failedPromises);
55
- }
56
- catch {
57
- // ignore error
58
- }
59
- // Check if the batch size has decreased due to the failure rate
60
- expect(batchProvider['batchSize']).toBeLessThan(2);
61
- });
62
- });
63
- //# sourceMappingURL=json-rpc-batch-provider.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-rpc-batch-provider.spec.js","sourceRoot":"","sources":["../../../src/ethereum/ethers/json-rpc-batch-provider.spec.ts"],"names":[],"mappings":";;AAAA,oBAAoB;AACpB,uEAAiE;AAGjE,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,aAAmC,CAAC;IACxC,IAAI,aAA+B,CAAC;IAEpC,UAAU,CAAC,GAAG,EAAE;QACd,qEAAqE;QACrE,aAAa,GAAG,IAAI,8CAAoB,CAAC,uBAAuB,CAAC,CAAC;QAElE,mFAAmF;QACnF,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,2CAA2C;QAC3C,aAAa,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACnF,iDAAiD;QACjD,aAAa,CAAC,kBAAkB,CAC9B,KAAK,EAAE,UAA0B,EAAE,OAAe,EAAE,EAAE;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,KAAK;aACd,CAAC,CAAC,CAAC;QACN,CAAC,CACF,CAAC;QAEF,yEAAyE;QACzE,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5B,gEAAgE;QAChE,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEtD,kDAAkD;QAClD,aAAa,CAAC,kBAAkB,CAC9B,KAAK,EAAE,UAA0B,EAAE,OAAe,EAAE,EAAE;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,2BAA2B,EAAE;aAC9D,CAAC,CAAC,CAAC;QACN,CAAC,CACF,CAAC;QAEF,qEAAqE;QACrE,MAAM,cAAc,GAAmB,EAAE,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACzD,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QAED,gEAAgE;QAChE,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable */\nimport { JsonRpcBatchProvider } from './json-rpc-batch-provider';\nimport { ConnectionInfo } from './web';\n\ndescribe('JsonRpcBatchProvider', () => {\n let batchProvider: JsonRpcBatchProvider;\n let fetchJsonMock: jest.SpyInstance;\n\n beforeEach(() => {\n // Create a new instance of the JsonRpcBatchProvider before each test\n batchProvider = new JsonRpcBatchProvider('http://localhost:8545');\n\n // Mock the fetchJson function from the ethers package to simulate server responses\n fetchJsonMock = jest.spyOn(require('./web'), 'fetchJson');\n });\n\n afterEach(() => {\n // Reset the fetchJson mock after each test\n fetchJsonMock.mockRestore();\n });\n\n test('adjustBatchSize properly adjusts batch size based on success rate', async () => {\n // Mock fetchJson to return a successful response\n fetchJsonMock.mockImplementation(\n async (connection: ConnectionInfo, payload: string) => {\n const requests = JSON.parse(payload);\n return requests.map((request: any) => ({\n id: request.id,\n jsonrpc: '2.0',\n result: '0x1',\n }));\n },\n );\n\n // Execute the send method multiple times to simulate successful requests\n const requestCount = 20;\n const promises: Promise<any>[] = [];\n for (let i = 0; i < requestCount; i++) {\n const promise = batchProvider.send('eth_call', []);\n promises.push(promise);\n }\n await Promise.all(promises);\n\n // Check if the batch size has increased due to the success rate\n expect(batchProvider['batchSize']).toBeGreaterThan(1);\n\n // Now, mock fetchJson to return an error response\n fetchJsonMock.mockImplementation(\n async (connection: ConnectionInfo, payload: string) => {\n const requests = JSON.parse(payload);\n return requests.map((request: any) => ({\n id: request.id,\n jsonrpc: '2.0',\n error: { code: -32603, message: 'Batch size limit exceeded' },\n }));\n },\n );\n\n // Execute the send method multiple times to simulate failed requests\n const failedPromises: Promise<any>[] = [];\n for (let i = 0; i < requestCount + 10; i++) {\n const failedPromise = batchProvider.send('eth_call', []);\n failedPromises.push(failedPromise);\n }\n\n try {\n await Promise.all(failedPromises);\n } catch {\n // ignore error\n }\n\n // Check if the batch size has decreased due to the failure rate\n expect(batchProvider['batchSize']).toBeLessThan(2);\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,32 +0,0 @@
1
- "use strict";
2
- // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
- // SPDX-License-Identifier: GPL-3.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- const ethers_1 = require("ethers");
6
- const utils_ethereum_1 = require("../../utils.ethereum");
7
- const op_provider_1 = require("./op-provider");
8
- const HTTP_ENDPOINT = 'https://mainnet.optimism.io';
9
- describe('OPRPCProviders', () => {
10
- let provider;
11
- // For some reason defining this in before all fails
12
- beforeEach(() => {
13
- provider = new op_provider_1.OPJsonRpcProvider(HTTP_ENDPOINT);
14
- });
15
- // This returns a value now, needs further investigation
16
- it('should have extra fields in transactions', async () => {
17
- const receipt = (0, utils_ethereum_1.formatReceipt)(await provider.getTransactionReceipt('0x5496af6ad1d619279d82b8f4c94cf3f8da8c02f22481c66a840ae9dd3f5e1a23'));
18
- expect(receipt.l1Fee).toEqual(ethers_1.BigNumber.from('0x1375ad1b756e'));
19
- expect(receipt.l1FeeScalar).toEqual(0.684);
20
- expect(receipt.l1GasPrice).toEqual(ethers_1.BigNumber.from('0x02fae225ae'));
21
- expect(receipt.l1GasUsed).toEqual(ethers_1.BigNumber.from('0x098c'));
22
- });
23
- it('should work with a network that isnt OP based', async () => {
24
- const provider = new op_provider_1.OPJsonRpcProvider('https://eth.llamarpc.com');
25
- const receipt = (0, utils_ethereum_1.formatReceipt)(await provider.getTransactionReceipt('0x7c20ced906264f81929802ee6b642d003a236c542c5de6298ede5b2a4f7f9bb9'));
26
- expect(receipt.l1Fee).toBeUndefined();
27
- expect(receipt.l1FeeScalar).toBeUndefined();
28
- expect(receipt.l1GasPrice).toBeUndefined();
29
- expect(receipt.l1GasUsed).toBeUndefined();
30
- }, 10000);
31
- });
32
- //# sourceMappingURL=op-provider.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"op-provider.spec.js","sourceRoot":"","sources":["../../../../src/ethereum/ethers/op/op-provider.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAGnC,mCAAmC;AACnC,yDAAqD;AAErD,+CAAkD;AAElD,MAAM,aAAa,GAAG,6BAA6B,CAAC;AASpD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,QAAyB,CAAC;IAE9B,oDAAoD;IACpD,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,+BAAiB,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,wDAAwD;IACxD,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,OAAO,GAAG,IAAA,8BAAa,EAC3B,MAAM,QAAQ,CAAC,qBAAqB,CAClC,oEAAoE,CACrE,CACF,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,kBAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,kBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,QAAQ,GAAG,IAAI,+BAAiB,CAAC,0BAA0B,CAAC,CAAC;QAEnE,MAAM,OAAO,GAAG,IAAA,8BAAa,EAC3B,MAAM,QAAQ,CAAC,qBAAqB,CAClC,oEAAoE,CACrE,CACF,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5C,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { EthereumReceipt } from '@subql/types-ethereum';\nimport { BigNumber } from 'ethers';\nimport { formatReceipt } from '../../utils.ethereum';\nimport { JsonRpcProvider } from '../json-rpc-provider';\nimport { OPJsonRpcProvider } from './op-provider';\n\nconst HTTP_ENDPOINT = 'https://mainnet.optimism.io';\n\ntype OPReceiptFields = {\n l1Fee: BigNumber;\n l1FeeScalar: number;\n l1GasPrice: BigNumber;\n l1GasUsed: BigNumber;\n};\n\ndescribe('OPRPCProviders', () => {\n let provider: JsonRpcProvider;\n\n // For some reason defining this in before all fails\n beforeEach(() => {\n provider = new OPJsonRpcProvider(HTTP_ENDPOINT);\n });\n\n // This returns a value now, needs further investigation\n it('should have extra fields in transactions', async () => {\n const receipt = formatReceipt<EthereumReceipt & OPReceiptFields>(\n await provider.getTransactionReceipt(\n '0x5496af6ad1d619279d82b8f4c94cf3f8da8c02f22481c66a840ae9dd3f5e1a23',\n ),\n );\n\n expect(receipt.l1Fee).toEqual(BigNumber.from('0x1375ad1b756e'));\n expect(receipt.l1FeeScalar).toEqual(0.684);\n expect(receipt.l1GasPrice).toEqual(BigNumber.from('0x02fae225ae'));\n expect(receipt.l1GasUsed).toEqual(BigNumber.from('0x098c'));\n });\n\n it('should work with a network that isnt OP based', async () => {\n const provider = new OPJsonRpcProvider('https://eth.llamarpc.com');\n\n const receipt = formatReceipt<EthereumReceipt & OPReceiptFields>(\n await provider.getTransactionReceipt(\n '0x7c20ced906264f81929802ee6b642d003a236c542c5de6298ede5b2a4f7f9bb9',\n ),\n );\n\n expect(receipt.l1Fee).toBeUndefined();\n expect(receipt.l1FeeScalar).toBeUndefined();\n expect(receipt.l1GasPrice).toBeUndefined();\n expect(receipt.l1GasUsed).toBeUndefined();\n }, 10000);\n});\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,101 +0,0 @@
1
- "use strict";
2
- // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
- // SPDX-License-Identifier: GPL-3.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- const types_ethereum_1 = require("@subql/types-ethereum");
6
- const utils_1 = require("./utils");
7
- describe('Dictionary utils', () => {
8
- it('can filter eth ds with multiple dynamic ds/templates', () => {
9
- const mockTempDs = [
10
- {
11
- name: 'ERC721',
12
- kind: types_ethereum_1.EthereumDatasourceKind.Runtime,
13
- assets: new Map(),
14
- mapping: {
15
- file: '',
16
- handlers: [
17
- {
18
- handler: 'handleERC721',
19
- kind: types_ethereum_1.EthereumHandlerKind.Event,
20
- filter: {
21
- topics: ['Transfer(address, address, uint256)'],
22
- },
23
- },
24
- ],
25
- },
26
- },
27
- {
28
- name: 'ERC1155',
29
- kind: types_ethereum_1.EthereumDatasourceKind.Runtime,
30
- assets: new Map(),
31
- mapping: {
32
- file: '',
33
- handlers: [
34
- {
35
- handler: 'handleERC1155',
36
- kind: types_ethereum_1.EthereumHandlerKind.Event,
37
- filter: {
38
- topics: [
39
- 'TransferSingle(address, address, address, uint256, uint256)',
40
- ],
41
- },
42
- },
43
- ],
44
- },
45
- },
46
- ];
47
- const ds = {
48
- kind: types_ethereum_1.EthereumDatasourceKind.Runtime,
49
- assets: new Map(),
50
- startBlock: 1,
51
- mapping: {
52
- file: '',
53
- handlers: [
54
- {
55
- handler: 'handleDyanmicDs',
56
- kind: types_ethereum_1.EthereumHandlerKind.Event,
57
- filter: {
58
- topics: [
59
- 'TransferSingle(address, address, address, uint256, uint256)',
60
- ],
61
- },
62
- },
63
- ],
64
- },
65
- };
66
- const duplicateDataSources = [
67
- { ...mockTempDs[0], options: { address: 'address1' } },
68
- { ...mockTempDs[0], options: { address: 'address2' } },
69
- { ...mockTempDs[1], options: { address: 'address3' } },
70
- ];
71
- const dataSources = [ds, ...duplicateDataSources];
72
- // Runtime + ERC721 + ERC721 + ERC1155
73
- expect(dataSources.length).toBe(4);
74
- const grouped = (0, utils_1.groupedDataSources)(dataSources);
75
- expect(grouped).toEqual([
76
- [
77
- {
78
- handler: 'handleDyanmicDs',
79
- kind: 'ethereum/LogHandler',
80
- filter: {
81
- topics: [
82
- 'TransferSingle(address, address, address, uint256, uint256)',
83
- ],
84
- },
85
- },
86
- [undefined, 'address3'],
87
- ],
88
- [
89
- {
90
- handler: 'handleERC721',
91
- kind: 'ethereum/LogHandler',
92
- filter: {
93
- topics: ['Transfer(address, address, uint256)'],
94
- },
95
- },
96
- ['address1', 'address2'],
97
- ],
98
- ]);
99
- });
100
- });
101
- //# sourceMappingURL=utils.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../../src/indexer/dictionary/utils.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,0DAI+B;AAE/B,mCAA6C;AAE7C,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,UAAU,GAAgC;YAC9C;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,uCAAsB,CAAC,OAAO;gBACpC,MAAM,EAAE,IAAI,GAAG,EAAE;gBACjB,OAAO,EAAE;oBACP,IAAI,EAAE,EAAE;oBACR,QAAQ,EAAE;wBACR;4BACE,OAAO,EAAE,cAAc;4BACvB,IAAI,EAAE,oCAAmB,CAAC,KAAK;4BAC/B,MAAM,EAAE;gCACN,MAAM,EAAE,CAAC,qCAAqC,CAAC;6BAChD;yBACF;qBACF;iBACF;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,uCAAsB,CAAC,OAAO;gBACpC,MAAM,EAAE,IAAI,GAAG,EAAE;gBACjB,OAAO,EAAE;oBACP,IAAI,EAAE,EAAE;oBACR,QAAQ,EAAE;wBACR;4BACE,OAAO,EAAE,eAAe;4BACxB,IAAI,EAAE,oCAAmB,CAAC,KAAK;4BAC/B,MAAM,EAAE;gCACN,MAAM,EAAE;oCACN,6DAA6D;iCAC9D;6BACF;yBACF;qBACF;iBACF;aACF;SACF,CAAC;QAEF,MAAM,EAAE,GAA2B;YACjC,IAAI,EAAE,uCAAsB,CAAC,OAAO;YACpC,MAAM,EAAE,IAAI,GAAG,EAAE;YACjB,UAAU,EAAE,CAAC;YACb,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE;gBACR,QAAQ,EAAE;oBACR;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,IAAI,EAAE,oCAAmB,CAAC,KAAK;wBAC/B,MAAM,EAAE;4BACN,MAAM,EAAE;gCACN,6DAA6D;6BAC9D;yBACF;qBACF;iBACF;aACF;SACF,CAAC;QAEF,MAAM,oBAAoB,GAAG;YAC3B,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;YACtD,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;YACtD,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;SACvD,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,GAAG,oBAAoB,CAAC,CAAC;QAClD,sCAAsC;QACtC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAG,IAAA,0BAAkB,EAAC,WAAW,CAAC,CAAC;QAEhD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YACtB;gBACE;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,IAAI,EAAE,qBAAqB;oBAC3B,MAAM,EAAE;wBACN,MAAM,EAAE;4BACN,6DAA6D;yBAC9D;qBACF;iBACF;gBACD,CAAC,SAAS,EAAE,UAAU,CAAC;aACxB;YACD;gBACE;oBACE,OAAO,EAAE,cAAc;oBACvB,IAAI,EAAE,qBAAqB;oBAC3B,MAAM,EAAE;wBACN,MAAM,EAAE,CAAC,qCAAqC,CAAC;qBAChD;iBACF;gBACD,CAAC,UAAU,EAAE,UAAU,CAAC;aACzB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {\n EthereumDatasourceKind,\n EthereumHandlerKind,\n SubqlRuntimeDatasource,\n} from '@subql/types-ethereum';\nimport { EthereumProjectDsTemplate } from '../../configure/SubqueryProject';\nimport { groupedDataSources } from './utils';\n\ndescribe('Dictionary utils', () => {\n it('can filter eth ds with multiple dynamic ds/templates', () => {\n const mockTempDs: EthereumProjectDsTemplate[] = [\n {\n name: 'ERC721',\n kind: EthereumDatasourceKind.Runtime,\n assets: new Map(),\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'handleERC721',\n kind: EthereumHandlerKind.Event,\n filter: {\n topics: ['Transfer(address, address, uint256)'],\n },\n },\n ],\n },\n },\n {\n name: 'ERC1155',\n kind: EthereumDatasourceKind.Runtime,\n assets: new Map(),\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'handleERC1155',\n kind: EthereumHandlerKind.Event,\n filter: {\n topics: [\n 'TransferSingle(address, address, address, uint256, uint256)',\n ],\n },\n },\n ],\n },\n },\n ];\n\n const ds: SubqlRuntimeDatasource = {\n kind: EthereumDatasourceKind.Runtime,\n assets: new Map(),\n startBlock: 1,\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'handleDyanmicDs',\n kind: EthereumHandlerKind.Event,\n filter: {\n topics: [\n 'TransferSingle(address, address, address, uint256, uint256)',\n ],\n },\n },\n ],\n },\n };\n\n const duplicateDataSources = [\n { ...mockTempDs[0], options: { address: 'address1' } },\n { ...mockTempDs[0], options: { address: 'address2' } },\n { ...mockTempDs[1], options: { address: 'address3' } },\n ];\n\n const dataSources = [ds, ...duplicateDataSources];\n // Runtime + ERC721 + ERC721 + ERC1155\n expect(dataSources.length).toBe(4);\n\n const grouped = groupedDataSources(dataSources);\n\n expect(grouped).toEqual([\n [\n {\n handler: 'handleDyanmicDs',\n kind: 'ethereum/LogHandler',\n filter: {\n topics: [\n 'TransferSingle(address, address, address, uint256, uint256)',\n ],\n },\n },\n [undefined, 'address3'],\n ],\n [\n {\n handler: 'handleERC721',\n kind: 'ethereum/LogHandler',\n filter: {\n topics: ['Transfer(address, address, uint256)'],\n },\n },\n ['address1', 'address2'],\n ],\n ]);\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};