@gzeoneth/gov-tracker 0.2.1-beta.682a255 → 0.2.1-beta.746bfec

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 (197) hide show
  1. package/README.md +126 -80
  2. package/dist/abis.d.ts +3 -0
  3. package/dist/abis.d.ts.map +1 -1
  4. package/dist/abis.js +30 -2
  5. package/dist/abis.js.map +1 -1
  6. package/dist/calldata/index.d.ts +1 -1
  7. package/dist/calldata/index.d.ts.map +1 -1
  8. package/dist/calldata/index.js.map +1 -1
  9. package/dist/calldata/parameter-decoder.d.ts.map +1 -1
  10. package/dist/calldata/parameter-decoder.js +8 -1
  11. package/dist/calldata/parameter-decoder.js.map +1 -1
  12. package/dist/calldata/signature-lookup.d.ts +17 -2
  13. package/dist/calldata/signature-lookup.d.ts.map +1 -1
  14. package/dist/calldata/signature-lookup.js +20 -2
  15. package/dist/calldata/signature-lookup.js.map +1 -1
  16. package/dist/cli/cli.d.ts +21 -0
  17. package/dist/cli/cli.d.ts.map +1 -0
  18. package/dist/cli/{monitor.js → cli.js} +315 -46
  19. package/dist/cli/cli.js.map +1 -0
  20. package/dist/cli/lib/cli.d.ts +54 -3
  21. package/dist/cli/lib/cli.d.ts.map +1 -1
  22. package/dist/cli/lib/cli.js +384 -75
  23. package/dist/cli/lib/cli.js.map +1 -1
  24. package/dist/cli/lib/concurrency.d.ts +20 -0
  25. package/dist/cli/lib/concurrency.d.ts.map +1 -0
  26. package/dist/cli/lib/concurrency.js +32 -0
  27. package/dist/cli/lib/concurrency.js.map +1 -0
  28. package/dist/cli/lib/json-state.d.ts +23 -0
  29. package/dist/cli/lib/json-state.d.ts.map +1 -1
  30. package/dist/cli/lib/json-state.js +51 -4
  31. package/dist/cli/lib/json-state.js.map +1 -1
  32. package/dist/constants.d.ts +39 -0
  33. package/dist/constants.d.ts.map +1 -1
  34. package/dist/constants.js +47 -1
  35. package/dist/constants.js.map +1 -1
  36. package/dist/data/bundled-cache.json +11807 -2559
  37. package/dist/deduplication.d.ts +132 -0
  38. package/dist/deduplication.d.ts.map +1 -0
  39. package/dist/deduplication.js +270 -0
  40. package/dist/deduplication.js.map +1 -0
  41. package/dist/discovery/governor-discovery.d.ts.map +1 -1
  42. package/dist/discovery/governor-discovery.js +52 -36
  43. package/dist/discovery/governor-discovery.js.map +1 -1
  44. package/dist/discovery/timelock-discovery.d.ts +15 -6
  45. package/dist/discovery/timelock-discovery.d.ts.map +1 -1
  46. package/dist/discovery/timelock-discovery.js +27 -11
  47. package/dist/discovery/timelock-discovery.js.map +1 -1
  48. package/dist/election/contracts.d.ts +8 -0
  49. package/dist/election/contracts.d.ts.map +1 -0
  50. package/dist/election/contracts.js +28 -0
  51. package/dist/election/contracts.js.map +1 -0
  52. package/dist/election/details.d.ts +15 -0
  53. package/dist/election/details.d.ts.map +1 -0
  54. package/dist/election/details.js +157 -0
  55. package/dist/election/details.js.map +1 -0
  56. package/dist/election/index.d.ts +11 -0
  57. package/dist/election/index.d.ts.map +1 -0
  58. package/dist/election/index.js +48 -0
  59. package/dist/election/index.js.map +1 -0
  60. package/dist/election/params.d.ts +13 -0
  61. package/dist/election/params.d.ts.map +1 -0
  62. package/dist/election/params.js +93 -0
  63. package/dist/election/params.js.map +1 -0
  64. package/dist/election/participants.d.ts +6 -0
  65. package/dist/election/participants.d.ts.map +1 -0
  66. package/dist/election/participants.js +102 -0
  67. package/dist/election/participants.js.map +1 -0
  68. package/dist/election/prepare.d.ts +10 -0
  69. package/dist/election/prepare.d.ts.map +1 -0
  70. package/dist/election/prepare.js +52 -0
  71. package/dist/election/prepare.js.map +1 -0
  72. package/dist/election/proposal-ids.d.ts +18 -0
  73. package/dist/election/proposal-ids.d.ts.map +1 -0
  74. package/dist/election/proposal-ids.js +77 -0
  75. package/dist/election/proposal-ids.js.map +1 -0
  76. package/dist/election/status.d.ts +15 -0
  77. package/dist/election/status.d.ts.map +1 -0
  78. package/dist/election/status.js +102 -0
  79. package/dist/election/status.js.map +1 -0
  80. package/dist/election/tracking.d.ts +28 -0
  81. package/dist/election/tracking.d.ts.map +1 -0
  82. package/dist/election/tracking.js +412 -0
  83. package/dist/election/tracking.js.map +1 -0
  84. package/dist/index.d.ts +30 -7
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +94 -9
  87. package/dist/index.js.map +1 -1
  88. package/dist/stages/builder.d.ts +4 -0
  89. package/dist/stages/builder.d.ts.map +1 -1
  90. package/dist/stages/builder.js +7 -0
  91. package/dist/stages/builder.js.map +1 -1
  92. package/dist/stages/l2-to-l1-message.d.ts +8 -1
  93. package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
  94. package/dist/stages/l2-to-l1-message.js +79 -13
  95. package/dist/stages/l2-to-l1-message.js.map +1 -1
  96. package/dist/stages/proposal-created.d.ts +1 -0
  97. package/dist/stages/proposal-created.d.ts.map +1 -1
  98. package/dist/stages/proposal-created.js +1 -0
  99. package/dist/stages/proposal-created.js.map +1 -1
  100. package/dist/stages/proposal-queued.d.ts +1 -0
  101. package/dist/stages/proposal-queued.d.ts.map +1 -1
  102. package/dist/stages/proposal-queued.js +3 -1
  103. package/dist/stages/proposal-queued.js.map +1 -1
  104. package/dist/stages/retryables.js +2 -2
  105. package/dist/stages/retryables.js.map +1 -1
  106. package/dist/stages/timelock.d.ts +3 -1
  107. package/dist/stages/timelock.d.ts.map +1 -1
  108. package/dist/stages/timelock.js +10 -4
  109. package/dist/stages/timelock.js.map +1 -1
  110. package/dist/stages/utils.d.ts +7 -8
  111. package/dist/stages/utils.d.ts.map +1 -1
  112. package/dist/stages/utils.js +40 -27
  113. package/dist/stages/utils.js.map +1 -1
  114. package/dist/stages/voting.d.ts.map +1 -1
  115. package/dist/stages/voting.js +5 -4
  116. package/dist/stages/voting.js.map +1 -1
  117. package/dist/tracker/cache.d.ts +10 -6
  118. package/dist/tracker/cache.d.ts.map +1 -1
  119. package/dist/tracker/cache.js +39 -15
  120. package/dist/tracker/cache.js.map +1 -1
  121. package/dist/tracker/checkpoint-helpers.d.ts +63 -0
  122. package/dist/tracker/checkpoint-helpers.d.ts.map +1 -0
  123. package/dist/tracker/checkpoint-helpers.js +176 -0
  124. package/dist/tracker/checkpoint-helpers.js.map +1 -0
  125. package/dist/tracker/discovery.d.ts +40 -9
  126. package/dist/tracker/discovery.d.ts.map +1 -1
  127. package/dist/tracker/discovery.js +152 -15
  128. package/dist/tracker/discovery.js.map +1 -1
  129. package/dist/tracker/pipeline.d.ts.map +1 -1
  130. package/dist/tracker/pipeline.js +26 -11
  131. package/dist/tracker/pipeline.js.map +1 -1
  132. package/dist/tracker/query.d.ts +1 -0
  133. package/dist/tracker/query.d.ts.map +1 -1
  134. package/dist/tracker/query.js +14 -61
  135. package/dist/tracker/query.js.map +1 -1
  136. package/dist/tracker/state.d.ts +0 -10
  137. package/dist/tracker/state.d.ts.map +1 -1
  138. package/dist/tracker/state.js +1 -28
  139. package/dist/tracker/state.js.map +1 -1
  140. package/dist/tracker.d.ts +86 -4
  141. package/dist/tracker.d.ts.map +1 -1
  142. package/dist/tracker.js +311 -13
  143. package/dist/tracker.js.map +1 -1
  144. package/dist/types/config.d.ts +49 -0
  145. package/dist/types/config.d.ts.map +1 -1
  146. package/dist/types/core.d.ts +4 -2
  147. package/dist/types/core.d.ts.map +1 -1
  148. package/dist/types/election.d.ts +143 -0
  149. package/dist/types/election.d.ts.map +1 -1
  150. package/dist/types/index.d.ts +5 -7
  151. package/dist/types/index.d.ts.map +1 -1
  152. package/dist/types/index.js +2 -3
  153. package/dist/types/index.js.map +1 -1
  154. package/dist/types/stages.d.ts +79 -1
  155. package/dist/types/stages.d.ts.map +1 -1
  156. package/dist/types/stages.js.map +1 -1
  157. package/dist/types/tracking.d.ts +34 -4
  158. package/dist/types/tracking.d.ts.map +1 -1
  159. package/dist/utils/block-cache.d.ts +50 -0
  160. package/dist/utils/block-cache.d.ts.map +1 -0
  161. package/dist/utils/block-cache.js +80 -0
  162. package/dist/utils/block-cache.js.map +1 -0
  163. package/dist/utils/formatters.d.ts +91 -0
  164. package/dist/utils/formatters.d.ts.map +1 -0
  165. package/dist/utils/formatters.js +327 -0
  166. package/dist/utils/formatters.js.map +1 -0
  167. package/dist/utils/multicall.d.ts +52 -0
  168. package/dist/utils/multicall.d.ts.map +1 -0
  169. package/dist/utils/multicall.js +75 -0
  170. package/dist/utils/multicall.js.map +1 -0
  171. package/dist/utils/salt-computation.d.ts.map +1 -1
  172. package/dist/utils/salt-computation.js +33 -7
  173. package/dist/utils/salt-computation.js.map +1 -1
  174. package/dist/utils/sanitize.d.ts +28 -0
  175. package/dist/utils/sanitize.d.ts.map +1 -0
  176. package/dist/utils/sanitize.js +52 -0
  177. package/dist/utils/sanitize.js.map +1 -0
  178. package/dist/utils/stage-metadata.d.ts +0 -20
  179. package/dist/utils/stage-metadata.d.ts.map +1 -1
  180. package/dist/utils/stage-metadata.js +29 -44
  181. package/dist/utils/stage-metadata.js.map +1 -1
  182. package/dist/utils/timing.d.ts +13 -0
  183. package/dist/utils/timing.d.ts.map +1 -1
  184. package/dist/utils/timing.js +37 -1
  185. package/dist/utils/timing.js.map +1 -1
  186. package/package.json +25 -16
  187. package/dist/cli/monitor.d.ts +0 -3
  188. package/dist/cli/monitor.d.ts.map +0 -1
  189. package/dist/cli/monitor.js.map +0 -1
  190. package/dist/election.d.ts +0 -172
  191. package/dist/election.d.ts.map +0 -1
  192. package/dist/election.js +0 -467
  193. package/dist/election.js.map +0 -1
  194. package/dist/types/cross-chain.d.ts +0 -24
  195. package/dist/types/cross-chain.d.ts.map +0 -1
  196. package/dist/types/cross-chain.js +0 -6
  197. package/dist/types/cross-chain.js.map +0 -1
@@ -32,7 +32,6 @@ exports.getL2ExecutionTxHash = getL2ExecutionTxHash;
32
32
  exports.getOutboxExecutionTx = getOutboxExecutionTx;
33
33
  exports.getL1ExecutionTxHash = getL1ExecutionTxHash;
34
34
  exports.createCheckpoint = createCheckpoint;
35
- exports.toResult = toResult;
36
35
  const ethers_1 = require("ethers");
37
36
  const logger_1 = require("../utils/logger");
38
37
  const utils_1 = require("../stages/utils");
@@ -40,24 +39,10 @@ const governor_discovery_1 = require("../discovery/governor-discovery");
40
39
  const constants_1 = require("../constants");
41
40
  const { tracker: logTracker } = logger_1.loggers;
42
41
  // State Creation
43
- /**
44
- * Create a new TrackingState.
45
- */
46
- function getAddressForPath(input) {
47
- switch (input.type) {
48
- case "governor":
49
- return input.governorAddress;
50
- case "timelock":
51
- return input.timelockAddress;
52
- default:
53
- return "";
54
- }
55
- }
56
42
  function createTrackingState(options) {
57
43
  // Initialize stages based on tracking path
58
44
  const includeProposal = options.input.type === "governor";
59
- const addressForPath = getAddressForPath(options.input);
60
- const initialStages = (0, utils_1.initializeStagesForPath)(addressForPath, includeProposal);
45
+ const initialStages = (0, utils_1.initializeStagesForPath)(includeProposal);
61
46
  let ctx = {
62
47
  providers: options.providers,
63
48
  chunkingConfig: options.chunkingConfig ?? constants_1.DEFAULT_CHUNKING_CONFIG,
@@ -255,16 +240,4 @@ async function emitProgress(ctx, s) {
255
240
  isComplete: isComplete(ctx),
256
241
  });
257
242
  }
258
- function toResult(ctx) {
259
- return {
260
- input: ctx.input,
261
- stages: ctx.stages,
262
- checkpoint: createCheckpoint(ctx),
263
- isComplete: isComplete(ctx),
264
- proposalType: getProposalType(ctx),
265
- proposalData: getProposalData(ctx),
266
- currentState: (0, exports.getProposalState)(ctx),
267
- isElection: (0, exports.getIsElection)(ctx),
268
- };
269
- }
270
243
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tracker/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tracker/state.ts"],"names":[],"mappings":"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"}
package/dist/tracker.d.ts CHANGED
@@ -12,7 +12,10 @@
12
12
  * - tracker/execute.ts: Transaction preparation
13
13
  */
14
14
  import { ethers } from "ethers";
15
- import { TrackerOptions, TrackingResult, TrackedStage, TrackingCheckpoint, TrackerStats, ChunkingConfig, DiscoveryWatermarks, DiscoveryTargets, PrepareResult, PrepareOptions, ElectionCheckResult, TimelockLink } from "./types";
15
+ import { TrackerOptions, TrackingResult, TrackedStage, TrackingCheckpoint, TrackerStats, ChunkingConfig, DiscoveryWatermarks, DiscoveryTargets, PrepareResult, PrepareOptions, ElectionCheckResult, ElectionProposalStatus, TimelockLink } from "./types";
16
+ import type { SerializableNomineeDetails, SerializableMemberDetails } from "./types";
17
+ import { LoadedWatermarks } from "./tracker/discovery";
18
+ import { WatermarkHashes } from "./types";
16
19
  import { DiscoveredProposal, DiscoveredTimelockOp } from "./tracker/discovery";
17
20
  /**
18
21
  * Extract TimelockLink from stages if PROPOSAL_QUEUED is completed
@@ -66,19 +69,57 @@ export declare class ProposalStageTracker {
66
69
  static readCacheStatus(cachePath: string): Promise<{
67
70
  watermarks: DiscoveryWatermarks;
68
71
  checkpoints: Map<string, TrackingCheckpoint>;
72
+ elections: Map<number, TrackingCheckpoint>;
69
73
  }>;
74
+ /**
75
+ * Clear a specific cache entry. Used by --force to ensure fresh tracking.
76
+ */
77
+ clearCacheEntry(key: string): Promise<void>;
70
78
  /**
71
79
  * Load discovery watermarks from cache.
72
80
  * Watermarks are stored as a TrackingCheckpoint for unified cache format.
73
81
  * Returns empty object if no watermarks are cached.
74
82
  */
75
- loadWatermarks(): Promise<DiscoveryWatermarks>;
83
+ loadWatermarks(): Promise<LoadedWatermarks>;
76
84
  /**
77
85
  * Save discovery watermarks to cache.
78
86
  * Watermarks are stored as TrackingCheckpoint with proper metadata,
79
87
  * following the same pattern as proposal/timelock checkpoints.
88
+ *
89
+ * @param watermarks - Block numbers per discovery key
90
+ * @param hashes - Block hashes per discovery key (for reorg detection)
91
+ */
92
+ saveWatermarks(watermarks: DiscoveryWatermarks, hashes?: WatermarkHashes): Promise<void>;
93
+ /**
94
+ * Save an election checkpoint to cache.
95
+ * Elections are stored with key format: `election:{electionIndex}`
96
+ *
97
+ * For COMPLETED elections, automatically fetches and caches nominee/member
98
+ * election details to enable zero-RPC reads for historical elections.
99
+ *
100
+ * @param electionStatus - Election status from trackElectionProposal
101
+ * @param options.nomineeDetails - Pre-fetched nominee details (skips RPC fetch)
102
+ * @param options.memberDetails - Pre-fetched member details (skips RPC fetch)
103
+ */
104
+ saveElectionCheckpoint(electionStatus: ElectionProposalStatus, options?: {
105
+ nomineeDetails?: SerializableNomineeDetails;
106
+ memberDetails?: SerializableMemberDetails;
107
+ }): Promise<void>;
108
+ /**
109
+ * Get an election checkpoint from cache.
110
+ *
111
+ * For COMPLETED elections, includes cached nominee/member details:
112
+ * - nomineeDetails: Contenders, nominees, excluded nominees, quorum threshold
113
+ * - memberDetails: Final nominee rankings, winners, voting deadlines
114
+ *
115
+ * @param electionIndex - Election index
116
+ * @returns Election data or null if not cached
80
117
  */
81
- saveWatermarks(watermarks: DiscoveryWatermarks): Promise<void>;
118
+ getElectionCheckpoint(electionIndex: number): Promise<{
119
+ status: ElectionProposalStatus;
120
+ nomineeDetails: SerializableNomineeDetails | null;
121
+ memberDetails: SerializableMemberDetails | null;
122
+ } | null>;
82
123
  /**
83
124
  * Discover proposals from a governor in a block range.
84
125
  *
@@ -101,9 +142,10 @@ export declare class ProposalStageTracker {
101
142
  * Discover all proposals and timelock operations with auto-watermark management.
102
143
  *
103
144
  * This is the unified discovery API that handles everything internally:
145
+ * - Verifies watermark hashes to detect chain reorgs (rolls back if mismatch)
104
146
  * - Loads watermarks from cache (or uses provided fromWatermarks)
105
147
  * - Discovers from all enabled targets in parallel
106
- * - Auto-saves updated watermarks to cache
148
+ * - Auto-saves updated watermarks and hashes to cache
107
149
  *
108
150
  * @param targets - Which governors/timelocks to scan
109
151
  * @param toBlock - End block for discovery
@@ -244,6 +286,46 @@ export declare class ProposalStageTracker {
244
286
  l2: ethers.providers.Provider;
245
287
  nova?: ethers.providers.Provider;
246
288
  };
289
+ /**
290
+ * Track election status for a given proposal ID.
291
+ *
292
+ * Searches through elections to find the one containing this proposal,
293
+ * then tracks the full election lifecycle.
294
+ */
295
+ private trackElectionStatus;
296
+ /**
297
+ * Track an election by its index.
298
+ *
299
+ * This method provides direct election tracking when you have the election index.
300
+ * For tracking via tx hash, use trackByTxHash() which auto-detects elections.
301
+ *
302
+ * Caching behavior:
303
+ * - COMPLETED elections: Returns cached data immediately (0 RPC calls)
304
+ * - Incomplete elections: Makes fresh RPC calls and updates cache
305
+ * - No cache: Always makes fresh RPC calls
306
+ *
307
+ * @param electionIndex - Election index (0-based)
308
+ * @param options.force - Force fresh tracking even for completed elections
309
+ * @returns Election status
310
+ */
311
+ trackElection(electionIndex: number, options?: {
312
+ force?: boolean;
313
+ }): Promise<ElectionProposalStatus>;
314
+ /**
315
+ * Track all elections with caching.
316
+ *
317
+ * Caching behavior:
318
+ * - COMPLETED elections: Returns cached data immediately (0 RPC calls)
319
+ * - Incomplete elections: Makes fresh RPC calls and updates cache
320
+ *
321
+ * @param options.includeNext - Include the "next" election slot (default: true)
322
+ * @param options.force - Force fresh tracking for all elections
323
+ * @returns Array of election statuses
324
+ */
325
+ trackAllElections(options?: {
326
+ includeNext?: boolean;
327
+ force?: boolean;
328
+ }): Promise<ElectionProposalStatus[]>;
247
329
  /**
248
330
  * Check Security Council election status and prepare available actions
249
331
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"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"}
package/dist/tracker.js CHANGED
@@ -19,12 +19,50 @@ exports.createTracker = createTracker;
19
19
  const ethers_1 = require("ethers");
20
20
  const logger_1 = require("./utils/logger");
21
21
  const rpc_utils_1 = require("./utils/rpc-utils");
22
+ const timing_1 = require("./utils/timing");
23
+ const checkpoint_helpers_1 = require("./tracker/checkpoint-helpers");
22
24
  const constants_1 = require("./constants");
23
25
  const election_1 = require("./election");
24
26
  const governor_discovery_1 = require("./discovery/governor-discovery");
25
27
  const timelock_discovery_1 = require("./discovery/timelock-discovery");
26
28
  const utils_1 = require("./stages/utils");
27
29
  const { tracker: logTracker, discovery: logDiscovery } = logger_1.loggers;
30
+ /**
31
+ * Build a TrackingContext with current block numbers and timestamp.
32
+ * Called once at the start of a tracking session for consistent state.
33
+ */
34
+ async function buildTrackingContext(options) {
35
+ const { l2Provider, l1Provider, novaProvider, chunkSize, skipCache } = options;
36
+ const l2BlockInfo = await (0, timing_1.getCurrentBlockInfo)(l2Provider);
37
+ const context = {
38
+ l2BlockNumber: l2BlockInfo.blockNumber,
39
+ timestamp: l2BlockInfo.timestamp,
40
+ chunkSize,
41
+ skipCache,
42
+ };
43
+ logTracker("buildTrackingContext: l2Block=%d timestamp=%d", context.l2BlockNumber, context.timestamp);
44
+ if (l1Provider) {
45
+ try {
46
+ const l1Block = await (0, timing_1.getL1BlockNumberFromL2)(l2Provider);
47
+ context.l1BlockNumber = l1Block.toNumber();
48
+ logTracker("buildTrackingContext: l1Block=%d", context.l1BlockNumber);
49
+ }
50
+ catch (err) {
51
+ logTracker("buildTrackingContext: failed to get L1 block: %s", err.message);
52
+ }
53
+ }
54
+ if (novaProvider) {
55
+ try {
56
+ const novaBlockInfo = await (0, timing_1.getCurrentBlockInfo)(novaProvider);
57
+ context.novaBlockNumber = novaBlockInfo.blockNumber;
58
+ logTracker("buildTrackingContext: novaBlock=%d", context.novaBlockNumber);
59
+ }
60
+ catch (err) {
61
+ logTracker("buildTrackingContext: failed to get Nova block: %s", err.message);
62
+ }
63
+ }
64
+ return context;
65
+ }
28
66
  // Import context and pipeline from tracker modules
29
67
  const state_1 = require("./tracker/state");
30
68
  const pipeline_1 = require("./tracker/pipeline");
@@ -118,6 +156,15 @@ class ProposalStageTracker {
118
156
  static async readCacheStatus(cachePath) {
119
157
  return (0, cache_1.readCacheStatus)(cachePath);
120
158
  }
159
+ /**
160
+ * Clear a specific cache entry. Used by --force to ensure fresh tracking.
161
+ */
162
+ async clearCacheEntry(key) {
163
+ if (this.cache) {
164
+ await this.cache.delete(key);
165
+ logTracker("cleared cache entry: %s", key);
166
+ }
167
+ }
121
168
  // Watermark Management
122
169
  /**
123
170
  * Load discovery watermarks from cache.
@@ -131,9 +178,84 @@ class ProposalStageTracker {
131
178
  * Save discovery watermarks to cache.
132
179
  * Watermarks are stored as TrackingCheckpoint with proper metadata,
133
180
  * following the same pattern as proposal/timelock checkpoints.
181
+ *
182
+ * @param watermarks - Block numbers per discovery key
183
+ * @param hashes - Block hashes per discovery key (for reorg detection)
134
184
  */
135
- async saveWatermarks(watermarks) {
136
- return (0, discovery_1.saveWatermarks)(watermarks, this.cache);
185
+ async saveWatermarks(watermarks, hashes = {}) {
186
+ return (0, discovery_1.saveWatermarks)(watermarks, hashes, this.cache);
187
+ }
188
+ /**
189
+ * Save an election checkpoint to cache.
190
+ * Elections are stored with key format: `election:{electionIndex}`
191
+ *
192
+ * For COMPLETED elections, automatically fetches and caches nominee/member
193
+ * election details to enable zero-RPC reads for historical elections.
194
+ *
195
+ * @param electionStatus - Election status from trackElectionProposal
196
+ * @param options.nomineeDetails - Pre-fetched nominee details (skips RPC fetch)
197
+ * @param options.memberDetails - Pre-fetched member details (skips RPC fetch)
198
+ */
199
+ async saveElectionCheckpoint(electionStatus, options = {}) {
200
+ if (!this.cache)
201
+ return;
202
+ const key = `election:${electionStatus.electionIndex}`;
203
+ const now = Date.now();
204
+ let nomineeDetails = options.nomineeDetails;
205
+ let memberDetails = options.memberDetails;
206
+ // For COMPLETED elections, fetch details if not provided
207
+ if (electionStatus.phase === "COMPLETED" && !nomineeDetails && !memberDetails) {
208
+ try {
209
+ const [rawNomineeDetails, rawMemberDetails] = await Promise.all([
210
+ (0, election_1.getNomineeElectionDetails)(electionStatus.electionIndex, this.l2Provider),
211
+ (0, election_1.getMemberElectionDetails)(electionStatus.electionIndex, this.l2Provider),
212
+ ]);
213
+ if (rawNomineeDetails) {
214
+ nomineeDetails = (0, election_1.serializeNomineeDetails)(rawNomineeDetails);
215
+ }
216
+ if (rawMemberDetails) {
217
+ memberDetails = (0, election_1.serializeMemberDetails)(rawMemberDetails);
218
+ }
219
+ logTracker("fetched election %d details: nominees=%d, members=%d", electionStatus.electionIndex, nomineeDetails?.nominees?.length ?? 0, memberDetails?.nominees?.length ?? 0);
220
+ }
221
+ catch (err) {
222
+ logTracker("failed to fetch election %d details (non-fatal): %s", electionStatus.electionIndex, err.message);
223
+ }
224
+ }
225
+ await this.cache.set(key, {
226
+ version: 1,
227
+ createdAt: now,
228
+ input: { type: "election", electionIndex: electionStatus.electionIndex },
229
+ lastProcessedStage: null,
230
+ lastProcessedBlock: { l1: 0, l2: 0 },
231
+ cachedData: { electionStatus, nomineeDetails, memberDetails },
232
+ metadata: { errorCount: 0, lastTrackedAt: now },
233
+ });
234
+ logTracker("saved election checkpoint: %s (phase: %s)", key, electionStatus.phase);
235
+ }
236
+ /**
237
+ * Get an election checkpoint from cache.
238
+ *
239
+ * For COMPLETED elections, includes cached nominee/member details:
240
+ * - nomineeDetails: Contenders, nominees, excluded nominees, quorum threshold
241
+ * - memberDetails: Final nominee rankings, winners, voting deadlines
242
+ *
243
+ * @param electionIndex - Election index
244
+ * @returns Election data or null if not cached
245
+ */
246
+ async getElectionCheckpoint(electionIndex) {
247
+ if (!this.cache)
248
+ return null;
249
+ const key = `election:${electionIndex}`;
250
+ const checkpoint = await this.cache.get(key);
251
+ if (!checkpoint?.cachedData?.electionStatus) {
252
+ return null;
253
+ }
254
+ return {
255
+ status: checkpoint.cachedData.electionStatus,
256
+ nomineeDetails: checkpoint.cachedData.nomineeDetails ?? null,
257
+ memberDetails: checkpoint.cachedData.memberDetails ?? null,
258
+ };
137
259
  }
138
260
  // Discovery API
139
261
  /**
@@ -162,9 +284,10 @@ class ProposalStageTracker {
162
284
  * Discover all proposals and timelock operations with auto-watermark management.
163
285
  *
164
286
  * This is the unified discovery API that handles everything internally:
287
+ * - Verifies watermark hashes to detect chain reorgs (rolls back if mismatch)
165
288
  * - Loads watermarks from cache (or uses provided fromWatermarks)
166
289
  * - Discovers from all enabled targets in parallel
167
- * - Auto-saves updated watermarks to cache
290
+ * - Auto-saves updated watermarks and hashes to cache
168
291
  *
169
292
  * @param targets - Which governors/timelocks to scan
170
293
  * @param toBlock - End block for discovery
@@ -172,11 +295,13 @@ class ProposalStageTracker {
172
295
  * @returns Discovered proposals, timelock ops, and updated watermarks
173
296
  */
174
297
  async discoverAll(targets, toBlock, fromWatermarks) {
175
- // Load watermarks from cache (or use provided override)
176
- const watermarks = fromWatermarks ?? (await this.loadWatermarks());
177
- const result = await (0, discovery_2.discoverAll)(targets, toBlock, this.l2Provider, this.cache, watermarks, { chunkSize: this.chunkingConfig.l2ChunkSize });
178
- // Auto-save updated watermarks
179
- await this.saveWatermarks(result.watermarks);
298
+ // Load watermarks and hashes from cache (or use provided override)
299
+ const loaded = await this.loadWatermarks();
300
+ const watermarks = fromWatermarks ?? loaded.watermarks;
301
+ const hashes = fromWatermarks ? {} : loaded.hashes; // Only use cached hashes if using cached watermarks
302
+ const result = await (0, discovery_2.discoverAll)(targets, toBlock, this.l2Provider, this.cache, watermarks, hashes, { chunkSize: this.chunkingConfig.l2ChunkSize });
303
+ // Auto-save updated watermarks and hashes
304
+ await this.saveWatermarks(result.watermarks, result.hashes);
180
305
  return result;
181
306
  }
182
307
  // Checkpoint Query API
@@ -240,7 +365,7 @@ class ProposalStageTracker {
240
365
  async trackByTxHash(txHash) {
241
366
  logTracker("trackByTxHash %s", txHash);
242
367
  // Cache key for this transaction
243
- const cacheKey = (0, cache_1.txHashCacheKey)(txHash);
368
+ const cacheKey = (0, checkpoint_helpers_1.txHashCacheKey)(txHash);
244
369
  // Load checkpoint from cache for resume
245
370
  let checkpoint;
246
371
  if (this.cache) {
@@ -263,8 +388,8 @@ class ProposalStageTracker {
263
388
  creationTxHash: txHash,
264
389
  };
265
390
  const prevErrorCount = checkpoint?.metadata?.errorCount ?? 0;
391
+ const newErrorCount = (0, checkpoint_helpers_1.incrementErrorCount)(prevErrorCount, error);
266
392
  const isGasError = (0, rpc_utils_1.isGasEstimationError)(error);
267
- const newErrorCount = isGasError ? prevErrorCount : prevErrorCount + 1;
268
393
  const errorCheckpoint = checkpoint ?? {
269
394
  version: 1,
270
395
  createdAt: Date.now(),
@@ -273,7 +398,7 @@ class ProposalStageTracker {
273
398
  lastProcessedBlock: { l1: 0, l2: 0 },
274
399
  cachedData: {},
275
400
  };
276
- errorCheckpoint.metadata = { errorCount: newErrorCount, lastTrackedAt: Date.now() };
401
+ errorCheckpoint.metadata = (0, checkpoint_helpers_1.createCheckpointMetadata)(newErrorCount);
277
402
  await this.cache.set(cacheKey, errorCheckpoint);
278
403
  logTracker("saved checkpoint on error: %s (errorCount=%d%s)", cacheKey, newErrorCount, isGasError ? " - gas error, not incrementing" : "");
279
404
  }
@@ -353,7 +478,23 @@ class ProposalStageTracker {
353
478
  const finalState = await (0, pipeline_1.trackGovernorPipeline)(initialState);
354
479
  // Build result from state
355
480
  const result = this.buildResultFromState(finalState);
356
- // Save checkpoint to cache
481
+ // Track election status if this is an election governor proposal
482
+ if (result.isElection) {
483
+ const electionStatus = await this.trackElectionStatus(proposalId);
484
+ if (electionStatus) {
485
+ result.electionStatus = electionStatus;
486
+ await this.saveElectionCheckpoint(electionStatus);
487
+ // Elections are fully tracked via election checkpoints, remove tx:* checkpoint
488
+ if (this.cache && cacheKey) {
489
+ await this.cache.delete(cacheKey);
490
+ logTracker("election tracked via election checkpoint, removed tx:* checkpoint: %s", cacheKey);
491
+ }
492
+ return result;
493
+ }
494
+ // If election tracking failed, fall through to save tx:* checkpoint for retry
495
+ logTracker("election tracking failed, saving tx:* checkpoint for retry");
496
+ }
497
+ // Save checkpoint to cache (non-elections and failed election tracking)
357
498
  if (this.cache && cacheKey) {
358
499
  result.checkpoint.metadata = { errorCount: 0, lastTrackedAt: Date.now() };
359
500
  await this.cache.set(cacheKey, result.checkpoint);
@@ -517,6 +658,154 @@ class ProposalStageTracker {
517
658
  nova: this.novaProvider,
518
659
  };
519
660
  }
661
+ // Election Tracking
662
+ /**
663
+ * Track election status for a given proposal ID.
664
+ *
665
+ * Searches through elections to find the one containing this proposal,
666
+ * then tracks the full election lifecycle.
667
+ */
668
+ async trackElectionStatus(proposalId) {
669
+ logTracker("trackElectionStatus for proposal %s", proposalId);
670
+ try {
671
+ // Get current L2 block for block-scoped caching
672
+ const { blockNumber: l2BlockNumber } = await (0, timing_1.getCurrentBlockInfo)(this.l2Provider);
673
+ const electionIndex = await (0, election_1.getElectionIndexForProposalId)(proposalId, this.l2Provider, this.l1Provider, { novaProvider: this.novaProvider, blockNumber: l2BlockNumber });
674
+ if (electionIndex === null) {
675
+ logTracker("no election found for proposal %s", proposalId);
676
+ return null;
677
+ }
678
+ logTracker("found election index %d for proposal %s", electionIndex, proposalId);
679
+ return (0, election_1.trackElectionProposal)(electionIndex, this.l2Provider, this.l1Provider, {
680
+ novaProvider: this.novaProvider,
681
+ });
682
+ }
683
+ catch (error) {
684
+ // Election tracking is non-critical - log and return null
685
+ // The proposal stages are already tracked successfully
686
+ logTracker("election tracking failed for proposal %s: %O", proposalId, error);
687
+ return null;
688
+ }
689
+ }
690
+ /**
691
+ * Track an election by its index.
692
+ *
693
+ * This method provides direct election tracking when you have the election index.
694
+ * For tracking via tx hash, use trackByTxHash() which auto-detects elections.
695
+ *
696
+ * Caching behavior:
697
+ * - COMPLETED elections: Returns cached data immediately (0 RPC calls)
698
+ * - Incomplete elections: Makes fresh RPC calls and updates cache
699
+ * - No cache: Always makes fresh RPC calls
700
+ *
701
+ * @param electionIndex - Election index (0-based)
702
+ * @param options.force - Force fresh tracking even for completed elections
703
+ * @returns Election status
704
+ */
705
+ async trackElection(electionIndex, options = {}) {
706
+ logTracker("trackElection for index %d (force=%s)", electionIndex, options.force ?? false);
707
+ // Check cache first for completed elections (skip RPC calls)
708
+ if (this.cache && !options.force) {
709
+ const cached = await this.getElectionCheckpoint(electionIndex);
710
+ if (cached && cached.status.phase === "COMPLETED") {
711
+ logTracker("returning cached COMPLETED election %d (0 RPC calls)", electionIndex);
712
+ return cached.status;
713
+ }
714
+ }
715
+ // Build full tracking context for consistent state across all calls
716
+ const context = await buildTrackingContext({
717
+ l2Provider: this.l2Provider,
718
+ l1Provider: this.l1Provider,
719
+ novaProvider: this.novaProvider,
720
+ skipCache: options.force,
721
+ });
722
+ // Track fresh for incomplete elections or cache miss
723
+ const status = await (0, election_1.trackElectionProposal)(electionIndex, this.l2Provider, this.l1Provider, {
724
+ novaProvider: this.novaProvider,
725
+ l2BlockNumber: context.l2BlockNumber,
726
+ timestamp: context.timestamp,
727
+ skipCache: context.skipCache,
728
+ });
729
+ if (this.cache) {
730
+ await this.saveElectionCheckpoint(status);
731
+ }
732
+ return status;
733
+ }
734
+ /**
735
+ * Track all elections with caching.
736
+ *
737
+ * Caching behavior:
738
+ * - COMPLETED elections: Returns cached data immediately (0 RPC calls)
739
+ * - Incomplete elections: Makes fresh RPC calls and updates cache
740
+ *
741
+ * @param options.includeNext - Include the "next" election slot (default: true)
742
+ * @param options.force - Force fresh tracking for all elections
743
+ * @returns Array of election statuses
744
+ */
745
+ async trackAllElections(options = {}) {
746
+ logTracker("trackAllElections (includeNext=%s, force=%s)", options.includeNext ?? true, options.force ?? false);
747
+ // Build context once at the start for consistent state across all elections
748
+ const context = await buildTrackingContext({
749
+ l2Provider: this.l2Provider,
750
+ l1Provider: this.l1Provider,
751
+ novaProvider: this.novaProvider,
752
+ skipCache: options.force,
753
+ });
754
+ const status = await (0, election_1.checkElectionStatus)(this.l2Provider, this.l1Provider);
755
+ const electionCount = status.electionCount;
756
+ const results = [];
757
+ // Track existing elections (indices 0 to electionCount-1)
758
+ for (let i = 0; i < electionCount; i++) {
759
+ try {
760
+ // Check cache first for completed elections (skip RPC calls)
761
+ if (this.cache && !options.force) {
762
+ const cached = await this.getElectionCheckpoint(i);
763
+ if (cached && cached.status.phase === "COMPLETED") {
764
+ logTracker("returning cached COMPLETED election %d (0 RPC calls)", i);
765
+ results.push(cached.status);
766
+ continue;
767
+ }
768
+ }
769
+ // Track with shared context
770
+ const electionStatus = await (0, election_1.trackElectionProposal)(i, this.l2Provider, this.l1Provider, {
771
+ novaProvider: this.novaProvider,
772
+ l2BlockNumber: context.l2BlockNumber,
773
+ timestamp: context.timestamp,
774
+ skipCache: context.skipCache,
775
+ });
776
+ results.push(electionStatus);
777
+ if (this.cache) {
778
+ await this.saveElectionCheckpoint(electionStatus);
779
+ }
780
+ }
781
+ catch (err) {
782
+ logTracker("Failed to track election %d: %s", i, err);
783
+ }
784
+ }
785
+ // Optionally track the next election (not yet created) for createElection preparation
786
+ if (options.includeNext ?? true) {
787
+ try {
788
+ // Next election always needs fresh RPC calls since it doesn't exist yet
789
+ const nextElectionStatus = await (0, election_1.trackElectionProposal)(electionCount, this.l2Provider, this.l1Provider, {
790
+ novaProvider: this.novaProvider,
791
+ l2BlockNumber: context.l2BlockNumber,
792
+ timestamp: context.timestamp,
793
+ });
794
+ results.push({
795
+ ...nextElectionStatus,
796
+ canCreateElection: status.canCreateElection,
797
+ secondsUntilElection: status.secondsUntilElection,
798
+ timeUntilElection: status.timeUntilElection,
799
+ });
800
+ // Don't cache the "next" election since it doesn't exist yet
801
+ }
802
+ catch (err) {
803
+ logTracker("Failed to track next election %d: %s", electionCount, err);
804
+ }
805
+ }
806
+ logTracker("Tracked %d elections", results.length);
807
+ return results;
808
+ }
520
809
  // Election Support
521
810
  /**
522
811
  * Check Security Council election status and prepare available actions
@@ -532,6 +821,7 @@ class ProposalStageTracker {
532
821
  status,
533
822
  canCreate: status.canCreateElection,
534
823
  canTriggerMember: false,
824
+ canExecuteMember: false,
535
825
  prepared: {},
536
826
  };
537
827
  if (status.canCreateElection) {
@@ -540,15 +830,23 @@ class ProposalStageTracker {
540
830
  }
541
831
  if (status.electionCount > 0) {
542
832
  const currentElectionIndex = status.electionCount - 1;
543
- const electionStatus = await (0, election_1.trackElectionProposal)(currentElectionIndex, this.l2Provider, this.l1Provider);
833
+ // Use cached tracking for the current election
834
+ const electionStatus = await this.trackElection(currentElectionIndex);
544
835
  result.currentElection = electionStatus;
545
836
  result.canTriggerMember = electionStatus.canProceedToMemberPhase;
837
+ result.canExecuteMember = electionStatus.canExecuteMember;
546
838
  if (electionStatus.canProceedToMemberPhase) {
547
839
  const memberTx = await (0, election_1.prepareMemberElectionTrigger)(electionStatus, this.l2Provider);
548
840
  if (memberTx) {
549
841
  result.prepared.triggerMember = memberTx;
550
842
  }
551
843
  }
844
+ if (electionStatus.canExecuteMember) {
845
+ const executeTx = await (0, election_1.prepareMemberElectionExecution)(electionStatus, this.l2Provider);
846
+ if (executeTx) {
847
+ result.prepared.executeMember = executeTx;
848
+ }
849
+ }
552
850
  }
553
851
  return result;
554
852
  }