@gzeoneth/gov-tracker 0.2.1-beta.b2eeb41 → 0.2.1-beta.d575294

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 (184) hide show
  1. package/README.md +81 -2
  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/cli/cli.js +265 -27
  7. package/dist/cli/cli.js.map +1 -1
  8. package/dist/cli/lib/cli.d.ts +48 -2
  9. package/dist/cli/lib/cli.d.ts.map +1 -1
  10. package/dist/cli/lib/cli.js +356 -63
  11. package/dist/cli/lib/cli.js.map +1 -1
  12. package/dist/cli/lib/json-state.d.ts +23 -0
  13. package/dist/cli/lib/json-state.d.ts.map +1 -1
  14. package/dist/cli/lib/json-state.js +51 -4
  15. package/dist/cli/lib/json-state.js.map +1 -1
  16. package/dist/constants.d.ts +39 -1
  17. package/dist/constants.d.ts.map +1 -1
  18. package/dist/constants.js +47 -2
  19. package/dist/constants.js.map +1 -1
  20. package/dist/data/bundled-cache.json +11061 -1460
  21. package/dist/deduplication.d.ts +132 -0
  22. package/dist/deduplication.d.ts.map +1 -0
  23. package/dist/deduplication.js +270 -0
  24. package/dist/deduplication.js.map +1 -0
  25. package/dist/discovery/governor-discovery.d.ts.map +1 -1
  26. package/dist/discovery/governor-discovery.js +50 -35
  27. package/dist/discovery/governor-discovery.js.map +1 -1
  28. package/dist/discovery/timelock-discovery.d.ts +15 -6
  29. package/dist/discovery/timelock-discovery.d.ts.map +1 -1
  30. package/dist/discovery/timelock-discovery.js +27 -11
  31. package/dist/discovery/timelock-discovery.js.map +1 -1
  32. package/dist/election/contracts.d.ts +8 -0
  33. package/dist/election/contracts.d.ts.map +1 -0
  34. package/dist/election/contracts.js +28 -0
  35. package/dist/election/contracts.js.map +1 -0
  36. package/dist/election/details.d.ts +15 -0
  37. package/dist/election/details.d.ts.map +1 -0
  38. package/dist/election/details.js +157 -0
  39. package/dist/election/details.js.map +1 -0
  40. package/dist/election/index.d.ts +11 -0
  41. package/dist/election/index.d.ts.map +1 -0
  42. package/dist/election/index.js +48 -0
  43. package/dist/election/index.js.map +1 -0
  44. package/dist/election/params.d.ts +13 -0
  45. package/dist/election/params.d.ts.map +1 -0
  46. package/dist/election/params.js +93 -0
  47. package/dist/election/params.js.map +1 -0
  48. package/dist/election/participants.d.ts +6 -0
  49. package/dist/election/participants.d.ts.map +1 -0
  50. package/dist/election/participants.js +104 -0
  51. package/dist/election/participants.js.map +1 -0
  52. package/dist/election/prepare.d.ts +10 -0
  53. package/dist/election/prepare.d.ts.map +1 -0
  54. package/dist/election/prepare.js +52 -0
  55. package/dist/election/prepare.js.map +1 -0
  56. package/dist/election/proposal-ids.d.ts +18 -0
  57. package/dist/election/proposal-ids.d.ts.map +1 -0
  58. package/dist/election/proposal-ids.js +77 -0
  59. package/dist/election/proposal-ids.js.map +1 -0
  60. package/dist/election/status.d.ts +15 -0
  61. package/dist/election/status.d.ts.map +1 -0
  62. package/dist/election/status.js +102 -0
  63. package/dist/election/status.js.map +1 -0
  64. package/dist/election/tracking.d.ts +28 -0
  65. package/dist/election/tracking.d.ts.map +1 -0
  66. package/dist/election/tracking.js +412 -0
  67. package/dist/election/tracking.js.map +1 -0
  68. package/dist/index.d.ts +9 -5
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +72 -8
  71. package/dist/index.js.map +1 -1
  72. package/dist/stages/builder.d.ts +4 -0
  73. package/dist/stages/builder.d.ts.map +1 -1
  74. package/dist/stages/builder.js +7 -0
  75. package/dist/stages/builder.js.map +1 -1
  76. package/dist/stages/l2-to-l1-message.d.ts +3 -1
  77. package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
  78. package/dist/stages/l2-to-l1-message.js +6 -6
  79. package/dist/stages/l2-to-l1-message.js.map +1 -1
  80. package/dist/stages/proposal-created.d.ts +1 -0
  81. package/dist/stages/proposal-created.d.ts.map +1 -1
  82. package/dist/stages/proposal-created.js +1 -0
  83. package/dist/stages/proposal-created.js.map +1 -1
  84. package/dist/stages/proposal-queued.d.ts +1 -0
  85. package/dist/stages/proposal-queued.d.ts.map +1 -1
  86. package/dist/stages/proposal-queued.js +3 -1
  87. package/dist/stages/proposal-queued.js.map +1 -1
  88. package/dist/stages/retryables.js +2 -2
  89. package/dist/stages/retryables.js.map +1 -1
  90. package/dist/stages/timelock.d.ts +3 -1
  91. package/dist/stages/timelock.d.ts.map +1 -1
  92. package/dist/stages/timelock.js +12 -12
  93. package/dist/stages/timelock.js.map +1 -1
  94. package/dist/stages/utils.d.ts +5 -9
  95. package/dist/stages/utils.d.ts.map +1 -1
  96. package/dist/stages/utils.js +34 -29
  97. package/dist/stages/utils.js.map +1 -1
  98. package/dist/stages/voting.d.ts.map +1 -1
  99. package/dist/stages/voting.js +5 -4
  100. package/dist/stages/voting.js.map +1 -1
  101. package/dist/tracker/cache.d.ts +10 -6
  102. package/dist/tracker/cache.d.ts.map +1 -1
  103. package/dist/tracker/cache.js +36 -13
  104. package/dist/tracker/cache.js.map +1 -1
  105. package/dist/tracker/checkpoint-helpers.d.ts +81 -0
  106. package/dist/tracker/checkpoint-helpers.d.ts.map +1 -0
  107. package/dist/tracker/checkpoint-helpers.js +201 -0
  108. package/dist/tracker/checkpoint-helpers.js.map +1 -0
  109. package/dist/tracker/discovery.d.ts +40 -9
  110. package/dist/tracker/discovery.d.ts.map +1 -1
  111. package/dist/tracker/discovery.js +152 -15
  112. package/dist/tracker/discovery.js.map +1 -1
  113. package/dist/tracker/execute.d.ts.map +1 -1
  114. package/dist/tracker/execute.js +1 -25
  115. package/dist/tracker/execute.js.map +1 -1
  116. package/dist/tracker/pipeline.d.ts.map +1 -1
  117. package/dist/tracker/pipeline.js +26 -11
  118. package/dist/tracker/pipeline.js.map +1 -1
  119. package/dist/tracker/query.d.ts +1 -0
  120. package/dist/tracker/query.d.ts.map +1 -1
  121. package/dist/tracker/query.js +14 -61
  122. package/dist/tracker/query.js.map +1 -1
  123. package/dist/tracker/state.d.ts +0 -10
  124. package/dist/tracker/state.d.ts.map +1 -1
  125. package/dist/tracker/state.js +1 -28
  126. package/dist/tracker/state.js.map +1 -1
  127. package/dist/tracker.d.ts +100 -8
  128. package/dist/tracker.d.ts.map +1 -1
  129. package/dist/tracker.js +405 -42
  130. package/dist/tracker.js.map +1 -1
  131. package/dist/types/config.d.ts +49 -0
  132. package/dist/types/config.d.ts.map +1 -1
  133. package/dist/types/core.d.ts +4 -2
  134. package/dist/types/core.d.ts.map +1 -1
  135. package/dist/types/election.d.ts +143 -0
  136. package/dist/types/election.d.ts.map +1 -1
  137. package/dist/types/index.d.ts +5 -7
  138. package/dist/types/index.d.ts.map +1 -1
  139. package/dist/types/index.js +2 -3
  140. package/dist/types/index.js.map +1 -1
  141. package/dist/types/stages.d.ts +72 -7
  142. package/dist/types/stages.d.ts.map +1 -1
  143. package/dist/types/stages.js.map +1 -1
  144. package/dist/types/tracking.d.ts +34 -8
  145. package/dist/types/tracking.d.ts.map +1 -1
  146. package/dist/utils/block-cache.d.ts +50 -0
  147. package/dist/utils/block-cache.d.ts.map +1 -0
  148. package/dist/utils/block-cache.js +80 -0
  149. package/dist/utils/block-cache.js.map +1 -0
  150. package/dist/utils/formatters.d.ts +91 -0
  151. package/dist/utils/formatters.d.ts.map +1 -0
  152. package/dist/utils/formatters.js +327 -0
  153. package/dist/utils/formatters.js.map +1 -0
  154. package/dist/utils/multicall.d.ts +52 -0
  155. package/dist/utils/multicall.d.ts.map +1 -0
  156. package/dist/utils/multicall.js +75 -0
  157. package/dist/utils/multicall.js.map +1 -0
  158. package/dist/utils/rpc-utils.d.ts +7 -1
  159. package/dist/utils/rpc-utils.d.ts.map +1 -1
  160. package/dist/utils/rpc-utils.js +42 -29
  161. package/dist/utils/rpc-utils.js.map +1 -1
  162. package/dist/utils/salt-computation.d.ts.map +1 -1
  163. package/dist/utils/salt-computation.js +33 -7
  164. package/dist/utils/salt-computation.js.map +1 -1
  165. package/dist/utils/sanitize.d.ts.map +1 -1
  166. package/dist/utils/sanitize.js +3 -0
  167. package/dist/utils/sanitize.js.map +1 -1
  168. package/dist/utils/stage-metadata.d.ts +0 -20
  169. package/dist/utils/stage-metadata.d.ts.map +1 -1
  170. package/dist/utils/stage-metadata.js +29 -44
  171. package/dist/utils/stage-metadata.js.map +1 -1
  172. package/dist/utils/timing.d.ts +13 -0
  173. package/dist/utils/timing.d.ts.map +1 -1
  174. package/dist/utils/timing.js +37 -1
  175. package/dist/utils/timing.js.map +1 -1
  176. package/package.json +3 -2
  177. package/dist/election.d.ts +0 -172
  178. package/dist/election.d.ts.map +0 -1
  179. package/dist/election.js +0 -467
  180. package/dist/election.js.map +0 -1
  181. package/dist/types/cross-chain.d.ts +0 -24
  182. package/dist/types/cross-chain.d.ts.map +0 -1
  183. package/dist/types/cross-chain.js +0 -6
  184. package/dist/types/cross-chain.js.map +0 -1
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Checkpoint Deduplication Helpers
3
+ *
4
+ * Both regular governance proposals and Security Council elections can create
5
+ * "child" timelock operations that get tracked separately. This module provides
6
+ * utilities to identify, link, and filter these relationships.
7
+ *
8
+ * ## How Duplication Occurs
9
+ *
10
+ * **Proposals:**
11
+ * 1. Proposal is tracked with key `tx:{creation_hash}`
12
+ * 2. Proposal queues to L2 timelock → creates child timelock operation
13
+ * 3. If L2 timelock op is discovered separately, it gets key `tx:{schedule_hash}`
14
+ *
15
+ * **Elections:**
16
+ * 1. Election is tracked with key `election:{index}`
17
+ * 2. Member election execute → SecurityCouncilManager.replaceCohort()
18
+ * 3. This schedules to L2 Constitutional timelock → creates child timelock op
19
+ * 4. If discovered separately, gets key `tx:{schedule_hash}`
20
+ *
21
+ * ## Deduplication Strategy
22
+ *
23
+ * Child checkpoints have `metadata.sourceCheckpoint` set to their parent key.
24
+ * Use `filterChildCheckpoints()` to exclude children when listing all tracked items.
25
+ *
26
+ * @module deduplication
27
+ */
28
+ import { TrackingCheckpoint, TrackingResult, CacheAdapter } from "./types";
29
+ /**
30
+ * Check if a timelock operation calldata involves Security Council management
31
+ *
32
+ * @param operationData - Calldata of the timelock operation
33
+ * @returns True if this likely originated from an election
34
+ */
35
+ export declare function isSecurityCouncilTimelockOp(operationData: string): boolean;
36
+ /**
37
+ * Link a child checkpoint to its parent
38
+ *
39
+ * Updates the child checkpoint's metadata to reference its parent.
40
+ * This enables filtering out child checkpoints when displaying tracked items.
41
+ *
42
+ * @param childKey - Cache key for the child checkpoint (e.g., "tx:0x...")
43
+ * @param parentKey - Cache key for the parent (e.g., "election:5" or "tx:0x...")
44
+ * @param cache - Cache adapter to update
45
+ */
46
+ export declare function linkCheckpointToChild(childKey: string, parentKey: string, cache: CacheAdapter): Promise<void>;
47
+ /**
48
+ * Get the parent checkpoint key for a child, if it exists
49
+ *
50
+ * @param childKey - Cache key to check
51
+ * @param cache - Cache adapter to read from
52
+ * @returns Parent key or null if not a child
53
+ */
54
+ export declare function getParentCheckpoint(childKey: string, cache: CacheAdapter): Promise<string | null>;
55
+ /**
56
+ * Check if a checkpoint is a child of another checkpoint
57
+ *
58
+ * @param key - Cache key to check
59
+ * @param cache - Cache adapter to read from
60
+ * @returns True if this checkpoint has a parent
61
+ */
62
+ export declare function isChildCheckpoint(key: string, cache: CacheAdapter): Promise<boolean>;
63
+ /**
64
+ * Filter out child checkpoints from tracking results
65
+ *
66
+ * Use this when displaying tracked items to avoid showing duplicates.
67
+ * Children are operations that were spawned by a parent proposal/election.
68
+ *
69
+ * @param results - Array of tracking results to filter
70
+ * @returns Results with child checkpoints removed
71
+ */
72
+ export declare function filterChildCheckpoints(results: TrackingResult[]): TrackingResult[];
73
+ /**
74
+ * Get all child checkpoints and their parents
75
+ *
76
+ * @param cache - Cache adapter to read from
77
+ * @returns Map of child key to parent key
78
+ */
79
+ export declare function getChildToParentMap(cache: CacheAdapter): Promise<Map<string, string>>;
80
+ /**
81
+ * Get all children for a given parent checkpoint
82
+ *
83
+ * @param parentKey - The parent checkpoint key
84
+ * @param cache - Cache adapter to read from
85
+ * @returns Array of child checkpoint keys
86
+ */
87
+ export declare function getChildCheckpoints(parentKey: string, cache: CacheAdapter): Promise<string[]>;
88
+ /**
89
+ * Deduplication statistics
90
+ */
91
+ export interface DeduplicationStats {
92
+ /** Total checkpoints (excluding watermarks) */
93
+ totalCheckpoints: number;
94
+ /** Root checkpoints (no parent) */
95
+ rootCheckpoints: number;
96
+ /** Child checkpoints (have a parent) */
97
+ childCheckpoints: number;
98
+ /** Breakdown by parent type */
99
+ parentTypes: {
100
+ /** Children of election checkpoints */
101
+ fromElections: number;
102
+ /** Children of proposal/timelock checkpoints */
103
+ fromProposals: number;
104
+ };
105
+ }
106
+ /**
107
+ * Get deduplication statistics for the cache
108
+ *
109
+ * @param cache - Cache adapter to analyze
110
+ * @returns Statistics about checkpoint relationships
111
+ */
112
+ export declare function getDeduplicationStats(cache: CacheAdapter): Promise<DeduplicationStats>;
113
+ /**
114
+ * Find potential parent for a timelock checkpoint
115
+ *
116
+ * Searches for elections or proposals that may have created this timelock operation.
117
+ *
118
+ * @param timelockCheckpoint - The timelock checkpoint to find a parent for
119
+ * @param cache - Cache adapter to search
120
+ * @returns Parent key or null if no parent found
121
+ */
122
+ export declare function findPotentialParent(timelockCheckpoint: TrackingCheckpoint, cache: CacheAdapter): Promise<string | null>;
123
+ /**
124
+ * Auto-link orphaned timelock checkpoints to their parents
125
+ *
126
+ * Scans for timelock checkpoints without parents and attempts to find and link them.
127
+ *
128
+ * @param cache - Cache adapter to update
129
+ * @returns Number of newly linked checkpoints
130
+ */
131
+ export declare function autoLinkOrphanedCheckpoints(cache: CacheAdapter): Promise<number>;
132
+ //# sourceMappingURL=deduplication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deduplication.d.ts","sourceRoot":"","sources":["../src/deduplication.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAyB3E;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAI1E;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAG1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAElF;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAY3F;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAYnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,WAAW,EAAE;QACX,uCAAuC;QACvC,aAAa,EAAE,MAAM,CAAC;QACtB,gDAAgD;QAChD,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoC5F;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,kBAAkB,EAAE,kBAAkB,EACtC,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiCxB;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BtF"}
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ /**
3
+ * Checkpoint Deduplication Helpers
4
+ *
5
+ * Both regular governance proposals and Security Council elections can create
6
+ * "child" timelock operations that get tracked separately. This module provides
7
+ * utilities to identify, link, and filter these relationships.
8
+ *
9
+ * ## How Duplication Occurs
10
+ *
11
+ * **Proposals:**
12
+ * 1. Proposal is tracked with key `tx:{creation_hash}`
13
+ * 2. Proposal queues to L2 timelock → creates child timelock operation
14
+ * 3. If L2 timelock op is discovered separately, it gets key `tx:{schedule_hash}`
15
+ *
16
+ * **Elections:**
17
+ * 1. Election is tracked with key `election:{index}`
18
+ * 2. Member election execute → SecurityCouncilManager.replaceCohort()
19
+ * 3. This schedules to L2 Constitutional timelock → creates child timelock op
20
+ * 4. If discovered separately, gets key `tx:{schedule_hash}`
21
+ *
22
+ * ## Deduplication Strategy
23
+ *
24
+ * Child checkpoints have `metadata.sourceCheckpoint` set to their parent key.
25
+ * Use `filterChildCheckpoints()` to exclude children when listing all tracked items.
26
+ *
27
+ * @module deduplication
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.isSecurityCouncilTimelockOp = isSecurityCouncilTimelockOp;
31
+ exports.linkCheckpointToChild = linkCheckpointToChild;
32
+ exports.getParentCheckpoint = getParentCheckpoint;
33
+ exports.isChildCheckpoint = isChildCheckpoint;
34
+ exports.filterChildCheckpoints = filterChildCheckpoints;
35
+ exports.getChildToParentMap = getChildToParentMap;
36
+ exports.getChildCheckpoints = getChildCheckpoints;
37
+ exports.getDeduplicationStats = getDeduplicationStats;
38
+ exports.findPotentialParent = findPotentialParent;
39
+ exports.autoLinkOrphanedCheckpoints = autoLinkOrphanedCheckpoints;
40
+ const constants_1 = require("./constants");
41
+ const logger_1 = require("./utils/logger");
42
+ const log = logger_1.loggers.tracker;
43
+ /** Helper to get cache keys as array (handles sync and async returns) */
44
+ async function getCacheKeysAsync(cache) {
45
+ if (typeof cache.keys !== "function")
46
+ return [];
47
+ const result = cache.keys();
48
+ // Handle Promise<string[]>
49
+ if (result instanceof Promise) {
50
+ return result;
51
+ }
52
+ // Handle IterableIterator<string> or string[]
53
+ if (Symbol.iterator in Object(result)) {
54
+ return [...result];
55
+ }
56
+ return [];
57
+ }
58
+ /**
59
+ * Check if a timelock operation calldata involves Security Council management
60
+ *
61
+ * @param operationData - Calldata of the timelock operation
62
+ * @returns True if this likely originated from an election
63
+ */
64
+ function isSecurityCouncilTimelockOp(operationData) {
65
+ const scManagerAddress = constants_1.ADDRESSES.SECURITY_COUNCIL_MANAGER?.toLowerCase();
66
+ if (!scManagerAddress)
67
+ return false;
68
+ return operationData.toLowerCase().includes(scManagerAddress.slice(2));
69
+ }
70
+ /**
71
+ * Link a child checkpoint to its parent
72
+ *
73
+ * Updates the child checkpoint's metadata to reference its parent.
74
+ * This enables filtering out child checkpoints when displaying tracked items.
75
+ *
76
+ * @param childKey - Cache key for the child checkpoint (e.g., "tx:0x...")
77
+ * @param parentKey - Cache key for the parent (e.g., "election:5" or "tx:0x...")
78
+ * @param cache - Cache adapter to update
79
+ */
80
+ async function linkCheckpointToChild(childKey, parentKey, cache) {
81
+ const checkpoint = await cache.get(childKey);
82
+ if (!checkpoint) {
83
+ log("Cannot link - child checkpoint %s not found", childKey);
84
+ return;
85
+ }
86
+ // Initialize metadata if not present, then set sourceCheckpoint
87
+ checkpoint.metadata = checkpoint.metadata ?? { errorCount: 0, lastTrackedAt: Date.now() };
88
+ checkpoint.metadata.sourceCheckpoint = parentKey;
89
+ await cache.set(childKey, checkpoint);
90
+ log("Linked %s as child of %s", childKey, parentKey);
91
+ }
92
+ /**
93
+ * Get the parent checkpoint key for a child, if it exists
94
+ *
95
+ * @param childKey - Cache key to check
96
+ * @param cache - Cache adapter to read from
97
+ * @returns Parent key or null if not a child
98
+ */
99
+ async function getParentCheckpoint(childKey, cache) {
100
+ const checkpoint = await cache.get(childKey);
101
+ return checkpoint?.metadata?.sourceCheckpoint ?? null;
102
+ }
103
+ /**
104
+ * Check if a checkpoint is a child of another checkpoint
105
+ *
106
+ * @param key - Cache key to check
107
+ * @param cache - Cache adapter to read from
108
+ * @returns True if this checkpoint has a parent
109
+ */
110
+ async function isChildCheckpoint(key, cache) {
111
+ const parent = await getParentCheckpoint(key, cache);
112
+ return parent !== null;
113
+ }
114
+ /**
115
+ * Filter out child checkpoints from tracking results
116
+ *
117
+ * Use this when displaying tracked items to avoid showing duplicates.
118
+ * Children are operations that were spawned by a parent proposal/election.
119
+ *
120
+ * @param results - Array of tracking results to filter
121
+ * @returns Results with child checkpoints removed
122
+ */
123
+ function filterChildCheckpoints(results) {
124
+ return results.filter((r) => r.checkpoint.metadata?.sourceCheckpoint === undefined);
125
+ }
126
+ /**
127
+ * Get all child checkpoints and their parents
128
+ *
129
+ * @param cache - Cache adapter to read from
130
+ * @returns Map of child key to parent key
131
+ */
132
+ async function getChildToParentMap(cache) {
133
+ const result = new Map();
134
+ const keys = await getCacheKeysAsync(cache);
135
+ for (const key of keys) {
136
+ const checkpoint = await cache.get(key);
137
+ if (checkpoint?.metadata?.sourceCheckpoint) {
138
+ result.set(key, checkpoint.metadata.sourceCheckpoint);
139
+ }
140
+ }
141
+ return result;
142
+ }
143
+ /**
144
+ * Get all children for a given parent checkpoint
145
+ *
146
+ * @param parentKey - The parent checkpoint key
147
+ * @param cache - Cache adapter to read from
148
+ * @returns Array of child checkpoint keys
149
+ */
150
+ async function getChildCheckpoints(parentKey, cache) {
151
+ const children = [];
152
+ const keys = await getCacheKeysAsync(cache);
153
+ for (const key of keys) {
154
+ const checkpoint = await cache.get(key);
155
+ if (checkpoint?.metadata?.sourceCheckpoint === parentKey) {
156
+ children.push(key);
157
+ }
158
+ }
159
+ return children;
160
+ }
161
+ /**
162
+ * Get deduplication statistics for the cache
163
+ *
164
+ * @param cache - Cache adapter to analyze
165
+ * @returns Statistics about checkpoint relationships
166
+ */
167
+ async function getDeduplicationStats(cache) {
168
+ const keys = await getCacheKeysAsync(cache);
169
+ let totalCheckpoints = 0;
170
+ let childCheckpoints = 0;
171
+ let fromElections = 0;
172
+ let fromProposals = 0;
173
+ for (const key of keys) {
174
+ // Skip watermarks
175
+ if (key === "discovery:watermarks")
176
+ continue;
177
+ totalCheckpoints++;
178
+ const checkpoint = await cache.get(key);
179
+ const source = checkpoint?.metadata?.sourceCheckpoint;
180
+ if (source) {
181
+ childCheckpoints++;
182
+ if (source.startsWith("election:")) {
183
+ fromElections++;
184
+ }
185
+ else {
186
+ fromProposals++;
187
+ }
188
+ }
189
+ }
190
+ return {
191
+ totalCheckpoints,
192
+ rootCheckpoints: totalCheckpoints - childCheckpoints,
193
+ childCheckpoints,
194
+ parentTypes: {
195
+ fromElections,
196
+ fromProposals,
197
+ },
198
+ };
199
+ }
200
+ /**
201
+ * Find potential parent for a timelock checkpoint
202
+ *
203
+ * Searches for elections or proposals that may have created this timelock operation.
204
+ *
205
+ * @param timelockCheckpoint - The timelock checkpoint to find a parent for
206
+ * @param cache - Cache adapter to search
207
+ * @returns Parent key or null if no parent found
208
+ */
209
+ async function findPotentialParent(timelockCheckpoint, cache) {
210
+ if (timelockCheckpoint.input.type !== "timelock")
211
+ return null;
212
+ const keys = await getCacheKeysAsync(cache);
213
+ const timelockAddr = timelockCheckpoint.input.timelockAddress?.toLowerCase();
214
+ // Check if it's from L2 Constitutional timelock (elections schedule here)
215
+ const isL2ConstitutionalTimelock = timelockAddr === constants_1.ADDRESSES.L2_CONSTITUTIONAL_TIMELOCK?.toLowerCase();
216
+ if (isL2ConstitutionalTimelock) {
217
+ // Search completed elections that might have created this
218
+ for (const key of keys) {
219
+ if (!key.startsWith("election:"))
220
+ continue;
221
+ const electionCheckpoint = await cache.get(key);
222
+ const status = electionCheckpoint?.cachedData?.electionStatus;
223
+ // Completed elections with executed member proposals create timelock ops
224
+ if (status?.phase === "COMPLETED" && status.memberProposalId) {
225
+ // This election completed and may have created this timelock op
226
+ // Without more detailed tracking of the execution tx, we can't be 100% sure
227
+ // but this is a reasonable heuristic
228
+ return key;
229
+ }
230
+ }
231
+ }
232
+ // For non-constitutional timelocks or if no election found, search proposals
233
+ // This would require more complex tracking of proposal execution
234
+ // For now, return null and let the user manually link if needed
235
+ return null;
236
+ }
237
+ /**
238
+ * Auto-link orphaned timelock checkpoints to their parents
239
+ *
240
+ * Scans for timelock checkpoints without parents and attempts to find and link them.
241
+ *
242
+ * @param cache - Cache adapter to update
243
+ * @returns Number of newly linked checkpoints
244
+ */
245
+ async function autoLinkOrphanedCheckpoints(cache) {
246
+ const keys = await getCacheKeysAsync(cache);
247
+ let linkedCount = 0;
248
+ for (const key of keys) {
249
+ if (!key.startsWith("tx:"))
250
+ continue;
251
+ const checkpoint = await cache.get(key);
252
+ if (!checkpoint)
253
+ continue;
254
+ // Skip if already linked
255
+ if (checkpoint.metadata?.sourceCheckpoint)
256
+ continue;
257
+ // Skip if not a timelock checkpoint
258
+ if (checkpoint.input.type !== "timelock")
259
+ continue;
260
+ // Try to find a parent
261
+ const parentKey = await findPotentialParent(checkpoint, cache);
262
+ if (parentKey) {
263
+ await linkCheckpointToChild(key, parentKey, cache);
264
+ linkedCount++;
265
+ }
266
+ }
267
+ log("Auto-linked %d orphaned checkpoints", linkedCount);
268
+ return linkedCount;
269
+ }
270
+ //# sourceMappingURL=deduplication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deduplication.js","sourceRoot":"","sources":["../src/deduplication.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"governor-discovery.d.ts","sourceRoot":"","sources":["../../src/discovery/governor-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"governor-discovery.d.ts","sourceRoot":"","sources":["../../src/discovery/governor-discovery.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ const rpc_utils_1 = require("../utils/rpc-utils");
26
26
  const timing_1 = require("../utils/timing");
27
27
  const abis_1 = require("../abis");
28
28
  const election_1 = require("../election");
29
+ const multicall_1 = require("../utils/multicall");
29
30
  const chain_1 = require("../utils/chain");
30
31
  const sanitize_1 = require("../utils/sanitize");
31
32
  /**
@@ -56,7 +57,7 @@ function isElectionProposal(proposalType) {
56
57
  async function hasTimelock(governorAddress, provider) {
57
58
  const governor = new ethers_1.ethers.Contract(governorAddress, abis_1.GOVERNOR_ABI, provider);
58
59
  try {
59
- await governor.timelock();
60
+ await (0, rpc_utils_1.queryWithRetry)(() => governor.timelock());
60
61
  return true;
61
62
  }
62
63
  catch {
@@ -147,7 +148,7 @@ async function findProposalCreatedEvent(governorAddress, proposalId, provider, h
147
148
  const reverseDirection = hint?.direction === "backward" || !hint?.direction;
148
149
  // Note: ProposalCreated event does NOT have indexed proposalId
149
150
  // We filter by event topic only and use predicate for exact matching
150
- return (0, log_search_1.findAndParseEvent)(provider, { address: governorAddress, topics: [constants_1.EVENT_TOPICS.PROPOSAL_CREATED], fromBlock, toBlock }, (l) => parseProposalCreatedEvent(l)?.proposalId === proposalId, parseProposalCreatedEvent, { chunkSize: 10000000, reverseDirection });
151
+ return (0, log_search_1.findAndParseEvent)(provider, { address: governorAddress, topics: [constants_1.EVENT_TOPICS.PROPOSAL_CREATED], fromBlock, toBlock }, (l) => parseProposalCreatedEvent(l)?.proposalId === proposalId, parseProposalCreatedEvent, { chunkSize: hint?.chunkSize ?? constants_1.CHUNK_SIZES.L2, reverseDirection });
151
152
  }
152
153
  /**
153
154
  * Find ProposalCreated event by transaction hash
@@ -163,43 +164,57 @@ async function findProposalByTxHash(txHash, provider) {
163
164
  * Get voting information for a proposal
164
165
  */
165
166
  async function getVotingData(governorAddress, proposalId, provider) {
166
- const governor = new ethers_1.ethers.Contract(governorAddress, abis_1.GOVERNOR_ABI, provider);
167
167
  const proposalIdBN = ethers_1.BigNumber.from(proposalId);
168
- // Fetch all voting data in parallel
169
- const [startBlock, deadline, votes, { blockNumber: currentBlock }] = await Promise.all([
170
- (0, rpc_utils_1.queryWithRetry)(() => governor.proposalSnapshot(proposalIdBN)),
171
- (0, rpc_utils_1.queryWithRetry)(() => governor.proposalDeadline(proposalIdBN)),
172
- (0, rpc_utils_1.queryWithRetry)(() => governor.proposalVotes(proposalIdBN)),
168
+ // First batch: proposalSnapshot, proposalDeadline, proposalVotes + optional deadlines
169
+ const [firstBatchResults, { blockNumber: currentBlock }] = await Promise.all([
170
+ (0, multicall_1.multicall)(provider, [
171
+ (0, multicall_1.buildCallInput)(governorAddress, abis_1.governorInterface, "proposalSnapshot", [
172
+ proposalIdBN,
173
+ ]),
174
+ (0, multicall_1.buildCallInput)(governorAddress, abis_1.governorInterface, "proposalDeadline", [
175
+ proposalIdBN,
176
+ ]),
177
+ // Custom decoder for proposalVotes which returns multiple values
178
+ {
179
+ targetAddr: governorAddress,
180
+ encoder: () => abis_1.governorInterface.encodeFunctionData("proposalVotes", [proposalIdBN]),
181
+ decoder: (returnData) => {
182
+ const result = abis_1.governorInterface.decodeFunctionResult("proposalVotes", returnData);
183
+ return {
184
+ againstVotes: result.againstVotes,
185
+ forVotes: result.forVotes,
186
+ abstainVotes: result.abstainVotes,
187
+ };
188
+ },
189
+ },
190
+ // Optional calls - may not exist on all governors
191
+ (0, multicall_1.buildCallInput)(governorAddress, abis_1.governorInterface, "proposalExtendedDeadline", [
192
+ proposalIdBN,
193
+ ]),
194
+ (0, multicall_1.buildCallInput)(governorAddress, abis_1.governorInterface, "proposalVettingDeadline", [
195
+ proposalIdBN,
196
+ ]),
197
+ ]),
173
198
  (0, timing_1.getCurrentBlockInfo)(provider),
174
199
  ]);
175
- // Get quorum at start block
176
- const quorum = (await (0, rpc_utils_1.queryWithRetry)(() => governor.quorum(startBlock)));
177
- // Check for extended deadline (late quorum)
178
- let extendedDeadline;
179
- try {
180
- const extended = await governor.proposalExtendedDeadline(proposalIdBN);
181
- if (extended.gt(0)) {
182
- extendedDeadline = extended;
183
- }
184
- }
185
- catch {
186
- // Function not available on this governor
187
- }
188
- // Check for vetting deadline (Security Council)
189
- // IMPORTANT: Vetting deadline is an L1 block number, not L2
200
+ const startBlock = firstBatchResults[0];
201
+ const deadline = firstBatchResults[1];
202
+ const votes = firstBatchResults[2];
203
+ const extendedResult = firstBatchResults[3];
204
+ const vettingResult = firstBatchResults[4];
205
+ // Second batch: quorum (needs startBlock)
206
+ const quorumResults = await (0, multicall_1.multicall)(provider, [
207
+ (0, multicall_1.buildCallInput)(governorAddress, abis_1.governorInterface, "quorum", [startBlock]),
208
+ ]);
209
+ const quorum = quorumResults[0];
210
+ const extendedDeadline = extendedResult?.gt(0) ? extendedResult : undefined;
211
+ // Handle vetting deadline (L1 block number comparison)
190
212
  let vettingDeadline;
191
213
  let isVettingPeriod = false;
192
- try {
193
- const vetting = await governor.proposalVettingDeadline(proposalIdBN);
194
- if (vetting.gt(0)) {
195
- vettingDeadline = vetting;
196
- // Use L1 block number for comparison since vetting deadline is L1-based
197
- const l1Block = await (0, timing_1.getL1BlockNumberFromL2)(provider);
198
- isVettingPeriod = l1Block.lte(vetting);
199
- }
200
- }
201
- catch {
202
- // Function not available on this governor
214
+ if (vettingResult?.gt(0)) {
215
+ vettingDeadline = vettingResult;
216
+ const l1Block = await (0, timing_1.getL1BlockNumberFromL2)(provider);
217
+ isVettingPeriod = l1Block.lte(vettingResult);
203
218
  }
204
219
  const effectiveDeadline = extendedDeadline ?? deadline;
205
220
  const hasReachedQuorum = votes.forVotes.gte(quorum);
@@ -250,7 +265,7 @@ async function findProposalQueuedEvent(governorAddress, proposalId, provider, hi
250
265
  catch {
251
266
  return false;
252
267
  }
253
- }, { chunkSize: 10000000, reverseDirection });
268
+ }, { chunkSize: hint?.chunkSize ?? constants_1.CHUNK_SIZES.L2, reverseDirection });
254
269
  if (!log) {
255
270
  return null;
256
271
  }
@@ -1 +1 @@
1
- {"version":3,"file":"governor-discovery.js","sourceRoot":"","sources":["../../src/discovery/governor-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"governor-discovery.js","sourceRoot":"","sources":["../../src/discovery/governor-discovery.ts"],"names":[],"mappings":"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"}
@@ -14,19 +14,23 @@ export declare function isKnownL2Timelock(address: string): boolean;
14
14
  */
15
15
  export declare function isL1Timelock(address: string): boolean;
16
16
  /**
17
- * Get timelock operation state directly from contract (fast path)
18
- *
19
- * This is the critical fast-path optimization: 4 cheap state reads
20
- * instead of expensive log searches
17
+ * Timelock operation state from contract reads
21
18
  */
22
- export declare function getTimelockOperationState(timelockAddress: string, operationId: string, provider: ethers.providers.Provider): Promise<{
19
+ export interface TimelockContractState {
23
20
  state: TimelockOperationState;
24
21
  isOperation: boolean;
25
22
  isPending: boolean;
26
23
  isReady: boolean;
27
24
  isDone: boolean;
28
25
  timestamp: BigNumber;
29
- }>;
26
+ }
27
+ /**
28
+ * Get timelock operation state directly from contract (fast path)
29
+ *
30
+ * This is the critical fast-path optimization: 4 cheap state reads
31
+ * instead of expensive log searches
32
+ */
33
+ export declare function getTimelockOperationState(timelockAddress: string, operationId: string, provider: ethers.providers.Provider): Promise<TimelockContractState>;
30
34
  /**
31
35
  * Parse CallScheduled event data
32
36
  */
@@ -58,6 +62,7 @@ export declare function findCallExecutedEvent(timelockAddress: string, operation
58
62
  *
59
63
  * @param options.fromBlock - REQUIRED when not skipping log search. Start block for event searches.
60
64
  * @param options.scheduledData - Pre-fetched CallScheduledData to skip log search
65
+ * @param options.chunkSize - Override chunk size for log searches (uses chain-appropriate default if not specified)
61
66
  */
62
67
  export declare function getTimelockState(timelockAddress: string, operationId: string, provider: ethers.providers.Provider, options?: {
63
68
  fromBlock?: number;
@@ -69,6 +74,10 @@ export declare function getTimelockState(timelockAddress: string, operationId: s
69
74
  scheduledData?: CallScheduledData;
70
75
  /** All scheduled data for batch operations */
71
76
  allScheduledData?: CallScheduledData[];
77
+ /** Override chunk size for log searches */
78
+ chunkSize?: number;
79
+ /** Pre-fetched contract state to avoid duplicate multicalls */
80
+ contractState?: TimelockContractState;
72
81
  }): Promise<TimelockState>;
73
82
  /**
74
83
  * Find all CallScheduled events from a transaction for a specific operation ID.