@gzeoneth/gov-tracker 0.1.2 → 0.2.0-1
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.
- package/README.md +3 -0
- package/dist/abis.d.ts +0 -32
- package/dist/abis.d.ts.map +1 -1
- package/dist/abis.js +17 -17
- package/dist/abis.js.map +1 -1
- package/dist/calldata/decoder.d.ts +12 -3
- package/dist/calldata/decoder.d.ts.map +1 -1
- package/dist/calldata/decoder.js +56 -9
- package/dist/calldata/decoder.js.map +1 -1
- package/dist/calldata/index.d.ts +4 -7
- package/dist/calldata/index.d.ts.map +1 -1
- package/dist/calldata/index.js +5 -19
- package/dist/calldata/index.js.map +1 -1
- package/dist/calldata/parameter-decoder.d.ts +11 -2
- package/dist/calldata/parameter-decoder.d.ts.map +1 -1
- package/dist/calldata/parameter-decoder.js +67 -8
- package/dist/calldata/parameter-decoder.js.map +1 -1
- package/dist/calldata/retryable-ticket.d.ts +1 -17
- package/dist/calldata/retryable-ticket.d.ts.map +1 -1
- package/dist/calldata/retryable-ticket.js +10 -17
- package/dist/calldata/retryable-ticket.js.map +1 -1
- package/dist/calldata/signature-lookup.d.ts +0 -11
- package/dist/calldata/signature-lookup.d.ts.map +1 -1
- package/dist/calldata/signature-lookup.js +0 -8
- package/dist/calldata/signature-lookup.js.map +1 -1
- package/dist/cli/lib/cli.d.ts +1 -3
- package/dist/cli/lib/cli.d.ts.map +1 -1
- package/dist/cli/lib/cli.js +12 -27
- package/dist/cli/lib/cli.js.map +1 -1
- package/dist/cli/lib/election-check.d.ts +2 -2
- package/dist/cli/lib/election-check.d.ts.map +1 -1
- package/dist/cli/lib/election-check.js.map +1 -1
- package/dist/cli/lib/json-state.d.ts +2 -29
- package/dist/cli/lib/json-state.d.ts.map +1 -1
- package/dist/cli/lib/json-state.js +12 -56
- package/dist/cli/lib/json-state.js.map +1 -1
- package/dist/cli/monitor.js +1 -2
- package/dist/cli/monitor.js.map +1 -1
- package/dist/constants.d.ts +41 -7
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +64 -4
- package/dist/constants.js.map +1 -1
- package/dist/discovery/timelock-discovery.js +1 -1
- package/dist/discovery/timelock-discovery.js.map +1 -1
- package/dist/election.d.ts.map +1 -1
- package/dist/election.js +7 -4
- package/dist/election.js.map +1 -1
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -26
- package/dist/index.js.map +1 -1
- package/dist/simulation/index.d.ts +3 -4
- package/dist/simulation/index.d.ts.map +1 -1
- package/dist/simulation/index.js +3 -9
- package/dist/simulation/index.js.map +1 -1
- package/dist/simulation/simulation-data.d.ts +6 -31
- package/dist/simulation/simulation-data.d.ts.map +1 -1
- package/dist/simulation/simulation-data.js +25 -58
- package/dist/simulation/simulation-data.js.map +1 -1
- package/dist/stages/{stage-builder.d.ts → builder.d.ts} +14 -9
- package/dist/stages/builder.d.ts.map +1 -0
- package/dist/stages/{stage-builder.js → builder.js} +19 -5
- package/dist/stages/builder.js.map +1 -0
- package/dist/stages/l2-to-l1-message.d.ts +3 -3
- package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
- package/dist/stages/l2-to-l1-message.js +17 -17
- package/dist/stages/l2-to-l1-message.js.map +1 -1
- package/dist/stages/proposal-created.d.ts +2 -2
- package/dist/stages/proposal-created.d.ts.map +1 -1
- package/dist/stages/proposal-created.js +5 -5
- package/dist/stages/proposal-created.js.map +1 -1
- package/dist/stages/proposal-queued.d.ts +2 -2
- package/dist/stages/proposal-queued.d.ts.map +1 -1
- package/dist/stages/proposal-queued.js +11 -11
- package/dist/stages/proposal-queued.js.map +1 -1
- package/dist/stages/retryables.d.ts +7 -7
- package/dist/stages/retryables.d.ts.map +1 -1
- package/dist/stages/retryables.js +75 -61
- package/dist/stages/retryables.js.map +1 -1
- package/dist/stages/timelock.d.ts +3 -24
- package/dist/stages/timelock.d.ts.map +1 -1
- package/dist/stages/timelock.js +47 -39
- package/dist/stages/timelock.js.map +1 -1
- package/dist/stages/{base.d.ts → utils.d.ts} +78 -35
- package/dist/stages/utils.d.ts.map +1 -0
- package/dist/stages/{base.js → utils.js} +211 -63
- package/dist/stages/utils.js.map +1 -0
- package/dist/stages/voting.d.ts +2 -2
- package/dist/stages/voting.d.ts.map +1 -1
- package/dist/stages/voting.js +2 -2
- package/dist/stages/voting.js.map +1 -1
- package/dist/tracker/cache.d.ts +104 -0
- package/dist/tracker/cache.d.ts.map +1 -0
- package/dist/tracker/cache.js +287 -0
- package/dist/tracker/cache.js.map +1 -0
- package/dist/tracker/execute.js +9 -9
- package/dist/tracker/execute.js.map +1 -1
- package/dist/tracker/pipeline.d.ts +3 -32
- package/dist/tracker/pipeline.d.ts.map +1 -1
- package/dist/tracker/pipeline.js +40 -43
- package/dist/tracker/pipeline.js.map +1 -1
- package/dist/tracker/query.js +4 -4
- package/dist/tracker/query.js.map +1 -1
- package/dist/tracker/state.d.ts +88 -81
- package/dist/tracker/state.d.ts.map +1 -1
- package/dist/tracker/state.js +241 -264
- package/dist/tracker/state.js.map +1 -1
- package/dist/tracker.d.ts +4 -4
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +24 -22
- package/dist/tracker.js.map +1 -1
- package/dist/types/calldata.d.ts +4 -6
- package/dist/types/calldata.d.ts.map +1 -1
- package/dist/types/core.d.ts +36 -34
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +33 -0
- package/dist/types/core.js.map +1 -1
- package/dist/types/cross-chain.d.ts +5 -61
- package/dist/types/cross-chain.d.ts.map +1 -1
- package/dist/types/election.d.ts +3 -6
- package/dist/types/election.d.ts.map +1 -1
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/simulation.d.ts +5 -7
- package/dist/types/simulation.d.ts.map +1 -1
- package/dist/types/stages.d.ts +50 -32
- package/dist/types/stages.d.ts.map +1 -1
- package/dist/types/stages.js +10 -1
- package/dist/types/stages.js.map +1 -1
- package/dist/types/tracking.d.ts +3 -30
- package/dist/types/tracking.d.ts.map +1 -1
- package/dist/utils/chain.d.ts +7 -3
- package/dist/utils/chain.d.ts.map +1 -1
- package/dist/utils/chain.js +13 -9
- package/dist/utils/chain.js.map +1 -1
- package/dist/utils/logger.d.ts +9 -3
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +53 -19
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/rpc-utils.d.ts +7 -8
- package/dist/utils/rpc-utils.d.ts.map +1 -1
- package/dist/utils/rpc-utils.js +20 -2
- package/dist/utils/rpc-utils.js.map +1 -1
- package/dist/utils/salt-computation.d.ts.map +1 -1
- package/dist/utils/salt-computation.js +2 -3
- package/dist/utils/salt-computation.js.map +1 -1
- package/dist/utils/stage-metadata.d.ts +2 -2
- package/dist/utils/stage-metadata.d.ts.map +1 -1
- package/dist/utils/stage-metadata.js +5 -5
- package/dist/utils/stage-metadata.js.map +1 -1
- package/package.json +9 -5
- package/dist/calldata/address-utils.d.ts +0 -23
- package/dist/calldata/address-utils.d.ts.map +0 -1
- package/dist/calldata/address-utils.js +0 -84
- package/dist/calldata/address-utils.js.map +0 -1
- package/dist/calldata/extraction.d.ts +0 -17
- package/dist/calldata/extraction.d.ts.map +0 -1
- package/dist/calldata/extraction.js +0 -56
- package/dist/calldata/extraction.js.map +0 -1
- package/dist/stages/base.d.ts.map +0 -1
- package/dist/stages/base.js.map +0 -1
- package/dist/stages/stage-builder.d.ts.map +0 -1
- package/dist/stages/stage-builder.js.map +0 -1
- package/dist/tracker/context.d.ts +0 -111
- package/dist/tracker/context.d.ts.map +0 -1
- package/dist/tracker/context.js +0 -264
- package/dist/tracker/context.js.map +0 -1
- package/dist/tracker/index.d.ts +0 -18
- package/dist/tracker/index.d.ts.map +0 -1
- package/dist/tracker/index.js +0 -70
- package/dist/tracker/index.js.map +0 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -22
- package/dist/types.js.map +0 -1
- package/dist/utils/error-classification.d.ts +0 -13
- package/dist/utils/error-classification.d.ts.map +0 -1
- package/dist/utils/error-classification.js +0 -28
- package/dist/utils/error-classification.js.map +0 -1
- package/dist/utils/scoped-logger.d.ts +0 -43
- package/dist/utils/scoped-logger.d.ts.map +0 -1
- package/dist/utils/scoped-logger.js +0 -72
- package/dist/utils/scoped-logger.js.map +0 -1
- package/dist/utils/stage-helpers.d.ts +0 -51
- package/dist/utils/stage-helpers.d.ts.map +0 -1
- package/dist/utils/stage-helpers.js +0 -143
- package/dist/utils/stage-helpers.js.map +0 -1
- package/dist/utils/urls.d.ts +0 -28
- package/dist/utils/urls.d.ts.map +0 -1
- package/dist/utils/urls.js +0 -71
- package/dist/utils/urls.js.map +0 -1
|
@@ -1,37 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Stage Utilities
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Consolidated utilities for stage tracking, serialization, and timelock operations.
|
|
6
|
+
* Previously split between stages/base.ts and utils/stage-helpers.ts.
|
|
6
7
|
*/
|
|
7
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
9
|
exports.TIMELOCK_STAGE_TYPES = exports.deserializeCallScheduledDataArray = exports.serializeCallScheduledDataArray = exports.deserializeCallScheduledData = exports.serializeCallScheduledData = void 0;
|
|
9
10
|
exports.serialize = serialize;
|
|
10
11
|
exports.deserialize = deserialize;
|
|
11
|
-
exports.calculateEtaFromScheduledData = calculateEtaFromScheduledData;
|
|
12
|
-
exports.isConstitutional = isConstitutional;
|
|
13
12
|
exports.getStagesForPath = getStagesForPath;
|
|
14
13
|
exports.initializeStagesForPath = initializeStagesForPath;
|
|
15
14
|
exports.findStage = findStage;
|
|
16
15
|
exports.updateStageInList = updateStageInList;
|
|
17
16
|
exports.getCurrentStage = getCurrentStage;
|
|
18
17
|
exports.areAllStagesComplete = areAllStagesComplete;
|
|
19
|
-
exports.getBlockTimestamp = getBlockTimestamp;
|
|
20
18
|
exports.findExecutableStage = findExecutableStage;
|
|
21
|
-
exports.isTimelockStage = isTimelockStage;
|
|
22
19
|
exports.findAllExecutableStages = findAllExecutableStages;
|
|
23
20
|
exports.needsAction = needsAction;
|
|
24
21
|
exports.getTrackingStatusSummary = getTrackingStatusSummary;
|
|
25
22
|
exports.extractOperationId = extractOperationId;
|
|
23
|
+
exports.isConstitutional = isConstitutional;
|
|
24
|
+
exports.isTimelockStage = isTimelockStage;
|
|
25
|
+
exports.getBlockTimestamp = getBlockTimestamp;
|
|
26
|
+
exports.calculateEtaFromScheduledData = calculateEtaFromScheduledData;
|
|
26
27
|
exports.failPrepare = failPrepare;
|
|
27
28
|
exports.checkOperationReady = checkOperationReady;
|
|
29
|
+
exports.createTimelockStageData = createTimelockStageData;
|
|
30
|
+
exports.collectAllScheduledData = collectAllScheduledData;
|
|
31
|
+
exports.calculateTimelockEta = calculateTimelockEta;
|
|
32
|
+
exports.buildExecutionPayloadData = buildExecutionPayloadData;
|
|
33
|
+
exports.validateStageForPrepare = validateStageForPrepare;
|
|
34
|
+
exports.bulkPrepareError = bulkPrepareError;
|
|
35
|
+
exports.simpleBulkError = simpleBulkError;
|
|
36
|
+
exports.validateStageForBulkPrepare = validateStageForBulkPrepare;
|
|
37
|
+
exports.validateStageForSimpleBulk = validateStageForSimpleBulk;
|
|
38
|
+
exports.searchAndCompleteTimelockExecution = searchAndCompleteTimelockExecution;
|
|
28
39
|
const ethers_1 = require("ethers");
|
|
40
|
+
const types_1 = require("../types");
|
|
29
41
|
const abis_1 = require("../abis");
|
|
30
42
|
const constants_1 = require("../constants");
|
|
31
43
|
const chain_1 = require("../utils/chain");
|
|
32
44
|
const rpc_utils_1 = require("../utils/rpc-utils");
|
|
45
|
+
const builder_1 = require("./builder");
|
|
46
|
+
const timelock_discovery_1 = require("../discovery/timelock-discovery");
|
|
33
47
|
// ============================================================================
|
|
34
|
-
// Serialization Utilities
|
|
48
|
+
// Section 1: Serialization Utilities
|
|
35
49
|
// ============================================================================
|
|
36
50
|
const CALL_SCHEDULED_BIGNUM_FIELDS = ["index", "value", "delay"];
|
|
37
51
|
/** Generic serializer: converts BigNumber fields to strings for JSON storage. */
|
|
@@ -70,50 +84,26 @@ exports.serializeCallScheduledDataArray = serializeCallScheduledDataArray;
|
|
|
70
84
|
const deserializeCallScheduledDataArray = (data) => data.map(exports.deserializeCallScheduledData);
|
|
71
85
|
exports.deserializeCallScheduledDataArray = deserializeCallScheduledDataArray;
|
|
72
86
|
// ============================================================================
|
|
73
|
-
// Stage Creation and Management
|
|
87
|
+
// Section 2: Stage Creation and Management
|
|
74
88
|
// ============================================================================
|
|
75
89
|
/**
|
|
76
|
-
* Create a new tracked stage with default values
|
|
90
|
+
* Create a new tracked stage with default values.
|
|
91
|
+
* Used for initializing placeholder stages that will be filled in later.
|
|
77
92
|
*/
|
|
78
93
|
function createStage(type, chain, status = "NOT_STARTED") {
|
|
94
|
+
const chainId = (0, types_1.chainToChainId)(chain) ?? 0;
|
|
95
|
+
// Assertion needed: we create placeholder stages with empty data that get
|
|
96
|
+
// replaced by properly-built stages. TypeScript can't track this flow.
|
|
79
97
|
return {
|
|
80
98
|
type,
|
|
81
99
|
status,
|
|
82
100
|
chain,
|
|
101
|
+
chainId,
|
|
83
102
|
transactions: [],
|
|
84
103
|
data: {},
|
|
85
104
|
executable: false,
|
|
86
105
|
};
|
|
87
106
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Calculate ETA from CallScheduled event data
|
|
90
|
-
*
|
|
91
|
-
* ETA = block timestamp + delay seconds
|
|
92
|
-
* This works even when operation is done (contract returns _DONE_TIMESTAMP=1)
|
|
93
|
-
*/
|
|
94
|
-
async function calculateEtaFromScheduledData(blockNumber, delaySeconds, provider) {
|
|
95
|
-
const timestamp = await getBlockTimestamp(blockNumber, provider);
|
|
96
|
-
return timestamp + delaySeconds;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Check if a proposal is Constitutional (requires L1 round-trip).
|
|
100
|
-
*
|
|
101
|
-
* Constitutional proposals (from Constitutional Governor) go through:
|
|
102
|
-
* L2 Timelock (8 days) → L2→L1 Message → L1 Timelock (3 days) → Retryables
|
|
103
|
-
*
|
|
104
|
-
* Non-Constitutional proposals (from Non-Constitutional Governor) are L2-only:
|
|
105
|
-
* L2 Timelock (3 days) → L2 Execution
|
|
106
|
-
*
|
|
107
|
-
* Also works with timelock addresses for direct timelock entry.
|
|
108
|
-
*
|
|
109
|
-
* @see https://docs.arbitrum.foundation/concepts/lifecycle-anatomy-aip-proposal
|
|
110
|
-
*/
|
|
111
|
-
function isConstitutional(governorOrTimelockAddress) {
|
|
112
|
-
return (0, chain_1.isAddressIn)(governorOrTimelockAddress, [
|
|
113
|
-
constants_1.ADDRESSES.CONSTITUTIONAL_GOVERNOR,
|
|
114
|
-
constants_1.ADDRESSES.L2_CONSTITUTIONAL_TIMELOCK,
|
|
115
|
-
]);
|
|
116
|
-
}
|
|
117
107
|
/**
|
|
118
108
|
* Get all stages for a governor path
|
|
119
109
|
*
|
|
@@ -142,7 +132,7 @@ function initializeStagesForPath(governorAddress, includeProposalStages = true)
|
|
|
142
132
|
return stageTypes.map((type) => {
|
|
143
133
|
// L1_TIMELOCK and RETRYABLE_EXECUTED are L1 stages
|
|
144
134
|
// L2_TO_L1_MESSAGE is cross-chain but logically completes on L1
|
|
145
|
-
const chain = type === "L1_TIMELOCK" || type === "RETRYABLE_EXECUTED" ? "
|
|
135
|
+
const chain = type === "L1_TIMELOCK" || type === "RETRYABLE_EXECUTED" ? "ethereum" : "arb1";
|
|
146
136
|
return createStage(type, chain, "NOT_STARTED");
|
|
147
137
|
});
|
|
148
138
|
}
|
|
@@ -158,6 +148,9 @@ function findStage(stages, type) {
|
|
|
158
148
|
function updateStageInList(stages, updatedStage) {
|
|
159
149
|
return stages.map((s) => (s.type === updatedStage.type ? updatedStage : s));
|
|
160
150
|
}
|
|
151
|
+
// ============================================================================
|
|
152
|
+
// Section 3: Stage Querying and Status
|
|
153
|
+
// ============================================================================
|
|
161
154
|
/**
|
|
162
155
|
* Get the current active stage (first non-completed stage)
|
|
163
156
|
*/
|
|
@@ -175,30 +168,12 @@ function getCurrentStage(stages) {
|
|
|
175
168
|
function areAllStagesComplete(stages) {
|
|
176
169
|
return stages.every((s) => s.status === "COMPLETED" || s.status === "SKIPPED" || s.status === "FAILED");
|
|
177
170
|
}
|
|
178
|
-
/**
|
|
179
|
-
* Get block timestamp from provider
|
|
180
|
-
*/
|
|
181
|
-
async function getBlockTimestamp(blockNumber, provider) {
|
|
182
|
-
const block = await (0, rpc_utils_1.queryWithRetry)(() => provider.getBlock(blockNumber));
|
|
183
|
-
if (!block) {
|
|
184
|
-
throw new Error(`Block ${blockNumber} not found`);
|
|
185
|
-
}
|
|
186
|
-
return block.timestamp;
|
|
187
|
-
}
|
|
188
171
|
/**
|
|
189
172
|
* Find first READY stage that's executable
|
|
190
173
|
*/
|
|
191
174
|
function findExecutableStage(stages) {
|
|
192
175
|
return stages.find((s) => s.status === "READY" && s.executable === true) ?? null;
|
|
193
176
|
}
|
|
194
|
-
/** Timelock stage types (consolidated stages that require execution) */
|
|
195
|
-
exports.TIMELOCK_STAGE_TYPES = ["L2_TIMELOCK", "L1_TIMELOCK"];
|
|
196
|
-
/**
|
|
197
|
-
* Check if a stage type is a timelock stage
|
|
198
|
-
*/
|
|
199
|
-
function isTimelockStage(type) {
|
|
200
|
-
return exports.TIMELOCK_STAGE_TYPES.includes(type);
|
|
201
|
-
}
|
|
202
177
|
/**
|
|
203
178
|
* Find all READY executable stages
|
|
204
179
|
*/
|
|
@@ -244,17 +219,80 @@ function getTrackingStatusSummary(stages) {
|
|
|
244
219
|
* @returns The operationId if found, undefined otherwise
|
|
245
220
|
*/
|
|
246
221
|
function extractOperationId(stages) {
|
|
247
|
-
// Check
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
const
|
|
251
|
-
|
|
222
|
+
// Check PROPOSAL_QUEUED first (most common)
|
|
223
|
+
const queuedStage = stages.find((s) => s.type === "PROPOSAL_QUEUED");
|
|
224
|
+
if (queuedStage?.type === "PROPOSAL_QUEUED") {
|
|
225
|
+
const opId = queuedStage.data.operationId;
|
|
226
|
+
if (typeof opId === "string" && opId.length > 0) {
|
|
227
|
+
return opId;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Fallback to L2_TIMELOCK
|
|
231
|
+
const l2TimelockStage = stages.find((s) => s.type === "L2_TIMELOCK");
|
|
232
|
+
if (l2TimelockStage?.type === "L2_TIMELOCK") {
|
|
233
|
+
const opId = l2TimelockStage.data.operationId;
|
|
252
234
|
if (typeof opId === "string" && opId.length > 0) {
|
|
253
235
|
return opId;
|
|
254
236
|
}
|
|
255
237
|
}
|
|
256
238
|
return undefined;
|
|
257
239
|
}
|
|
240
|
+
// ============================================================================
|
|
241
|
+
// Section 4: Governance Logic
|
|
242
|
+
// ============================================================================
|
|
243
|
+
/**
|
|
244
|
+
* Check if a proposal is Constitutional (requires L1 round-trip).
|
|
245
|
+
*
|
|
246
|
+
* Constitutional proposals (from Constitutional Governor) go through:
|
|
247
|
+
* L2 Timelock (8 days) → L2→L1 Message → L1 Timelock (3 days) → Retryables
|
|
248
|
+
*
|
|
249
|
+
* Non-Constitutional proposals (from Non-Constitutional Governor) are L2-only:
|
|
250
|
+
* L2 Timelock (3 days) → L2 Execution
|
|
251
|
+
*
|
|
252
|
+
* Also works with timelock addresses for direct timelock entry.
|
|
253
|
+
*
|
|
254
|
+
* @see https://docs.arbitrum.foundation/concepts/lifecycle-anatomy-aip-proposal
|
|
255
|
+
*/
|
|
256
|
+
function isConstitutional(governorOrTimelockAddress) {
|
|
257
|
+
return (0, chain_1.isAddressIn)(governorOrTimelockAddress, [
|
|
258
|
+
constants_1.ADDRESSES.CONSTITUTIONAL_GOVERNOR,
|
|
259
|
+
constants_1.ADDRESSES.L2_CONSTITUTIONAL_TIMELOCK,
|
|
260
|
+
]);
|
|
261
|
+
}
|
|
262
|
+
/** Timelock stage types (consolidated stages that require execution) */
|
|
263
|
+
exports.TIMELOCK_STAGE_TYPES = ["L2_TIMELOCK", "L1_TIMELOCK"];
|
|
264
|
+
/**
|
|
265
|
+
* Check if a stage type is a timelock stage
|
|
266
|
+
*/
|
|
267
|
+
function isTimelockStage(type) {
|
|
268
|
+
return exports.TIMELOCK_STAGE_TYPES.includes(type);
|
|
269
|
+
}
|
|
270
|
+
// ============================================================================
|
|
271
|
+
// Section 5: Block & Timing Utilities
|
|
272
|
+
// ============================================================================
|
|
273
|
+
/**
|
|
274
|
+
* Get block timestamp from provider
|
|
275
|
+
*/
|
|
276
|
+
async function getBlockTimestamp(blockNumber, provider) {
|
|
277
|
+
const block = await (0, rpc_utils_1.queryWithRetry)(() => provider.getBlock(blockNumber));
|
|
278
|
+
if (!block) {
|
|
279
|
+
throw new Error(`Block ${blockNumber} not found`);
|
|
280
|
+
}
|
|
281
|
+
return block.timestamp;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Calculate ETA from CallScheduled event data
|
|
285
|
+
*
|
|
286
|
+
* ETA = block timestamp + delay seconds
|
|
287
|
+
* This works even when operation is done (contract returns _DONE_TIMESTAMP=1)
|
|
288
|
+
*/
|
|
289
|
+
async function calculateEtaFromScheduledData(blockNumber, delaySeconds, provider) {
|
|
290
|
+
const timestamp = await getBlockTimestamp(blockNumber, provider);
|
|
291
|
+
return timestamp + delaySeconds;
|
|
292
|
+
}
|
|
293
|
+
// ============================================================================
|
|
294
|
+
// Section 6: Preparation Helpers
|
|
295
|
+
// ============================================================================
|
|
258
296
|
/**
|
|
259
297
|
* Create a failed PrepareResult with an error message.
|
|
260
298
|
* Reduces boilerplate for the common pattern: { success: false, error: "..." }
|
|
@@ -277,4 +315,114 @@ async function checkOperationReady(timelockAddress, operationId, provider) {
|
|
|
277
315
|
}
|
|
278
316
|
return failPrepare("Operation is not ready for execution");
|
|
279
317
|
}
|
|
280
|
-
|
|
318
|
+
/** Extract timelock execution payload from a stage. */
|
|
319
|
+
function createTimelockStageData(stage) {
|
|
320
|
+
let stageData = null;
|
|
321
|
+
for (const stageType of exports.TIMELOCK_STAGE_TYPES) {
|
|
322
|
+
stageData = (0, types_1.getStageData)(stage, stageType);
|
|
323
|
+
if (stageData)
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
if (!stageData?.timelockAddress ||
|
|
327
|
+
!stageData?.operationId ||
|
|
328
|
+
!stageData?.callScheduledData?.length) {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
const payload = {
|
|
332
|
+
timelockAddress: stageData.timelockAddress,
|
|
333
|
+
operationId: stageData.operationId,
|
|
334
|
+
callScheduledData: (0, exports.deserializeCallScheduledDataArray)(stageData.callScheduledData),
|
|
335
|
+
};
|
|
336
|
+
if (stageData.isSecurityCouncilOperation) {
|
|
337
|
+
payload.isSecurityCouncilOperation = true;
|
|
338
|
+
payload.securityCouncilMembers = stageData.securityCouncilMembers;
|
|
339
|
+
payload.securityCouncilNonce = stageData.securityCouncilNonce;
|
|
340
|
+
}
|
|
341
|
+
return payload;
|
|
342
|
+
}
|
|
343
|
+
/** Collect all CallScheduledData from a timelock state. */
|
|
344
|
+
function collectAllScheduledData(timelockState) {
|
|
345
|
+
return (timelockState.allScheduledData ??
|
|
346
|
+
(timelockState.scheduledData ? [timelockState.scheduledData] : []));
|
|
347
|
+
}
|
|
348
|
+
/** Calculate ETA for a timelock operation. */
|
|
349
|
+
async function calculateTimelockEta(timelockState, operationState, provider) {
|
|
350
|
+
if (timelockState.scheduledData) {
|
|
351
|
+
return calculateEtaFromScheduledData(timelockState.scheduledData.blockNumber, timelockState.scheduledData.delay.toNumber(), provider);
|
|
352
|
+
}
|
|
353
|
+
const contractTimestamp = operationState.timestamp.toNumber();
|
|
354
|
+
return !operationState.isDone && contractTimestamp > 1 ? contractTimestamp : undefined;
|
|
355
|
+
}
|
|
356
|
+
/** Build serialized execution payload data for stage storage. */
|
|
357
|
+
function buildExecutionPayloadData(timelockAddress, operationId, allScheduledData) {
|
|
358
|
+
const payload = { timelockAddress, operationId };
|
|
359
|
+
if (allScheduledData.length > 0) {
|
|
360
|
+
payload.callScheduledData = (0, exports.serializeCallScheduledDataArray)(allScheduledData);
|
|
361
|
+
}
|
|
362
|
+
return payload;
|
|
363
|
+
}
|
|
364
|
+
/** Validate stage for preparation. Returns error or null if valid. */
|
|
365
|
+
function validateStageForPrepare(stage, options = {}) {
|
|
366
|
+
if (!options.prepareCompleted && stage.status !== "READY") {
|
|
367
|
+
return failPrepare(`Stage is not ready. Current status: ${stage.status}`);
|
|
368
|
+
}
|
|
369
|
+
if (options.expectedTypes?.length && !options.expectedTypes.includes(stage.type)) {
|
|
370
|
+
return failPrepare(`Unexpected stage type: ${stage.type}. Expected: ${options.expectedTypes.join(", ")}`);
|
|
371
|
+
}
|
|
372
|
+
return null;
|
|
373
|
+
}
|
|
374
|
+
function bulkPrepareError(error, targetChain) {
|
|
375
|
+
return { total: 0, results: [{ success: false, error }], targetChain };
|
|
376
|
+
}
|
|
377
|
+
function simpleBulkError(error) {
|
|
378
|
+
return { total: 0, results: [{ success: false, error }] };
|
|
379
|
+
}
|
|
380
|
+
function validateStageForBulkPrepare(stage, targetChain, options = {}) {
|
|
381
|
+
const error = validateStageForPrepare(stage, options);
|
|
382
|
+
return error ? { total: 0, results: [error], targetChain } : null;
|
|
383
|
+
}
|
|
384
|
+
function validateStageForSimpleBulk(stage, options = {}) {
|
|
385
|
+
const error = validateStageForPrepare(stage, options);
|
|
386
|
+
return error ? { total: 0, results: [error] } : null;
|
|
387
|
+
}
|
|
388
|
+
// ============================================================================
|
|
389
|
+
// Section 9: Execution Search Helper
|
|
390
|
+
// ============================================================================
|
|
391
|
+
/** Search for timelock execution event and complete stage. */
|
|
392
|
+
async function searchAndCompleteTimelockExecution(stage, timelockAddress, operationId, provider, chain, fromBlock, toBlock, queueTimestamp) {
|
|
393
|
+
const event = await (0, timelock_discovery_1.findCallExecutedEvent)(timelockAddress, operationId, provider, {
|
|
394
|
+
startBlock: fromBlock,
|
|
395
|
+
endBlock: toBlock,
|
|
396
|
+
});
|
|
397
|
+
const builder = new builder_1.StageBuilder(stage.type, stage.chain)
|
|
398
|
+
.data(stage.data)
|
|
399
|
+
.transactions(stage.transactions);
|
|
400
|
+
if (stage.timing)
|
|
401
|
+
builder.timing(stage.timing);
|
|
402
|
+
if (event) {
|
|
403
|
+
const execTimestamp = await getBlockTimestamp(event.blockNumber, provider);
|
|
404
|
+
const chainId = (0, types_1.chainToChainId)(chain) ?? 0;
|
|
405
|
+
builder
|
|
406
|
+
.status("COMPLETED")
|
|
407
|
+
.tx(event.txHash, event.blockNumber, chain, chainId, {
|
|
408
|
+
timestamp: execTimestamp,
|
|
409
|
+
description: "executed",
|
|
410
|
+
})
|
|
411
|
+
.timing({ startedAt: queueTimestamp ?? execTimestamp })
|
|
412
|
+
.data({ operationId });
|
|
413
|
+
return {
|
|
414
|
+
stage: builder.build(),
|
|
415
|
+
executionTxHash: event.txHash,
|
|
416
|
+
executionBlock: event.blockNumber,
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
return {
|
|
420
|
+
stage: builder
|
|
421
|
+
.status("COMPLETED")
|
|
422
|
+
.data({ operationId, note: "Execution confirmed by state, event not found" })
|
|
423
|
+
.build(),
|
|
424
|
+
executionTxHash: null,
|
|
425
|
+
executionBlock: null,
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/stages/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/stages/voting.d.ts
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
* When calculating ETA for vetting period, we must use L1 block time.
|
|
8
8
|
*/
|
|
9
9
|
import { ethers } from "ethers";
|
|
10
|
-
import { ProposalData,
|
|
10
|
+
import { ProposalData, TypedTrackedStage, VotingData } from "../types";
|
|
11
11
|
/**
|
|
12
12
|
* Track voting stage for a proposal
|
|
13
13
|
*/
|
|
14
14
|
export declare function trackVotingStage(governorAddress: string, proposalId: string, proposalData: ProposalData, provider: ethers.providers.Provider): Promise<{
|
|
15
|
-
stage:
|
|
15
|
+
stage: TypedTrackedStage<"VOTING_ACTIVE">;
|
|
16
16
|
votingData: VotingData | null;
|
|
17
17
|
}>;
|
|
18
18
|
//# sourceMappingURL=voting.d.ts.map
|
|
@@ -1 +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,
|
|
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,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAevE;;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,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC1C,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B,CAAC,CA8HD"}
|
package/dist/stages/voting.js
CHANGED
|
@@ -12,14 +12,14 @@ exports.trackVotingStage = trackVotingStage;
|
|
|
12
12
|
const ethers_1 = require("ethers");
|
|
13
13
|
const governor_discovery_1 = require("../discovery/governor-discovery");
|
|
14
14
|
const security_council_1 = require("../discovery/security-council");
|
|
15
|
-
const
|
|
15
|
+
const builder_1 = require("./builder");
|
|
16
16
|
const timing_1 = require("../utils/timing");
|
|
17
17
|
const constants_1 = require("../constants");
|
|
18
18
|
/**
|
|
19
19
|
* Track voting stage for a proposal
|
|
20
20
|
*/
|
|
21
21
|
async function trackVotingStage(governorAddress, proposalId, proposalData, provider) {
|
|
22
|
-
const builder = new
|
|
22
|
+
const builder = new builder_1.StageBuilder("VOTING_ACTIVE", "arb1");
|
|
23
23
|
// Get current block info
|
|
24
24
|
const { blockNumber: currentBlock, timestamp: currentTimestamp } = await (0, timing_1.getCurrentBlockInfo)(provider);
|
|
25
25
|
// Check if voting has started
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voting.js","sourceRoot":"","sources":["../../src/stages/voting.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAqBH,4CAsIC;AAzJD,mCAAgC;AAEhC,wEAIyC;AACzC,oEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"voting.js","sourceRoot":"","sources":["../../src/stages/voting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache utilities for tracker state
|
|
3
|
+
*
|
|
4
|
+
* Provides cache implementations and utility functions.
|
|
5
|
+
* All other state management is handled directly in tracker.ts.
|
|
6
|
+
*
|
|
7
|
+
* Available cache adapters:
|
|
8
|
+
* - FileCache: File-based persistence (Node.js only)
|
|
9
|
+
* - LocalStorageCache: Browser localStorage (web only)
|
|
10
|
+
* - MemoryCache: In-memory, no persistence (universal)
|
|
11
|
+
*/
|
|
12
|
+
import { TrackingCheckpoint, DiscoveryWatermarks, CacheAdapter } from "../types";
|
|
13
|
+
/**
|
|
14
|
+
* File-based cache that persists to JSON file.
|
|
15
|
+
* Synchronously loads on construction, persists on every write.
|
|
16
|
+
* Uses a write queue to prevent race conditions from concurrent writes.
|
|
17
|
+
*/
|
|
18
|
+
export declare class FileCache implements CacheAdapter {
|
|
19
|
+
private readonly path;
|
|
20
|
+
private cache;
|
|
21
|
+
private writeQueue;
|
|
22
|
+
constructor(path: string);
|
|
23
|
+
private load;
|
|
24
|
+
private persistSync;
|
|
25
|
+
private persist;
|
|
26
|
+
get<T>(key: string): Promise<T | null>;
|
|
27
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
28
|
+
delete(key: string): Promise<void>;
|
|
29
|
+
clear(): Promise<void>;
|
|
30
|
+
has(key: string): Promise<boolean>;
|
|
31
|
+
keys(): IterableIterator<string>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Browser localStorage-based cache adapter.
|
|
35
|
+
* Persists to localStorage with a configurable key prefix.
|
|
36
|
+
*
|
|
37
|
+
* Limitations:
|
|
38
|
+
* - 5MB storage limit (varies by browser)
|
|
39
|
+
* - Synchronous API (blocks main thread, usually negligible)
|
|
40
|
+
* - String-only storage (JSON serialization handled internally)
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* import { createTracker, LocalStorageCache } from "@gzeoneth/gov-tracker";
|
|
45
|
+
*
|
|
46
|
+
* const tracker = createTracker({
|
|
47
|
+
* l2Provider,
|
|
48
|
+
* l1Provider,
|
|
49
|
+
* cache: new LocalStorageCache("arb-gov:"),
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare class LocalStorageCache implements CacheAdapter {
|
|
54
|
+
private readonly prefix;
|
|
55
|
+
constructor(prefix?: string);
|
|
56
|
+
private fullKey;
|
|
57
|
+
get<T>(key: string): Promise<T | null>;
|
|
58
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
59
|
+
delete(key: string): Promise<void>;
|
|
60
|
+
clear(): Promise<void>;
|
|
61
|
+
has(key: string): Promise<boolean>;
|
|
62
|
+
keys(prefix?: string): Promise<string[]>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* In-memory cache adapter with no persistence.
|
|
66
|
+
* Useful for testing, short-lived sessions, or as a fallback.
|
|
67
|
+
*
|
|
68
|
+
* Data is lost when the page is refreshed or the process exits.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* import { createTracker, MemoryCache } from "@gzeoneth/gov-tracker";
|
|
73
|
+
*
|
|
74
|
+
* const tracker = createTracker({
|
|
75
|
+
* l2Provider,
|
|
76
|
+
* l1Provider,
|
|
77
|
+
* cache: new MemoryCache(),
|
|
78
|
+
* });
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare class MemoryCache implements CacheAdapter {
|
|
82
|
+
private cache;
|
|
83
|
+
get<T>(key: string): Promise<T | null>;
|
|
84
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
85
|
+
delete(key: string): Promise<void>;
|
|
86
|
+
clear(): Promise<void>;
|
|
87
|
+
has(key: string): Promise<boolean>;
|
|
88
|
+
keys(): IterableIterator<string>;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Generate cache key from transaction hash (primary cache key format)
|
|
92
|
+
*/
|
|
93
|
+
export declare function txHashCacheKey(txHash: string): string;
|
|
94
|
+
/**
|
|
95
|
+
* Read all cache data without requiring RPC providers.
|
|
96
|
+
* Use this for status/dashboard views that only need cached data.
|
|
97
|
+
*
|
|
98
|
+
* @param cachePath - Path to the cache file
|
|
99
|
+
*/
|
|
100
|
+
export declare function readCacheStatus(cachePath: string): Promise<{
|
|
101
|
+
watermarks: DiscoveryWatermarks;
|
|
102
|
+
checkpoints: Map<string, TrackingCheckpoint>;
|
|
103
|
+
}>;
|
|
104
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/tracker/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGjF;;;;GAIG;AACH,qBAAa,SAAU,YAAW,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,UAAU,CAAoC;gBAE1C,IAAI,EAAE,MAAM;IAKxB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,WAAW;YAKL,OAAO;IAiBf,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAItC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;CAGjC;AA2BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,GAAE,MAAmB;IAIvC,OAAO,CAAC,OAAO;IAIT,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAYtC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMlC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAe/C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,KAAK,CAAmC;IAE1C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAItC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;CAGjC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAChE,UAAU,EAAE,mBAAmB,CAAC;IAChC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC9C,CAAC,CAqBD"}
|