@lodestar/beacon-node 1.48.0-dev.f22c5ce63e → 1.48.0-dev.f63ac74039

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 (303) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +4 -11
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/state/utils.js +14 -0
  6. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  7. package/lib/api/impl/config/index.d.ts.map +1 -1
  8. package/lib/api/impl/config/index.js +4 -1
  9. package/lib/api/impl/config/index.js.map +1 -1
  10. package/lib/api/impl/validator/index.d.ts.map +1 -1
  11. package/lib/api/impl/validator/index.js +39 -39
  12. package/lib/api/impl/validator/index.js.map +1 -1
  13. package/lib/chain/archiveStore/archiveStore.d.ts +1 -0
  14. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  15. package/lib/chain/archiveStore/archiveStore.js +5 -1
  16. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  17. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  18. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
  19. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  20. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -1
  21. package/lib/chain/archiveStore/historicalState/metrics.js +12 -1
  22. package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
  23. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
  24. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  25. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  26. package/lib/chain/archiveStore/historicalState/worker.js +4 -1
  27. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  28. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +9 -1
  29. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  30. package/lib/chain/archiveStore/utils/archiveBlocks.js +68 -38
  31. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  32. package/lib/chain/blocks/importBlock.d.ts +5 -1
  33. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  34. package/lib/chain/blocks/importBlock.js +12 -18
  35. package/lib/chain/blocks/importBlock.js.map +1 -1
  36. package/lib/chain/blocks/index.d.ts +8 -4
  37. package/lib/chain/blocks/index.d.ts.map +1 -1
  38. package/lib/chain/blocks/index.js +83 -17
  39. package/lib/chain/blocks/index.js.map +1 -1
  40. package/lib/chain/blocks/types.d.ts +8 -0
  41. package/lib/chain/blocks/types.d.ts.map +1 -1
  42. package/lib/chain/blocks/types.js.map +1 -1
  43. package/lib/chain/blocks/utils/chainSegment.d.ts +1 -1
  44. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  45. package/lib/chain/blocks/utils/chainSegment.js +26 -11
  46. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  47. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  48. package/lib/chain/blocks/writeBlockInputToDb.js +9 -16
  49. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  50. package/lib/chain/chain.d.ts +11 -5
  51. package/lib/chain/chain.d.ts.map +1 -1
  52. package/lib/chain/chain.js +129 -75
  53. package/lib/chain/chain.js.map +1 -1
  54. package/lib/chain/emitter.d.ts +1 -1
  55. package/lib/chain/emitter.js +1 -1
  56. package/lib/chain/errors/blockError.d.ts +14 -9
  57. package/lib/chain/errors/blockError.d.ts.map +1 -1
  58. package/lib/chain/errors/blockError.js +0 -2
  59. package/lib/chain/errors/blockError.js.map +1 -1
  60. package/lib/chain/errors/dataColumnSidecarError.d.ts +15 -2
  61. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
  62. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  63. package/lib/chain/errors/executionPayloadBid.d.ts +4 -0
  64. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  65. package/lib/chain/errors/executionPayloadBid.js +1 -0
  66. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  67. package/lib/chain/errors/executionPayloadEnvelope.d.ts +10 -11
  68. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  69. package/lib/chain/errors/executionPayloadEnvelope.js +0 -2
  70. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  71. package/lib/chain/errors/gossipValidation.d.ts +2 -1
  72. package/lib/chain/errors/gossipValidation.d.ts.map +1 -1
  73. package/lib/chain/errors/gossipValidation.js +1 -0
  74. package/lib/chain/errors/gossipValidation.js.map +1 -1
  75. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  76. package/lib/chain/forkChoice/index.js +2 -0
  77. package/lib/chain/forkChoice/index.js.map +1 -1
  78. package/lib/chain/interface.d.ts +4 -4
  79. package/lib/chain/interface.d.ts.map +1 -1
  80. package/lib/chain/lightClient/index.d.ts +3 -3
  81. package/lib/chain/lightClient/index.d.ts.map +1 -1
  82. package/lib/chain/lightClient/index.js +21 -23
  83. package/lib/chain/lightClient/index.js.map +1 -1
  84. package/lib/chain/lightClient/proofs.d.ts +2 -1
  85. package/lib/chain/lightClient/proofs.d.ts.map +1 -1
  86. package/lib/chain/lightClient/proofs.js +5 -1
  87. package/lib/chain/lightClient/proofs.js.map +1 -1
  88. package/lib/chain/opPools/aggregatedAttestationPool.js +1 -1
  89. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  90. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  91. package/lib/chain/prepareNextSlot.js +16 -14
  92. package/lib/chain/prepareNextSlot.js.map +1 -1
  93. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
  94. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  95. package/lib/chain/produceBlock/produceBlockBody.js +57 -72
  96. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  97. package/lib/chain/validation/block.d.ts.map +1 -1
  98. package/lib/chain/validation/block.js +27 -55
  99. package/lib/chain/validation/block.js.map +1 -1
  100. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  101. package/lib/chain/validation/dataColumnSidecar.js +38 -13
  102. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  103. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  104. package/lib/chain/validation/executionPayloadBid.js +56 -40
  105. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  106. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  107. package/lib/chain/validation/executionPayloadEnvelope.js +10 -29
  108. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  109. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  110. package/lib/chain/validation/payloadAttestationMessage.js +5 -6
  111. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  112. package/lib/chain/validatorMonitor.d.ts +7 -1
  113. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  114. package/lib/chain/validatorMonitor.js +22 -5
  115. package/lib/chain/validatorMonitor.js.map +1 -1
  116. package/lib/db/beacon.d.ts +14 -5
  117. package/lib/db/beacon.d.ts.map +1 -1
  118. package/lib/db/beacon.js +17 -3
  119. package/lib/db/beacon.js.map +1 -1
  120. package/lib/db/dataColumnStore.d.ts +39 -0
  121. package/lib/db/dataColumnStore.d.ts.map +1 -0
  122. package/lib/db/dataColumnStore.js +81 -0
  123. package/lib/db/dataColumnStore.js.map +1 -0
  124. package/lib/db/flatFileStore/atomicWrite.d.ts +8 -0
  125. package/lib/db/flatFileStore/atomicWrite.d.ts.map +1 -0
  126. package/lib/db/flatFileStore/atomicWrite.js +61 -0
  127. package/lib/db/flatFileStore/atomicWrite.js.map +1 -0
  128. package/lib/db/flatFileStore/dcolFormat.d.ts +90 -0
  129. package/lib/db/flatFileStore/dcolFormat.d.ts.map +1 -0
  130. package/lib/db/flatFileStore/dcolFormat.js +286 -0
  131. package/lib/db/flatFileStore/dcolFormat.js.map +1 -0
  132. package/lib/db/flatFileStore/errors.d.ts +82 -0
  133. package/lib/db/flatFileStore/errors.d.ts.map +1 -0
  134. package/lib/db/flatFileStore/errors.js +32 -0
  135. package/lib/db/flatFileStore/errors.js.map +1 -0
  136. package/lib/db/flatFileStore/flatFileStore.d.ts +41 -0
  137. package/lib/db/flatFileStore/flatFileStore.d.ts.map +1 -0
  138. package/lib/db/flatFileStore/flatFileStore.js +251 -0
  139. package/lib/db/flatFileStore/flatFileStore.js.map +1 -0
  140. package/lib/db/flatFileStore/index.d.ts +4 -0
  141. package/lib/db/flatFileStore/index.d.ts.map +1 -0
  142. package/lib/db/flatFileStore/index.js +2 -0
  143. package/lib/db/flatFileStore/index.js.map +1 -0
  144. package/lib/db/flatFileStore/interface.d.ts +25 -0
  145. package/lib/db/flatFileStore/interface.d.ts.map +1 -0
  146. package/lib/db/flatFileStore/interface.js +2 -0
  147. package/lib/db/flatFileStore/interface.js.map +1 -0
  148. package/lib/db/flatFileStore/metrics.d.ts +24 -0
  149. package/lib/db/flatFileStore/metrics.d.ts.map +1 -0
  150. package/lib/db/flatFileStore/metrics.js +25 -0
  151. package/lib/db/flatFileStore/metrics.js.map +1 -0
  152. package/lib/db/flatFileStore/path.d.ts +9 -0
  153. package/lib/db/flatFileStore/path.d.ts.map +1 -0
  154. package/lib/db/flatFileStore/path.js +21 -0
  155. package/lib/db/flatFileStore/path.js.map +1 -0
  156. package/lib/db/flatFileStore/slotIndex.d.ts +14 -0
  157. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -0
  158. package/lib/db/flatFileStore/slotIndex.js +46 -0
  159. package/lib/db/flatFileStore/slotIndex.js.map +1 -0
  160. package/lib/db/flatFileStore/snappy.d.ts +3 -0
  161. package/lib/db/flatFileStore/snappy.d.ts.map +1 -0
  162. package/lib/db/flatFileStore/snappy.js +12 -0
  163. package/lib/db/flatFileStore/snappy.js.map +1 -0
  164. package/lib/db/index.d.ts +1 -0
  165. package/lib/db/index.d.ts.map +1 -1
  166. package/lib/db/interface.d.ts +8 -1
  167. package/lib/db/interface.d.ts.map +1 -1
  168. package/lib/db/repositories/blockArchive.d.ts +8 -1
  169. package/lib/db/repositories/blockArchive.d.ts.map +1 -1
  170. package/lib/db/repositories/blockArchive.js +65 -28
  171. package/lib/db/repositories/blockArchive.js.map +1 -1
  172. package/lib/db/repositories/blockArchiveIndex.d.ts +1 -2
  173. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  174. package/lib/db/repositories/blockArchiveIndex.js +3 -7
  175. package/lib/db/repositories/blockArchiveIndex.js.map +1 -1
  176. package/lib/execution/builder/validateBid.d.ts.map +1 -1
  177. package/lib/execution/builder/validateBid.js +8 -5
  178. package/lib/execution/builder/validateBid.js.map +1 -1
  179. package/lib/execution/engine/mock.d.ts.map +1 -1
  180. package/lib/execution/engine/mock.js +4 -1
  181. package/lib/execution/engine/mock.js.map +1 -1
  182. package/lib/metrics/metrics/lodestar.d.ts +22 -3
  183. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  184. package/lib/metrics/metrics/lodestar.js +60 -6
  185. package/lib/metrics/metrics/lodestar.js.map +1 -1
  186. package/lib/monitoring/clientStats.js +1 -1
  187. package/lib/monitoring/clientStats.js.map +1 -1
  188. package/lib/network/gossip/encoding.d.ts.map +1 -1
  189. package/lib/network/gossip/encoding.js +0 -7
  190. package/lib/network/gossip/encoding.js.map +1 -1
  191. package/lib/network/gossip/topic.d.ts +2 -1
  192. package/lib/network/gossip/topic.d.ts.map +1 -1
  193. package/lib/network/gossip/topic.js +4 -20
  194. package/lib/network/gossip/topic.js.map +1 -1
  195. package/lib/network/libp2p/index.d.ts +9 -1
  196. package/lib/network/libp2p/index.d.ts.map +1 -1
  197. package/lib/network/libp2p/index.js +23 -0
  198. package/lib/network/libp2p/index.js.map +1 -1
  199. package/lib/network/network.js +2 -2
  200. package/lib/network/network.js.map +1 -1
  201. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  202. package/lib/network/processor/gossipHandlers.js +388 -285
  203. package/lib/network/processor/gossipHandlers.js.map +1 -1
  204. package/lib/network/processor/index.d.ts +49 -3
  205. package/lib/network/processor/index.d.ts.map +1 -1
  206. package/lib/network/processor/index.js +254 -114
  207. package/lib/network/processor/index.js.map +1 -1
  208. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  209. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +112 -91
  210. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  211. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -1
  212. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +2 -0
  213. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  214. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  215. package/lib/network/reqresp/protocols.js +6 -22
  216. package/lib/network/reqresp/protocols.js.map +1 -1
  217. package/lib/network/reqresp/rateLimit.js +2 -1
  218. package/lib/network/reqresp/rateLimit.js.map +1 -1
  219. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts +2 -1
  220. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -1
  221. package/lib/network/reqresp/utils/dataColumnResponseValidation.js +14 -9
  222. package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
  223. package/lib/node/nodejs.d.ts +2 -1
  224. package/lib/node/nodejs.d.ts.map +1 -1
  225. package/lib/node/nodejs.js +4 -2
  226. package/lib/node/nodejs.js.map +1 -1
  227. package/lib/sync/range/range.d.ts.map +1 -1
  228. package/lib/sync/range/range.js +24 -1
  229. package/lib/sync/range/range.js.map +1 -1
  230. package/lib/util/sszBytes.d.ts +6 -0
  231. package/lib/util/sszBytes.d.ts.map +1 -1
  232. package/lib/util/sszBytes.js +1 -1
  233. package/lib/util/sszBytes.js.map +1 -1
  234. package/package.json +19 -20
  235. package/src/api/impl/beacon/blocks/index.ts +8 -14
  236. package/src/api/impl/beacon/state/utils.ts +15 -0
  237. package/src/api/impl/config/index.ts +4 -1
  238. package/src/api/impl/validator/index.ts +44 -43
  239. package/src/chain/archiveStore/archiveStore.ts +12 -1
  240. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +1 -0
  241. package/src/chain/archiveStore/historicalState/metrics.ts +14 -1
  242. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  243. package/src/chain/archiveStore/historicalState/worker.ts +4 -1
  244. package/src/chain/archiveStore/utils/archiveBlocks.ts +73 -42
  245. package/src/chain/blocks/importBlock.ts +25 -20
  246. package/src/chain/blocks/index.ts +120 -23
  247. package/src/chain/blocks/types.ts +9 -0
  248. package/src/chain/blocks/utils/chainSegment.ts +26 -12
  249. package/src/chain/blocks/writeBlockInputToDb.ts +10 -17
  250. package/src/chain/chain.ts +153 -84
  251. package/src/chain/emitter.ts +1 -1
  252. package/src/chain/errors/blockError.ts +19 -10
  253. package/src/chain/errors/dataColumnSidecarError.ts +24 -8
  254. package/src/chain/errors/executionPayloadBid.ts +2 -0
  255. package/src/chain/errors/executionPayloadEnvelope.ts +14 -11
  256. package/src/chain/errors/gossipValidation.ts +1 -0
  257. package/src/chain/forkChoice/index.ts +2 -0
  258. package/src/chain/interface.ts +4 -4
  259. package/src/chain/lightClient/index.ts +32 -36
  260. package/src/chain/lightClient/proofs.ts +10 -0
  261. package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
  262. package/src/chain/prepareNextSlot.ts +21 -17
  263. package/src/chain/produceBlock/produceBlockBody.ts +62 -79
  264. package/src/chain/validation/block.ts +27 -72
  265. package/src/chain/validation/dataColumnSidecar.ts +47 -14
  266. package/src/chain/validation/executionPayloadBid.ts +62 -44
  267. package/src/chain/validation/executionPayloadEnvelope.ts +10 -37
  268. package/src/chain/validation/payloadAttestationMessage.ts +8 -9
  269. package/src/chain/validatorMonitor.ts +24 -7
  270. package/src/db/beacon.ts +33 -6
  271. package/src/db/dataColumnStore.ts +113 -0
  272. package/src/db/flatFileStore/atomicWrite.ts +65 -0
  273. package/src/db/flatFileStore/dcolFormat.ts +389 -0
  274. package/src/db/flatFileStore/errors.ts +53 -0
  275. package/src/db/flatFileStore/flatFileStore.ts +310 -0
  276. package/src/db/flatFileStore/index.ts +3 -0
  277. package/src/db/flatFileStore/interface.ts +21 -0
  278. package/src/db/flatFileStore/metrics.ts +48 -0
  279. package/src/db/flatFileStore/path.ts +32 -0
  280. package/src/db/flatFileStore/slotIndex.ts +56 -0
  281. package/src/db/flatFileStore/snappy.ts +14 -0
  282. package/src/db/index.ts +1 -0
  283. package/src/db/interface.ts +9 -1
  284. package/src/db/repositories/blockArchive.ts +89 -30
  285. package/src/db/repositories/blockArchiveIndex.ts +4 -9
  286. package/src/execution/builder/validateBid.ts +10 -6
  287. package/src/execution/engine/mock.ts +4 -1
  288. package/src/metrics/metrics/lodestar.ts +63 -6
  289. package/src/monitoring/clientStats.ts +1 -1
  290. package/src/network/gossip/encoding.ts +0 -7
  291. package/src/network/gossip/topic.ts +3 -25
  292. package/src/network/libp2p/index.ts +28 -1
  293. package/src/network/network.ts +2 -2
  294. package/src/network/processor/gossipHandlers.ts +500 -355
  295. package/src/network/processor/index.ts +287 -165
  296. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +139 -105
  297. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +2 -0
  298. package/src/network/reqresp/protocols.ts +7 -24
  299. package/src/network/reqresp/rateLimit.ts +2 -1
  300. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +15 -7
  301. package/src/node/nodejs.ts +6 -1
  302. package/src/sync/range/range.ts +23 -1
  303. package/src/util/sszBytes.ts +1 -1
@@ -0,0 +1,251 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fromHex, toRootHex } from "@lodestar/utils";
4
+ import { atomicWrite, mkdirDurable } from "./atomicWrite.js";
5
+ import { DCOL_HEADER_SIZE, encodeDcolFile, getColumnByteRange, mergeDcolColumns, offsetTableSize, parseDcolHeader, parseDcolOffsets, readAllColumns, totalBits, } from "./dcolFormat.js";
6
+ import { DataColumnStoreError, DataColumnStoreErrorCode, isFsNotFoundError } from "./errors.js";
7
+ import { FlatFileStoreOperation, observeFlatFileStoreOperation } from "./metrics.js";
8
+ import { assertValidRootHex, padSlot } from "./path.js";
9
+ import { SlotIndex } from "./slotIndex.js";
10
+ import { uncompress } from "./snappy.js";
11
+ /**
12
+ * Filesystem storage for data columns, keyed by slot and block root.
13
+ * Hot and finalized data share the same layout. The top-level slot index is rebuilt on startup
14
+ * without inspecting the contents of slot directories.
15
+ * Per-slot mutation locking coordinates incremental writes, deletion, and pruning.
16
+ */
17
+ export class FlatFileStore {
18
+ dataColumnDir;
19
+ config;
20
+ logger;
21
+ slotIndex = new SlotIndex();
22
+ mutationLocks = new Map();
23
+ minRetainedSlot = 0;
24
+ metrics = null;
25
+ constructor(dataColumnDir, config, logger, metrics = null) {
26
+ this.dataColumnDir = dataColumnDir;
27
+ this.config = config;
28
+ this.logger = logger;
29
+ this.setMetrics(metrics);
30
+ }
31
+ setMetrics(metrics) {
32
+ if (metrics === this.metrics)
33
+ return;
34
+ this.metrics = metrics;
35
+ metrics?.slotIndexSize.addCollect((metric) => metric.set(this.slotIndex.size));
36
+ }
37
+ async init() {
38
+ const endTimer = this.metrics?.startupDuration.startTimer();
39
+ try {
40
+ await mkdirDurable(this.dataColumnDir);
41
+ const stats = await this.slotIndex.rebuildFromDisk(this.dataColumnDir);
42
+ if (stats.ignoredEntries > 0) {
43
+ this.logger.warn("Ignored non-canonical flat file store entries", {
44
+ entries: stats.ignoredEntries,
45
+ });
46
+ }
47
+ this.logger.info("Flat file store initialized", {
48
+ slots: stats.slots,
49
+ });
50
+ }
51
+ catch (e) {
52
+ this.metrics?.startupErrors.inc();
53
+ if (e instanceof DataColumnStoreError) {
54
+ throw e;
55
+ }
56
+ throw new DataColumnStoreError({ code: DataColumnStoreErrorCode.STARTUP_FAILED }, "Flat file store initialization failed", e);
57
+ }
58
+ finally {
59
+ endTimer?.();
60
+ }
61
+ }
62
+ async close() {
63
+ // All operations are stateless file I/O.
64
+ }
65
+ async getDataColumns(slot, blockRoot) {
66
+ return observeFlatFileStoreOperation(this.metrics, FlatFileStoreOperation.read, async () => {
67
+ const data = await this.readFile(slot, blockRoot);
68
+ if (!data)
69
+ return [];
70
+ this.metrics?.readBytes.inc(data.length);
71
+ const header = parseDcolHeader(data);
72
+ validateDcolHeader(header, slot, blockRoot);
73
+ const columns = readAllColumns(data, header);
74
+ const dataColumnSidecarType = this.config.getForkTypes(slot).DataColumnSidecar;
75
+ return columns.map((col) => dataColumnSidecarType.deserialize(col.data));
76
+ });
77
+ }
78
+ async getDataColumnsBinary(slot, blockRoot, indices) {
79
+ return observeFlatFileStoreOperation(this.metrics, FlatFileStoreOperation.read, () => this.getColumnsBinaryUninstrumented(slot, blockRoot, indices));
80
+ }
81
+ async putDataColumnsBinary(slot, blockRoot, columns) {
82
+ const rootBytes = fromHex(blockRoot);
83
+ if (columns.length === 0)
84
+ return;
85
+ await observeFlatFileStoreOperation(this.metrics, FlatFileStoreOperation.write, async () => {
86
+ const release = await this.acquireMutationLock(slot);
87
+ try {
88
+ if (slot < this.minRetainedSlot) {
89
+ throw new DataColumnStoreError({ code: DataColumnStoreErrorCode.SLOT_PRUNED, slot, minRetainedSlot: this.minRetainedSlot }, `Cannot write pruned data column slot=${slot} minRetainedSlot=${this.minRetainedSlot}`);
90
+ }
91
+ const existing = await this.readFile(slot, blockRoot);
92
+ let fileData;
93
+ if (existing) {
94
+ this.metrics?.readBytes.inc(existing.length);
95
+ const header = parseDcolHeader(existing);
96
+ validateDcolHeader(header, slot, blockRoot);
97
+ fileData = mergeDcolColumns(existing, columns);
98
+ }
99
+ else {
100
+ fileData = encodeDcolFile(rootBytes, slot, columns);
101
+ }
102
+ // The rename can succeed even if syncing its directory fails.
103
+ this.slotIndex.add(slot);
104
+ await atomicWrite(this.filePath(slot, blockRoot), fileData);
105
+ this.metrics?.writeBytes.inc(fileData.length);
106
+ }
107
+ finally {
108
+ release();
109
+ }
110
+ });
111
+ }
112
+ async deleteMany(items) {
113
+ const results = await Promise.allSettled(items.map(({ slot, blockRoot }) => this.delete(slot, blockRoot)));
114
+ const errors = results
115
+ .filter((result) => result.status === "rejected")
116
+ .map((result) => result.reason);
117
+ if (errors.length > 0) {
118
+ throw new DataColumnStoreError({ code: DataColumnStoreErrorCode.BATCH_DELETE_FAILED, failures: errors.length }, "Failed to delete flat file data", new AggregateError(errors));
119
+ }
120
+ }
121
+ async pruneBefore(minSlot) {
122
+ return observeFlatFileStoreOperation(this.metrics, FlatFileStoreOperation.prune, async () => {
123
+ this.minRetainedSlot = Math.max(this.minRetainedSlot, minSlot);
124
+ const slotsToPrune = new Set(this.slotIndex.getBefore(this.minRetainedSlot));
125
+ for (const slot of this.mutationLocks.keys()) {
126
+ if (slot < this.minRetainedSlot)
127
+ slotsToPrune.add(slot);
128
+ }
129
+ for (const slot of slotsToPrune) {
130
+ const release = await this.acquireMutationLock(slot);
131
+ try {
132
+ await fs.promises.rm(path.join(this.dataColumnDir, padSlot(slot)), { recursive: true, force: true });
133
+ this.slotIndex.remove(slot);
134
+ this.metrics?.prunedDirectories.inc();
135
+ }
136
+ finally {
137
+ release();
138
+ }
139
+ }
140
+ return [...slotsToPrune].sort((a, b) => a - b);
141
+ });
142
+ }
143
+ filePath(slot, rootHex) {
144
+ assertValidRootHex(rootHex);
145
+ return path.join(this.dataColumnDir, padSlot(slot), `${rootHex}.dcol`);
146
+ }
147
+ acquireMutationLock(slot) {
148
+ let release;
149
+ const prev = this.mutationLocks.get(slot) ?? Promise.resolve();
150
+ const next = new Promise((resolve) => {
151
+ release = resolve;
152
+ });
153
+ const chained = prev.then(() => next);
154
+ this.mutationLocks.set(slot, chained);
155
+ return prev.then(() => {
156
+ let released = false;
157
+ return () => {
158
+ if (released)
159
+ return;
160
+ released = true;
161
+ release();
162
+ if (this.mutationLocks.get(slot) === chained) {
163
+ this.mutationLocks.delete(slot);
164
+ }
165
+ };
166
+ });
167
+ }
168
+ async readFile(slot, rootHex) {
169
+ try {
170
+ return await fs.promises.readFile(this.filePath(slot, rootHex));
171
+ }
172
+ catch (e) {
173
+ if (!isFsNotFoundError(e))
174
+ throw e;
175
+ return null;
176
+ }
177
+ }
178
+ async getColumnsBinaryUninstrumented(slot, rootHex, indices) {
179
+ let fd;
180
+ try {
181
+ fd = await fs.promises.open(this.filePath(slot, rootHex), "r");
182
+ }
183
+ catch (e) {
184
+ if (!isFsNotFoundError(e))
185
+ throw e;
186
+ return null;
187
+ }
188
+ try {
189
+ const headerBuf = new Uint8Array(DCOL_HEADER_SIZE);
190
+ await readExactly(fd, headerBuf, 0);
191
+ this.metrics?.readBytes.inc(headerBuf.length);
192
+ const header = parseDcolHeader(headerBuf);
193
+ validateDcolHeader(header, slot, rootHex);
194
+ const N = totalBits(header.bitmap);
195
+ const tableSize = offsetTableSize(N);
196
+ const offsetTable = new Uint8Array(tableSize);
197
+ await readExactly(fd, offsetTable, DCOL_HEADER_SIZE);
198
+ this.metrics?.readBytes.inc(offsetTable.length);
199
+ const fileSize = (await fd.stat()).size;
200
+ const offsets = parseDcolOffsets(offsetTable, N, fileSize - DCOL_HEADER_SIZE - tableSize);
201
+ const results = [];
202
+ for (const idx of indices) {
203
+ const range = getColumnByteRange(header, offsets, idx);
204
+ if (!range) {
205
+ results.push(undefined);
206
+ continue;
207
+ }
208
+ const buf = new Uint8Array(range.length);
209
+ await readExactly(fd, buf, range.offset);
210
+ this.metrics?.readBytes.inc(buf.length);
211
+ results.push(uncompress(buf));
212
+ }
213
+ return results;
214
+ }
215
+ finally {
216
+ await fd.close();
217
+ }
218
+ }
219
+ async delete(slot, rootHex) {
220
+ await observeFlatFileStoreOperation(this.metrics, FlatFileStoreOperation.delete, async () => {
221
+ const release = await this.acquireMutationLock(slot);
222
+ try {
223
+ await fs.promises.rm(this.filePath(slot, rootHex), { force: true });
224
+ }
225
+ finally {
226
+ release();
227
+ }
228
+ });
229
+ }
230
+ }
231
+ function validateDcolHeader(header, slot, rootHex) {
232
+ if (header.slot !== slot) {
233
+ throw new DataColumnStoreError({ code: DataColumnStoreErrorCode.SLOT_MISMATCH, headerSlot: header.slot, pathSlot: slot }, `Dcol slot mismatch: header=${header.slot} path=${slot}`);
234
+ }
235
+ const headerRoot = toRootHex(header.blockRoot);
236
+ if (headerRoot !== rootHex) {
237
+ throw new DataColumnStoreError({ code: DataColumnStoreErrorCode.ROOT_MISMATCH, headerRoot, pathRoot: rootHex }, `Dcol block root mismatch: header=${headerRoot} path=${rootHex}`);
238
+ }
239
+ }
240
+ async function readExactly(fd, buffer, position) {
241
+ let totalRead = 0;
242
+ while (totalRead < buffer.length) {
243
+ const { bytesRead } = await fd.read(buffer, totalRead, buffer.length - totalRead, position + totalRead);
244
+ if (bytesRead === 0) {
245
+ const offset = position + totalRead;
246
+ throw new DataColumnStoreError({ code: DataColumnStoreErrorCode.UNEXPECTED_EOF, offset }, `Unexpected end of dcol file at offset ${offset}`);
247
+ }
248
+ totalRead += bytesRead;
249
+ }
250
+ }
251
+ //# sourceMappingURL=flatFileStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatFileStore.js","sourceRoot":"","sources":["../../../src/db/flatFileStore/flatFileStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { FlatFileStore } from "./flatFileStore.js";
2
+ export type { IFlatFileStore } from "./interface.js";
3
+ export type { FlatFileStoreMetrics } from "./metrics.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db/flatFileStore/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAC,oBAAoB,EAAC,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { FlatFileStore } from "./flatFileStore.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/flatFileStore/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { DataColumnSidecar, RootHex, Slot } from "@lodestar/types";
2
+ /**
3
+ * Flat file storage interface for data columns.
4
+ *
5
+ * No hot/cold distinction — data is always keyed by (slot, blockRoot).
6
+ * All filesystem operations are crash-safe via atomic writes.
7
+ *
8
+ */
9
+ export interface IFlatFileStore {
10
+ init(): Promise<void>;
11
+ close(): Promise<void>;
12
+ getDataColumns(slot: Slot, blockRoot: RootHex): Promise<DataColumnSidecar[]>;
13
+ /** Returns null if the file is absent, and undefined entries for columns missing from an existing file. */
14
+ getDataColumnsBinary(slot: Slot, blockRoot: RootHex, indices: number[]): Promise<(Uint8Array | undefined)[] | null>;
15
+ putDataColumnsBinary(slot: Slot, blockRoot: RootHex, columns: {
16
+ index: number;
17
+ data: Uint8Array;
18
+ }[]): Promise<void>;
19
+ deleteMany(items: {
20
+ slot: Slot;
21
+ blockRoot: RootHex;
22
+ }[]): Promise<void>;
23
+ pruneBefore(slot: Slot): Promise<Slot[]>;
24
+ }
25
+ //# sourceMappingURL=interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/db/flatFileStore/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7E,2GAA2G;IAC3G,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACpH,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElH,UAAU,CAAC,KAAK,EAAE;QAAC,IAAI,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;CAC1C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/db/flatFileStore/interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import type { Counter, GaugeExtra, Histogram } from "@lodestar/utils";
2
+ export declare const FlatFileStoreOperation: {
3
+ readonly read: "read";
4
+ readonly write: "write";
5
+ readonly delete: "delete";
6
+ readonly prune: "prune";
7
+ };
8
+ export type FlatFileStoreOperation = (typeof FlatFileStoreOperation)[keyof typeof FlatFileStoreOperation];
9
+ type OperationLabels = {
10
+ operation: FlatFileStoreOperation;
11
+ };
12
+ export type FlatFileStoreMetrics = {
13
+ operationDuration: Record<FlatFileStoreOperation, Histogram>;
14
+ operationErrors: Counter<OperationLabels>;
15
+ readBytes: Counter;
16
+ writeBytes: Counter;
17
+ prunedDirectories: Counter;
18
+ slotIndexSize: GaugeExtra;
19
+ startupDuration: Histogram;
20
+ startupErrors: Counter;
21
+ };
22
+ export declare function observeFlatFileStoreOperation<T>(metrics: FlatFileStoreMetrics | null, operation: FlatFileStoreOperation, fn: () => Promise<T>): Promise<T>;
23
+ export {};
24
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/db/flatFileStore/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAGpE,eAAO,MAAM,sBAAsB;aACjC,IAAI,EAAE,MAAM;aACZ,KAAK,EAAE,OAAO;aACd,MAAM,EAAE,QAAQ;aAChB,KAAK,EAAE,OAAO;CACN,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,OAAO,sBAAsB,CAAC,CAAC;AAE1G,KAAK,eAAe,GAAG;IAAC,SAAS,EAAE,sBAAsB,CAAA;CAAC,CAAC;AAE3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,EAAE,MAAM,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;IAC7D,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,UAAU,CAAC;IAC1B,eAAe,EAAE,SAAS,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAsB,6BAA6B,CAAC,CAAC,EACnD,OAAO,EAAE,oBAAoB,GAAG,IAAI,EACpC,SAAS,EAAE,sBAAsB,EACjC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAkBZ"}
@@ -0,0 +1,25 @@
1
+ import { DataColumnStoreError, DataColumnStoreErrorCode } from "./errors.js";
2
+ export const FlatFileStoreOperation = {
3
+ read: "read",
4
+ write: "write",
5
+ delete: "delete",
6
+ prune: "prune",
7
+ };
8
+ export async function observeFlatFileStoreOperation(metrics, operation, fn) {
9
+ const labels = { operation };
10
+ const endTimer = metrics?.operationDuration[operation].startTimer();
11
+ try {
12
+ return await fn();
13
+ }
14
+ catch (e) {
15
+ metrics?.operationErrors.inc(labels);
16
+ if (e instanceof DataColumnStoreError) {
17
+ throw e;
18
+ }
19
+ throw new DataColumnStoreError({ code: DataColumnStoreErrorCode.OPERATION_FAILED, operation }, `Flat file store ${operation} operation failed`, e);
20
+ }
21
+ finally {
22
+ endTimer?.();
23
+ }
24
+ }
25
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/db/flatFileStore/metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,oBAAoB,EAAE,wBAAwB,EAAC,MAAM,aAAa,CAAC;AAE3E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;CACN,CAAC;AAiBX,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAoC,EACpC,SAAiC,EACjC,EAAoB;IAEpB,MAAM,MAAM,GAAG,EAAC,SAAS,EAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;IACpE,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,oBAAoB,EAAE,CAAC;YACtC,MAAM,CAAC,CAAC;QACV,CAAC;QACD,MAAM,IAAI,oBAAoB,CAC5B,EAAC,IAAI,EAAE,wBAAwB,CAAC,gBAAgB,EAAE,SAAS,EAAC,EAC5D,mBAAmB,SAAS,mBAAmB,EAC/C,CAAC,CACF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,QAAQ,EAAE,EAAE,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { RootHex } from "@lodestar/types";
2
+ export declare function isValidRootHex(rootHex: string): rootHex is RootHex;
3
+ export declare function assertValidRootHex(rootHex: string): asserts rootHex is RootHex;
4
+ /**
5
+ * Zero-pad a slot number to 12 digits for lexicographic ordering in directory names.
6
+ * Twelve digits covers many centuries of Ethereum; larger safe integers remain untruncated.
7
+ */
8
+ export declare function padSlot(slot: number): string;
9
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/db/flatFileStore/path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAK7C,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,OAAO,CAElE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAO9E;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS5C"}
@@ -0,0 +1,21 @@
1
+ import { DataColumnStoreError, DataColumnStoreErrorCode } from "./errors.js";
2
+ const ROOT_HEX_PATTERN = /^0x[0-9a-f]{64}$/;
3
+ export function isValidRootHex(rootHex) {
4
+ return ROOT_HEX_PATTERN.test(rootHex);
5
+ }
6
+ export function assertValidRootHex(rootHex) {
7
+ if (!isValidRootHex(rootHex)) {
8
+ throw new DataColumnStoreError({ code: DataColumnStoreErrorCode.INVALID_ROOT, root: rootHex }, `Invalid flat file root: ${rootHex}`);
9
+ }
10
+ }
11
+ /**
12
+ * Zero-pad a slot number to 12 digits for lexicographic ordering in directory names.
13
+ * Twelve digits covers many centuries of Ethereum; larger safe integers remain untruncated.
14
+ */
15
+ export function padSlot(slot) {
16
+ if (!Number.isSafeInteger(slot) || slot < 0) {
17
+ throw new DataColumnStoreError({ code: DataColumnStoreErrorCode.INVALID_SLOT, slot }, `Invalid flat file slot: ${slot}`);
18
+ }
19
+ return String(slot).padStart(12, "0");
20
+ }
21
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../../src/db/flatFileStore/path.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,oBAAoB,EAAE,wBAAwB,EAAC,MAAM,aAAa,CAAC;AAE3E,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAE5C,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,oBAAoB,CAC5B,EAAC,IAAI,EAAE,wBAAwB,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,EAAC,EAC5D,2BAA2B,OAAO,EAAE,CACrC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,oBAAoB,CAC5B,EAAC,IAAI,EAAE,wBAAwB,CAAC,YAAY,EAAE,IAAI,EAAC,EACnD,2BAA2B,IAAI,EAAE,CAClC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Slot } from "@lodestar/types";
2
+ export type SlotIndexRebuildStats = {
3
+ slots: number;
4
+ ignoredEntries: number;
5
+ };
6
+ export declare class SlotIndex {
7
+ private readonly slots;
8
+ get size(): number;
9
+ add(slot: Slot): void;
10
+ remove(slot: Slot): void;
11
+ getBefore(minSlot: Slot): Slot[];
12
+ rebuildFromDisk(columnsDir: string): Promise<SlotIndexRebuildStats>;
13
+ }
14
+ //# sourceMappingURL=slotIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slotIndex.d.ts","sourceRoot":"","sources":["../../../src/db/flatFileStore/slotIndex.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAIrC,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAEpB;IAED,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAEvB;IAED,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,CAM/B;IAEK,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqBxE;CACF"}
@@ -0,0 +1,46 @@
1
+ import fs from "node:fs";
2
+ import { isFsNotFoundError } from "./errors.js";
3
+ import { padSlot } from "./path.js";
4
+ export class SlotIndex {
5
+ slots = new Set();
6
+ get size() {
7
+ return this.slots.size;
8
+ }
9
+ add(slot) {
10
+ this.slots.add(slot);
11
+ }
12
+ remove(slot) {
13
+ this.slots.delete(slot);
14
+ }
15
+ getBefore(minSlot) {
16
+ const slots = [];
17
+ for (const slot of this.slots) {
18
+ if (slot < minSlot)
19
+ slots.push(slot);
20
+ }
21
+ return slots;
22
+ }
23
+ async rebuildFromDisk(columnsDir) {
24
+ this.slots.clear();
25
+ let entries;
26
+ try {
27
+ entries = await fs.promises.readdir(columnsDir, { withFileTypes: true });
28
+ }
29
+ catch (e) {
30
+ if (!isFsNotFoundError(e))
31
+ throw e;
32
+ return { slots: 0, ignoredEntries: 0 };
33
+ }
34
+ let ignoredEntries = 0;
35
+ for (const entry of entries) {
36
+ const slot = Number(entry.name);
37
+ if (!entry.isDirectory() || !Number.isSafeInteger(slot) || slot < 0 || entry.name !== padSlot(slot)) {
38
+ ignoredEntries++;
39
+ continue;
40
+ }
41
+ this.slots.add(slot);
42
+ }
43
+ return { slots: this.slots.size, ignoredEntries };
44
+ }
45
+ }
46
+ //# sourceMappingURL=slotIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slotIndex.js","sourceRoot":"","sources":["../../../src/db/flatFileStore/slotIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAOlC,MAAM,OAAO,SAAS;IACH,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;IAEzC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,IAAU;QACZ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,IAAU;QACf,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS,CAAC,OAAa;QACrB,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,GAAG,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,CAAC;YACnC,OAAO,EAAC,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAC,CAAC;QACvC,CAAC;QAED,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpG,cAAc,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,EAAC,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export declare function compress(data: Uint8Array): Uint8Array;
2
+ export declare function uncompress(data: Uint8Array): Uint8Array;
3
+ //# sourceMappingURL=snappy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snappy.d.ts","sourceRoot":"","sources":["../../../src/db/flatFileStore/snappy.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAErD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAGvD"}
@@ -0,0 +1,12 @@
1
+ import { compressSync, uncompressSync } from "snappy";
2
+ export function compress(data) {
3
+ return compressSync(toBuffer(data));
4
+ }
5
+ export function uncompress(data) {
6
+ const result = uncompressSync(toBuffer(data), { asBuffer: true });
7
+ return new Uint8Array(result.buffer, result.byteOffset, result.byteLength);
8
+ }
9
+ function toBuffer(data) {
10
+ return Buffer.from(data.buffer, data.byteOffset, data.byteLength);
11
+ }
12
+ //# sourceMappingURL=snappy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snappy.js","sourceRoot":"","sources":["../../../src/db/flatFileStore/snappy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,cAAc,EAAC,MAAM,QAAQ,CAAC;AAEpD,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACvC,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAW,CAAC;IAC1E,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,QAAQ,CAAC,IAAgB;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpE,CAAC"}
package/lib/db/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { BeaconDb } from "./beacon.js";
2
2
  export { Bucket } from "./buckets.js";
3
+ export type { DataColumnKey, IDataColumnStore, IndexedDataColumnBytes } from "./dataColumnStore.js";
3
4
  export type { IBeaconDb } from "./interface.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AACrC,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,YAAY,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AACrC,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,YAAY,EAAC,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAC,MAAM,sBAAsB,CAAC;AAClG,YAAY,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC"}
@@ -1,4 +1,7 @@
1
1
  import { LevelDbControllerMetrics } from "@lodestar/db";
2
+ import { Slot } from "@lodestar/types";
3
+ import type { IDataColumnStore } from "./dataColumnStore.js";
4
+ import type { FlatFileStoreMetrics } from "./flatFileStore/metrics.js";
2
5
  import { CheckpointStateRepository } from "./repositories/checkpointState.js";
3
6
  import { AttesterSlashingRepository, BLSToExecutionChangeRepository, BackfilledRanges, BestLightClientUpdateRepository, BlobSidecarsArchiveRepository, BlobSidecarsRepository, BlockArchiveRepository, BlockRepository, CheckpointHeaderRepository, DataColumnSidecarArchiveRepository, DataColumnSidecarRepository, ExecutionPayloadEnvelopeArchiveRepository, ExecutionPayloadEnvelopeRepository, ProposerSlashingRepository, StateArchiveRepository, SyncCommitteeRepository, SyncCommitteeWitnessRepository, VoluntaryExitRepository } from "./repositories/index.js";
4
7
  /**
@@ -26,11 +29,15 @@ export interface IBeaconDb {
26
29
  syncCommittee: SyncCommitteeRepository;
27
30
  syncCommitteeWitness: SyncCommitteeWitnessRepository;
28
31
  backfilledRanges: BackfilledRanges;
32
+ dataColumns: IDataColumnStore;
33
+ /** Highest legacy column slot at startup; later archival writes the block-root index first. */
34
+ readonly lastLegacyArchiveSlot: Slot | null;
35
+ init(): Promise<void>;
29
36
  pruneHotDb(): Promise<void>;
30
37
  deleteDeprecatedEth1Data(): Promise<void>;
31
38
  /** Close the connection to the db instance and close the db store. */
32
39
  close(): Promise<void>;
33
40
  /** To inject metrics after CLI initialization */
34
- setMetrics(metrics: LevelDbControllerMetrics): void;
41
+ setMetrics(metrics: LevelDbControllerMetrics, flatFileStoreMetrics?: FlatFileStoreMetrics | null): void;
35
42
  }
36
43
  //# sourceMappingURL=interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/db/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAC;AACtD,OAAO,EAAC,yBAAyB,EAAC,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,gBAAgB,EAChB,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,0BAA0B,EAC1B,kCAAkC,EAClC,2BAA2B,EAC3B,yCAAyC,EACzC,kCAAkC,EAClC,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,MAAM,WAAW,SAAS;IAExB,KAAK,EAAE,eAAe,CAAC;IAEvB,YAAY,EAAE,sBAAsB,CAAC;IAErC,YAAY,EAAE,sBAAsB,CAAC;IACrC,mBAAmB,EAAE,6BAA6B,CAAC;IACnD,iBAAiB,EAAE,2BAA2B,CAAC;IAC/C,wBAAwB,EAAE,kCAAkC,CAAC;IAE7D,wBAAwB,EAAE,kCAAkC,CAAC;IAC7D,+BAA+B,EAAE,yCAAyC,CAAC;IAG3E,YAAY,EAAE,sBAAsB,CAAC;IAErC,eAAe,EAAE,yBAAyB,CAAC;IAG3C,aAAa,EAAE,uBAAuB,CAAC;IACvC,gBAAgB,EAAE,0BAA0B,CAAC;IAC7C,gBAAgB,EAAE,0BAA0B,CAAC;IAC7C,oBAAoB,EAAE,8BAA8B,CAAC;IAGrD,qBAAqB,EAAE,+BAA+B,CAAC;IACvD,gBAAgB,EAAE,0BAA0B,CAAC;IAC7C,aAAa,EAAE,uBAAuB,CAAC;IACvC,oBAAoB,EAAE,8BAA8B,CAAC;IAErD,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,uEAAuE;IACvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,iDAAiD;IACjD,UAAU,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAC;CACrD"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/db/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAC;AACtD,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACrC,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAC,yBAAyB,EAAC,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,gBAAgB,EAChB,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,0BAA0B,EAC1B,kCAAkC,EAClC,2BAA2B,EAC3B,yCAAyC,EACzC,kCAAkC,EAClC,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,MAAM,WAAW,SAAS;IAExB,KAAK,EAAE,eAAe,CAAC;IAEvB,YAAY,EAAE,sBAAsB,CAAC;IAErC,YAAY,EAAE,sBAAsB,CAAC;IACrC,mBAAmB,EAAE,6BAA6B,CAAC;IACnD,iBAAiB,EAAE,2BAA2B,CAAC;IAC/C,wBAAwB,EAAE,kCAAkC,CAAC;IAE7D,wBAAwB,EAAE,kCAAkC,CAAC;IAC7D,+BAA+B,EAAE,yCAAyC,CAAC;IAG3E,YAAY,EAAE,sBAAsB,CAAC;IAErC,eAAe,EAAE,yBAAyB,CAAC;IAG3C,aAAa,EAAE,uBAAuB,CAAC;IACvC,gBAAgB,EAAE,0BAA0B,CAAC;IAC7C,gBAAgB,EAAE,0BAA0B,CAAC;IAC7C,oBAAoB,EAAE,8BAA8B,CAAC;IAGrD,qBAAqB,EAAE,+BAA+B,CAAC;IACvD,gBAAgB,EAAE,0BAA0B,CAAC;IAC7C,aAAa,EAAE,uBAAuB,CAAC;IACvC,oBAAoB,EAAE,8BAA8B,CAAC;IAErD,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,+FAA+F;IAC/F,QAAQ,CAAC,qBAAqB,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,uEAAuE;IACvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,iDAAiD;IACjD,UAAU,CAAC,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAAC;CACzG"}
@@ -1,5 +1,5 @@
1
1
  import { ChainForkConfig } from "@lodestar/config";
2
- import { Db, FilterOptions, KeyValue, Repository } from "@lodestar/db";
2
+ import { Db, DbBatch, FilterOptions, KeyValue, Repository } from "@lodestar/db";
3
3
  import { Root, SignedBeaconBlock, Slot } from "@lodestar/types";
4
4
  export interface BlockFilterOptions extends FilterOptions<Slot> {
5
5
  step?: number;
@@ -19,8 +19,14 @@ export declare class BlockArchiveRepository extends Repository<Slot, SignedBeaco
19
19
  getId(value: SignedBeaconBlock): Slot;
20
20
  decodeKey(data: Uint8Array): number;
21
21
  put(key: Slot, value: SignedBeaconBlock): Promise<void>;
22
+ putBinary(key: Slot, value: Uint8Array): Promise<void>;
22
23
  batchPut(items: KeyValue<Slot, SignedBeaconBlock>[]): Promise<void>;
23
24
  batchPutBinary(items: BlockArchiveBatchPutBinaryItem[]): Promise<void>;
25
+ delete(slot: Slot): Promise<void>;
26
+ batchDelete(slots: Slot[]): Promise<void>;
27
+ batch(operations: DbBatch<Slot, SignedBeaconBlock>): Promise<void>;
28
+ batchBinary(operations: DbBatch<Slot, Uint8Array>): Promise<void>;
29
+ private indexedBlockEntries;
24
30
  remove(value: SignedBeaconBlock): Promise<void>;
25
31
  batchRemove(values: SignedBeaconBlock[]): Promise<void>;
26
32
  valuesStream(opts?: BlockFilterOptions): AsyncIterable<SignedBeaconBlock>;
@@ -28,6 +34,7 @@ export declare class BlockArchiveRepository extends Repository<Slot, SignedBeaco
28
34
  getByRoot(root: Root): Promise<SignedBeaconBlock | null>;
29
35
  getBinaryEntryByRoot(root: Root): Promise<KeyValue<Slot, Buffer> | null>;
30
36
  getByParentRoot(root: Root): Promise<SignedBeaconBlock | null>;
37
+ getRootBySlot(slot: Slot): Promise<Root | null>;
31
38
  getSlotByRoot(root: Root): Promise<Slot | null>;
32
39
  getSlotByParentRoot(root: Root): Promise<Slot | null>;
33
40
  private parseSlot;
@@ -1 +1 @@
1
- {"version":3,"file":"blockArchive.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/blockArchive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC;AACrE,OAAO,EAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAM,MAAM,iBAAiB,CAAC;AAanE,MAAM,WAAW,kBAAmB,SAAQ,aAAa,CAAC,IAAI,CAAC;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG;IACxE,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAC7E,YAAY,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAI1C;IAID,WAAW,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAEhD;IAED,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAE/C;IAID,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAEpC;IAED,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAElC;IAIK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5D;IAEK,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;IAEK,cAAc,CAAC,KAAK,EAAE,8BAA8B,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E;IAEK,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpD;IAEK,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5D;IAEM,YAAY,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAU/E;IAEK,MAAM,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAEpE;IAIK,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAG7D;IAEK,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAG7E;IAEK,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAGnE;IAEK,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAEpD;IAEK,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAE1D;IAED,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,YAAY;CAWrB"}
1
+ {"version":3,"file":"blockArchive.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/blockArchive.ts"],"names":[],"mappings":"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"}