@o1-labs/mina-archive-node-graphql 0.0.6

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 (138) hide show
  1. package/README.md +321 -0
  2. package/build/benchmark/setup.js +32 -0
  3. package/build/benchmark/setup.js.map +1 -0
  4. package/build/src/blockchain/constants.js +2 -0
  5. package/build/src/blockchain/constants.js.map +1 -0
  6. package/build/src/blockchain/types.js +7 -0
  7. package/build/src/blockchain/types.js.map +1 -0
  8. package/build/src/blockchain/utils.js +39 -0
  9. package/build/src/blockchain/utils.js.map +1 -0
  10. package/build/src/consensus/mina-consensus.js +59 -0
  11. package/build/src/consensus/mina-consensus.js.map +1 -0
  12. package/build/src/context.js +10 -0
  13. package/build/src/context.js.map +1 -0
  14. package/build/src/db/archive-node-adapter/archive-node-adapter.interface.js +2 -0
  15. package/build/src/db/archive-node-adapter/archive-node-adapter.interface.js.map +1 -0
  16. package/build/src/db/archive-node-adapter/archive-node-adapter.js +47 -0
  17. package/build/src/db/archive-node-adapter/archive-node-adapter.js.map +1 -0
  18. package/build/src/db/sql/events-actions/queries.js +438 -0
  19. package/build/src/db/sql/events-actions/queries.js.map +1 -0
  20. package/build/src/db/sql/events-actions/types.js +2 -0
  21. package/build/src/db/sql/events-actions/types.js.map +1 -0
  22. package/build/src/errors/error.js +17 -0
  23. package/build/src/errors/error.js.map +1 -0
  24. package/build/src/index.js +27 -0
  25. package/build/src/index.js.map +1 -0
  26. package/build/src/resolvers-types.js +8 -0
  27. package/build/src/resolvers-types.js.map +1 -0
  28. package/build/src/resolvers.js +67 -0
  29. package/build/src/resolvers.js.map +1 -0
  30. package/build/src/server/plugins.js +39 -0
  31. package/build/src/server/plugins.js.map +1 -0
  32. package/build/src/server/server.js +25 -0
  33. package/build/src/server/server.js.map +1 -0
  34. package/build/src/services/actions-service/actions-service.interface.js +2 -0
  35. package/build/src/services/actions-service/actions-service.interface.js.map +1 -0
  36. package/build/src/services/actions-service/actions-service.js +94 -0
  37. package/build/src/services/actions-service/actions-service.js.map +1 -0
  38. package/build/src/services/blocks-service/blocks-service.interface.js +2 -0
  39. package/build/src/services/blocks-service/blocks-service.interface.js.map +1 -0
  40. package/build/src/services/blocks-service/blocks-service.js +263 -0
  41. package/build/src/services/blocks-service/blocks-service.js.map +1 -0
  42. package/build/src/services/data-adapters/database-row-adapters.js +116 -0
  43. package/build/src/services/data-adapters/database-row-adapters.js.map +1 -0
  44. package/build/src/services/events-service/events-service.interface.js +2 -0
  45. package/build/src/services/events-service/events-service.interface.js.map +1 -0
  46. package/build/src/services/events-service/events-service.js +64 -0
  47. package/build/src/services/events-service/events-service.js.map +1 -0
  48. package/build/src/services/network-service/network-service.interface.js +2 -0
  49. package/build/src/services/network-service/network-service.interface.js.map +1 -0
  50. package/build/src/services/network-service/network-service.js +31 -0
  51. package/build/src/services/network-service/network-service.js.map +1 -0
  52. package/build/src/tracing/jaeger-setup.js +39 -0
  53. package/build/src/tracing/jaeger-setup.js.map +1 -0
  54. package/build/src/tracing/jaeger-tracing.js +29 -0
  55. package/build/src/tracing/jaeger-tracing.js.map +1 -0
  56. package/build/src/tracing/tracer.js +31 -0
  57. package/build/src/tracing/tracer.js.map +1 -0
  58. package/build/tests/__mocks__/generate_mock_data.js +13 -0
  59. package/build/tests/__mocks__/generate_mock_data.js.map +1 -0
  60. package/build/tests/consensus/run-compare.js +40 -0
  61. package/build/tests/consensus/run-compare.js.map +1 -0
  62. package/build/tests/consensus/select-consensus-precomputed.js +80 -0
  63. package/build/tests/consensus/select-consensus-precomputed.js.map +1 -0
  64. package/build/tests/consensus/types.js +15 -0
  65. package/build/tests/consensus/types.js.map +1 -0
  66. package/build/tests/devnet-dump/devnet-dump.test.js +311 -0
  67. package/build/tests/devnet-dump/devnet-dump.test.js.map +1 -0
  68. package/build/tests/devnet-dump/setup.js +58 -0
  69. package/build/tests/devnet-dump/setup.js.map +1 -0
  70. package/build/tests/integration/integration.test.js +226 -0
  71. package/build/tests/integration/integration.test.js.map +1 -0
  72. package/build/tests/integration/setup.js +82 -0
  73. package/build/tests/integration/setup.js.map +1 -0
  74. package/build/tests/live-api/actions.test.js +4 -0
  75. package/build/tests/live-api/actions.test.js.map +1 -0
  76. package/build/tests/live-api/blocks.test.js +116 -0
  77. package/build/tests/live-api/blocks.test.js.map +1 -0
  78. package/build/tests/live-api/events.test.js +97 -0
  79. package/build/tests/live-api/events.test.js.map +1 -0
  80. package/build/tests/live-api/networkState.test.js +27 -0
  81. package/build/tests/live-api/networkState.test.js.map +1 -0
  82. package/build/tests/live-network/live-network.test.js +144 -0
  83. package/build/tests/live-network/live-network.test.js.map +1 -0
  84. package/build/tests/live-network/setup.js +206 -0
  85. package/build/tests/live-network/setup.js.map +1 -0
  86. package/build/tests/resolvers.test.js +475 -0
  87. package/build/tests/resolvers.test.js.map +1 -0
  88. package/build/tests/services/actions-service/actions-service.test.js +124 -0
  89. package/build/tests/services/actions-service/actions-service.test.js.map +1 -0
  90. package/build/tests/services/blocks-service/blocks-service.test.js +348 -0
  91. package/build/tests/services/blocks-service/blocks-service.test.js.map +1 -0
  92. package/build/tests/services/events-service/events-service.test.js +185 -0
  93. package/build/tests/services/events-service/events-service.test.js.map +1 -0
  94. package/build/tests/test-helpers.js +11 -0
  95. package/build/tests/test-helpers.js.map +1 -0
  96. package/build/tests/unit/blockchain-utils.test.js +106 -0
  97. package/build/tests/unit/blockchain-utils.test.js.map +1 -0
  98. package/build/tests/unit/consensus.test.js +154 -0
  99. package/build/tests/unit/consensus.test.js.map +1 -0
  100. package/build/tests/unit/error-handling.test.js +52 -0
  101. package/build/tests/unit/error-handling.test.js.map +1 -0
  102. package/build/tests/utils.test.js +313 -0
  103. package/build/tests/utils.test.js.map +1 -0
  104. package/build/zkapp/contract.js +144 -0
  105. package/build/zkapp/contract.js.map +1 -0
  106. package/build/zkapp/utils.js +174 -0
  107. package/build/zkapp/utils.js.map +1 -0
  108. package/package.json +85 -0
  109. package/schema.graphql +221 -0
  110. package/src/blockchain/constants.ts +2 -0
  111. package/src/blockchain/types.ts +121 -0
  112. package/src/blockchain/utils.ts +54 -0
  113. package/src/consensus/mina-consensus.ts +137 -0
  114. package/src/context.ts +18 -0
  115. package/src/db/archive-node-adapter/archive-node-adapter.interface.ts +23 -0
  116. package/src/db/archive-node-adapter/archive-node-adapter.ts +101 -0
  117. package/src/db/sql/events-actions/queries.ts +490 -0
  118. package/src/db/sql/events-actions/types.ts +208 -0
  119. package/src/envionment.d.ts +18 -0
  120. package/src/errors/error.ts +20 -0
  121. package/src/index.ts +31 -0
  122. package/src/resolvers-types.ts +754 -0
  123. package/src/resolvers.ts +102 -0
  124. package/src/server/plugins.ts +56 -0
  125. package/src/server/server.ts +30 -0
  126. package/src/services/actions-service/actions-service.interface.ts +9 -0
  127. package/src/services/actions-service/actions-service.ts +195 -0
  128. package/src/services/blocks-service/blocks-service.interface.ts +11 -0
  129. package/src/services/blocks-service/blocks-service.ts +407 -0
  130. package/src/services/data-adapters/database-row-adapters.ts +261 -0
  131. package/src/services/events-service/events-service.interface.ts +6 -0
  132. package/src/services/events-service/events-service.ts +118 -0
  133. package/src/services/network-service/network-service.interface.ts +5 -0
  134. package/src/services/network-service/network-service.ts +53 -0
  135. package/src/tracing/jaeger-setup.ts +65 -0
  136. package/src/tracing/jaeger-tracing.ts +44 -0
  137. package/src/tracing/tracer.ts +52 -0
  138. package/tsconfig.json +104 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-service.interface.js","sourceRoot":"","sources":["../../../../src/services/actions-service/actions-service.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,94 @@
1
+ import { BlockStatusFilter, } from '../../blockchain/types.js';
2
+ import { DEFAULT_TOKEN_ID } from '../../blockchain/constants.js';
3
+ import { createBlockInfo } from '../../blockchain/utils.js';
4
+ import { getActionsQuery, checkActionState, } from '../../db/sql/events-actions/queries.js';
5
+ import { partitionBlocks, getElementIdFieldValues, mapActionOrEvent, removeRedundantEmittedFields, sortAndFilterBlocks, } from '../data-adapters/database-row-adapters.js';
6
+ import { extractTraceStateFromOptions, } from '../../tracing/tracer.js';
7
+ import { throwActionStateError, throwBlockRangeError, } from '../../errors/error.js';
8
+ import { BLOCK_RANGE_SIZE } from '../../server/server.js';
9
+ export { ActionsService };
10
+ class ActionsService {
11
+ constructor(client) {
12
+ this.client = client;
13
+ }
14
+ async getActions(input, options) {
15
+ const tracingState = extractTraceStateFromOptions(options);
16
+ return (await this.getActionData(input, { tracingState })) ?? [];
17
+ }
18
+ async getActionData(input, { tracingState }) {
19
+ const sqlSpan = tracingState.startSpan('actions.SQL');
20
+ const rows = await this.executeActionsQuery(input);
21
+ sqlSpan.end();
22
+ const processingSpan = tracingState.startSpan('actions.processing');
23
+ const elementIdFieldValues = getElementIdFieldValues(rows);
24
+ const blocksWithTransactions = partitionBlocks(rows);
25
+ const actionsData = this.blocksToActions(blocksWithTransactions, elementIdFieldValues);
26
+ sortAndFilterBlocks(actionsData);
27
+ processingSpan.end();
28
+ return actionsData;
29
+ }
30
+ async executeActionsQuery(input) {
31
+ const { address, to, from, endActionState, fromActionState } = input;
32
+ if (fromActionState) {
33
+ const fromActionStateExists = await checkActionState(this.client, fromActionState);
34
+ if (!fromActionStateExists || !fromActionStateExists.length) {
35
+ throwActionStateError(`fromActionState ${fromActionState} does not exist`);
36
+ }
37
+ }
38
+ if (endActionState) {
39
+ const endActionStateExists = await checkActionState(this.client, endActionState);
40
+ if (!endActionStateExists || !endActionStateExists.length) {
41
+ throwActionStateError(`endActionState ${endActionState} does not exist`);
42
+ }
43
+ }
44
+ let { tokenId, status } = input;
45
+ tokenId ||= DEFAULT_TOKEN_ID;
46
+ status ||= BlockStatusFilter.all;
47
+ if (to && from && to < from) {
48
+ throwBlockRangeError('to must be greater than from');
49
+ }
50
+ if (to && from && to - from > BLOCK_RANGE_SIZE) {
51
+ throwBlockRangeError(`The block range is too large. The maximum range is ${BLOCK_RANGE_SIZE}`);
52
+ }
53
+ return getActionsQuery(this.client, address, tokenId, status, to?.toString(), from?.toString(), fromActionState?.toString(), endActionState?.toString());
54
+ }
55
+ blocksToActions(blocksWithTransactions, elementIdFieldValues) {
56
+ const actions = [];
57
+ const blockTransactionEntries = Array.from(blocksWithTransactions.entries());
58
+ for (let i = 0; i < blockTransactionEntries.length; i++) {
59
+ const transactions = blockTransactionEntries[i][1];
60
+ const transaction = transactions.values().next().value[0];
61
+ const blockInfo = createBlockInfo(transaction);
62
+ const { action_state_value1, action_state_value2, action_state_value3, action_state_value4, action_state_value5, } = transaction;
63
+ const actionsData = [];
64
+ for (const [, transaction] of transactions) {
65
+ const filteredBlocks = removeRedundantEmittedFields(transaction);
66
+ const actionData = mapActionOrEvent('action', filteredBlocks, elementIdFieldValues);
67
+ actionsData.push(actionData);
68
+ }
69
+ actions.push({
70
+ blockInfo,
71
+ actionData: this.sortActions(actionsData.flat()),
72
+ actionState: {
73
+ actionStateOne: action_state_value1,
74
+ actionStateTwo: action_state_value2,
75
+ actionStateThree: action_state_value3,
76
+ actionStateFour: action_state_value4,
77
+ actionStateFive: action_state_value5,
78
+ },
79
+ });
80
+ }
81
+ return actions;
82
+ }
83
+ sortActions(actions) {
84
+ return actions.sort((a, b) => {
85
+ if (a.transactionInfo.sequenceNumber !== b.transactionInfo.sequenceNumber) {
86
+ return (a.transactionInfo.sequenceNumber - b.transactionInfo.sequenceNumber);
87
+ }
88
+ const aAccountUpdateIndex = a.transactionInfo.zkappAccountUpdateIds.indexOf(Number(a.accountUpdateId));
89
+ const bAccountUpdateIndex = b.transactionInfo.zkappAccountUpdateIds.indexOf(Number(b.accountUpdateId));
90
+ return aAccountUpdateIndex - bAccountUpdateIndex;
91
+ });
92
+ }
93
+ }
94
+ //# sourceMappingURL=actions-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-service.js","sourceRoot":"","sources":["../../../../src/services/actions-service/actions-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=blocks-service.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks-service.interface.js","sourceRoot":"","sources":["../../../../src/services/blocks-service/blocks-service.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,263 @@
1
+ import { extractTraceStateFromOptions, } from '../../tracing/tracer.js';
2
+ import { BLOCK_RANGE_SIZE, ENABLE_BLOCK_TRANSACTION_DETAILS, } from '../../server/server.js';
3
+ export { BlocksService };
4
+ class BlocksService {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ async getBlocks(query, limit, sortBy, options) {
9
+ const tracingState = extractTraceStateFromOptions(options);
10
+ return (await this.getBlockData(query, limit, sortBy, { tracingState })) ?? [];
11
+ }
12
+ async getBlockData(query, limit, sortBy, { tracingState }) {
13
+ const sqlSpan = tracingState.startSpan('blocks.SQL');
14
+ const rows = await this.executeBlocksQuery(query, limit, sortBy);
15
+ sqlSpan.end();
16
+ const blockRows = rows;
17
+ let userCommandsByBlock = new Map();
18
+ let zkappCommandsByBlock = new Map();
19
+ let feeTransfersByBlock = new Map();
20
+ if (ENABLE_BLOCK_TRANSACTION_DETAILS && blockRows.length > 0) {
21
+ const txSpan = tracingState.startSpan('blocks.transactionDetails.SQL');
22
+ const blockIds = blockRows.map((r) => r.id);
23
+ [userCommandsByBlock, zkappCommandsByBlock, feeTransfersByBlock] =
24
+ await this.fetchTransactionDetails(blockIds);
25
+ txSpan.end();
26
+ }
27
+ const processingSpan = tracingState.startSpan('blocks.processing');
28
+ const blocks = this.rowsToBlocks(blockRows, userCommandsByBlock, zkappCommandsByBlock, feeTransfersByBlock);
29
+ processingSpan.end();
30
+ return blocks;
31
+ }
32
+ async executeBlocksQuery(query, limit, sortBy) {
33
+ const blockHeightGte = query?.blockHeight_gte;
34
+ const blockHeightLt = query?.blockHeight_lt;
35
+ const dateTimeGte = query?.dateTime_gte;
36
+ const dateTimeLt = query?.dateTime_lt;
37
+ const canonical = query?.canonical;
38
+ const inBestChain = query?.inBestChain;
39
+ const orderBy = sortBy === 'BLOCKHEIGHT_DESC' ? 'DESC' : 'ASC';
40
+ const limitValue = Math.min(limit ?? 200, BLOCK_RANGE_SIZE);
41
+ let sql = `
42
+ SELECT
43
+ b.id,
44
+ b.state_hash,
45
+ b.parent_hash,
46
+ b.height,
47
+ b.timestamp,
48
+ pk.value as creator,
49
+ COALESCE(ic.fee, '0') as coinbase_amount
50
+ FROM blocks b
51
+ INNER JOIN public_keys pk ON b.creator_id = pk.id
52
+ LEFT JOIN (
53
+ SELECT
54
+ bic.block_id,
55
+ ic.fee
56
+ FROM internal_commands ic
57
+ INNER JOIN blocks_internal_commands bic ON ic.id = bic.internal_command_id
58
+ WHERE ic.command_type = 'coinbase'
59
+ ) AS ic ON b.id = ic.block_id
60
+ WHERE TRUE
61
+ `;
62
+ const params = [];
63
+ let paramIndex = 1;
64
+ if (canonical === true) {
65
+ sql += ` AND b.chain_status = 'canonical'`;
66
+ }
67
+ else if (canonical === false) {
68
+ sql += ` AND b.chain_status <> 'canonical'`;
69
+ }
70
+ if (blockHeightGte) {
71
+ sql += ` AND b.height >= $${paramIndex}`;
72
+ params.push(blockHeightGte);
73
+ paramIndex++;
74
+ }
75
+ if (blockHeightLt) {
76
+ sql += ` AND b.height < $${paramIndex}`;
77
+ params.push(blockHeightLt);
78
+ paramIndex++;
79
+ }
80
+ if (dateTimeGte) {
81
+ const timestampMs = new Date(dateTimeGte).getTime().toString();
82
+ sql += ` AND b.timestamp >= $${paramIndex}`;
83
+ params.push(timestampMs);
84
+ paramIndex++;
85
+ }
86
+ if (dateTimeLt) {
87
+ const timestampMs = new Date(dateTimeLt).getTime().toString();
88
+ sql += ` AND b.timestamp < $${paramIndex}`;
89
+ params.push(timestampMs);
90
+ paramIndex++;
91
+ }
92
+ const best_chain_til_canonical_cte = `
93
+ WITH RECURSIVE best_chain_til_canonical AS (
94
+ SELECT
95
+ id,
96
+ parent_id,
97
+ height
98
+ FROM blocks
99
+ WHERE height = (SELECT MAX(height) FROM blocks)
100
+ AND chain_status = 'pending'
101
+
102
+ UNION
103
+
104
+ SELECT
105
+ potential_parent.id,
106
+ potential_parent.parent_id,
107
+ potential_parent.height
108
+ FROM blocks potential_parent
109
+ JOIN best_chain_til_canonical ON potential_parent.id = best_chain_til_canonical.parent_id
110
+ WHERE potential_parent.chain_status <> 'canonical'
111
+ )
112
+ `;
113
+ if (inBestChain === true) {
114
+ sql =
115
+ best_chain_til_canonical_cte
116
+ + sql
117
+ + ` AND (b.id IN (SELECT id FROM best_chain_til_canonical) OR b.chain_status = 'canonical')`;
118
+ }
119
+ else if (inBestChain === false) {
120
+ sql =
121
+ best_chain_til_canonical_cte
122
+ + sql
123
+ + ` AND (b.id NOT IN (SELECT id FROM best_chain_til_canonical)
124
+ OR b.chain_status = 'orphaned')`;
125
+ }
126
+ sql += ` ORDER BY b.height ${orderBy}`;
127
+ sql += ` LIMIT $${paramIndex}`;
128
+ params.push(limitValue);
129
+ return this.client.unsafe(sql, params);
130
+ }
131
+ async fetchTransactionDetails(blockIds) {
132
+ const [ucRows, zkRows, ftRows] = await Promise.all([
133
+ this.fetchUserCommands(blockIds),
134
+ this.fetchZkAppCommands(blockIds),
135
+ this.fetchFeeTransfers(blockIds),
136
+ ]);
137
+ return [
138
+ this.groupBy(ucRows, (r) => r.block_id, this.mapUserCommandRow),
139
+ this.groupBy(zkRows, (r) => r.block_id, this.mapZkAppCommandRow),
140
+ this.groupBy(ftRows, (r) => r.block_id, this.mapFeeTransferRow),
141
+ ];
142
+ }
143
+ async fetchUserCommands(blockIds) {
144
+ const sql = `
145
+ SELECT
146
+ buc.block_id,
147
+ uc.hash,
148
+ uc.command_type AS kind,
149
+ pk_from.value AS "from",
150
+ pk_to.value AS "to",
151
+ COALESCE(uc.amount, '0') AS amount,
152
+ uc.fee,
153
+ uc.memo,
154
+ uc.nonce,
155
+ buc.status,
156
+ buc.failure_reason
157
+ FROM blocks_user_commands buc
158
+ INNER JOIN user_commands uc ON buc.user_command_id = uc.id
159
+ INNER JOIN public_keys pk_from ON uc.source_id = pk_from.id
160
+ INNER JOIN public_keys pk_to ON uc.receiver_id = pk_to.id
161
+ WHERE buc.block_id = ANY($1)
162
+ ORDER BY buc.block_id, buc.sequence_no
163
+ `;
164
+ return this.client.unsafe(sql, [blockIds]);
165
+ }
166
+ async fetchZkAppCommands(blockIds) {
167
+ const sql = `
168
+ SELECT
169
+ bzkc.block_id,
170
+ zkc.hash,
171
+ pk_fee.value AS fee_payer,
172
+ fpb.fee,
173
+ zkc.memo,
174
+ bzkc.status,
175
+ bzkc.failure_reasons_ids
176
+ FROM blocks_zkapp_commands bzkc
177
+ INNER JOIN zkapp_commands zkc ON bzkc.zkapp_command_id = zkc.id
178
+ INNER JOIN zkapp_fee_payer_body fpb ON zkc.zkapp_fee_payer_body_id = fpb.id
179
+ INNER JOIN public_keys pk_fee ON fpb.public_key_id = pk_fee.id
180
+ WHERE bzkc.block_id = ANY($1)
181
+ ORDER BY bzkc.block_id, bzkc.sequence_no
182
+ `;
183
+ return this.client.unsafe(sql, [blockIds]);
184
+ }
185
+ async fetchFeeTransfers(blockIds) {
186
+ const sql = `
187
+ SELECT
188
+ bic.block_id,
189
+ pk.value AS recipient,
190
+ ic.fee,
191
+ ic.command_type AS type
192
+ FROM blocks_internal_commands bic
193
+ INNER JOIN internal_commands ic ON bic.internal_command_id = ic.id
194
+ INNER JOIN public_keys pk ON ic.receiver_id = pk.id
195
+ WHERE bic.block_id = ANY($1)
196
+ AND ic.command_type IN ('fee_transfer', 'fee_transfer_via_coinbase')
197
+ ORDER BY bic.block_id, bic.sequence_no
198
+ `;
199
+ return this.client.unsafe(sql, [blockIds]);
200
+ }
201
+ groupBy(rows, keyFn, mapFn) {
202
+ const map = new Map();
203
+ for (const row of rows) {
204
+ const key = keyFn(row);
205
+ let arr = map.get(key);
206
+ if (!arr) {
207
+ arr = [];
208
+ map.set(key, arr);
209
+ }
210
+ arr.push(mapFn(row));
211
+ }
212
+ return map;
213
+ }
214
+ mapUserCommandRow(row) {
215
+ return {
216
+ hash: row.hash,
217
+ kind: row.kind,
218
+ from: row.from,
219
+ to: row.to,
220
+ amount: row.amount,
221
+ fee: row.fee,
222
+ memo: row.memo,
223
+ nonce: row.nonce,
224
+ status: row.status,
225
+ failureReason: row.failure_reason,
226
+ };
227
+ }
228
+ mapZkAppCommandRow(row) {
229
+ return {
230
+ hash: row.hash,
231
+ feePayer: row.fee_payer,
232
+ fee: row.fee,
233
+ memo: row.memo,
234
+ status: row.status,
235
+ failureReason: row.failure_reasons_ids
236
+ ? String(row.failure_reasons_ids)
237
+ : null,
238
+ };
239
+ }
240
+ mapFeeTransferRow(row) {
241
+ return {
242
+ recipient: row.recipient,
243
+ fee: row.fee,
244
+ type: row.type,
245
+ };
246
+ }
247
+ rowsToBlocks(rows, userCommandsByBlock = new Map(), zkappCommandsByBlock = new Map(), feeTransfersByBlock = new Map()) {
248
+ return rows.map((row) => ({
249
+ blockHeight: row.height,
250
+ creator: row.creator,
251
+ stateHash: row.state_hash,
252
+ parentHash: ENABLE_BLOCK_TRANSACTION_DETAILS ? row.parent_hash : '',
253
+ dateTime: new Date(parseInt(row.timestamp)).toISOString(),
254
+ transactions: {
255
+ coinbase: row.coinbase_amount || '0',
256
+ userCommands: userCommandsByBlock.get(row.id) ?? [],
257
+ zkappCommands: zkappCommandsByBlock.get(row.id) ?? [],
258
+ feeTransfer: feeTransfersByBlock.get(row.id) ?? [],
259
+ },
260
+ }));
261
+ }
262
+ }
263
+ //# sourceMappingURL=blocks-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks-service.js","sourceRoot":"","sources":["../../../../src/services/blocks-service/blocks-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { createTransactionInfo, createEvent, createAction, } from '../../blockchain/utils.js';
2
+ import { filterBestTip } from '../../consensus/mina-consensus.js';
3
+ export { partitionBlocks, getElementIdFieldValues, mapActionOrEvent, removeRedundantEmittedFields, sortAndFilterBlocks, };
4
+ function partitionBlocks(rows) {
5
+ const blocks = new Map();
6
+ if (rows.length === 0)
7
+ return blocks;
8
+ for (let i = 0; i < rows.length; i++) {
9
+ const { state_hash: blockHash, hash: transactionHash } = rows[i];
10
+ const blockData = blocks.get(blockHash);
11
+ if (blockData === undefined) {
12
+ const firstEntry = new Map();
13
+ firstEntry.set(transactionHash, [rows[i]]);
14
+ blocks.set(blockHash, firstEntry);
15
+ }
16
+ else {
17
+ const blockDataRows = blockData.get(transactionHash);
18
+ if (blockDataRows) {
19
+ blockDataRows.push(rows[i]);
20
+ }
21
+ else {
22
+ blockData.set(transactionHash, [rows[i]]);
23
+ }
24
+ }
25
+ }
26
+ return blocks;
27
+ }
28
+ function getElementIdFieldValues(rows) {
29
+ const elementIdValues = new Map();
30
+ for (let i = 0; i < rows.length; i++) {
31
+ const { field_id, field_value } = rows[i];
32
+ elementIdValues.set(field_id.toString(), field_value);
33
+ }
34
+ return elementIdValues;
35
+ }
36
+ function createUniqueEventId(zkapp_account_update_id, zkapp_event_array_id) {
37
+ return [zkapp_account_update_id, zkapp_event_array_id].join(',');
38
+ }
39
+ function removeRedundantEmittedFields(archiveNodeRow) {
40
+ const inOrderTransactionRows = [];
41
+ const seenEventOrActionIds = new Set();
42
+ for (let i = 0; i < archiveNodeRow.length; i++) {
43
+ const currentRow = archiveNodeRow[i];
44
+ const { event_field_elements_id, event_element_ids, zkapp_account_update_id, zkapp_account_updates_ids, } = currentRow;
45
+ const uniqueEventId = createUniqueEventId(zkapp_account_update_id, event_field_elements_id);
46
+ if (!seenEventOrActionIds.has(uniqueEventId)) {
47
+ const emittedEventOrActionIndexes = findAllIndexes(event_element_ids, event_field_elements_id);
48
+ const accountUpdateIndexes = findAllIndexes(zkapp_account_updates_ids, zkapp_account_update_id);
49
+ if (accountUpdateIndexes.length === 0) {
50
+ throw new Error(`No matching account update found for the given account update ID (${zkapp_account_update_id}) and event array ID (${event_field_elements_id}).`);
51
+ }
52
+ const accountUpdateIdIndex = accountUpdateIndexes[0];
53
+ emittedEventOrActionIndexes.forEach((eventOrActionIndex) => {
54
+ if (inOrderTransactionRows[accountUpdateIdIndex] === undefined) {
55
+ inOrderTransactionRows[accountUpdateIdIndex] = [];
56
+ }
57
+ inOrderTransactionRows[accountUpdateIdIndex][eventOrActionIndex] =
58
+ currentRow;
59
+ });
60
+ seenEventOrActionIds.add(uniqueEventId);
61
+ }
62
+ }
63
+ return inOrderTransactionRows.flat();
64
+ }
65
+ function mapActionOrEvent(kind, rows, elementIdFieldValues) {
66
+ const data = [];
67
+ for (let i = 0; i < rows.length; i++) {
68
+ const { zkapp_account_update_id, event_field_element_ids } = rows[i];
69
+ const transactionInfo = createTransactionInfo(rows[i]);
70
+ const elementIdToFieldValues = getFieldValuesFromElementIds(event_field_element_ids, elementIdFieldValues);
71
+ if (kind === 'event') {
72
+ const event = createEvent(zkapp_account_update_id.toString(), elementIdToFieldValues, transactionInfo);
73
+ data.push(event);
74
+ }
75
+ else {
76
+ const { zkapp_account_update_id } = rows[i];
77
+ const action = createAction(zkapp_account_update_id.toString(), elementIdToFieldValues, transactionInfo);
78
+ data.push(action);
79
+ }
80
+ }
81
+ return data;
82
+ }
83
+ function getFieldValuesFromElementIds(element_ids, elementIdFieldValues) {
84
+ const elementIdToFieldValues = [];
85
+ for (const elementId of element_ids) {
86
+ const elementIdFieldValue = elementIdFieldValues.get(elementId.toString());
87
+ if (elementIdFieldValue === undefined)
88
+ continue;
89
+ elementIdToFieldValues.push(elementIdFieldValue);
90
+ }
91
+ return elementIdToFieldValues;
92
+ }
93
+ function sortAndFilterBlocks(data) {
94
+ data.sort((a, b) => {
95
+ if (a.blockInfo.height < b.blockInfo.height)
96
+ return -1;
97
+ if (a.blockInfo.height > b.blockInfo.height)
98
+ return 1;
99
+ if (a.blockInfo.timestamp < b.blockInfo.timestamp)
100
+ return -1;
101
+ if (a.blockInfo.timestamp > b.blockInfo.timestamp)
102
+ return 1;
103
+ return 0;
104
+ });
105
+ filterBestTip(data);
106
+ }
107
+ function findAllIndexes(arr, target) {
108
+ const indexes = [];
109
+ arr.forEach((element, index) => {
110
+ if (element === target) {
111
+ indexes.push(index);
112
+ }
113
+ });
114
+ return indexes;
115
+ }
116
+ //# sourceMappingURL=database-row-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-row-adapters.js","sourceRoot":"","sources":["../../../../src/services/data-adapters/database-row-adapters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=events-service.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-service.interface.js","sourceRoot":"","sources":["../../../../src/services/events-service/events-service.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ import { BlockStatusFilter, } from '../../blockchain/types.js';
2
+ import { createBlockInfo } from '../../blockchain/utils.js';
3
+ import { DEFAULT_TOKEN_ID } from '../../blockchain/constants.js';
4
+ import { getEventsQuery } from '../../db/sql/events-actions/queries.js';
5
+ import { partitionBlocks, getElementIdFieldValues, mapActionOrEvent, removeRedundantEmittedFields, sortAndFilterBlocks, } from '../data-adapters/database-row-adapters.js';
6
+ import { extractTraceStateFromOptions, } from '../../tracing/tracer.js';
7
+ import { BLOCK_RANGE_SIZE } from '../../server/server.js';
8
+ import { throwBlockRangeError } from '../../errors/error.js';
9
+ export { EventsService };
10
+ class EventsService {
11
+ constructor(client) {
12
+ this.client = client;
13
+ }
14
+ async getEvents(input, options) {
15
+ const tracingState = extractTraceStateFromOptions(options);
16
+ return (await this.getEventData(input, { tracingState })) ?? [];
17
+ }
18
+ async getEventData(input, { tracingState }) {
19
+ const sqlSpan = tracingState.startSpan('events.SQL');
20
+ const rows = await this.executeEventsQuery(input);
21
+ sqlSpan.end();
22
+ const processingSpan = tracingState.startSpan('events.processing');
23
+ const elementIdFieldValues = getElementIdFieldValues(rows);
24
+ const blocksWithTransactions = partitionBlocks(rows);
25
+ const eventsData = this.blocksToEvents(blocksWithTransactions, elementIdFieldValues);
26
+ sortAndFilterBlocks(eventsData);
27
+ processingSpan.end();
28
+ return eventsData;
29
+ }
30
+ async executeEventsQuery(input) {
31
+ const { address, to, from } = input;
32
+ let { tokenId, status } = input;
33
+ tokenId ||= DEFAULT_TOKEN_ID;
34
+ status ||= BlockStatusFilter.all;
35
+ if (to && from && to < from) {
36
+ throwBlockRangeError('to must be greater than from');
37
+ }
38
+ if (to && from && to - from > BLOCK_RANGE_SIZE) {
39
+ throwBlockRangeError(`The block range is too large. The maximum range is ${BLOCK_RANGE_SIZE}`);
40
+ }
41
+ return getEventsQuery(this.client, address, tokenId, status, to?.toString(), from?.toString());
42
+ }
43
+ blocksToEvents(blocksWithTransactions, elementIdFieldValues) {
44
+ const events = [];
45
+ const blockMapEntries = Array.from(blocksWithTransactions.entries());
46
+ for (let i = 0; i < blockMapEntries.length; i++) {
47
+ const transactions = blockMapEntries[i][1];
48
+ const transaction = transactions.values().next().value[0];
49
+ const blockInfo = createBlockInfo(transaction);
50
+ const eventsData = [];
51
+ for (const [, transaction] of transactions) {
52
+ const filteredBlocks = removeRedundantEmittedFields(transaction);
53
+ const eventData = mapActionOrEvent('event', filteredBlocks, elementIdFieldValues);
54
+ eventsData.push(eventData);
55
+ }
56
+ events.push({
57
+ blockInfo,
58
+ eventData: eventsData.flat(),
59
+ });
60
+ }
61
+ return events;
62
+ }
63
+ }
64
+ //# sourceMappingURL=events-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-service.js","sourceRoot":"","sources":["../../../../src/services/events-service/events-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=network-service.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-service.interface.js","sourceRoot":"","sources":["../../../../src/services/network-service/network-service.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { getNetworkStateQuery } from '../../db/sql/events-actions/queries.js';
2
+ import { extractTraceStateFromOptions, } from '../../tracing/tracer.js';
3
+ export { NetworkService };
4
+ class NetworkService {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ async getNetworkState(options) {
9
+ const tracingState = extractTraceStateFromOptions(options);
10
+ return (await this.getNetworkStateData({ tracingState })) ?? [];
11
+ }
12
+ async getNetworkStateData({ tracingState, }) {
13
+ const sqlSpan = tracingState.startSpan('networkState.SQL');
14
+ const rows = await this.executeNetworkStateQuery();
15
+ sqlSpan.end();
16
+ const processingSpan = tracingState.startSpan('networkState.processing');
17
+ const maxBlockHeightInfo = {
18
+ canonicalMaxBlockHeight: Number(rows.filter((row) => row.chain_status === 'canonical')[0].height),
19
+ pendingMaxBlockHeight: Number(rows.filter((row) => row.chain_status === 'pending')[0].height),
20
+ };
21
+ const networkState = {
22
+ maxBlockHeight: maxBlockHeightInfo
23
+ };
24
+ processingSpan.end();
25
+ return networkState;
26
+ }
27
+ async executeNetworkStateQuery() {
28
+ return getNetworkStateQuery(this.client);
29
+ }
30
+ }
31
+ //# sourceMappingURL=network-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-service.js","sourceRoot":"","sources":["../../../../src/services/network-service/network-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAG9E,OAAO,EAEL,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,cAAc;IAGlB,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAgB;QACpC,MAAM,YAAY,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EACxB,YAAY,GAGb;QACC,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACzE,MAAM,kBAAkB,GAAG;YACzB,uBAAuB,EAAE,MAAM,CAC7B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CACjE;YACD,qBAAqB,EAAE,MAAM,CAC3B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAC/D;SACF,CAAC;QACF,MAAM,YAAY,GAAG;YACnB,cAAc,EAAE,kBAAkB;SACnC,CAAA;QACD,cAAc,CAAC,GAAG,EAAE,CAAC;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,wBAAwB;QACpC,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF"}