@gzeoneth/gov-tracker 0.2.1-beta.c266765 → 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.
- package/README.md +40 -0
- package/dist/abis.d.ts +3 -0
- package/dist/abis.d.ts.map +1 -1
- package/dist/abis.js +8 -1
- package/dist/abis.js.map +1 -1
- package/dist/cli/cli.js +88 -44
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/lib/cli.d.ts +41 -3
- package/dist/cli/lib/cli.d.ts.map +1 -1
- package/dist/cli/lib/cli.js +333 -116
- package/dist/cli/lib/cli.js.map +1 -1
- package/dist/cli/lib/json-state.d.ts +23 -0
- package/dist/cli/lib/json-state.d.ts.map +1 -1
- package/dist/cli/lib/json-state.js +51 -4
- package/dist/cli/lib/json-state.js.map +1 -1
- package/dist/constants.d.ts +39 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +47 -2
- package/dist/constants.js.map +1 -1
- package/dist/data/bundled-cache.json +10988 -1580
- package/dist/discovery/governor-discovery.d.ts.map +1 -1
- package/dist/discovery/governor-discovery.js +50 -35
- package/dist/discovery/governor-discovery.js.map +1 -1
- package/dist/discovery/timelock-discovery.d.ts +15 -6
- package/dist/discovery/timelock-discovery.d.ts.map +1 -1
- package/dist/discovery/timelock-discovery.js +27 -11
- package/dist/discovery/timelock-discovery.js.map +1 -1
- package/dist/election/contracts.d.ts +8 -0
- package/dist/election/contracts.d.ts.map +1 -0
- package/dist/election/contracts.js +28 -0
- package/dist/election/contracts.js.map +1 -0
- package/dist/election/details.d.ts +15 -0
- package/dist/election/details.d.ts.map +1 -0
- package/dist/election/details.js +157 -0
- package/dist/election/details.js.map +1 -0
- package/dist/election/index.d.ts +11 -0
- package/dist/election/index.d.ts.map +1 -0
- package/dist/election/index.js +48 -0
- package/dist/election/index.js.map +1 -0
- package/dist/election/params.d.ts +13 -0
- package/dist/election/params.d.ts.map +1 -0
- package/dist/election/params.js +93 -0
- package/dist/election/params.js.map +1 -0
- package/dist/election/participants.d.ts +6 -0
- package/dist/election/participants.d.ts.map +1 -0
- package/dist/election/participants.js +104 -0
- package/dist/election/participants.js.map +1 -0
- package/dist/election/prepare.d.ts +10 -0
- package/dist/election/prepare.d.ts.map +1 -0
- package/dist/election/prepare.js +52 -0
- package/dist/election/prepare.js.map +1 -0
- package/dist/election/proposal-ids.d.ts +18 -0
- package/dist/election/proposal-ids.d.ts.map +1 -0
- package/dist/election/proposal-ids.js +77 -0
- package/dist/election/proposal-ids.js.map +1 -0
- package/dist/election/status.d.ts +15 -0
- package/dist/election/status.d.ts.map +1 -0
- package/dist/election/status.js +102 -0
- package/dist/election/status.js.map +1 -0
- package/dist/election/tracking.d.ts +28 -0
- package/dist/election/tracking.d.ts.map +1 -0
- package/dist/election/tracking.js +412 -0
- package/dist/election/tracking.js.map +1 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -11
- package/dist/index.js.map +1 -1
- package/dist/stages/l2-to-l1-message.d.ts +3 -1
- package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
- package/dist/stages/l2-to-l1-message.js +6 -6
- package/dist/stages/l2-to-l1-message.js.map +1 -1
- package/dist/stages/proposal-created.d.ts +1 -0
- package/dist/stages/proposal-created.d.ts.map +1 -1
- package/dist/stages/proposal-created.js +1 -0
- package/dist/stages/proposal-created.js.map +1 -1
- package/dist/stages/proposal-queued.d.ts +1 -0
- package/dist/stages/proposal-queued.d.ts.map +1 -1
- package/dist/stages/proposal-queued.js +3 -1
- package/dist/stages/proposal-queued.js.map +1 -1
- package/dist/stages/retryables.js +2 -2
- package/dist/stages/retryables.js.map +1 -1
- package/dist/stages/timelock.d.ts +3 -1
- package/dist/stages/timelock.d.ts.map +1 -1
- package/dist/stages/timelock.js +12 -12
- package/dist/stages/timelock.js.map +1 -1
- package/dist/stages/utils.d.ts +5 -9
- package/dist/stages/utils.d.ts.map +1 -1
- package/dist/stages/utils.js +34 -29
- package/dist/stages/utils.js.map +1 -1
- package/dist/tracker/cache.d.ts +10 -6
- package/dist/tracker/cache.d.ts.map +1 -1
- package/dist/tracker/cache.js +36 -13
- package/dist/tracker/cache.js.map +1 -1
- package/dist/tracker/checkpoint-helpers.d.ts +81 -0
- package/dist/tracker/checkpoint-helpers.d.ts.map +1 -0
- package/dist/tracker/checkpoint-helpers.js +201 -0
- package/dist/tracker/checkpoint-helpers.js.map +1 -0
- package/dist/tracker/discovery.d.ts +1 -1
- package/dist/tracker/discovery.d.ts.map +1 -1
- package/dist/tracker/discovery.js +11 -3
- package/dist/tracker/discovery.js.map +1 -1
- package/dist/tracker/execute.d.ts.map +1 -1
- package/dist/tracker/execute.js +1 -25
- package/dist/tracker/execute.js.map +1 -1
- package/dist/tracker/pipeline.d.ts.map +1 -1
- package/dist/tracker/pipeline.js +26 -11
- package/dist/tracker/pipeline.js.map +1 -1
- package/dist/tracker/query.d.ts +1 -0
- package/dist/tracker/query.d.ts.map +1 -1
- package/dist/tracker/query.js +14 -61
- package/dist/tracker/query.js.map +1 -1
- package/dist/tracker/state.d.ts +0 -10
- package/dist/tracker/state.d.ts.map +1 -1
- package/dist/tracker/state.js +1 -28
- package/dist/tracker/state.js.map +1 -1
- package/dist/tracker.d.ts +79 -7
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +357 -43
- package/dist/tracker.js.map +1 -1
- package/dist/types/config.d.ts +49 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/core.d.ts +3 -1
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/election.d.ts +66 -11
- package/dist/types/election.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/stages.d.ts +66 -7
- package/dist/types/stages.d.ts.map +1 -1
- package/dist/types/stages.js.map +1 -1
- package/dist/types/tracking.d.ts +10 -10
- package/dist/types/tracking.d.ts.map +1 -1
- package/dist/utils/block-cache.d.ts +50 -0
- package/dist/utils/block-cache.d.ts.map +1 -0
- package/dist/utils/block-cache.js +80 -0
- package/dist/utils/block-cache.js.map +1 -0
- package/dist/utils/formatters.d.ts +91 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/formatters.js +327 -0
- package/dist/utils/formatters.js.map +1 -0
- package/dist/utils/multicall.d.ts +52 -0
- package/dist/utils/multicall.d.ts.map +1 -0
- package/dist/utils/multicall.js +75 -0
- package/dist/utils/multicall.js.map +1 -0
- package/dist/utils/rpc-utils.d.ts +7 -1
- package/dist/utils/rpc-utils.d.ts.map +1 -1
- package/dist/utils/rpc-utils.js +42 -29
- 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 +33 -7
- package/dist/utils/salt-computation.js.map +1 -1
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/sanitize.js +3 -0
- package/dist/utils/sanitize.js.map +1 -1
- package/dist/utils/stage-metadata.d.ts +0 -20
- package/dist/utils/stage-metadata.d.ts.map +1 -1
- package/dist/utils/stage-metadata.js +29 -44
- package/dist/utils/stage-metadata.js.map +1 -1
- package/dist/utils/timing.d.ts.map +1 -1
- package/dist/utils/timing.js +2 -1
- package/dist/utils/timing.js.map +1 -1
- package/package.json +3 -2
- package/dist/election.d.ts +0 -312
- package/dist/election.d.ts.map +0 -1
- package/dist/election.js +0 -884
- package/dist/election.js.map +0 -1
- package/dist/types/cross-chain.d.ts +0 -24
- package/dist/types/cross-chain.d.ts.map +0 -1
- package/dist/types/cross-chain.js +0 -6
- package/dist/types/cross-chain.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governor-discovery.d.ts","sourceRoot":"","sources":["../../src/discovery/governor-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,UAAU,EAEX,MAAM,UAAU,CAAC;
|
|
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:
|
|
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
|
-
//
|
|
169
|
-
const [
|
|
170
|
-
(0,
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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:
|
|
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":";AAAA;;;;;GAKG;;
|
|
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
|
-
*
|
|
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
|
|
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.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timelock-discovery.d.ts","sourceRoot":"","sources":["../../src/discovery/timelock-discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,aAAa,EACb,UAAU,EACX,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"timelock-discovery.d.ts","sourceRoot":"","sources":["../../src/discovery/timelock-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 chain_1 = require("../utils/chain");
|
|
28
28
|
const abis_1 = require("../abis");
|
|
29
|
+
const multicall_1 = require("../utils/multicall");
|
|
29
30
|
const L2_TIMELOCKS = [
|
|
30
31
|
constants_1.ADDRESSES.L2_CONSTITUTIONAL_TIMELOCK,
|
|
31
32
|
constants_1.ADDRESSES.L2_NON_CONSTITUTIONAL_TIMELOCK,
|
|
@@ -45,10 +46,13 @@ function isL1Timelock(address) {
|
|
|
45
46
|
/**
|
|
46
47
|
* Get search defaults for timelock event searches.
|
|
47
48
|
* Encapsulates chain-appropriate chunk sizes, default blocks, and direction logic.
|
|
49
|
+
*
|
|
50
|
+
* @param hint.chunkSize - Override chunk size (uses chain-appropriate default if not specified)
|
|
48
51
|
*/
|
|
49
52
|
async function getSearchDefaults(timelockAddress, provider, hint) {
|
|
50
53
|
const isL1 = isL1Timelock(timelockAddress);
|
|
51
|
-
const
|
|
54
|
+
const defaultChunkSize = isL1 ? constants_1.CHUNK_SIZES.L1 : constants_1.CHUNK_SIZES.L2;
|
|
55
|
+
const chunkSize = hint?.chunkSize ?? defaultChunkSize;
|
|
52
56
|
const defaultStartBlock = isL1 ? constants_1.GOVERNANCE_START_BLOCKS.L1 : constants_1.GOVERNANCE_START_BLOCKS.L2;
|
|
53
57
|
const toBlock = hint?.endBlock ?? (await (0, timing_1.getCurrentBlockInfo)(provider)).blockNumber;
|
|
54
58
|
const fromBlock = hint?.startBlock ?? defaultStartBlock;
|
|
@@ -64,15 +68,21 @@ async function getSearchDefaults(timelockAddress, provider, hint) {
|
|
|
64
68
|
* instead of expensive log searches
|
|
65
69
|
*/
|
|
66
70
|
async function getTimelockOperationState(timelockAddress, operationId, provider) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
(0,
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
(0,
|
|
74
|
-
(0,
|
|
71
|
+
// Batch all 5 state checks into a single RPC request
|
|
72
|
+
const results = await (0, multicall_1.multicall)(provider, [
|
|
73
|
+
(0, multicall_1.buildCallInput)(timelockAddress, abis_1.timelockInterface, "isOperation", [operationId]),
|
|
74
|
+
(0, multicall_1.buildCallInput)(timelockAddress, abis_1.timelockInterface, "isOperationPending", [
|
|
75
|
+
operationId,
|
|
76
|
+
]),
|
|
77
|
+
(0, multicall_1.buildCallInput)(timelockAddress, abis_1.timelockInterface, "isOperationReady", [operationId]),
|
|
78
|
+
(0, multicall_1.buildCallInput)(timelockAddress, abis_1.timelockInterface, "isOperationDone", [operationId]),
|
|
79
|
+
(0, multicall_1.buildCallInput)(timelockAddress, abis_1.timelockInterface, "getTimestamp", [operationId]),
|
|
75
80
|
]);
|
|
81
|
+
const isOperation = results[0] ?? false;
|
|
82
|
+
const isPending = results[1] ?? false;
|
|
83
|
+
const isReady = results[2] ?? false;
|
|
84
|
+
const isDone = results[3] ?? false;
|
|
85
|
+
const timestamp = results[4] ?? ethers_1.BigNumber.from(0);
|
|
76
86
|
let state = "UNKNOWN";
|
|
77
87
|
if (!isOperation) {
|
|
78
88
|
state = "UNKNOWN";
|
|
@@ -186,10 +196,12 @@ async function findCallExecutedEvent(timelockAddress, operationId, provider, hin
|
|
|
186
196
|
*
|
|
187
197
|
* @param options.fromBlock - REQUIRED when not skipping log search. Start block for event searches.
|
|
188
198
|
* @param options.scheduledData - Pre-fetched CallScheduledData to skip log search
|
|
199
|
+
* @param options.chunkSize - Override chunk size for log searches (uses chain-appropriate default if not specified)
|
|
189
200
|
*/
|
|
190
201
|
async function getTimelockState(timelockAddress, operationId, provider, options = {}) {
|
|
191
202
|
// FAST PATH: Check state before expensive log search
|
|
192
|
-
const contractState =
|
|
203
|
+
const contractState = options.contractState ??
|
|
204
|
+
(await getTimelockOperationState(timelockAddress, operationId, provider));
|
|
193
205
|
const state = {
|
|
194
206
|
operationId,
|
|
195
207
|
state: contractState.state,
|
|
@@ -220,6 +232,7 @@ async function getTimelockState(timelockAddress, operationId, provider, options
|
|
|
220
232
|
const scheduledData = await findCallScheduledEvent(timelockAddress, operationId, provider, {
|
|
221
233
|
startBlock: fromBlock,
|
|
222
234
|
endBlock: options.toBlock,
|
|
235
|
+
chunkSize: options.chunkSize,
|
|
223
236
|
});
|
|
224
237
|
if (scheduledData) {
|
|
225
238
|
state.scheduledData = scheduledData;
|
|
@@ -245,6 +258,7 @@ async function getTimelockState(timelockAddress, operationId, provider, options
|
|
|
245
258
|
const executedData = await findCallExecutedEvent(timelockAddress, operationId, provider, {
|
|
246
259
|
startBlock: executedSearchStart,
|
|
247
260
|
endBlock: options.toBlock,
|
|
261
|
+
chunkSize: options.chunkSize,
|
|
248
262
|
});
|
|
249
263
|
if (executedData) {
|
|
250
264
|
state.executedData = executedData;
|
|
@@ -303,7 +317,9 @@ function getL2TimelockForGovernor(governorAddress) {
|
|
|
303
317
|
async function discoverTimelockOps(timelockAddress, fromBlock, toBlock, provider, options = {}) {
|
|
304
318
|
if (fromBlock >= toBlock)
|
|
305
319
|
return [];
|
|
306
|
-
|
|
320
|
+
// Use chain-appropriate default chunk size
|
|
321
|
+
const defaultChunkSize = isL1Timelock(timelockAddress) ? constants_1.CHUNK_SIZES.L1 : constants_1.CHUNK_SIZES.L2;
|
|
322
|
+
const { logs } = await (0, log_search_1.searchLogsInChunks)(provider, { address: timelockAddress, topics: [constants_1.EVENT_TOPICS.CALL_SCHEDULED], fromBlock, toBlock }, { chunkSize: options.chunkSize ?? defaultChunkSize });
|
|
307
323
|
const seen = new Set();
|
|
308
324
|
return logs.flatMap((log) => {
|
|
309
325
|
const operationId = log.topics[1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timelock-discovery.js","sourceRoot":"","sources":["../../src/discovery/timelock-discovery.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;
|
|
1
|
+
{"version":3,"file":"timelock-discovery.js","sourceRoot":"","sources":["../../src/discovery/timelock-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ethers } from "ethers";
|
|
2
|
+
export declare function getNomineeGovernor(address?: string, provider?: ethers.providers.Provider): ethers.Contract;
|
|
3
|
+
export declare function getMemberGovernor(address?: string, provider?: ethers.providers.Provider): ethers.Contract;
|
|
4
|
+
export declare function getLogQueryBlockRange(governor: ethers.Contract, proposalId: string, provider: ethers.providers.Provider, offsetFromSnapshot?: number, fallbackRange?: number): Promise<{
|
|
5
|
+
fromBlock: number;
|
|
6
|
+
toBlock: number;
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/election/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAC;AAK3C,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,MAA4C,EACrD,QAAQ,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GACnC,MAAM,CAAC,QAAQ,CAEjB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,MAA2C,EACpD,QAAQ,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GACnC,MAAM,CAAC,QAAQ,CAEjB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,kBAAkB,GAAE,MAAa,EACjC,aAAa,GAAE,MAAe,GAC7B,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNomineeGovernor = getNomineeGovernor;
|
|
4
|
+
exports.getMemberGovernor = getMemberGovernor;
|
|
5
|
+
exports.getLogQueryBlockRange = getLogQueryBlockRange;
|
|
6
|
+
const ethers_1 = require("ethers");
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
const rpc_utils_1 = require("../utils/rpc-utils");
|
|
9
|
+
const abis_1 = require("../abis");
|
|
10
|
+
function getNomineeGovernor(address = constants_1.ADDRESSES.ELECTION_NOMINEE_GOVERNOR, provider) {
|
|
11
|
+
return new ethers_1.ethers.Contract(address, abis_1.NOMINEE_ELECTION_GOVERNOR_ABI, provider);
|
|
12
|
+
}
|
|
13
|
+
function getMemberGovernor(address = constants_1.ADDRESSES.ELECTION_MEMBER_GOVERNOR, provider) {
|
|
14
|
+
return new ethers_1.ethers.Contract(address, abis_1.MEMBER_ELECTION_GOVERNOR_ABI, provider);
|
|
15
|
+
}
|
|
16
|
+
async function getLogQueryBlockRange(governor, proposalId, provider, offsetFromSnapshot = 1000, fallbackRange = 100000) {
|
|
17
|
+
const toBlock = await (0, rpc_utils_1.queryWithRetry)(() => provider.getBlockNumber());
|
|
18
|
+
let fromBlock;
|
|
19
|
+
try {
|
|
20
|
+
const snapshot = await (0, rpc_utils_1.queryWithRetry)(() => governor.proposalSnapshot(proposalId));
|
|
21
|
+
fromBlock = Math.max(0, snapshot.toNumber() - offsetFromSnapshot);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
fromBlock = Math.max(0, toBlock - fallbackRange);
|
|
25
|
+
}
|
|
26
|
+
return { fromBlock, toBlock };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/election/contracts.ts"],"names":[],"mappings":";;AAKA,gDAKC;AAED,8CAKC;AAED,sDAgBC;AAnCD,mCAA2C;AAC3C,4CAAyC;AACzC,kDAAoD;AACpD,kCAAsF;AAEtF,SAAgB,kBAAkB,CAChC,UAAkB,qBAAS,CAAC,yBAAyB,EACrD,QAAoC;IAEpC,OAAO,IAAI,eAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,oCAA6B,EAAE,QAAQ,CAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,iBAAiB,CAC/B,UAAkB,qBAAS,CAAC,wBAAwB,EACpD,QAAoC;IAEpC,OAAO,IAAI,eAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,mCAA4B,EAAE,QAAQ,CAAC,CAAC;AAC9E,CAAC;AAEM,KAAK,UAAU,qBAAqB,CACzC,QAAyB,EACzB,UAAkB,EAClB,QAAmC,EACnC,qBAA6B,IAAI,EACjC,gBAAwB,MAAM;IAE9B,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAc,EAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;IACtE,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAA,0BAAc,EAAY,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,GAAG,kBAAkB,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ethers } from "ethers";
|
|
2
|
+
import { NomineeElectionDetails, MemberElectionDetails, SerializableNomineeDetails, SerializableMemberDetails } from "../types";
|
|
3
|
+
export declare function getNomineeElectionDetails(electionIndex: number, provider: ethers.providers.Provider, nomineeGovernorAddress?: string): Promise<NomineeElectionDetails | null>;
|
|
4
|
+
export declare function getMemberElectionDetails(electionIndex: number, provider: ethers.providers.Provider, memberGovernorAddress?: string, nomineeGovernorAddress?: string): Promise<MemberElectionDetails | null>;
|
|
5
|
+
/**
|
|
6
|
+
* Convert NomineeElectionDetails to serializable format for caching.
|
|
7
|
+
* Converts BigNumber fields to strings.
|
|
8
|
+
*/
|
|
9
|
+
export declare function serializeNomineeDetails(details: NomineeElectionDetails): SerializableNomineeDetails;
|
|
10
|
+
/**
|
|
11
|
+
* Convert MemberElectionDetails to serializable format for caching.
|
|
12
|
+
* Converts BigNumber fields to strings.
|
|
13
|
+
*/
|
|
14
|
+
export declare function serializeMemberDetails(details: MemberElectionDetails): SerializableMemberDetails;
|
|
15
|
+
//# sourceMappingURL=details.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"details.d.ts","sourceRoot":"","sources":["../../src/election/details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAC;AAK3C,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EAErB,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAQlB,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,sBAAsB,GAAE,MAA4C,GACnE,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAkCxC;AAED,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,qBAAqB,GAAE,MAA2C,EAClE,sBAAsB,GAAE,MAA4C,GACnE,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAmFvC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,sBAAsB,GAC9B,0BAA0B,CAoC5B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG,yBAAyB,CAchG"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNomineeElectionDetails = getNomineeElectionDetails;
|
|
4
|
+
exports.getMemberElectionDetails = getMemberElectionDetails;
|
|
5
|
+
exports.serializeNomineeDetails = serializeNomineeDetails;
|
|
6
|
+
exports.serializeMemberDetails = serializeMemberDetails;
|
|
7
|
+
const ethers_1 = require("ethers");
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const rpc_utils_1 = require("../utils/rpc-utils");
|
|
10
|
+
const abis_1 = require("../abis");
|
|
11
|
+
const logger_1 = require("../utils/logger");
|
|
12
|
+
const multicall_1 = require("../utils/multicall");
|
|
13
|
+
const contracts_1 = require("./contracts");
|
|
14
|
+
const proposal_ids_1 = require("./proposal-ids");
|
|
15
|
+
const participants_1 = require("./participants");
|
|
16
|
+
const log = logger_1.loggers.election;
|
|
17
|
+
async function getNomineeElectionDetails(electionIndex, provider, nomineeGovernorAddress = constants_1.ADDRESSES.ELECTION_NOMINEE_GOVERNOR) {
|
|
18
|
+
log("getNomineeElectionDetails for election %d", electionIndex);
|
|
19
|
+
const proposalId = await (0, proposal_ids_1.getElectionProposalId)(electionIndex, provider, nomineeGovernorAddress);
|
|
20
|
+
if (!proposalId) {
|
|
21
|
+
log("No proposal found for election %d", electionIndex);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const governor = (0, contracts_1.getNomineeGovernor)(nomineeGovernorAddress, provider);
|
|
25
|
+
const [contenders, nominees, snapshotBlock] = await Promise.all([
|
|
26
|
+
(0, participants_1.getContenders)(proposalId, provider, nomineeGovernorAddress),
|
|
27
|
+
(0, participants_1.getNomineesWithVotes)(proposalId, provider, nomineeGovernorAddress),
|
|
28
|
+
(0, rpc_utils_1.queryWithRetry)(() => governor.proposalSnapshot(proposalId)),
|
|
29
|
+
]);
|
|
30
|
+
const quorumThreshold = await (0, rpc_utils_1.queryWithRetry)(() => governor.quorum(snapshotBlock.toNumber()));
|
|
31
|
+
const compliantNominees = nominees.filter((n) => !n.isExcluded);
|
|
32
|
+
const excludedNominees = nominees.filter((n) => n.isExcluded);
|
|
33
|
+
return {
|
|
34
|
+
proposalId,
|
|
35
|
+
electionIndex,
|
|
36
|
+
contenders,
|
|
37
|
+
nominees,
|
|
38
|
+
compliantNominees,
|
|
39
|
+
excludedNominees,
|
|
40
|
+
quorumThreshold,
|
|
41
|
+
targetNomineeCount: constants_1.TIMING.SECURITY_COUNCIL_TARGET_NOMINEES,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async function getMemberElectionDetails(electionIndex, provider, memberGovernorAddress = constants_1.ADDRESSES.ELECTION_MEMBER_GOVERNOR, nomineeGovernorAddress = constants_1.ADDRESSES.ELECTION_NOMINEE_GOVERNOR) {
|
|
45
|
+
log("getMemberElectionDetails for election %d", electionIndex);
|
|
46
|
+
const memberGovernor = (0, contracts_1.getMemberGovernor)(memberGovernorAddress, provider);
|
|
47
|
+
const nomineeGovernor = (0, contracts_1.getNomineeGovernor)(nomineeGovernorAddress, provider);
|
|
48
|
+
const memberProposalId = await (0, proposal_ids_1.computeElectionProposalId)(electionIndex, memberGovernor);
|
|
49
|
+
try {
|
|
50
|
+
await (0, rpc_utils_1.queryWithRetry)(() => memberGovernor.state(memberProposalId));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
log("No member proposal found for election %d", electionIndex);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const [memberResults, nomineeProposalId] = await Promise.all([
|
|
57
|
+
(0, multicall_1.multicall)(provider, [
|
|
58
|
+
(0, multicall_1.buildCallInput)(memberGovernorAddress, abis_1.memberElectionGovernorInterface, "topNominees", [memberProposalId]),
|
|
59
|
+
(0, multicall_1.buildCallInput)(memberGovernorAddress, abis_1.memberElectionGovernorInterface, "proposalDeadline", [memberProposalId]),
|
|
60
|
+
(0, multicall_1.buildCallInput)(memberGovernorAddress, abis_1.memberElectionGovernorInterface, "fullWeightVotingDeadline", [memberProposalId]),
|
|
61
|
+
]),
|
|
62
|
+
(0, proposal_ids_1.getElectionProposalId)(electionIndex, provider, nomineeGovernorAddress),
|
|
63
|
+
]);
|
|
64
|
+
const winners = memberResults[0] ?? [];
|
|
65
|
+
const deadline = memberResults[1] ?? ethers_1.BigNumber.from(0);
|
|
66
|
+
const fullWeightDeadline = memberResults[2] ?? ethers_1.BigNumber.from(0);
|
|
67
|
+
const allNominees = nomineeProposalId
|
|
68
|
+
? await (0, rpc_utils_1.queryWithRetry)(() => nomineeGovernor.compliantNominees(nomineeProposalId))
|
|
69
|
+
: [];
|
|
70
|
+
const winnersSet = new Set(winners.map((w) => w.toLowerCase()));
|
|
71
|
+
let nomineeWeights = [];
|
|
72
|
+
if (allNominees.length > 0) {
|
|
73
|
+
const weightCalls = allNominees.map((addr) => (0, multicall_1.buildCallInput)(memberGovernorAddress, abis_1.memberElectionGovernorInterface, "weightReceived", [memberProposalId, addr]));
|
|
74
|
+
const weights = await (0, multicall_1.multicall)(provider, weightCalls);
|
|
75
|
+
nomineeWeights = allNominees.map((addr, i) => ({
|
|
76
|
+
addr,
|
|
77
|
+
weight: weights[i] ?? ethers_1.BigNumber.from(0),
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
const nomineeDetails = nomineeWeights
|
|
81
|
+
.sort((a, b) => (b.weight.gt(a.weight) ? 1 : -1))
|
|
82
|
+
.map((n, i) => ({
|
|
83
|
+
address: n.addr,
|
|
84
|
+
weightReceived: n.weight,
|
|
85
|
+
isWinner: winnersSet.has(n.addr.toLowerCase()),
|
|
86
|
+
rank: i + 1,
|
|
87
|
+
}));
|
|
88
|
+
return {
|
|
89
|
+
proposalId: memberProposalId,
|
|
90
|
+
electionIndex,
|
|
91
|
+
nominees: nomineeDetails,
|
|
92
|
+
winners,
|
|
93
|
+
fullWeightDeadline: fullWeightDeadline.toNumber(),
|
|
94
|
+
proposalDeadline: deadline.toNumber(),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Convert NomineeElectionDetails to serializable format for caching.
|
|
99
|
+
* Converts BigNumber fields to strings.
|
|
100
|
+
*/
|
|
101
|
+
function serializeNomineeDetails(details) {
|
|
102
|
+
return {
|
|
103
|
+
proposalId: details.proposalId,
|
|
104
|
+
electionIndex: details.electionIndex,
|
|
105
|
+
contenders: details.contenders.map((c) => ({
|
|
106
|
+
address: c.address,
|
|
107
|
+
registeredAtBlock: c.registeredAtBlock,
|
|
108
|
+
registrationTxHash: c.registrationTxHash,
|
|
109
|
+
})),
|
|
110
|
+
nominees: details.nominees.map((n) => ({
|
|
111
|
+
address: n.address,
|
|
112
|
+
votesReceived: n.votesReceived.toString(),
|
|
113
|
+
isExcluded: n.isExcluded,
|
|
114
|
+
nominatedAtBlock: n.nominatedAtBlock,
|
|
115
|
+
excludedAtBlock: n.excludedAtBlock,
|
|
116
|
+
exclusionTxHash: n.exclusionTxHash,
|
|
117
|
+
})),
|
|
118
|
+
compliantNominees: details.compliantNominees.map((n) => ({
|
|
119
|
+
address: n.address,
|
|
120
|
+
votesReceived: n.votesReceived.toString(),
|
|
121
|
+
isExcluded: n.isExcluded,
|
|
122
|
+
nominatedAtBlock: n.nominatedAtBlock,
|
|
123
|
+
excludedAtBlock: n.excludedAtBlock,
|
|
124
|
+
exclusionTxHash: n.exclusionTxHash,
|
|
125
|
+
})),
|
|
126
|
+
excludedNominees: details.excludedNominees.map((n) => ({
|
|
127
|
+
address: n.address,
|
|
128
|
+
votesReceived: n.votesReceived.toString(),
|
|
129
|
+
isExcluded: n.isExcluded,
|
|
130
|
+
nominatedAtBlock: n.nominatedAtBlock,
|
|
131
|
+
excludedAtBlock: n.excludedAtBlock,
|
|
132
|
+
exclusionTxHash: n.exclusionTxHash,
|
|
133
|
+
})),
|
|
134
|
+
quorumThreshold: details.quorumThreshold.toString(),
|
|
135
|
+
targetNomineeCount: details.targetNomineeCount,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Convert MemberElectionDetails to serializable format for caching.
|
|
140
|
+
* Converts BigNumber fields to strings.
|
|
141
|
+
*/
|
|
142
|
+
function serializeMemberDetails(details) {
|
|
143
|
+
return {
|
|
144
|
+
proposalId: details.proposalId,
|
|
145
|
+
electionIndex: details.electionIndex,
|
|
146
|
+
nominees: details.nominees.map((n) => ({
|
|
147
|
+
address: n.address,
|
|
148
|
+
weightReceived: n.weightReceived.toString(),
|
|
149
|
+
isWinner: n.isWinner,
|
|
150
|
+
rank: n.rank,
|
|
151
|
+
})),
|
|
152
|
+
winners: details.winners,
|
|
153
|
+
fullWeightDeadline: details.fullWeightDeadline,
|
|
154
|
+
proposalDeadline: details.proposalDeadline,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=details.js.map
|