@subql/node-starknet 6.0.1 → 6.0.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 +8 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/blockchain.service.js.map +1 -1
- package/dist/indexer/types.js +1 -1
- package/dist/indexer/types.js.map +1 -1
- package/dist/starknet/api.starknet.d.ts +1 -1
- package/dist/starknet/api.starknet.js +1 -6
- package/dist/starknet/api.starknet.js.map +1 -1
- package/dist/starknet/decodeCalldata.d.ts +1 -1
- package/dist/starknet/decodeCalldata.js.map +1 -1
- package/dist/starknet/finalized.block.starknet.d.ts +1 -1
- package/dist/starknet/finalized.block.starknet.js.map +1 -1
- package/dist/starknet/safe-api.d.ts +4 -5
- package/dist/starknet/safe-api.js.map +1 -1
- package/dist/starknet/utils.starknet.d.ts +3 -2
- package/dist/starknet/utils.starknet.js +7 -2
- package/dist/starknet/utils.starknet.js.map +1 -1
- package/package.json +19 -8
- package/test/projectFixture/template-v1.0.0/package.json +30 -0
- package/test/projectFixture/v1.0.0/package.json +30 -0
- package/dist/blockchain.service.spec.d.ts +0 -1
- package/dist/blockchain.service.spec.js +0 -27
- package/dist/blockchain.service.spec.js.map +0 -1
- package/dist/indexer/dictionary/v1/starknetDictionaryV1.spec.d.ts +0 -1
- package/dist/indexer/dictionary/v1/starknetDictionaryV1.spec.js +0 -189
- package/dist/indexer/dictionary/v1/starknetDictionaryV1.spec.js.map +0 -1
- package/dist/starknet/api.service.starknet.spec.d.ts +0 -1
- package/dist/starknet/api.service.starknet.spec.js +0 -79
- package/dist/starknet/api.service.starknet.spec.js.map +0 -1
- package/dist/starknet/api.starknet.test.d.ts +0 -1
- package/dist/starknet/api.starknet.test.js +0 -183
- package/dist/starknet/api.starknet.test.js.map +0 -1
- package/dist/starknet/block.starknet.spec.d.ts +0 -1
- package/dist/starknet/block.starknet.spec.js +0 -158
- package/dist/starknet/block.starknet.spec.js.map +0 -1
- package/dist/starknet/decodeCalldata.spec.d.ts +0 -1
- package/dist/starknet/decodeCalldata.spec.js +0 -112
- package/dist/starknet/decodeCalldata.spec.js.map +0 -1
- package/dist/starknet/finalized.block.starknet.spec.d.ts +0 -1
- package/dist/starknet/finalized.block.starknet.spec.js +0 -112
- package/dist/starknet/finalized.block.starknet.spec.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blockchain.service.spec.js","sourceRoot":"","sources":["../src/blockchain.service.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,yDAAsD;AACtD,6DAAyD;AACzD,yCAA6D;AAE7D,MAAM,aAAa,GAAG,kDAAkD,CAAC;AAEzE,MAAM,cAAc,GAAG,KAAK,IAAiC,EAAE;IAC7D,MAAM,OAAO,GAAG,IAAI,sBAAW,CAAC,aAAa,EAAE,IAAI,6BAAa,EAAE,CAAC,CAAC;IAEpE,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAErB,OAAO;QACL,SAAS,EAAE,OAAO;KACZ,CAAC;AACX,CAAC,CAAC;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,iBAAoC,CAAC;IAEzC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;QAE1C,iBAAiB,GAAG,IAAI,sCAAiB,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAErE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAClE,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 { EventEmitter2 } from '@nestjs/event-emitter';\nimport { BlockchainService } from './blockchain.service';\nimport { StarknetApi, StarknetApiService } from './starknet';\n\nconst HTTP_ENDPOINT = 'https://free-rpc.nethermind.io/mainnet-juno/v0_7';\n\nconst mockApiService = async (): Promise<StarknetApiService> => {\n const strkApi = new StarknetApi(HTTP_ENDPOINT, new EventEmitter2());\n\n await strkApi.init();\n\n return {\n unsafeApi: strkApi,\n } as any;\n};\n\ndescribe('BlockchainService', () => {\n let blockchainService: BlockchainService;\n\n beforeEach(async () => {\n const apiService = await mockApiService();\n\n blockchainService = new BlockchainService(apiService);\n });\n\n it('can get a block timestamps', async () => {\n const timestamp = await blockchainService.getBlockTimestamp(500_000);\n\n expect(timestamp).toEqual(new Date('2024-01-09T03:54:22.000Z'));\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,189 +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_starknet_1 = require("@subql/types-starknet");
|
|
6
|
-
const starknetDictionaryV1_1 = require("./starknetDictionaryV1");
|
|
7
|
-
const mockTempDs = [
|
|
8
|
-
{
|
|
9
|
-
name: 'ZkLend',
|
|
10
|
-
kind: types_starknet_1.StarknetDatasourceKind.Runtime,
|
|
11
|
-
assets: new Map(),
|
|
12
|
-
options: {
|
|
13
|
-
// Must be a key of assets
|
|
14
|
-
abi: 'zkLend',
|
|
15
|
-
// # this is the contract address for zkLend market https://starkscan.co/contract/0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05
|
|
16
|
-
address: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
17
|
-
},
|
|
18
|
-
mapping: {
|
|
19
|
-
file: '',
|
|
20
|
-
handlers: [
|
|
21
|
-
{
|
|
22
|
-
kind: types_starknet_1.StarknetHandlerKind.Call,
|
|
23
|
-
handler: 'handleTransaction',
|
|
24
|
-
filter: {
|
|
25
|
-
to: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
26
|
-
type: 'INVOKE',
|
|
27
|
-
/**
|
|
28
|
-
* The function can either be the function fragment or signature
|
|
29
|
-
* function: 'withdraw'
|
|
30
|
-
* function: '0x015511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77'
|
|
31
|
-
*/
|
|
32
|
-
function: 'withdraw',
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
kind: types_starknet_1.StarknetHandlerKind.Event,
|
|
37
|
-
handler: 'handleLog',
|
|
38
|
-
filter: {
|
|
39
|
-
/**
|
|
40
|
-
* Follows standard log filters for Starknet
|
|
41
|
-
* zkLend address: "0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05"
|
|
42
|
-
*/
|
|
43
|
-
topics: [
|
|
44
|
-
'Deposit', //0x9149d2123147c5f43d258257fef0b7b969db78269369ebcf5ebb9eef8592f2
|
|
45
|
-
],
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
];
|
|
52
|
-
describe('buildDictionaryV1QueryEntries', () => {
|
|
53
|
-
describe('Log filters', () => {
|
|
54
|
-
it('Build filter for logs', () => {
|
|
55
|
-
const ds = {
|
|
56
|
-
kind: types_starknet_1.StarknetDatasourceKind.Runtime,
|
|
57
|
-
assets: new Map(),
|
|
58
|
-
options: {
|
|
59
|
-
// Must be a key of assets
|
|
60
|
-
abi: 'zkLend',
|
|
61
|
-
// # this is the contract address for zkLend market https://starkscan.co/contract/0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05
|
|
62
|
-
address: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
63
|
-
},
|
|
64
|
-
mapping: {
|
|
65
|
-
file: '',
|
|
66
|
-
handlers: [
|
|
67
|
-
{
|
|
68
|
-
kind: types_starknet_1.StarknetHandlerKind.Event,
|
|
69
|
-
handler: 'handleLog',
|
|
70
|
-
filter: {
|
|
71
|
-
/**
|
|
72
|
-
* Follows standard log filters for Starknet
|
|
73
|
-
* zkLend address: "0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05"
|
|
74
|
-
*/
|
|
75
|
-
topics: [
|
|
76
|
-
'Deposit', //0x9149d2123147c5f43d258257fef0b7b969db78269369ebcf5ebb9eef8592f2
|
|
77
|
-
],
|
|
78
|
-
},
|
|
79
|
-
},
|
|
80
|
-
],
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
const result = (0, starknetDictionaryV1_1.buildDictionaryV1QueryEntries)([ds]);
|
|
84
|
-
expect(result).toEqual([
|
|
85
|
-
{
|
|
86
|
-
conditions: [
|
|
87
|
-
{
|
|
88
|
-
field: 'address',
|
|
89
|
-
matcher: 'equalTo',
|
|
90
|
-
value: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
field: 'topics',
|
|
94
|
-
matcher: 'contains',
|
|
95
|
-
value: [
|
|
96
|
-
'0x9149d2123147c5f43d258257fef0b7b969db78269369ebcf5ebb9eef8592f2',
|
|
97
|
-
],
|
|
98
|
-
},
|
|
99
|
-
],
|
|
100
|
-
entity: 'logs',
|
|
101
|
-
},
|
|
102
|
-
]);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
describe('Transaction filters', () => {
|
|
106
|
-
it('Build a filter for contract type', () => {
|
|
107
|
-
const ds = {
|
|
108
|
-
kind: types_starknet_1.StarknetDatasourceKind.Runtime,
|
|
109
|
-
assets: new Map(),
|
|
110
|
-
startBlock: 1,
|
|
111
|
-
mapping: {
|
|
112
|
-
file: '',
|
|
113
|
-
handlers: [
|
|
114
|
-
{
|
|
115
|
-
handler: 'handleTransaction',
|
|
116
|
-
kind: types_starknet_1.StarknetHandlerKind.Call,
|
|
117
|
-
filter: {
|
|
118
|
-
type: 'L1_HANDLER',
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
],
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
const result = (0, starknetDictionaryV1_1.buildDictionaryV1QueryEntries)([ds]);
|
|
125
|
-
expect(result).toEqual([
|
|
126
|
-
{
|
|
127
|
-
conditions: [
|
|
128
|
-
{
|
|
129
|
-
field: 'type',
|
|
130
|
-
matcher: 'equalTo',
|
|
131
|
-
value: 'L1_HANDLER',
|
|
132
|
-
},
|
|
133
|
-
],
|
|
134
|
-
entity: 'calls',
|
|
135
|
-
},
|
|
136
|
-
]);
|
|
137
|
-
});
|
|
138
|
-
it('Build a filter with include ds option and contract address', () => {
|
|
139
|
-
const ds = {
|
|
140
|
-
kind: types_starknet_1.StarknetDatasourceKind.Runtime,
|
|
141
|
-
assets: new Map(),
|
|
142
|
-
options: {
|
|
143
|
-
// Must be a key of assets
|
|
144
|
-
abi: 'zkLend',
|
|
145
|
-
// # this is the contract address for zkLend market https://starkscan.co/contract/0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05
|
|
146
|
-
address: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
147
|
-
},
|
|
148
|
-
mapping: {
|
|
149
|
-
file: '',
|
|
150
|
-
handlers: [
|
|
151
|
-
{
|
|
152
|
-
kind: types_starknet_1.StarknetHandlerKind.Call,
|
|
153
|
-
handler: 'handleTransaction',
|
|
154
|
-
filter: {
|
|
155
|
-
to: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
156
|
-
// type: "INVOKE",
|
|
157
|
-
/**
|
|
158
|
-
* The function can either be the function fragment or signature
|
|
159
|
-
* function: 'withdraw'
|
|
160
|
-
* function: '0x015511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77'
|
|
161
|
-
*/
|
|
162
|
-
function: 'withdraw',
|
|
163
|
-
},
|
|
164
|
-
},
|
|
165
|
-
],
|
|
166
|
-
},
|
|
167
|
-
};
|
|
168
|
-
const result = (0, starknetDictionaryV1_1.buildDictionaryV1QueryEntries)([ds]);
|
|
169
|
-
expect(result).toEqual([
|
|
170
|
-
{
|
|
171
|
-
conditions: [
|
|
172
|
-
{
|
|
173
|
-
field: 'to',
|
|
174
|
-
matcher: 'equalTo',
|
|
175
|
-
value: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
field: 'func',
|
|
179
|
-
matcher: 'equalTo',
|
|
180
|
-
value: '0x15511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77',
|
|
181
|
-
},
|
|
182
|
-
],
|
|
183
|
-
entity: 'calls',
|
|
184
|
-
},
|
|
185
|
-
]);
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
//# sourceMappingURL=starknetDictionaryV1.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"starknetDictionaryV1.spec.js","sourceRoot":"","sources":["../../../../src/indexer/dictionary/v1/starknetDictionaryV1.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {\n StarknetDatasourceKind,\n StarknetHandlerKind,\n StarknetRuntimeDatasource,\n} from '@subql/types-starknet';\nimport { StarknetProjectDsTemplate } from '../../../configure/SubqueryProject';\nimport { buildDictionaryV1QueryEntries } from './starknetDictionaryV1';\n\nconst mockTempDs: StarknetProjectDsTemplate[] = [\n {\n name: 'ZkLend',\n kind: StarknetDatasourceKind.Runtime,\n assets: new Map(),\n options: {\n // Must be a key of assets\n abi: 'zkLend',\n // # this is the contract address for zkLend market https://starkscan.co/contract/0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05\n address:\n '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n mapping: {\n file: '',\n handlers: [\n {\n kind: StarknetHandlerKind.Call,\n handler: 'handleTransaction',\n filter: {\n to: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n type: 'INVOKE',\n /**\n * The function can either be the function fragment or signature\n * function: 'withdraw'\n * function: '0x015511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77'\n */\n function: 'withdraw',\n },\n },\n {\n kind: StarknetHandlerKind.Event,\n handler: 'handleLog',\n filter: {\n /**\n * Follows standard log filters for Starknet\n * zkLend address: \"0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05\"\n */\n topics: [\n 'Deposit', //0x9149d2123147c5f43d258257fef0b7b969db78269369ebcf5ebb9eef8592f2\n ],\n },\n },\n ],\n },\n },\n];\n\ndescribe('buildDictionaryV1QueryEntries', () => {\n describe('Log filters', () => {\n it('Build filter for logs', () => {\n const ds: StarknetRuntimeDatasource = {\n kind: StarknetDatasourceKind.Runtime,\n assets: new Map(),\n options: {\n // Must be a key of assets\n abi: 'zkLend',\n // # this is the contract address for zkLend market https://starkscan.co/contract/0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05\n address:\n '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n mapping: {\n file: '',\n handlers: [\n {\n kind: StarknetHandlerKind.Event,\n handler: 'handleLog',\n filter: {\n /**\n * Follows standard log filters for Starknet\n * zkLend address: \"0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05\"\n */\n topics: [\n 'Deposit', //0x9149d2123147c5f43d258257fef0b7b969db78269369ebcf5ebb9eef8592f2\n ],\n },\n },\n ],\n },\n };\n\n const result = buildDictionaryV1QueryEntries([ds]);\n\n expect(result).toEqual([\n {\n conditions: [\n {\n field: 'address',\n matcher: 'equalTo',\n value:\n '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n {\n field: 'topics',\n matcher: 'contains',\n value: [\n '0x9149d2123147c5f43d258257fef0b7b969db78269369ebcf5ebb9eef8592f2',\n ],\n },\n ],\n entity: 'logs',\n },\n ]);\n });\n });\n describe('Transaction filters', () => {\n it('Build a filter for contract type', () => {\n const ds: StarknetRuntimeDatasource = {\n kind: StarknetDatasourceKind.Runtime,\n assets: new Map(),\n startBlock: 1,\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'handleTransaction',\n kind: StarknetHandlerKind.Call,\n filter: {\n type: 'L1_HANDLER',\n },\n },\n ],\n },\n };\n\n const result = buildDictionaryV1QueryEntries([ds]);\n\n expect(result).toEqual([\n {\n conditions: [\n {\n field: 'type',\n matcher: 'equalTo',\n value: 'L1_HANDLER',\n },\n ],\n entity: 'calls',\n },\n ]);\n });\n\n it('Build a filter with include ds option and contract address', () => {\n const ds: StarknetRuntimeDatasource = {\n kind: StarknetDatasourceKind.Runtime,\n assets: new Map(),\n options: {\n // Must be a key of assets\n abi: 'zkLend',\n // # this is the contract address for zkLend market https://starkscan.co/contract/0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05\n address:\n '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n mapping: {\n file: '',\n handlers: [\n {\n kind: StarknetHandlerKind.Call,\n handler: 'handleTransaction',\n filter: {\n to: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n // type: \"INVOKE\",\n /**\n * The function can either be the function fragment or signature\n * function: 'withdraw'\n * function: '0x015511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77'\n */\n function: 'withdraw',\n },\n },\n ],\n },\n };\n\n const result = buildDictionaryV1QueryEntries([ds]);\n expect(result).toEqual([\n {\n conditions: [\n {\n field: 'to',\n matcher: 'equalTo',\n value:\n '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n {\n field: 'func',\n matcher: 'equalTo',\n value:\n '0x15511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77',\n },\n ],\n entity: 'calls',\n },\n ]);\n });\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,79 +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 event_emitter_1 = require("@nestjs/event-emitter");
|
|
6
|
-
const testing_1 = require("@nestjs/testing");
|
|
7
|
-
const node_core_1 = require("@subql/node-core");
|
|
8
|
-
const graphql_1 = require("graphql");
|
|
9
|
-
const lodash_1 = require("lodash");
|
|
10
|
-
const api_service_starknet_1 = require("./api.service.starknet");
|
|
11
|
-
// Add api key to work
|
|
12
|
-
const HTTP_ENDPOINT = 'https://free-rpc.nethermind.io/mainnet-juno/v0_7';
|
|
13
|
-
function testSubqueryProject(endpoint) {
|
|
14
|
-
return {
|
|
15
|
-
network: {
|
|
16
|
-
endpoint: [endpoint],
|
|
17
|
-
chainId: '0x534e5f4d41494e',
|
|
18
|
-
},
|
|
19
|
-
dataSources: [],
|
|
20
|
-
id: 'test',
|
|
21
|
-
root: './',
|
|
22
|
-
schema: new graphql_1.GraphQLSchema({}),
|
|
23
|
-
templates: [],
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
const prepareApiService = async (endpoint = HTTP_ENDPOINT) => {
|
|
27
|
-
const module = await testing_1.Test.createTestingModule({
|
|
28
|
-
providers: [
|
|
29
|
-
node_core_1.ConnectionPoolService,
|
|
30
|
-
node_core_1.ConnectionPoolStateManager,
|
|
31
|
-
{
|
|
32
|
-
provide: node_core_1.NodeConfig,
|
|
33
|
-
useFactory: () => ({}),
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
provide: 'ISubqueryProject',
|
|
37
|
-
useFactory: () => testSubqueryProject(endpoint),
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
provide: api_service_starknet_1.StarknetApiService,
|
|
41
|
-
useFactory: api_service_starknet_1.StarknetApiService.create,
|
|
42
|
-
inject: [
|
|
43
|
-
'ISubqueryProject',
|
|
44
|
-
node_core_1.ConnectionPoolService,
|
|
45
|
-
event_emitter_1.EventEmitter2,
|
|
46
|
-
node_core_1.NodeConfig,
|
|
47
|
-
],
|
|
48
|
-
},
|
|
49
|
-
],
|
|
50
|
-
imports: [event_emitter_1.EventEmitterModule.forRoot()],
|
|
51
|
-
}).compile();
|
|
52
|
-
const app = module.createNestApplication();
|
|
53
|
-
await app.init();
|
|
54
|
-
const apiService = app.get(api_service_starknet_1.StarknetApiService);
|
|
55
|
-
return [apiService, app];
|
|
56
|
-
};
|
|
57
|
-
jest.setTimeout(90000);
|
|
58
|
-
describe('ApiService', () => {
|
|
59
|
-
let apiService;
|
|
60
|
-
let app;
|
|
61
|
-
beforeEach(async () => {
|
|
62
|
-
[apiService, app] = await prepareApiService();
|
|
63
|
-
});
|
|
64
|
-
afterEach(async () => {
|
|
65
|
-
return app?.close();
|
|
66
|
-
});
|
|
67
|
-
it('can instantiate api', () => {
|
|
68
|
-
expect(apiService.api.getChainId()).toEqual('0x534e5f4d41494e');
|
|
69
|
-
});
|
|
70
|
-
it('can fetch blocks', async () => {
|
|
71
|
-
await expect(apiService.api.fetchBlocks((0, lodash_1.range)(50000, 50004))).resolves.toHaveLength(4);
|
|
72
|
-
});
|
|
73
|
-
it('can get the finalized height', async () => {
|
|
74
|
-
const height = (await apiService.api.getFinalizedBlock()).block_number;
|
|
75
|
-
console.log('Finalized height', height);
|
|
76
|
-
expect(height).toBeGreaterThan(975_650);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
//# sourceMappingURL=api.service.starknet.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.service.starknet.spec.js","sourceRoot":"","sources":["../../src/starknet/api.service.starknet.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAGnC,yDAA0E;AAC1E,6CAAuC;AACvC,gDAI0B;AAC1B,qCAAwC;AACxC,mCAA+B;AAE/B,iEAA4D;AAE5D,sBAAsB;AACtB,MAAM,aAAa,GAAG,kDAAkD,CAAC;AAEzE,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,OAAO;QACL,OAAO,EAAE;YACP,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,OAAO,EAAE,kBAAkB;SAC5B;QACD,WAAW,EAAE,EAAE;QACf,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI,uBAAa,CAAC,EAAE,CAAC;QAC7B,SAAS,EAAE,EAAE;KACP,CAAC;AACX,CAAC;AAED,MAAM,iBAAiB,GAAG,KAAK,EAC7B,WAAmB,aAAa,EACiB,EAAE;IACnD,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;QAC5C,SAAS,EAAE;YACT,iCAAqB;YACrB,sCAA0B;YAC1B;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;aACvB;YACD;gBACE,OAAO,EAAE,kBAAkB;gBAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC;aAChD;YACD;gBACE,OAAO,EAAE,yCAAkB;gBAC3B,UAAU,EAAE,yCAAkB,CAAC,MAAM;gBACrC,MAAM,EAAE;oBACN,kBAAkB;oBAClB,iCAAqB;oBACrB,6BAAa;oBACb,sBAAU;iBACX;aACF;SACF;QACD,OAAO,EAAE,CAAC,kCAAkB,CAAC,OAAO,EAAE,CAAC;KACxC,CAAC,CAAC,OAAO,EAAE,CAAC;IAEb,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC3C,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,yCAAkB,CAAC,CAAC;IAC/C,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvB,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,UAA8B,CAAC;IACnC,IAAI,GAAqB,CAAC;IAE1B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,MAAM,CACV,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAA,cAAK,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAChD,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,YAAY,CAAC;QAEvE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,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 { INestApplication } from '@nestjs/common';\nimport { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter';\nimport { Test } from '@nestjs/testing';\nimport {\n ConnectionPoolService,\n ConnectionPoolStateManager,\n NodeConfig,\n} from '@subql/node-core';\nimport { GraphQLSchema } from 'graphql';\nimport { range } from 'lodash';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { StarknetApiService } from './api.service.starknet';\n\n// Add api key to work\nconst HTTP_ENDPOINT = 'https://free-rpc.nethermind.io/mainnet-juno/v0_7';\n\nfunction testSubqueryProject(endpoint: string): SubqueryProject {\n return {\n network: {\n endpoint: [endpoint],\n chainId: '0x534e5f4d41494e',\n },\n dataSources: [],\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: [],\n } as any;\n}\n\nconst prepareApiService = async (\n endpoint: string = HTTP_ENDPOINT,\n): Promise<[StarknetApiService, INestApplication]> => {\n const module = await Test.createTestingModule({\n providers: [\n ConnectionPoolService,\n ConnectionPoolStateManager,\n {\n provide: NodeConfig,\n useFactory: () => ({}),\n },\n {\n provide: 'ISubqueryProject',\n useFactory: () => testSubqueryProject(endpoint),\n },\n {\n provide: StarknetApiService,\n useFactory: StarknetApiService.create,\n inject: [\n 'ISubqueryProject',\n ConnectionPoolService,\n EventEmitter2,\n NodeConfig,\n ],\n },\n ],\n imports: [EventEmitterModule.forRoot()],\n }).compile();\n\n const app = module.createNestApplication();\n await app.init();\n const apiService = app.get(StarknetApiService);\n return [apiService, app];\n};\n\njest.setTimeout(90000);\ndescribe('ApiService', () => {\n let apiService: StarknetApiService;\n let app: INestApplication;\n\n beforeEach(async () => {\n [apiService, app] = await prepareApiService();\n });\n\n afterEach(async () => {\n return app?.close();\n });\n\n it('can instantiate api', () => {\n expect(apiService.api.getChainId()).toEqual('0x534e5f4d41494e');\n });\n\n it('can fetch blocks', async () => {\n await expect(\n apiService.api.fetchBlocks(range(50000, 50004)),\n ).resolves.toHaveLength(4);\n });\n\n it('can get the finalized height', async () => {\n const height = (await apiService.api.getFinalizedBlock()).block_number;\n\n console.log('Finalized height', height);\n expect(height).toBeGreaterThan(975_650);\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
|
|
3
|
-
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
-
};
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
10
|
-
const types_starknet_1 = require("@subql/types-starknet");
|
|
11
|
-
const api_starknet_1 = require("./api.starknet");
|
|
12
|
-
const block_starknet_1 = require("./block.starknet");
|
|
13
|
-
// Add api key to work
|
|
14
|
-
const HTTP_ENDPOINT = 'https://starknet-mainnet.public.blastapi.io/rpc/v0_7';
|
|
15
|
-
const ds = {
|
|
16
|
-
mapping: {
|
|
17
|
-
file: '',
|
|
18
|
-
handlers: [
|
|
19
|
-
{
|
|
20
|
-
handler: 'test',
|
|
21
|
-
kind: types_starknet_1.StarknetHandlerKind.Call,
|
|
22
|
-
filter: { function: 'deposit' },
|
|
23
|
-
},
|
|
24
|
-
],
|
|
25
|
-
},
|
|
26
|
-
kind: types_starknet_1.StarknetDatasourceKind.Runtime,
|
|
27
|
-
startBlock: 979358,
|
|
28
|
-
options: {
|
|
29
|
-
abi: 'zkLend',
|
|
30
|
-
address: '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
31
|
-
},
|
|
32
|
-
assets: new Map([
|
|
33
|
-
['zkLend', { file: path_1.default.join(__dirname, '../../test/zkLend.abi.json') }],
|
|
34
|
-
]),
|
|
35
|
-
};
|
|
36
|
-
jest.setTimeout(90000);
|
|
37
|
-
describe('Api.starknet', () => {
|
|
38
|
-
let strkApi;
|
|
39
|
-
const eventEmitter = new event_emitter_1.EventEmitter2();
|
|
40
|
-
let blockData;
|
|
41
|
-
const fetchBlock = async (height) => {
|
|
42
|
-
const block = await strkApi.fetchBlock(height);
|
|
43
|
-
return block.block;
|
|
44
|
-
};
|
|
45
|
-
beforeEach(async () => {
|
|
46
|
-
strkApi = new api_starknet_1.StarknetApi(HTTP_ENDPOINT, eventEmitter);
|
|
47
|
-
await strkApi.init();
|
|
48
|
-
blockData = await fetchBlock(979358);
|
|
49
|
-
});
|
|
50
|
-
it('should get finalized block and best block', async () => {
|
|
51
|
-
const finalized = await strkApi.getFinalizedBlock();
|
|
52
|
-
const best = await strkApi.getBestBlockHeight();
|
|
53
|
-
expect(finalized).toBeDefined();
|
|
54
|
-
expect(best).toBeDefined();
|
|
55
|
-
expect(best).toBeGreaterThan(finalized.block_number);
|
|
56
|
-
});
|
|
57
|
-
it('should get finalized block', async () => {
|
|
58
|
-
const finalized = await strkApi.getFinalizedBlock();
|
|
59
|
-
expect(finalized).toBeDefined();
|
|
60
|
-
expect(finalized.block_number).toBeGreaterThan(979358);
|
|
61
|
-
});
|
|
62
|
-
it('Should format transaction in logs', () => {
|
|
63
|
-
expect(typeof blockData.logs[0].transaction.blockNumber).toBe('number');
|
|
64
|
-
expect(typeof blockData.logs[0].transaction.transactionIndex).toBe('number');
|
|
65
|
-
expect(blockData.logs[0].transaction.calldata.length).toBeGreaterThan(1);
|
|
66
|
-
});
|
|
67
|
-
it('should have the ability to get receipts via transactions from all types', () => {
|
|
68
|
-
expect(blockData.transactions[0].receipt).toBeDefined();
|
|
69
|
-
expect(typeof blockData.transactions[0].receipt).toEqual('object');
|
|
70
|
-
expect(typeof blockData.logs[0].transaction.receipt).toEqual('object');
|
|
71
|
-
expect(typeof blockData.logs[0].transaction.from).toEqual('string');
|
|
72
|
-
expect(typeof blockData.transactions[1].logs[0].transaction.from).toEqual('string');
|
|
73
|
-
expect(typeof blockData.transactions[1].logs[0].transaction.receipt).toEqual('object');
|
|
74
|
-
});
|
|
75
|
-
// Validate some of the variations from different transaction types
|
|
76
|
-
it('should correctly format a transaction', async () => {
|
|
77
|
-
const tx_invoke_v3 = blockData.transactions[0];
|
|
78
|
-
expect(tx_invoke_v3.hash).toBeDefined();
|
|
79
|
-
expect(tx_invoke_v3.nonce).toBeDefined();
|
|
80
|
-
expect(typeof tx_invoke_v3.nonce).toBe('string');
|
|
81
|
-
expect(tx_invoke_v3.maxFee).toBeUndefined();
|
|
82
|
-
const tx_invoke_v1 = blockData.transactions[5];
|
|
83
|
-
expect(tx_invoke_v1.hash).toBeDefined();
|
|
84
|
-
expect(tx_invoke_v1.maxFee).toBeDefined();
|
|
85
|
-
expect(typeof tx_invoke_v1.maxFee).toBe('string');
|
|
86
|
-
const block = await fetchBlock(1407);
|
|
87
|
-
// TX HASH 0x65e9ac447be4bbd256c407703c8baf9c4e862195d924a5fe3c42d138f3a0d38
|
|
88
|
-
const declare_tx = block.transactions[11];
|
|
89
|
-
expect(declare_tx).toBeDefined();
|
|
90
|
-
expect(declare_tx.maxFee).not.toBeDefined();
|
|
91
|
-
expect(declare_tx.nonce).not.toBeDefined();
|
|
92
|
-
});
|
|
93
|
-
//https://starkscan.co/tx/0x0153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24
|
|
94
|
-
it('Decode logs', async () => {
|
|
95
|
-
const tx = blockData.transactions.find((t) => t.hash ===
|
|
96
|
-
'0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24');
|
|
97
|
-
// const parsedTx = await strkApi.parseTransaction(tx!, ds);
|
|
98
|
-
const parsedLog = await strkApi.parseLog(tx.logs[5], ds);
|
|
99
|
-
expect(parsedLog.args).toStrictEqual({
|
|
100
|
-
'zklend::market::Market::Deposit': {
|
|
101
|
-
user: 888570324763985402246768015919558310269514530881625296825528005560714345717n,
|
|
102
|
-
token: 2009894490435840142178314390393166646092438090257831307886760648929397478285n,
|
|
103
|
-
face_amount: 2100000000000000000000n,
|
|
104
|
-
},
|
|
105
|
-
block_hash: '0x20dda386e8cb1da79a94716bca62e704b8664a13674d9bf4805d05125755a4a',
|
|
106
|
-
block_number: 979358,
|
|
107
|
-
transaction_hash: '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
//https://starkscan.co/tx/0x0153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24
|
|
111
|
-
it('Decode invoke v3 function type transaction calldata with contract abi (local and remote)', async () => {
|
|
112
|
-
const tx = blockData.transactions.find((t) => t.hash ===
|
|
113
|
-
'0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24');
|
|
114
|
-
// Expect before parse (or been passed a filter), decodedCalls is undefined
|
|
115
|
-
expect(tx.decodedCalls).toBeUndefined();
|
|
116
|
-
const parsedTransaction = await strkApi.parseTransaction(tx, ds);
|
|
117
|
-
expect(parsedTransaction.decodedCalls).toStrictEqual([
|
|
118
|
-
{
|
|
119
|
-
calldata: [
|
|
120
|
-
'0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
121
|
-
'0x71d75ab9b920500000',
|
|
122
|
-
'0x0',
|
|
123
|
-
],
|
|
124
|
-
decodedArgs: {
|
|
125
|
-
amount: 2100000000000000000000n,
|
|
126
|
-
spender: 2149625499377050772775701191274921578103398273298955620360611655307104287237n,
|
|
127
|
-
},
|
|
128
|
-
selector: '0x219209e083275171774dab1df80982e9df2096516f06319c5c6d71ae0a8480c',
|
|
129
|
-
to: '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
calldata: [
|
|
133
|
-
'0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',
|
|
134
|
-
'0x71d75ab9b920500000',
|
|
135
|
-
],
|
|
136
|
-
decodedArgs: {
|
|
137
|
-
amount: 2100000000000000000000n,
|
|
138
|
-
token: 2009894490435840142178314390393166646092438090257831307886760648929397478285n,
|
|
139
|
-
},
|
|
140
|
-
selector: '0xc73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01',
|
|
141
|
-
to: '0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',
|
|
142
|
-
},
|
|
143
|
-
]);
|
|
144
|
-
});
|
|
145
|
-
//https://starkscan.co/tx/0x043ce8e6e2ad703a81701f85ce26a8fb32ad54cc2fac7685ed0b1367a4813ade
|
|
146
|
-
it('Decode L1 transaction calldata, and decode with remote abi', async () => {
|
|
147
|
-
const blockData = await fetchBlock(981920);
|
|
148
|
-
const tx = blockData.transactions.find((t) => t.hash ===
|
|
149
|
-
'0x43ce8e6e2ad703a81701f85ce26a8fb32ad54cc2fac7685ed0b1367a4813ade');
|
|
150
|
-
const parsedTransaction = await strkApi.parseTransaction(tx, ds);
|
|
151
|
-
expect(parsedTransaction.decodedCalls).toStrictEqual([
|
|
152
|
-
{
|
|
153
|
-
calldata: [
|
|
154
|
-
'0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419',
|
|
155
|
-
'0x455448',
|
|
156
|
-
'0x1c7edb66155e3c72b27e6165d7a1912ec97a1286',
|
|
157
|
-
'0x296a93b1c3672a6093de21df2f7b665e0907abc97868e9bf52d6fea07921591',
|
|
158
|
-
'0x13883834c2e180b5',
|
|
159
|
-
'0x0',
|
|
160
|
-
],
|
|
161
|
-
decodedArgs: {
|
|
162
|
-
amount: 1407436682812293301n,
|
|
163
|
-
depositor: 162680747805905936472113782182998614066721329798n,
|
|
164
|
-
from_address: 993696174272377493693496825928908586134624850969n,
|
|
165
|
-
l1_token: 4543560n,
|
|
166
|
-
l2_recipient: 1170820745623894104757945010321258484362311313101582454359316155358757655953n,
|
|
167
|
-
},
|
|
168
|
-
selector: '0x1b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19',
|
|
169
|
-
to: '0x73314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82',
|
|
170
|
-
},
|
|
171
|
-
]);
|
|
172
|
-
});
|
|
173
|
-
it('Should not include decodedArgs if decode failed', async () => {
|
|
174
|
-
// TODO, not sure how to test this yet when remote abi always available
|
|
175
|
-
});
|
|
176
|
-
it('Should able to check is fullBlock', async () => {
|
|
177
|
-
// block with transactions
|
|
178
|
-
const lightBlock = (await strkApi.fetchLightBlock(500000)).block;
|
|
179
|
-
expect((0, block_starknet_1.isFullBlock)(blockData)).toBeTruthy();
|
|
180
|
-
expect((0, block_starknet_1.isFullBlock)(lightBlock)).toBeFalsy();
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
//# sourceMappingURL=api.starknet.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.starknet.test.js","sourceRoot":"","sources":["../../src/starknet/api.starknet.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport path from 'path';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n StarknetBlock,\n StarknetContractCall,\n StarknetDatasourceKind,\n StarknetHandlerKind,\n StarknetRuntimeDatasource,\n} from '@subql/types-starknet';\nimport { StarknetApi } from './api.starknet';\nimport { isFullBlock } from './block.starknet';\n\n// Add api key to work\nconst HTTP_ENDPOINT = 'https://starknet-mainnet.public.blastapi.io/rpc/v0_7';\n\nconst ds: StarknetRuntimeDatasource = {\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'test',\n kind: StarknetHandlerKind.Call,\n filter: { function: 'deposit' },\n },\n ],\n },\n kind: StarknetDatasourceKind.Runtime,\n startBlock: 979358,\n options: {\n abi: 'zkLend',\n address:\n '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n assets: new Map([\n ['zkLend', { file: path.join(__dirname, '../../test/zkLend.abi.json') }],\n ]),\n};\n\njest.setTimeout(90000);\ndescribe('Api.starknet', () => {\n let strkApi: StarknetApi;\n const eventEmitter = new EventEmitter2();\n let blockData: StarknetBlock;\n\n const fetchBlock = async (height: number) => {\n const block = await strkApi.fetchBlock(height);\n\n return block.block as StarknetBlock;\n };\n\n beforeEach(async () => {\n strkApi = new StarknetApi(HTTP_ENDPOINT, eventEmitter);\n await strkApi.init();\n blockData = await fetchBlock(979358);\n });\n\n it('should get finalized block and best block', async () => {\n const finalized = await strkApi.getFinalizedBlock();\n const best = await strkApi.getBestBlockHeight();\n\n expect(finalized).toBeDefined();\n expect(best).toBeDefined();\n\n expect(best).toBeGreaterThan(finalized.block_number);\n });\n\n it('should get finalized block', async () => {\n const finalized = await strkApi.getFinalizedBlock();\n expect(finalized).toBeDefined();\n expect(finalized.block_number).toBeGreaterThan(979358);\n });\n\n it('Should format transaction in logs', () => {\n expect(typeof blockData.logs[0].transaction.blockNumber).toBe('number');\n expect(typeof blockData.logs[0].transaction.transactionIndex).toBe(\n 'number',\n );\n expect(blockData.logs[0].transaction.calldata.length).toBeGreaterThan(1);\n });\n\n it('should have the ability to get receipts via transactions from all types', () => {\n expect(blockData.transactions[0].receipt).toBeDefined();\n\n expect(typeof blockData.transactions[0].receipt).toEqual('object');\n expect(typeof blockData.logs[0].transaction.receipt).toEqual('object');\n expect(typeof blockData.logs[0].transaction.from).toEqual('string');\n expect(typeof blockData.transactions[1].logs![0].transaction.from).toEqual(\n 'string',\n );\n expect(\n typeof blockData.transactions[1].logs![0].transaction.receipt,\n ).toEqual('object');\n });\n\n // Validate some of the variations from different transaction types\n it('should correctly format a transaction', async () => {\n const tx_invoke_v3 = blockData.transactions[0];\n\n expect(tx_invoke_v3.hash).toBeDefined();\n expect(tx_invoke_v3.nonce).toBeDefined();\n expect(typeof tx_invoke_v3.nonce).toBe('string');\n expect(tx_invoke_v3.maxFee).toBeUndefined();\n\n const tx_invoke_v1 = blockData.transactions[5];\n\n expect(tx_invoke_v1.hash).toBeDefined();\n expect(tx_invoke_v1.maxFee).toBeDefined();\n expect(typeof tx_invoke_v1.maxFee).toBe('string');\n\n const block = await fetchBlock(1407);\n // TX HASH 0x65e9ac447be4bbd256c407703c8baf9c4e862195d924a5fe3c42d138f3a0d38\n const declare_tx = block.transactions[11];\n\n expect(declare_tx).toBeDefined();\n expect(declare_tx.maxFee).not.toBeDefined();\n expect(declare_tx.nonce).not.toBeDefined();\n });\n\n //https://starkscan.co/tx/0x0153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24\n it('Decode logs', async () => {\n const tx = blockData.transactions.find(\n (t) =>\n t.hash ===\n '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',\n );\n // const parsedTx = await strkApi.parseTransaction(tx!, ds);\n const parsedLog = await strkApi.parseLog(tx!.logs![5], ds);\n expect(parsedLog.args).toStrictEqual({\n 'zklend::market::Market::Deposit': {\n user: 888570324763985402246768015919558310269514530881625296825528005560714345717n,\n token:\n 2009894490435840142178314390393166646092438090257831307886760648929397478285n,\n face_amount: 2100000000000000000000n,\n },\n block_hash:\n '0x20dda386e8cb1da79a94716bca62e704b8664a13674d9bf4805d05125755a4a',\n block_number: 979358,\n transaction_hash:\n '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',\n });\n });\n\n //https://starkscan.co/tx/0x0153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24\n it('Decode invoke v3 function type transaction calldata with contract abi (local and remote)', async () => {\n const tx = blockData.transactions.find(\n (t) =>\n t.hash ===\n '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',\n );\n // Expect before parse (or been passed a filter), decodedCalls is undefined\n expect(tx!.decodedCalls).toBeUndefined();\n const parsedTransaction = await strkApi.parseTransaction(tx!, ds);\n expect(\n parsedTransaction.decodedCalls as StarknetContractCall<{\n amount: bigint;\n spender: bigint;\n }>[],\n ).toStrictEqual([\n {\n calldata: [\n '0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n '0x71d75ab9b920500000',\n '0x0',\n ],\n decodedArgs: {\n amount: 2100000000000000000000n,\n spender:\n 2149625499377050772775701191274921578103398273298955620360611655307104287237n,\n },\n selector:\n '0x219209e083275171774dab1df80982e9df2096516f06319c5c6d71ae0a8480c',\n to: '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n },\n {\n calldata: [\n '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n '0x71d75ab9b920500000',\n ],\n decodedArgs: {\n amount: 2100000000000000000000n,\n token:\n 2009894490435840142178314390393166646092438090257831307886760648929397478285n,\n },\n selector:\n '0xc73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01',\n to: '0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n ]);\n });\n\n //https://starkscan.co/tx/0x043ce8e6e2ad703a81701f85ce26a8fb32ad54cc2fac7685ed0b1367a4813ade\n it('Decode L1 transaction calldata, and decode with remote abi', async () => {\n const blockData = await fetchBlock(981920);\n const tx = blockData.transactions.find(\n (t) =>\n t.hash ===\n '0x43ce8e6e2ad703a81701f85ce26a8fb32ad54cc2fac7685ed0b1367a4813ade',\n );\n const parsedTransaction = await strkApi.parseTransaction(tx!, ds);\n expect(parsedTransaction.decodedCalls).toStrictEqual([\n {\n calldata: [\n '0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419',\n '0x455448',\n '0x1c7edb66155e3c72b27e6165d7a1912ec97a1286',\n '0x296a93b1c3672a6093de21df2f7b665e0907abc97868e9bf52d6fea07921591',\n '0x13883834c2e180b5',\n '0x0',\n ],\n decodedArgs: {\n amount: 1407436682812293301n,\n depositor: 162680747805905936472113782182998614066721329798n,\n from_address: 993696174272377493693496825928908586134624850969n,\n l1_token: 4543560n,\n l2_recipient:\n 1170820745623894104757945010321258484362311313101582454359316155358757655953n,\n },\n selector:\n '0x1b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19',\n to: '0x73314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82',\n },\n ]);\n });\n\n it('Should not include decodedArgs if decode failed', async () => {\n // TODO, not sure how to test this yet when remote abi always available\n });\n\n it('Should able to check is fullBlock', async () => {\n // block with transactions\n const lightBlock = (await (strkApi as any).fetchLightBlock(500000)).block;\n expect(isFullBlock(blockData)).toBeTruthy();\n expect(isFullBlock(lightBlock)).toBeFalsy();\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|