@gzeoneth/gov-tracker 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +201 -0
  3. package/dist/abis.d.ts +79 -0
  4. package/dist/abis.d.ts.map +1 -0
  5. package/dist/abis.js +159 -0
  6. package/dist/abis.js.map +1 -0
  7. package/dist/cli/lib/cli.d.ts +92 -0
  8. package/dist/cli/lib/cli.d.ts.map +1 -0
  9. package/dist/cli/lib/cli.js +562 -0
  10. package/dist/cli/lib/cli.js.map +1 -0
  11. package/dist/cli/lib/election-check.d.ts +46 -0
  12. package/dist/cli/lib/election-check.d.ts.map +1 -0
  13. package/dist/cli/lib/election-check.js +136 -0
  14. package/dist/cli/lib/election-check.js.map +1 -0
  15. package/dist/cli/lib/json-state.d.ts +100 -0
  16. package/dist/cli/lib/json-state.d.ts.map +1 -0
  17. package/dist/cli/lib/json-state.js +225 -0
  18. package/dist/cli/lib/json-state.js.map +1 -0
  19. package/dist/cli/monitor.d.ts +3 -0
  20. package/dist/cli/monitor.d.ts.map +1 -0
  21. package/dist/cli/monitor.js +442 -0
  22. package/dist/cli/monitor.js.map +1 -0
  23. package/dist/constants.d.ts +235 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +293 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/discovery/governor-discovery.d.ts +84 -0
  28. package/dist/discovery/governor-discovery.d.ts.map +1 -0
  29. package/dist/discovery/governor-discovery.js +310 -0
  30. package/dist/discovery/governor-discovery.js.map +1 -0
  31. package/dist/discovery/security-council.d.ts +68 -0
  32. package/dist/discovery/security-council.d.ts.map +1 -0
  33. package/dist/discovery/security-council.js +181 -0
  34. package/dist/discovery/security-council.js.map +1 -0
  35. package/dist/discovery/timelock-discovery.d.ts +99 -0
  36. package/dist/discovery/timelock-discovery.d.ts.map +1 -0
  37. package/dist/discovery/timelock-discovery.js +322 -0
  38. package/dist/discovery/timelock-discovery.js.map +1 -0
  39. package/dist/election.d.ts +172 -0
  40. package/dist/election.d.ts.map +1 -0
  41. package/dist/election.js +464 -0
  42. package/dist/election.js.map +1 -0
  43. package/dist/index.d.ts +56 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +164 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/stages/base.d.ts +127 -0
  48. package/dist/stages/base.d.ts.map +1 -0
  49. package/dist/stages/base.js +280 -0
  50. package/dist/stages/base.js.map +1 -0
  51. package/dist/stages/l2-to-l1-message.d.ts +108 -0
  52. package/dist/stages/l2-to-l1-message.d.ts.map +1 -0
  53. package/dist/stages/l2-to-l1-message.js +422 -0
  54. package/dist/stages/l2-to-l1-message.js.map +1 -0
  55. package/dist/stages/proposal-created.d.ts +20 -0
  56. package/dist/stages/proposal-created.d.ts.map +1 -0
  57. package/dist/stages/proposal-created.js +62 -0
  58. package/dist/stages/proposal-created.js.map +1 -0
  59. package/dist/stages/proposal-queued.d.ts +39 -0
  60. package/dist/stages/proposal-queued.d.ts.map +1 -0
  61. package/dist/stages/proposal-queued.js +131 -0
  62. package/dist/stages/proposal-queued.js.map +1 -0
  63. package/dist/stages/retryables.d.ts +79 -0
  64. package/dist/stages/retryables.d.ts.map +1 -0
  65. package/dist/stages/retryables.js +307 -0
  66. package/dist/stages/retryables.js.map +1 -0
  67. package/dist/stages/stage-builder.d.ts +46 -0
  68. package/dist/stages/stage-builder.d.ts.map +1 -0
  69. package/dist/stages/stage-builder.js +87 -0
  70. package/dist/stages/stage-builder.js.map +1 -0
  71. package/dist/stages/timelock.d.ts +100 -0
  72. package/dist/stages/timelock.d.ts.map +1 -0
  73. package/dist/stages/timelock.js +552 -0
  74. package/dist/stages/timelock.js.map +1 -0
  75. package/dist/stages/voting.d.ts +18 -0
  76. package/dist/stages/voting.d.ts.map +1 -0
  77. package/dist/stages/voting.js +109 -0
  78. package/dist/stages/voting.js.map +1 -0
  79. package/dist/tracker/context.d.ts +111 -0
  80. package/dist/tracker/context.d.ts.map +1 -0
  81. package/dist/tracker/context.js +264 -0
  82. package/dist/tracker/context.js.map +1 -0
  83. package/dist/tracker/discovery.d.ts +89 -0
  84. package/dist/tracker/discovery.d.ts.map +1 -0
  85. package/dist/tracker/discovery.js +228 -0
  86. package/dist/tracker/discovery.js.map +1 -0
  87. package/dist/tracker/execute.d.ts +44 -0
  88. package/dist/tracker/execute.d.ts.map +1 -0
  89. package/dist/tracker/execute.js +126 -0
  90. package/dist/tracker/execute.js.map +1 -0
  91. package/dist/tracker/index.d.ts +18 -0
  92. package/dist/tracker/index.d.ts.map +1 -0
  93. package/dist/tracker/index.js +70 -0
  94. package/dist/tracker/index.js.map +1 -0
  95. package/dist/tracker/pipeline.d.ts +47 -0
  96. package/dist/tracker/pipeline.d.ts.map +1 -0
  97. package/dist/tracker/pipeline.js +299 -0
  98. package/dist/tracker/pipeline.js.map +1 -0
  99. package/dist/tracker/query.d.ts +45 -0
  100. package/dist/tracker/query.d.ts.map +1 -0
  101. package/dist/tracker/query.js +159 -0
  102. package/dist/tracker/query.js.map +1 -0
  103. package/dist/tracker/state.d.ts +104 -0
  104. package/dist/tracker/state.d.ts.map +1 -0
  105. package/dist/tracker/state.js +287 -0
  106. package/dist/tracker/state.js.map +1 -0
  107. package/dist/tracker.d.ts +261 -0
  108. package/dist/tracker.d.ts.map +1 -0
  109. package/dist/tracker.js +556 -0
  110. package/dist/tracker.js.map +1 -0
  111. package/dist/types/config.d.ts +81 -0
  112. package/dist/types/config.d.ts.map +1 -0
  113. package/dist/types/config.js +6 -0
  114. package/dist/types/config.js.map +1 -0
  115. package/dist/types/core.d.ts +51 -0
  116. package/dist/types/core.d.ts.map +1 -0
  117. package/dist/types/core.js +6 -0
  118. package/dist/types/core.js.map +1 -0
  119. package/dist/types/cross-chain.d.ts +80 -0
  120. package/dist/types/cross-chain.d.ts.map +1 -0
  121. package/dist/types/cross-chain.js +6 -0
  122. package/dist/types/cross-chain.js.map +1 -0
  123. package/dist/types/election.d.ts +59 -0
  124. package/dist/types/election.d.ts.map +1 -0
  125. package/dist/types/election.js +6 -0
  126. package/dist/types/election.js.map +1 -0
  127. package/dist/types/governor.d.ts +71 -0
  128. package/dist/types/governor.d.ts.map +1 -0
  129. package/dist/types/governor.js +6 -0
  130. package/dist/types/governor.js.map +1 -0
  131. package/dist/types/index.d.ts +22 -0
  132. package/dist/types/index.d.ts.map +1 -0
  133. package/dist/types/index.js +21 -0
  134. package/dist/types/index.js.map +1 -0
  135. package/dist/types/stages.d.ts +189 -0
  136. package/dist/types/stages.d.ts.map +1 -0
  137. package/dist/types/stages.js +23 -0
  138. package/dist/types/stages.js.map +1 -0
  139. package/dist/types/timelock.d.ts +108 -0
  140. package/dist/types/timelock.d.ts.map +1 -0
  141. package/dist/types/timelock.js +6 -0
  142. package/dist/types/timelock.js.map +1 -0
  143. package/dist/types/tracking.d.ts +180 -0
  144. package/dist/types/tracking.d.ts.map +1 -0
  145. package/dist/types/tracking.js +6 -0
  146. package/dist/types/tracking.js.map +1 -0
  147. package/dist/types.d.ts +6 -0
  148. package/dist/types.d.ts.map +1 -0
  149. package/dist/types.js +22 -0
  150. package/dist/types.js.map +1 -0
  151. package/dist/utils/chain.d.ts +18 -0
  152. package/dist/utils/chain.d.ts.map +1 -0
  153. package/dist/utils/chain.js +34 -0
  154. package/dist/utils/chain.js.map +1 -0
  155. package/dist/utils/log-filters.d.ts +67 -0
  156. package/dist/utils/log-filters.d.ts.map +1 -0
  157. package/dist/utils/log-filters.js +116 -0
  158. package/dist/utils/log-filters.js.map +1 -0
  159. package/dist/utils/log-search.d.ts +76 -0
  160. package/dist/utils/log-search.d.ts.map +1 -0
  161. package/dist/utils/log-search.js +142 -0
  162. package/dist/utils/log-search.js.map +1 -0
  163. package/dist/utils/logger.d.ts +41 -0
  164. package/dist/utils/logger.d.ts.map +1 -0
  165. package/dist/utils/logger.js +50 -0
  166. package/dist/utils/logger.js.map +1 -0
  167. package/dist/utils/operation-id.d.ts +48 -0
  168. package/dist/utils/operation-id.d.ts.map +1 -0
  169. package/dist/utils/operation-id.js +102 -0
  170. package/dist/utils/operation-id.js.map +1 -0
  171. package/dist/utils/rpc-utils.d.ts +30 -0
  172. package/dist/utils/rpc-utils.d.ts.map +1 -0
  173. package/dist/utils/rpc-utils.js +99 -0
  174. package/dist/utils/rpc-utils.js.map +1 -0
  175. package/dist/utils/salt-computation.d.ts +78 -0
  176. package/dist/utils/salt-computation.d.ts.map +1 -0
  177. package/dist/utils/salt-computation.js +132 -0
  178. package/dist/utils/salt-computation.js.map +1 -0
  179. package/dist/utils/salt-resolver.d.ts +63 -0
  180. package/dist/utils/salt-resolver.d.ts.map +1 -0
  181. package/dist/utils/salt-resolver.js +144 -0
  182. package/dist/utils/salt-resolver.js.map +1 -0
  183. package/dist/utils/scoped-logger.d.ts +43 -0
  184. package/dist/utils/scoped-logger.d.ts.map +1 -0
  185. package/dist/utils/scoped-logger.js +72 -0
  186. package/dist/utils/scoped-logger.js.map +1 -0
  187. package/dist/utils/stage-helpers.d.ts +51 -0
  188. package/dist/utils/stage-helpers.d.ts.map +1 -0
  189. package/dist/utils/stage-helpers.js +143 -0
  190. package/dist/utils/stage-helpers.js.map +1 -0
  191. package/dist/utils/stage-metadata.d.ts +62 -0
  192. package/dist/utils/stage-metadata.d.ts.map +1 -0
  193. package/dist/utils/stage-metadata.js +140 -0
  194. package/dist/utils/stage-metadata.js.map +1 -0
  195. package/dist/utils/timing.d.ts +115 -0
  196. package/dist/utils/timing.d.ts.map +1 -0
  197. package/dist/utils/timing.js +303 -0
  198. package/dist/utils/timing.js.map +1 -0
  199. package/dist/utils/urls.d.ts +20 -0
  200. package/dist/utils/urls.d.ts.map +1 -0
  201. package/dist/utils/urls.js +51 -0
  202. package/dist/utils/urls.js.map +1 -0
  203. package/package.json +72 -0
@@ -0,0 +1,552 @@
1
+ "use strict";
2
+ /**
3
+ * Unified Timelock Stage Tracking and Preparation
4
+ *
5
+ * Handles both L1 and L2 timelock operations with chain-specific configurations.
6
+ * L2-specific: Security Council detection and enrichment
7
+ * L1-specific: Operation ID discovery from OutBox execution
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.findL1OperationIdFromTx = findL1OperationIdFromTx;
11
+ exports.trackL2Timelock = trackL2Timelock;
12
+ exports.trackL1Timelock = trackL1Timelock;
13
+ exports.calculateRetryableExecutionValue = calculateRetryableExecutionValue;
14
+ exports.calculateBatchRetryableValues = calculateBatchRetryableValues;
15
+ exports.prepareTimelockOperation = prepareTimelockOperation;
16
+ exports.prepareTimelockBatch = prepareTimelockBatch;
17
+ exports.prepareTimelockStage = prepareTimelockStage;
18
+ const ethers_1 = require("ethers");
19
+ const timelock_discovery_1 = require("../discovery/timelock-discovery");
20
+ const security_council_1 = require("../discovery/security-council");
21
+ const operation_id_1 = require("../utils/operation-id");
22
+ const salt_computation_1 = require("../utils/salt-computation");
23
+ const abis_1 = require("../abis");
24
+ const constants_1 = require("../constants");
25
+ const chain_1 = require("../utils/chain");
26
+ const base_1 = require("./base");
27
+ const stage_builder_1 = require("./stage-builder");
28
+ const timing_1 = require("../utils/timing");
29
+ const stage_helpers_1 = require("../utils/stage-helpers");
30
+ const rpc_utils_1 = require("../utils/rpc-utils");
31
+ const logger_1 = require("../utils/logger");
32
+ const log = logger_1.loggers.stage.timelock;
33
+ const logExecution = logger_1.loggers.execution;
34
+ const L2_TIMELOCK_CONFIG = {
35
+ chain: "L2",
36
+ stageType: "L2_TIMELOCK",
37
+ blockTimeSeconds: constants_1.BLOCK_TIMES.L2,
38
+ logPrefix: "L2",
39
+ };
40
+ const L1_TIMELOCK_CONFIG = {
41
+ chain: "L1",
42
+ stageType: "L1_TIMELOCK",
43
+ blockTimeSeconds: constants_1.BLOCK_TIMES.L1,
44
+ logPrefix: "L1",
45
+ };
46
+ // ============================================================================
47
+ // L2-Specific: Security Council Handling
48
+ // ============================================================================
49
+ /**
50
+ * Get Security Council enrichment data if applicable.
51
+ * Returns data to merge into stage, or null if not a SC operation.
52
+ */
53
+ async function getSecurityCouncilData(timelockState, operationId, provider) {
54
+ const queueTxHash = timelockState.scheduledData?.txHash;
55
+ if (!queueTxHash)
56
+ return null;
57
+ const receipt = await (0, rpc_utils_1.queryWithRetry)(() => provider.getTransactionReceipt(queueTxHash));
58
+ if (!(0, security_council_1.isSecurityCouncilOperation)(receipt))
59
+ return null;
60
+ const scParams = (0, security_council_1.extractSecurityCouncilParamsForOperation)(receipt, operationId);
61
+ if (!scParams)
62
+ return null;
63
+ return {
64
+ isSecurityCouncilOperation: true,
65
+ securityCouncilMembers: scParams.members,
66
+ securityCouncilNonce: scParams.nonce.toString(),
67
+ };
68
+ }
69
+ // ============================================================================
70
+ // L1-Specific: Operation ID Discovery
71
+ // ============================================================================
72
+ /**
73
+ * Find L1 operation ID from a known OutBox execution transaction.
74
+ */
75
+ async function findL1OperationIdFromTx(outboxTxHash, outboxTxBlock, l1Provider) {
76
+ const receipt = await (0, rpc_utils_1.queryWithRetry)(() => l1Provider.getTransactionReceipt(outboxTxHash));
77
+ if (!receipt) {
78
+ return { l1OperationId: null, l1ScheduleTxHash: outboxTxHash, l1ScheduleBlock: outboxTxBlock };
79
+ }
80
+ for (const logEntry of receipt.logs) {
81
+ if ((0, chain_1.addressEquals)(logEntry.address, constants_1.ADDRESSES.L1_TIMELOCK) &&
82
+ logEntry.topics[0] === constants_1.EVENT_TOPICS.CALL_SCHEDULED) {
83
+ const parsed = (0, timelock_discovery_1.parseCallScheduledEvent)(logEntry);
84
+ if (parsed) {
85
+ return {
86
+ l1OperationId: parsed.operationId,
87
+ l1ScheduleTxHash: outboxTxHash,
88
+ l1ScheduleBlock: outboxTxBlock,
89
+ };
90
+ }
91
+ }
92
+ }
93
+ return { l1OperationId: null, l1ScheduleTxHash: outboxTxHash, l1ScheduleBlock: outboxTxBlock };
94
+ }
95
+ // ============================================================================
96
+ // Generic Tracking Function
97
+ // ============================================================================
98
+ /**
99
+ * Unified timelock stage tracking.
100
+ * Works for both L1 and L2 timelocks with configuration-driven differences.
101
+ */
102
+ async function trackTimelock(config, timelockAddress, operationId, provider, fromBlock, options = {}) {
103
+ const builder = new stage_builder_1.StageBuilder(config.stageType, config.chain);
104
+ if (!operationId) {
105
+ return {
106
+ stage: builder.status("NOT_STARTED").build(),
107
+ timelockState: null,
108
+ operationState: null,
109
+ executionTxHash: null,
110
+ executionBlock: null,
111
+ };
112
+ }
113
+ const operationState = await (0, timelock_discovery_1.getTimelockOperationState)(timelockAddress, operationId, provider);
114
+ if (!operationState.isOperation) {
115
+ return {
116
+ stage: builder
117
+ .status("NOT_STARTED")
118
+ .data({ operationId, reason: `${config.chain} operation not scheduled yet` })
119
+ .build(),
120
+ timelockState: null,
121
+ operationState: null,
122
+ executionTxHash: null,
123
+ executionBlock: null,
124
+ };
125
+ }
126
+ const timelockState = await (0, timelock_discovery_1.getTimelockState)(timelockAddress, operationId, provider, {
127
+ fromBlock,
128
+ scheduledData: options.callScheduledData,
129
+ skipLogSearch: false,
130
+ });
131
+ const { timestamp: currentTimestamp } = await (0, timing_1.getCurrentBlockInfo)(provider);
132
+ const eta = await (0, stage_helpers_1.calculateTimelockEta)(timelockState, operationState, provider);
133
+ // Add base data
134
+ builder.data({ operationId, timelockAddress, state: operationState.state, eta });
135
+ const allData = (0, stage_helpers_1.collectAllScheduledData)(timelockState);
136
+ if (allData.length > 0) {
137
+ builder.data({ callScheduledData: (0, stage_helpers_1.serializeCallScheduledDataArray)(allData) });
138
+ }
139
+ // Check for Security Council enrichment (L2 only)
140
+ if (options.checkSecurityCouncil) {
141
+ const scData = await getSecurityCouncilData(timelockState, operationId, provider);
142
+ if (scData) {
143
+ builder.data(scData);
144
+ }
145
+ }
146
+ // Compute and cache salt and predecessor
147
+ if (config.stageType === "L2_TIMELOCK") {
148
+ // Get current stage data for salt computation
149
+ const currentData = builder.build().data;
150
+ const salt = await (0, salt_computation_1.computeL2TimelockSalt)(currentData, options.allStages, provider);
151
+ builder.data({ salt });
152
+ // Cache predecessor from CallScheduled event (usually HashZero for governor proposals)
153
+ if (allData.length > 0 && allData[0].predecessor) {
154
+ builder.data({ predecessor: allData[0].predecessor });
155
+ }
156
+ log("%s: Computed salt: %s", config.logPrefix, salt.slice(0, 10) + "...");
157
+ }
158
+ else if (config.stageType === "L1_TIMELOCK") {
159
+ const { salt, predecessor } = (0, salt_computation_1.computeL1TimelockSalt)(options.allStages);
160
+ builder.data({ salt });
161
+ if (predecessor) {
162
+ builder.data({ predecessor });
163
+ }
164
+ log("%s: Computed salt: %s", config.logPrefix, salt.slice(0, 10) + "...");
165
+ }
166
+ // Determine if operation uses scheduleBatch or schedule by trying both validations
167
+ if (allData.length > 0) {
168
+ const salt = builder.build().data.salt ?? ethers_1.ethers.constants.HashZero;
169
+ const predecessor = builder.build().data.predecessor ?? ethers_1.ethers.constants.HashZero;
170
+ // Try batch validation first (common for L2 timelock)
171
+ const targets = allData.map((d) => d.target);
172
+ const values = allData.map((d) => d.value);
173
+ const payloads = allData.map((d) => d.data);
174
+ const isBatch = await (0, operation_id_1.validateSaltBatch)(timelockAddress, operationId, { targets, values, payloads, predecessor, salt }, provider);
175
+ if (isBatch) {
176
+ builder.data({ isBatchOperation: true });
177
+ log("%s: Operation uses scheduleBatch", config.logPrefix);
178
+ }
179
+ else {
180
+ // Try single validation
181
+ const isSingle = await (0, operation_id_1.validateSalt)(timelockAddress, operationId, {
182
+ target: allData[0].target,
183
+ value: allData[0].value,
184
+ data: allData[0].data,
185
+ predecessor,
186
+ salt,
187
+ }, provider);
188
+ if (isSingle) {
189
+ builder.data({ isBatchOperation: false });
190
+ log("%s: Operation uses schedule", config.logPrefix);
191
+ }
192
+ else {
193
+ log("%s: Warning - neither schedule nor scheduleBatch validation succeeded", config.logPrefix);
194
+ }
195
+ }
196
+ }
197
+ if (options.additionalPayload) {
198
+ builder.data(options.additionalPayload);
199
+ }
200
+ // Add queue transaction if available (for all statuses where scheduled)
201
+ let queueTimestamp;
202
+ if (timelockState.scheduledData?.txHash &&
203
+ timelockState.scheduledData.blockNumber !== undefined) {
204
+ queueTimestamp = await (0, base_1.getBlockTimestamp)(timelockState.scheduledData.blockNumber, provider);
205
+ builder.tx(timelockState.scheduledData.txHash, timelockState.scheduledData.blockNumber, config.chain, { timestamp: queueTimestamp, description: "queued" });
206
+ }
207
+ // Determine status based on operation state
208
+ // Priority: COMPLETED (isDone) > READY (isReady) > PENDING (isPending) > NOT_STARTED
209
+ if (operationState.isDone) {
210
+ let executionSearchStart = timelockState?.scheduledData?.blockNumber ?? fromBlock;
211
+ if (timelockState?.scheduledData) {
212
+ const delaySeconds = timelockState.scheduledData.delay.toNumber();
213
+ if (delaySeconds > 0) {
214
+ executionSearchStart = await (0, timing_1.blockAfterDelay)(provider, timelockState.scheduledData.blockNumber, delaySeconds, config.blockTimeSeconds);
215
+ log("%s execution search optimized: start=%d", config.logPrefix, executionSearchStart);
216
+ }
217
+ }
218
+ if (options.cachedExecutionTxHash) {
219
+ const receipt = await provider.getTransactionReceipt(options.cachedExecutionTxHash);
220
+ if (receipt) {
221
+ const execTimestamp = await (0, base_1.getBlockTimestamp)(receipt.blockNumber, provider);
222
+ builder
223
+ .status("COMPLETED")
224
+ .tx(options.cachedExecutionTxHash, receipt.blockNumber, config.chain, {
225
+ timestamp: execTimestamp,
226
+ description: "executed",
227
+ })
228
+ .timing({ startedAt: queueTimestamp ?? execTimestamp })
229
+ .data({ operationId });
230
+ return {
231
+ stage: builder.build(),
232
+ timelockState,
233
+ operationState,
234
+ executionTxHash: options.cachedExecutionTxHash,
235
+ executionBlock: receipt.blockNumber,
236
+ };
237
+ }
238
+ }
239
+ // searchAndCompleteTimelockExecution expects a stage, so build and pass
240
+ const executionResult = await (0, stage_helpers_1.searchAndCompleteTimelockExecution)(builder.build(), timelockAddress, operationId, provider, config.chain, executionSearchStart, undefined, queueTimestamp);
241
+ return {
242
+ stage: executionResult.stage,
243
+ timelockState,
244
+ operationState,
245
+ executionTxHash: executionResult.executionTxHash,
246
+ executionBlock: executionResult.executionBlock,
247
+ };
248
+ }
249
+ else if (operationState.isReady) {
250
+ builder.status("READY");
251
+ if (queueTimestamp) {
252
+ builder.timing({ startedAt: queueTimestamp });
253
+ }
254
+ // Build execution payload
255
+ const executionPayload = (0, stage_helpers_1.buildExecutionPayloadData)(timelockAddress, operationId, allData);
256
+ builder.data(executionPayload);
257
+ return {
258
+ stage: builder.build(),
259
+ timelockState,
260
+ operationState,
261
+ executionTxHash: null,
262
+ executionBlock: null,
263
+ };
264
+ }
265
+ else if (operationState.isPending) {
266
+ builder.status("PENDING");
267
+ if (queueTimestamp && eta) {
268
+ const delayRemaining = eta - currentTimestamp;
269
+ builder.timing({
270
+ startedAt: queueTimestamp,
271
+ eta,
272
+ delaySeconds: delayRemaining > 0 ? delayRemaining : 0,
273
+ });
274
+ }
275
+ builder.data({ waitingForDelay: true });
276
+ return {
277
+ stage: builder.build(),
278
+ timelockState,
279
+ operationState,
280
+ executionTxHash: null,
281
+ executionBlock: null,
282
+ };
283
+ }
284
+ return {
285
+ stage: builder.status("NOT_STARTED").build(),
286
+ timelockState,
287
+ operationState,
288
+ executionTxHash: null,
289
+ executionBlock: null,
290
+ };
291
+ }
292
+ // ============================================================================
293
+ // Public Tracking Functions
294
+ // ============================================================================
295
+ /**
296
+ * Track L2 timelock stage (Stage 4)
297
+ */
298
+ async function trackL2Timelock(timelockAddress, operationId, provider, fromBlock, callScheduledData, options = {}) {
299
+ return trackTimelock(L2_TIMELOCK_CONFIG, timelockAddress, operationId, provider, fromBlock, {
300
+ callScheduledData,
301
+ cachedExecutionTxHash: options.cachedExecutionTxHash,
302
+ checkSecurityCouncil: true,
303
+ allStages: options.allStages,
304
+ });
305
+ }
306
+ /**
307
+ * Track L1 timelock stage (Stage 6)
308
+ */
309
+ async function trackL1Timelock(l1Provider, options = {}) {
310
+ let l1OperationId = options.knownL1OperationId ?? null;
311
+ let l1ScheduleBlock = null;
312
+ let l1ScheduleTxHash = null;
313
+ if (!l1OperationId && options.outboxExecutionTx) {
314
+ log("using OutBox tx from previous stage: %s block=%d", options.outboxExecutionTx.hash, options.outboxExecutionTx.blockNumber);
315
+ const discovery = await findL1OperationIdFromTx(options.outboxExecutionTx.hash, options.outboxExecutionTx.blockNumber, l1Provider);
316
+ l1OperationId = discovery.l1OperationId;
317
+ l1ScheduleBlock = discovery.l1ScheduleBlock;
318
+ l1ScheduleTxHash = discovery.l1ScheduleTxHash;
319
+ }
320
+ if (!l1OperationId) {
321
+ const stage = new stage_builder_1.StageBuilder("L1_TIMELOCK", "L1")
322
+ .status("NOT_STARTED")
323
+ .data({
324
+ reason: "L1 operation ID not yet discovered (challenge period may not be complete)",
325
+ })
326
+ .build();
327
+ return {
328
+ stage,
329
+ timelockState: null,
330
+ operationState: null,
331
+ executionTxHash: null,
332
+ executionBlock: null,
333
+ l1OperationId: null,
334
+ l1ScheduleTxHash: null,
335
+ l1ScheduleBlock: null,
336
+ };
337
+ }
338
+ const fromBlock = l1ScheduleBlock ?? options.fromBlock;
339
+ if (fromBlock === undefined) {
340
+ throw new Error("fromBlock is required for L1 timelock tracking");
341
+ }
342
+ const result = await trackTimelock(L1_TIMELOCK_CONFIG, constants_1.ADDRESSES.L1_TIMELOCK, l1OperationId, l1Provider, fromBlock, { allStages: options.allStages });
343
+ return { ...result, l1OperationId, l1ScheduleTxHash, l1ScheduleBlock };
344
+ }
345
+ // ============================================================================
346
+ // Preparation Functions
347
+ // ============================================================================
348
+ /**
349
+ * Calculate retryable execution value for L1 timelock operations.
350
+ */
351
+ async function calculateRetryableExecutionValue(_timelockAddress, target, data, provider) {
352
+ if (target.toLowerCase() !== constants_1.ADDRESSES.RETRYABLE_TICKET_MAGIC.toLowerCase()) {
353
+ return null;
354
+ }
355
+ let decoded;
356
+ try {
357
+ decoded = ethers_1.ethers.utils.defaultAbiCoder.decode(["address", "address", "uint256", "uint256", "uint256", "bytes"], data);
358
+ }
359
+ catch {
360
+ return null;
361
+ }
362
+ const inboxAddress = decoded[0];
363
+ const innerValue = decoded[2];
364
+ const innerGasLimit = decoded[3];
365
+ const innerMaxFeePerGas = decoded[4];
366
+ const innerData = decoded[5];
367
+ const inbox = new ethers_1.ethers.Contract(inboxAddress, abis_1.INBOX_ABI, provider);
368
+ const gasPrice = await (0, rpc_utils_1.queryWithRetry)(() => provider.getGasPrice());
369
+ const dataLength = ethers_1.ethers.utils.hexDataLength(innerData);
370
+ const submissionFee = await (0, rpc_utils_1.queryWithRetry)(() => inbox.callStatic.calculateRetryableSubmissionFee(dataLength, gasPrice));
371
+ return submissionFee.mul(2).add(innerGasLimit.mul(innerMaxFeePerGas)).add(innerValue);
372
+ }
373
+ /**
374
+ * Calculate batch retryable values for L1 timelock.
375
+ */
376
+ async function calculateBatchRetryableValues(timelockAddress, targets, values, payloads, provider) {
377
+ const calculatedValues = [];
378
+ for (let i = 0; i < targets.length; i++) {
379
+ const retryableValue = await calculateRetryableExecutionValue(timelockAddress, targets[i], payloads[i], provider);
380
+ calculatedValues.push(retryableValue ?? values[i]);
381
+ }
382
+ return calculatedValues;
383
+ }
384
+ /**
385
+ * Helper: Get salt from cached stage data or user override
386
+ */
387
+ function getSalt(stageData, options) {
388
+ return options.salt ?? stageData.salt ?? ethers_1.ethers.constants.HashZero;
389
+ }
390
+ /**
391
+ * Helper: Get predecessor from cached stage data or user override
392
+ */
393
+ function getPredecessor(stageData, options) {
394
+ return (options.predecessor ?? stageData.predecessor ?? ethers_1.ethers.constants.HashZero);
395
+ }
396
+ /**
397
+ * Prepare a single timelock operation for execution.
398
+ */
399
+ async function prepareTimelockOperation(timelockAddress, params, operationId, stageData, provider, options = {}) {
400
+ logExecution("Preparing timelock operation %s", operationId);
401
+ const salt = getSalt(stageData, options);
402
+ const predecessor = getPredecessor(stageData, options);
403
+ if (!options.force) {
404
+ const stateError = await (0, base_1.checkOperationReady)(timelockAddress, operationId, provider);
405
+ if (stateError)
406
+ return stateError;
407
+ }
408
+ // Validate the cached salt (unless skipped)
409
+ if (!options.skipSaltValidation) {
410
+ const isValid = await (0, operation_id_1.validateSalt)(timelockAddress, operationId, { target: params.target, value: params.value, data: params.data, predecessor, salt }, provider);
411
+ if (!isValid) {
412
+ return (0, base_1.failPrepare)(`Salt validation failed for operation ${operationId}. ` +
413
+ `Cached salt ${salt} does not produce the expected operation ID. ` +
414
+ `This may indicate incorrect salt computation during tracking. ` +
415
+ `Override with options.salt if needed.`);
416
+ }
417
+ }
418
+ const retryableValue = !options.skipRetryableValueCalculation
419
+ ? await calculateRetryableExecutionValue(timelockAddress, params.target, params.data, provider)
420
+ : null;
421
+ const executionValue = retryableValue ?? params.value;
422
+ const chain = await (0, chain_1.getChainType)(provider);
423
+ const calldata = abis_1.timelockInterface.encodeFunctionData("execute", [
424
+ params.target,
425
+ params.value,
426
+ params.data,
427
+ predecessor,
428
+ salt,
429
+ ]);
430
+ return {
431
+ success: true,
432
+ prepared: {
433
+ to: timelockAddress,
434
+ data: calldata,
435
+ value: executionValue.toString(),
436
+ chain,
437
+ description: `execute() on ${chain} timelock`,
438
+ operationId,
439
+ },
440
+ };
441
+ }
442
+ /**
443
+ * Prepare a batch timelock operation for execution.
444
+ */
445
+ async function prepareTimelockBatch(timelockAddress, params, operationId, stageData, provider, options = {}) {
446
+ logExecution("Preparing timelock batch %s", operationId);
447
+ if (!params.targets?.length) {
448
+ return (0, base_1.failPrepare)("Batch must have at least one target");
449
+ }
450
+ if (params.targets.length !== params.values.length ||
451
+ params.targets.length !== params.payloads.length) {
452
+ return (0, base_1.failPrepare)("Array length mismatch in batch params");
453
+ }
454
+ const salt = getSalt(stageData, options);
455
+ const predecessor = getPredecessor(stageData, options);
456
+ if (!options.force) {
457
+ const stateError = await (0, base_1.checkOperationReady)(timelockAddress, operationId, provider);
458
+ if (stateError)
459
+ return stateError;
460
+ }
461
+ // Validate the cached salt (unless skipped)
462
+ if (!options.skipSaltValidation) {
463
+ const isValid = await (0, operation_id_1.validateSaltBatch)(timelockAddress, operationId, {
464
+ targets: params.targets,
465
+ values: params.values,
466
+ payloads: params.payloads,
467
+ predecessor,
468
+ salt,
469
+ }, provider);
470
+ if (!isValid) {
471
+ return (0, base_1.failPrepare)(`Salt validation failed for batch operation ${operationId}. ` +
472
+ `Cached salt ${salt} does not produce the expected operation ID. ` +
473
+ `This may indicate incorrect salt computation during tracking. ` +
474
+ `Override with options.salt if needed.`);
475
+ }
476
+ }
477
+ let executionValues = params.values;
478
+ if (!options.skipRetryableValueCalculation) {
479
+ executionValues = await calculateBatchRetryableValues(timelockAddress, params.targets, params.values, params.payloads, provider);
480
+ }
481
+ const totalValue = executionValues.reduce((acc, v) => acc.add(v), ethers_1.BigNumber.from(0));
482
+ const chain = await (0, chain_1.getChainType)(provider);
483
+ const calldata = abis_1.timelockInterface.encodeFunctionData("executeBatch", [
484
+ params.targets,
485
+ params.values,
486
+ params.payloads,
487
+ predecessor,
488
+ salt,
489
+ ]);
490
+ return {
491
+ success: true,
492
+ prepared: {
493
+ to: timelockAddress,
494
+ data: calldata,
495
+ value: totalValue.toString(),
496
+ chain,
497
+ description: `executeBatch() on ${chain} timelock`,
498
+ operationId,
499
+ },
500
+ };
501
+ }
502
+ /**
503
+ * Prepare a timelock stage for execution (auto-detects single vs batch).
504
+ *
505
+ * @param stage - The timelock stage to prepare (salt should be pre-computed in stage.data)
506
+ * @param provider - Provider for the chain where timelock is deployed
507
+ * @param options - Preparation options (can override salt with options.salt)
508
+ */
509
+ async function prepareTimelockStage(stage, provider, options = {}) {
510
+ const validationError = (0, stage_helpers_1.validateStageForPrepare)(stage, { force: options.force });
511
+ if (validationError)
512
+ return validationError;
513
+ const stageData = (0, stage_helpers_1.createTimelockStageData)(stage);
514
+ if (!stageData) {
515
+ return (0, base_1.failPrepare)("Stage is not a timelock stage");
516
+ }
517
+ const { timelockAddress, operationId } = stageData;
518
+ if (!timelockAddress || !operationId) {
519
+ return (0, base_1.failPrepare)("Missing timelock address or operation ID");
520
+ }
521
+ const { callScheduledData } = stageData;
522
+ if (!callScheduledData?.length) {
523
+ return (0, base_1.failPrepare)("Missing callScheduledData for preparation.");
524
+ }
525
+ const sortedData = [...callScheduledData].sort((a, b) => a.index.toNumber() - b.index.toNumber());
526
+ const targets = sortedData.map((d) => d.target);
527
+ const values = sortedData.map((d) => d.value.toString());
528
+ const payloads = sortedData.map((d) => d.data);
529
+ const predecessor = sortedData[0].predecessor;
530
+ const resolvedPredecessor = options.predecessor ?? predecessor ?? ethers_1.ethers.constants.HashZero;
531
+ // Use cached isBatchOperation to determine which method to use
532
+ // Fallback to count-based logic if not cached
533
+ const timelockData = stage.data;
534
+ const useBatch = timelockData.isBatchOperation ?? targets.length > 1;
535
+ if (useBatch) {
536
+ return prepareTimelockBatch(timelockAddress, {
537
+ targets,
538
+ values: values.map((v) => ethers_1.BigNumber.from(v)),
539
+ payloads,
540
+ predecessor: resolvedPredecessor,
541
+ salt: "",
542
+ }, operationId, stage.data, provider, options);
543
+ }
544
+ return prepareTimelockOperation(timelockAddress, {
545
+ target: targets[0],
546
+ value: ethers_1.BigNumber.from(values[0]),
547
+ data: payloads[0],
548
+ predecessor: resolvedPredecessor,
549
+ salt: "",
550
+ }, operationId, stage.data, provider, options);
551
+ }
552
+ //# sourceMappingURL=timelock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelock.js","sourceRoot":"","sources":["../../src/stages/timelock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Voting Stage Tracking
3
+ *
4
+ * Stage 2: Track voting period including extensions and vetting
5
+ *
6
+ * IMPORTANT: Vetting deadline uses L1 block numbers, not L2 block numbers.
7
+ * When calculating ETA for vetting period, we must use L1 block time.
8
+ */
9
+ import { ethers } from "ethers";
10
+ import { ProposalData, TrackedStage, VotingData } from "../types";
11
+ /**
12
+ * Track voting stage for a proposal
13
+ */
14
+ export declare function trackVotingStage(governorAddress: string, proposalId: string, proposalData: ProposalData, provider: ethers.providers.Provider): Promise<{
15
+ stage: TrackedStage;
16
+ votingData: VotingData | null;
17
+ }>;
18
+ //# sourceMappingURL=voting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voting.d.ts","sourceRoot":"","sources":["../../src/stages/voting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAelE;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAClC,OAAO,CAAC;IACT,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B,CAAC,CAmHD"}