@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.
- package/CHANGELOG.md +6 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/utils/string.js +2 -1
- package/dist/utils/string.js.map +1 -1
- package/package.json +3 -4
- package/dist/blockchain.service.test.d.ts +0 -1
- package/dist/blockchain.service.test.js +0 -27
- package/dist/blockchain.service.test.js.map +0 -1
- package/dist/ethereum/api.ethereum.test.d.ts +0 -1
- package/dist/ethereum/api.ethereum.test.js +0 -266
- package/dist/ethereum/api.ethereum.test.js.map +0 -1
- package/dist/ethereum/api.service.ethereum.test.d.ts +0 -1
- package/dist/ethereum/api.service.ethereum.test.js +0 -91
- package/dist/ethereum/api.service.ethereum.test.js.map +0 -1
- package/dist/ethereum/ethers/celo/celo-ws-provider.spec.d.ts +0 -1
- package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js +0 -33
- package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js.map +0 -1
- package/dist/ethereum/ethers/json-rpc-batch-provider.spec.d.ts +0 -1
- package/dist/ethereum/ethers/json-rpc-batch-provider.spec.js +0 -63
- package/dist/ethereum/ethers/json-rpc-batch-provider.spec.js.map +0 -1
- package/dist/ethereum/ethers/op/op-provider.spec.d.ts +0 -1
- package/dist/ethereum/ethers/op/op-provider.spec.js +0 -32
- package/dist/ethereum/ethers/op/op-provider.spec.js.map +0 -1
- package/dist/indexer/dictionary/utils.spec.d.ts +0 -1
- package/dist/indexer/dictionary/utils.spec.js +0 -101
- package/dist/indexer/dictionary/utils.spec.js.map +0 -1
- package/dist/indexer/dictionary/v1/ethDictionaryV1.spec.d.ts +0 -1
- package/dist/indexer/dictionary/v1/ethDictionaryV1.spec.js +0 -519
- package/dist/indexer/dictionary/v1/ethDictionaryV1.spec.js.map +0 -1
- package/dist/indexer/dictionary/v2/ethDictionaryV2.spec.d.ts +0 -1
- package/dist/indexer/dictionary/v2/ethDictionaryV2.spec.js +0 -585
- package/dist/indexer/dictionary/v2/ethDictionaryV2.spec.js.map +0 -1
- package/dist/indexer/dictionary/v2/utils.spec.d.ts +0 -1
- package/dist/indexer/dictionary/v2/utils.spec.js +0 -92
- package/dist/indexer/dictionary/v2/utils.spec.js.map +0 -1
- package/dist/indexer/unfinalizedBlocks.service.spec.d.ts +0 -1
- package/dist/indexer/unfinalizedBlocks.service.spec.js +0 -169
- package/dist/indexer/unfinalizedBlocks.service.spec.js.map +0 -1
- package/dist/utils/project.spec.d.ts +0 -1
- package/dist/utils/project.spec.js +0 -99
- package/dist/utils/project.spec.js.map +0 -1
- package/dist/utils/string.spec.d.ts +0 -1
- package/dist/utils/string.spec.js +0 -103
- 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 {};
|