@gzeoneth/gov-tracker 0.3.0 → 0.4.0-alpha.addr-feedback.e1dac80
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 +1 -5
- package/dist/calldata/decoder.d.ts.map +1 -1
- package/dist/calldata/decoder.js +35 -76
- package/dist/calldata/decoder.js.map +1 -1
- package/dist/calldata/parameter-decoder.d.ts +21 -1
- package/dist/calldata/parameter-decoder.d.ts.map +1 -1
- package/dist/calldata/parameter-decoder.js +30 -0
- package/dist/calldata/parameter-decoder.js.map +1 -1
- package/dist/calldata/retryable-ticket.d.ts +2 -2
- package/dist/calldata/retryable-ticket.d.ts.map +1 -1
- package/dist/calldata/retryable-ticket.js +17 -12
- package/dist/calldata/retryable-ticket.js.map +1 -1
- package/dist/calldata/signature-lookup.js +5 -4
- package/dist/calldata/signature-lookup.js.map +1 -1
- package/dist/cli/cli.js +39 -19
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/lib/cli.d.ts +4 -2
- package/dist/cli/lib/cli.d.ts.map +1 -1
- package/dist/cli/lib/cli.js +61 -58
- package/dist/cli/lib/cli.js.map +1 -1
- package/dist/cli/lib/json-state.js +1 -1
- package/dist/cli/lib/json-state.js.map +1 -1
- package/dist/cli/tui/components/StageProgress.js +1 -1
- package/dist/cli/tui/components/StageProgress.js.map +1 -1
- package/dist/cli/tui/components/StageRow.d.ts.map +1 -1
- package/dist/cli/tui/components/StageRow.js +15 -20
- package/dist/cli/tui/components/StageRow.js.map +1 -1
- package/dist/cli/tui/hooks/useCache.d.ts.map +1 -1
- package/dist/cli/tui/hooks/useCache.js +2 -1
- package/dist/cli/tui/hooks/useCache.js.map +1 -1
- package/dist/cli/tui/hooks/useElectionData.d.ts.map +1 -1
- package/dist/cli/tui/hooks/useElectionData.js +3 -2
- package/dist/cli/tui/hooks/useElectionData.js.map +1 -1
- package/dist/cli/tui/hooks/useProposals.d.ts.map +1 -1
- package/dist/cli/tui/hooks/useProposals.js +24 -34
- package/dist/cli/tui/hooks/useProposals.js.map +1 -1
- package/dist/cli/tui/hooks/useStageCalldata.d.ts.map +1 -1
- package/dist/cli/tui/hooks/useStageCalldata.js +2 -1
- package/dist/cli/tui/hooks/useStageCalldata.js.map +1 -1
- package/dist/cli/tui/utils/index.d.ts +6 -6
- package/dist/cli/tui/utils/index.d.ts.map +1 -1
- package/dist/cli/tui/utils/index.js +14 -14
- package/dist/cli/tui/utils/index.js.map +1 -1
- package/dist/cli/tui/utils/markdown-parser.d.ts +5 -0
- package/dist/cli/tui/utils/markdown-parser.d.ts.map +1 -1
- package/dist/cli/tui/utils/markdown-parser.js +16 -0
- package/dist/cli/tui/utils/markdown-parser.js.map +1 -1
- package/dist/cli/tui/utils/navigation.d.ts.map +1 -1
- package/dist/cli/tui/utils/navigation.js +5 -1
- package/dist/cli/tui/utils/navigation.js.map +1 -1
- package/dist/cli/tui/utils/proposal-detail-helpers.js +6 -6
- package/dist/cli/tui/utils/proposal-detail-helpers.js.map +1 -1
- package/dist/cli/tui/utils/time.d.ts +4 -4
- package/dist/cli/tui/utils/time.d.ts.map +1 -1
- package/dist/cli/tui/utils/time.js +13 -11
- package/dist/cli/tui/utils/time.js.map +1 -1
- package/dist/cli/tui/views/DescriptionView.d.ts.map +1 -1
- package/dist/cli/tui/views/DescriptionView.js +4 -2
- package/dist/cli/tui/views/DescriptionView.js.map +1 -1
- package/dist/cli/tui/views/ElectionView.d.ts.map +1 -1
- package/dist/cli/tui/views/ElectionView.js +3 -3
- package/dist/cli/tui/views/ElectionView.js.map +1 -1
- package/dist/cli/tui/views/StageView.d.ts.map +1 -1
- package/dist/cli/tui/views/StageView.js +1 -1
- package/dist/cli/tui/views/StageView.js.map +1 -1
- package/dist/constants.d.ts +11 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +16 -4
- package/dist/constants.js.map +1 -1
- package/dist/data/bundled-cache.json +21513 -22619
- package/dist/deduplication.d.ts.map +1 -1
- package/dist/deduplication.js +36 -33
- package/dist/deduplication.js.map +1 -1
- package/dist/discovery/governor-discovery.d.ts.map +1 -1
- package/dist/discovery/governor-discovery.js +44 -49
- package/dist/discovery/governor-discovery.js.map +1 -1
- package/dist/discovery/security-council.d.ts +15 -0
- package/dist/discovery/security-council.d.ts.map +1 -1
- package/dist/discovery/security-council.js +42 -19
- package/dist/discovery/security-council.js.map +1 -1
- package/dist/discovery/timelock-discovery.d.ts.map +1 -1
- package/dist/discovery/timelock-discovery.js +62 -84
- package/dist/discovery/timelock-discovery.js.map +1 -1
- package/dist/election/contracts.d.ts.map +1 -1
- package/dist/election/contracts.js +4 -1
- package/dist/election/contracts.js.map +1 -1
- package/dist/election/details.d.ts.map +1 -1
- package/dist/election/details.js +35 -33
- package/dist/election/details.js.map +1 -1
- package/dist/election/index.d.ts +3 -6
- package/dist/election/index.d.ts.map +1 -1
- package/dist/election/index.js +7 -14
- package/dist/election/index.js.map +1 -1
- package/dist/election/params.d.ts +8 -1
- package/dist/election/params.d.ts.map +1 -1
- package/dist/election/params.js +48 -13
- package/dist/election/params.js.map +1 -1
- package/dist/election/participants.d.ts.map +1 -1
- package/dist/election/participants.js +19 -27
- package/dist/election/participants.js.map +1 -1
- package/dist/election/proposal-ids.d.ts +10 -0
- package/dist/election/proposal-ids.d.ts.map +1 -1
- package/dist/election/proposal-ids.js +42 -5
- package/dist/election/proposal-ids.js.map +1 -1
- package/dist/election/status.d.ts.map +1 -1
- package/dist/election/status.js +6 -0
- package/dist/election/status.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -10
- package/dist/index.js.map +1 -1
- package/dist/simulation/simulation-data.d.ts +2 -2
- package/dist/simulation/simulation-data.d.ts.map +1 -1
- package/dist/simulation/simulation-data.js +36 -26
- package/dist/simulation/simulation-data.js.map +1 -1
- package/dist/stages/builder.js +1 -1
- package/dist/stages/builder.js.map +1 -1
- package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
- package/dist/stages/l2-to-l1-message.js +5 -11
- package/dist/stages/l2-to-l1-message.js.map +1 -1
- package/dist/stages/proposal-queued.d.ts.map +1 -1
- package/dist/stages/proposal-queued.js +4 -1
- package/dist/stages/proposal-queued.js.map +1 -1
- package/dist/stages/retryables.d.ts +4 -3
- package/dist/stages/retryables.d.ts.map +1 -1
- package/dist/stages/retryables.js +35 -57
- package/dist/stages/retryables.js.map +1 -1
- package/dist/stages/timelock.d.ts +4 -1
- package/dist/stages/timelock.d.ts.map +1 -1
- package/dist/stages/timelock.js +59 -67
- package/dist/stages/timelock.js.map +1 -1
- package/dist/stages/utils.d.ts +67 -5
- package/dist/stages/utils.d.ts.map +1 -1
- package/dist/stages/utils.js +183 -42
- package/dist/stages/utils.js.map +1 -1
- package/dist/tracker/checkpoint-helpers.d.ts +2 -1
- package/dist/tracker/checkpoint-helpers.d.ts.map +1 -1
- package/dist/tracker/checkpoint-helpers.js +4 -7
- package/dist/tracker/checkpoint-helpers.js.map +1 -1
- package/dist/tracker/discovery.d.ts.map +1 -1
- package/dist/tracker/discovery.js +60 -43
- package/dist/tracker/discovery.js.map +1 -1
- package/dist/tracker/pipeline.d.ts +25 -6
- package/dist/tracker/pipeline.d.ts.map +1 -1
- package/dist/tracker/pipeline.js +428 -211
- package/dist/tracker/pipeline.js.map +1 -1
- package/dist/tracker/query.d.ts +21 -0
- package/dist/tracker/query.d.ts.map +1 -1
- package/dist/tracker/query.js +86 -9
- package/dist/tracker/query.js.map +1 -1
- package/dist/tracker/stage-runner.d.ts +62 -0
- package/dist/tracker/stage-runner.d.ts.map +1 -0
- package/dist/tracker/stage-runner.js +80 -0
- package/dist/tracker/stage-runner.js.map +1 -0
- package/dist/tracker/state.d.ts +65 -0
- package/dist/tracker/state.d.ts.map +1 -1
- package/dist/tracker/state.js +194 -14
- package/dist/tracker/state.js.map +1 -1
- package/dist/tracker.d.ts +36 -8
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +246 -193
- package/dist/tracker.js.map +1 -1
- package/dist/types/core.d.ts +3 -2
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +3 -2
- package/dist/types/core.js.map +1 -1
- package/dist/types/simulation.d.ts +2 -2
- package/dist/types/simulation.d.ts.map +1 -1
- package/dist/types/tracking.d.ts +11 -0
- package/dist/types/tracking.d.ts.map +1 -1
- package/dist/utils/log-filters.d.ts.map +1 -1
- package/dist/utils/log-filters.js +5 -9
- package/dist/utils/log-filters.js.map +1 -1
- package/dist/utils/multicall.d.ts +0 -1
- package/dist/utils/multicall.d.ts.map +1 -1
- package/dist/utils/rpc-utils.d.ts +11 -0
- package/dist/utils/rpc-utils.d.ts.map +1 -1
- package/dist/utils/rpc-utils.js +18 -1
- package/dist/utils/rpc-utils.js.map +1 -1
- package/dist/utils/timing.d.ts +11 -4
- package/dist/utils/timing.d.ts.map +1 -1
- package/dist/utils/timing.js +45 -15
- package/dist/utils/timing.js.map +1 -1
- package/package.json +7 -6
- package/dist/cli/tui/utils/calldata-formatter.d.ts +0 -7
- package/dist/cli/tui/utils/calldata-formatter.d.ts.map +0 -1
- package/dist/cli/tui/utils/calldata-formatter.js +0 -14
- package/dist/cli/tui/utils/calldata-formatter.js.map +0 -1
- package/dist/cli/tui/utils/stage-formatter.d.ts +0 -7
- package/dist/cli/tui/utils/stage-formatter.d.ts.map +0 -1
- package/dist/cli/tui/utils/stage-formatter.js +0 -14
- package/dist/cli/tui/utils/stage-formatter.js.map +0 -1
- package/dist/cli/tui/utils/text.d.ts +0 -7
- package/dist/cli/tui/utils/text.d.ts.map +0 -1
- package/dist/cli/tui/utils/text.js +0 -12
- package/dist/cli/tui/utils/text.js.map +0 -1
- package/dist/election/prepare.d.ts +0 -10
- package/dist/election/prepare.d.ts.map +0 -1
- package/dist/election/prepare.js +0 -52
- package/dist/election/prepare.js.map +0 -1
- package/dist/election/tracking.d.ts +0 -28
- package/dist/election/tracking.d.ts.map +0 -1
- package/dist/election/tracking.js +0 -412
- package/dist/election/tracking.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gzeoneth/gov-tracker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0-alpha.addr-feedback.e1dac80",
|
|
4
4
|
"description": "Lightweight, high-performance library for tracking Arbitrum DAO governance proposal lifecycle stages",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "gzeoneth",
|
|
@@ -29,12 +29,12 @@
|
|
|
29
29
|
"scripts": {
|
|
30
30
|
"build": "tsc && cp -r data dist/",
|
|
31
31
|
"test": "NO_RPC=1 vitest run",
|
|
32
|
-
"test:
|
|
32
|
+
"test:rpc": "vitest run",
|
|
33
33
|
"test:fork": "vitest run --config vitest.config.fork.mts",
|
|
34
|
-
"test:
|
|
35
|
-
"test:
|
|
36
|
-
"test:
|
|
37
|
-
"test:
|
|
34
|
+
"test:cov": "vitest run --coverage",
|
|
35
|
+
"test:cov:fork": "vitest run --config vitest.config.fork.mts --coverage",
|
|
36
|
+
"test:cov:merge": "./scripts/merge-coverage.sh",
|
|
37
|
+
"test:cov:all": "yarn test:cov && yarn test:cov:fork && yarn test:cov:merge",
|
|
38
38
|
"typecheck": "tsc -p tsconfig.typecheck.json",
|
|
39
39
|
"lint": "eslint --quiet",
|
|
40
40
|
"lint:fix": "eslint --fix",
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
"knip": "^5.80.0",
|
|
82
82
|
"lint-staged": "^16.2.7",
|
|
83
83
|
"node-pty": "^1.1.0",
|
|
84
|
+
"nyc": "^17.1.0",
|
|
84
85
|
"prettier": "^3.7.4",
|
|
85
86
|
"ts-node": "^10.9.2",
|
|
86
87
|
"typescript": "^5.8.0",
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calldata formatting utilities for TUI display
|
|
3
|
-
*
|
|
4
|
-
* Re-exports from core SDK formatters for backward compatibility.
|
|
5
|
-
*/
|
|
6
|
-
export { type FormattedLine, formatDecodedCalldata, filterVisibleLines, getAllFoldableKeys, toggleFoldKey, } from "../../../utils/formatters.js";
|
|
7
|
-
//# sourceMappingURL=calldata-formatter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"calldata-formatter.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/utils/calldata-formatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,aAAa,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,GACd,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Calldata formatting utilities for TUI display
|
|
4
|
-
*
|
|
5
|
-
* Re-exports from core SDK formatters for backward compatibility.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.toggleFoldKey = exports.getAllFoldableKeys = exports.filterVisibleLines = exports.formatDecodedCalldata = void 0;
|
|
9
|
-
var formatters_js_1 = require("../../../utils/formatters.js");
|
|
10
|
-
Object.defineProperty(exports, "formatDecodedCalldata", { enumerable: true, get: function () { return formatters_js_1.formatDecodedCalldata; } });
|
|
11
|
-
Object.defineProperty(exports, "filterVisibleLines", { enumerable: true, get: function () { return formatters_js_1.filterVisibleLines; } });
|
|
12
|
-
Object.defineProperty(exports, "getAllFoldableKeys", { enumerable: true, get: function () { return formatters_js_1.getAllFoldableKeys; } });
|
|
13
|
-
Object.defineProperty(exports, "toggleFoldKey", { enumerable: true, get: function () { return formatters_js_1.toggleFoldKey; } });
|
|
14
|
-
//# sourceMappingURL=calldata-formatter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"calldata-formatter.js","sourceRoot":"","sources":["../../../../src/cli/tui/utils/calldata-formatter.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,8DAMsC;AAJpC,sHAAA,qBAAqB,OAAA;AACrB,mHAAA,kBAAkB,OAAA;AAClB,mHAAA,kBAAkB,OAAA;AAClB,8GAAA,aAAa,OAAA"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stage data formatting utilities for StageView
|
|
3
|
-
*
|
|
4
|
-
* Re-exports from core SDK formatters for backward compatibility.
|
|
5
|
-
*/
|
|
6
|
-
export { CHAIN_TO_CHAIN_ID, safeStringify, formatValue, type StageDataItem, formatStageData, } from "../../../utils/formatters.js";
|
|
7
|
-
//# sourceMappingURL=stage-formatter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stage-formatter.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/utils/stage-formatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,KAAK,aAAa,EAClB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Stage data formatting utilities for StageView
|
|
4
|
-
*
|
|
5
|
-
* Re-exports from core SDK formatters for backward compatibility.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.formatStageData = exports.formatValue = exports.safeStringify = exports.CHAIN_TO_CHAIN_ID = void 0;
|
|
9
|
-
var formatters_js_1 = require("../../../utils/formatters.js");
|
|
10
|
-
Object.defineProperty(exports, "CHAIN_TO_CHAIN_ID", { enumerable: true, get: function () { return formatters_js_1.CHAIN_TO_CHAIN_ID; } });
|
|
11
|
-
Object.defineProperty(exports, "safeStringify", { enumerable: true, get: function () { return formatters_js_1.safeStringify; } });
|
|
12
|
-
Object.defineProperty(exports, "formatValue", { enumerable: true, get: function () { return formatters_js_1.formatValue; } });
|
|
13
|
-
Object.defineProperty(exports, "formatStageData", { enumerable: true, get: function () { return formatters_js_1.formatStageData; } });
|
|
14
|
-
//# sourceMappingURL=stage-formatter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stage-formatter.js","sourceRoot":"","sources":["../../../../src/cli/tui/utils/stage-formatter.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,8DAMsC;AALpC,kHAAA,iBAAiB,OAAA;AACjB,8GAAA,aAAa,OAAA;AACb,4GAAA,WAAW,OAAA;AAEX,gHAAA,eAAe,OAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/utils/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Shared text utilities for TUI views
|
|
4
|
-
*
|
|
5
|
-
* Re-exports from core SDK formatters for backward compatibility.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.truncate = exports.wrapText = void 0;
|
|
9
|
-
var formatters_js_1 = require("../../../utils/formatters.js");
|
|
10
|
-
Object.defineProperty(exports, "wrapText", { enumerable: true, get: function () { return formatters_js_1.wrapText; } });
|
|
11
|
-
Object.defineProperty(exports, "truncate", { enumerable: true, get: function () { return formatters_js_1.truncate; } });
|
|
12
|
-
//# sourceMappingURL=text.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../src/cli/tui/utils/text.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,8DAAkE;AAAzD,yGAAA,QAAQ,OAAA;AAAE,yGAAA,QAAQ,OAAA"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ethers } from "ethers";
|
|
2
|
-
import { ElectionProposalStatus, ElectionStatus, PreparedTransaction } from "../types";
|
|
3
|
-
export interface PreparedElectionCreation {
|
|
4
|
-
transaction: PreparedTransaction;
|
|
5
|
-
electionIndex: number;
|
|
6
|
-
}
|
|
7
|
-
export declare function prepareElectionCreation(electionStatus: Pick<ElectionStatus, "electionCount">, nomineeGovernorAddress?: string): PreparedElectionCreation;
|
|
8
|
-
export declare function prepareMemberElectionTrigger(electionStatus: Pick<ElectionProposalStatus, "electionIndex" | "canProceedToMemberPhase">, provider: ethers.providers.Provider, nomineeGovernorAddress?: string): Promise<PreparedTransaction | null>;
|
|
9
|
-
export declare function prepareMemberElectionExecution(electionStatus: Pick<ElectionProposalStatus, "electionIndex" | "canExecuteMember">, provider: ethers.providers.Provider, memberGovernorAddress?: string): Promise<PreparedTransaction | null>;
|
|
10
|
-
//# sourceMappingURL=prepare.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/election/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAWvF,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,mBAAmB,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,EACrD,sBAAsB,GAAE,MAA4C,GACnE,wBAAwB,CAe1B;AAED,wBAAsB,4BAA4B,CAChD,cAAc,EAAE,IAAI,CAAC,sBAAsB,EAAE,eAAe,GAAG,yBAAyB,CAAC,EACzF,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,sBAAsB,GAAE,MAA4C,GACnE,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAwBrC;AAED,wBAAsB,8BAA8B,CAClD,cAAc,EAAE,IAAI,CAAC,sBAAsB,EAAE,eAAe,GAAG,kBAAkB,CAAC,EAClF,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,qBAAqB,GAAE,MAA2C,GACjE,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAwBrC"}
|
package/dist/election/prepare.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prepareElectionCreation = prepareElectionCreation;
|
|
4
|
-
exports.prepareMemberElectionTrigger = prepareMemberElectionTrigger;
|
|
5
|
-
exports.prepareMemberElectionExecution = prepareMemberElectionExecution;
|
|
6
|
-
const constants_1 = require("../constants");
|
|
7
|
-
const logger_1 = require("../utils/logger");
|
|
8
|
-
const contracts_1 = require("./contracts");
|
|
9
|
-
const params_1 = require("./params");
|
|
10
|
-
const log = logger_1.loggers.election;
|
|
11
|
-
function prepareElectionCreation(electionStatus, nomineeGovernorAddress = constants_1.ADDRESSES.ELECTION_NOMINEE_GOVERNOR) {
|
|
12
|
-
const governor = (0, contracts_1.getNomineeGovernor)(nomineeGovernorAddress);
|
|
13
|
-
const calldata = governor.interface.encodeFunctionData("createElection", []);
|
|
14
|
-
return {
|
|
15
|
-
transaction: {
|
|
16
|
-
to: nomineeGovernorAddress,
|
|
17
|
-
data: calldata,
|
|
18
|
-
value: "0",
|
|
19
|
-
chain: "arb1",
|
|
20
|
-
chainId: 42161,
|
|
21
|
-
description: `createElection() on SecurityCouncilNomineeElectionGovernor for election #${electionStatus.electionCount}`,
|
|
22
|
-
},
|
|
23
|
-
electionIndex: electionStatus.electionCount,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
async function prepareMemberElectionTrigger(electionStatus, provider, nomineeGovernorAddress = constants_1.ADDRESSES.ELECTION_NOMINEE_GOVERNOR) {
|
|
27
|
-
log("prepareMemberElectionTrigger for election %d", electionStatus.electionIndex);
|
|
28
|
-
if (!electionStatus.canProceedToMemberPhase) {
|
|
29
|
-
log("Cannot proceed to member phase - not ready");
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
const params = await (0, params_1.getElectionProposalParams)(electionStatus.electionIndex, provider, nomineeGovernorAddress);
|
|
33
|
-
if (!params) {
|
|
34
|
-
log("Could not find proposal params for election %d", electionStatus.electionIndex);
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
return (0, params_1.buildExecuteTransaction)(params, nomineeGovernorAddress, `execute() on NomineeElectionGovernor to trigger member election #${electionStatus.electionIndex}`);
|
|
38
|
-
}
|
|
39
|
-
async function prepareMemberElectionExecution(electionStatus, provider, memberGovernorAddress = constants_1.ADDRESSES.ELECTION_MEMBER_GOVERNOR) {
|
|
40
|
-
log("prepareMemberElectionExecution for election %d", electionStatus.electionIndex);
|
|
41
|
-
if (!electionStatus.canExecuteMember) {
|
|
42
|
-
log("Cannot execute member election - not ready");
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
const params = await (0, params_1.getMemberElectionProposalParams)(electionStatus.electionIndex, provider, memberGovernorAddress);
|
|
46
|
-
if (!params) {
|
|
47
|
-
log("Could not find proposal params for member election %d", electionStatus.electionIndex);
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
return (0, params_1.buildExecuteTransaction)(params, memberGovernorAddress, `execute() on MemberElectionGovernor to install new Security Council members for election #${electionStatus.electionIndex}`);
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=prepare.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/election/prepare.ts"],"names":[],"mappings":";;AAkBA,0DAkBC;AAED,oEA4BC;AAED,wEA4BC;AA/FD,4CAAyC;AAEzC,4CAA0C;AAC1C,2CAAiD;AACjD,qCAIkB;AAElB,MAAM,GAAG,GAAG,gBAAO,CAAC,QAAQ,CAAC;AAO7B,SAAgB,uBAAuB,CACrC,cAAqD,EACrD,yBAAiC,qBAAS,CAAC,yBAAyB;IAEpE,MAAM,QAAQ,GAAG,IAAA,8BAAkB,EAAC,sBAAsB,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAE7E,OAAO;QACL,WAAW,EAAE;YACX,EAAE,EAAE,sBAAsB;YAC1B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,4EAA4E,cAAc,CAAC,aAAa,EAAE;SACxH;QACD,aAAa,EAAE,cAAc,CAAC,aAAa;KAC5C,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,4BAA4B,CAChD,cAAyF,EACzF,QAAmC,EACnC,yBAAiC,qBAAS,CAAC,yBAAyB;IAEpE,GAAG,CAAC,8CAA8C,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAElF,IAAI,CAAC,cAAc,CAAC,uBAAuB,EAAE,CAAC;QAC5C,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAyB,EAC5C,cAAc,CAAC,aAAa,EAC5B,QAAQ,EACR,sBAAsB,CACvB,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,gDAAgD,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAA,gCAAuB,EAC5B,MAAM,EACN,sBAAsB,EACtB,oEAAoE,cAAc,CAAC,aAAa,EAAE,CACnG,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,8BAA8B,CAClD,cAAkF,EAClF,QAAmC,EACnC,wBAAgC,qBAAS,CAAC,wBAAwB;IAElE,GAAG,CAAC,gDAAgD,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAEpF,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QACrC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,wCAA+B,EAClD,cAAc,CAAC,aAAa,EAC5B,QAAQ,EACR,qBAAqB,CACtB,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,uDAAuD,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAA,gCAAuB,EAC5B,MAAM,EACN,qBAAqB,EACrB,6FAA6F,cAAc,CAAC,aAAa,EAAE,CAC5H,CAAC;AACJ,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ethers } from "ethers";
|
|
2
|
-
import { ElectionProposalStatus } from "../types";
|
|
3
|
-
export declare function trackElectionProposal(electionIndex: number, l2Provider: ethers.providers.Provider, l1Provider: ethers.providers.Provider, options?: {
|
|
4
|
-
nomineeGovernorAddress?: string;
|
|
5
|
-
memberGovernorAddress?: string;
|
|
6
|
-
novaProvider?: ethers.providers.Provider;
|
|
7
|
-
l2BlockNumber?: number;
|
|
8
|
-
timestamp?: number;
|
|
9
|
-
skipCache?: boolean;
|
|
10
|
-
}): Promise<ElectionProposalStatus>;
|
|
11
|
-
export declare function trackAllElections(l2Provider: ethers.providers.Provider, l1Provider: ethers.providers.Provider, options?: {
|
|
12
|
-
includeNext?: boolean;
|
|
13
|
-
novaProvider?: ethers.providers.Provider;
|
|
14
|
-
l2BlockNumber?: number;
|
|
15
|
-
timestamp?: number;
|
|
16
|
-
skipCache?: boolean;
|
|
17
|
-
}): Promise<ElectionProposalStatus[]>;
|
|
18
|
-
export declare function trackIncompleteElections(l2Provider: ethers.providers.Provider, l1Provider: ethers.providers.Provider, options?: {
|
|
19
|
-
novaProvider?: ethers.providers.Provider;
|
|
20
|
-
l2BlockNumber?: number;
|
|
21
|
-
timestamp?: number;
|
|
22
|
-
skipCache?: boolean;
|
|
23
|
-
}): Promise<ElectionProposalStatus[]>;
|
|
24
|
-
export declare function getElectionIndexForProposalId(proposalId: string, l2Provider: ethers.providers.Provider, l1Provider: ethers.providers.Provider, options?: {
|
|
25
|
-
novaProvider?: ethers.providers.Provider;
|
|
26
|
-
blockNumber?: number;
|
|
27
|
-
}): Promise<number | null>;
|
|
28
|
-
//# sourceMappingURL=tracking.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracking.d.ts","sourceRoot":"","sources":["../../src/election/tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAC;AAG3C,OAAO,EAEL,sBAAsB,EAIvB,MAAM,UAAU,CAAC;AA0MlB,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,OAAO,GAAE;IACP,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,OAAO,CAAC,sBAAsB,CAAC,CA4QjC;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA+CnC;AAED,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAQnC;AAED,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/E,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoCxB"}
|
|
@@ -1,412 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.trackElectionProposal = trackElectionProposal;
|
|
4
|
-
exports.trackAllElections = trackAllElections;
|
|
5
|
-
exports.trackIncompleteElections = trackIncompleteElections;
|
|
6
|
-
exports.getElectionIndexForProposalId = getElectionIndexForProposalId;
|
|
7
|
-
const ethers_1 = require("ethers");
|
|
8
|
-
const constants_1 = require("../constants");
|
|
9
|
-
const rpc_utils_1 = require("../utils/rpc-utils");
|
|
10
|
-
const builder_1 = require("../stages/builder");
|
|
11
|
-
const timing_1 = require("../utils/timing");
|
|
12
|
-
const logger_1 = require("../utils/logger");
|
|
13
|
-
const abis_1 = require("../abis");
|
|
14
|
-
const contracts_1 = require("./contracts");
|
|
15
|
-
const proposal_ids_1 = require("./proposal-ids");
|
|
16
|
-
const multicall_1 = require("../utils/multicall");
|
|
17
|
-
const timelock_discovery_1 = require("../discovery/timelock-discovery");
|
|
18
|
-
const timelock_1 = require("../stages/timelock");
|
|
19
|
-
const l2_to_l1_message_1 = require("../stages/l2-to-l1-message");
|
|
20
|
-
const retryables_1 = require("../stages/retryables");
|
|
21
|
-
const status_1 = require("./status");
|
|
22
|
-
const log_search_1 = require("../utils/log-search");
|
|
23
|
-
const log = logger_1.loggers.election;
|
|
24
|
-
async function findElectionCreationTxHash(proposalId, governorAddress, provider, electionIndex, l2ChunkSize = constants_1.CHUNK_SIZES.L2) {
|
|
25
|
-
const governor = (0, contracts_1.getNomineeGovernor)(governorAddress, provider);
|
|
26
|
-
const topic = abis_1.proposalCreatedInterface.getEventTopic("ProposalCreated");
|
|
27
|
-
const snapshotL1 = await (0, rpc_utils_1.queryWithRetry)(() => governor.proposalSnapshot(proposalId));
|
|
28
|
-
const ELECTION_VOTING_DELAY_L1_BLOCKS = 7 * 24 * 60 * 5; // 50400 blocks
|
|
29
|
-
const creationL1Block = electionIndex === 0
|
|
30
|
-
? snapshotL1.toNumber()
|
|
31
|
-
: snapshotL1.toNumber() - ELECTION_VOTING_DELAY_L1_BLOCKS;
|
|
32
|
-
const creationL2 = await (0, timing_1.getFirstL2BlockForL1Block)(provider, creationL1Block);
|
|
33
|
-
if (!creationL2) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
const searchRange = Math.min(l2ChunkSize, 100000);
|
|
37
|
-
const fromBlock = Math.max(0, creationL2 - searchRange);
|
|
38
|
-
const toBlock = creationL2 + searchRange;
|
|
39
|
-
const matchingLog = await (0, log_search_1.findLog)(provider, { address: governorAddress, topics: [topic], fromBlock, toBlock }, (eventLog) => {
|
|
40
|
-
try {
|
|
41
|
-
const parsed = abis_1.proposalCreatedInterface.parseLog(eventLog);
|
|
42
|
-
const args = parsed.args;
|
|
43
|
-
return args.proposalId.toString() === proposalId;
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
}, { chunkSize: l2ChunkSize });
|
|
49
|
-
if (!matchingLog) {
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
return {
|
|
53
|
-
txHash: matchingLog.transactionHash,
|
|
54
|
-
blockNumber: matchingLog.blockNumber,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
async function findElectionExecuteTxHash(proposalId, governorAddress, provider, l2ChunkSize = constants_1.CHUNK_SIZES.L2) {
|
|
58
|
-
const governor = (0, contracts_1.getNomineeGovernor)(governorAddress, provider);
|
|
59
|
-
const topic = abis_1.proposalExecutedInterface.getEventTopic("ProposalExecuted");
|
|
60
|
-
const snapshotL1 = await (0, rpc_utils_1.queryWithRetry)(() => governor.proposalSnapshot(proposalId));
|
|
61
|
-
const snapshotL2 = await (0, timing_1.getFirstL2BlockForL1Block)(provider, snapshotL1.toNumber());
|
|
62
|
-
if (!snapshotL2) {
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
const currentBlock = await (0, rpc_utils_1.queryWithRetry)(() => provider.getBlockNumber());
|
|
66
|
-
const matchingLog = await (0, log_search_1.findLog)(provider, { address: governorAddress, topics: [topic], fromBlock: snapshotL2, toBlock: currentBlock }, (eventLog) => {
|
|
67
|
-
try {
|
|
68
|
-
const parsed = abis_1.proposalExecutedInterface.parseLog(eventLog);
|
|
69
|
-
return parsed.args.proposalId.toString() === proposalId;
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
}, { chunkSize: l2ChunkSize });
|
|
75
|
-
if (!matchingLog) {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
txHash: matchingLog.transactionHash,
|
|
80
|
-
blockNumber: matchingLog.blockNumber,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
async function trackPostMemberExecuteStages(memberExecuteTxHash, memberExecuteBlock, l2Provider, l1Provider, novaProvider, l2ChunkSize = constants_1.CHUNK_SIZES.L2) {
|
|
84
|
-
const result = {};
|
|
85
|
-
const callScheduledEvents = await (0, timelock_discovery_1.findCallScheduledByTxHash)(memberExecuteTxHash, l2Provider);
|
|
86
|
-
if (!callScheduledEvents || callScheduledEvents.length === 0) {
|
|
87
|
-
log("No CallScheduled event found in member execute tx %s", memberExecuteTxHash);
|
|
88
|
-
return result;
|
|
89
|
-
}
|
|
90
|
-
const firstEvent = callScheduledEvents[0];
|
|
91
|
-
result.operationId = firstEvent.operationId;
|
|
92
|
-
log("Found L2 timelock operation %s from member execute", firstEvent.operationId);
|
|
93
|
-
const l2TimelockResult = await (0, timelock_1.trackL2Timelock)(firstEvent.timelockAddress, firstEvent.operationId, l2Provider, memberExecuteBlock, firstEvent, { chunkSize: l2ChunkSize });
|
|
94
|
-
result.l2TimelockStage = l2TimelockResult.stage;
|
|
95
|
-
if (l2TimelockResult.stage.status !== "COMPLETED" || !l2TimelockResult.executionTxHash) {
|
|
96
|
-
return result;
|
|
97
|
-
}
|
|
98
|
-
result.l2ExecutionTxHash = l2TimelockResult.executionTxHash;
|
|
99
|
-
const l2ToL1Result = await (0, l2_to_l1_message_1.trackL2ToL1Message)(l2TimelockResult.executionTxHash, l2Provider, l1Provider, { chunkSize: l2ChunkSize });
|
|
100
|
-
result.l2ToL1Stage = l2ToL1Result.stage;
|
|
101
|
-
if (l2ToL1Result.stage.status !== "COMPLETED" || !l2ToL1Result.outboxExecutionTx) {
|
|
102
|
-
return result;
|
|
103
|
-
}
|
|
104
|
-
const l1TimelockResult = await (0, timelock_1.trackL1Timelock)(l1Provider, {
|
|
105
|
-
outboxExecutionTx: l2ToL1Result.outboxExecutionTx,
|
|
106
|
-
chunkSize: l2ChunkSize,
|
|
107
|
-
allStages: [l2ToL1Result.stage],
|
|
108
|
-
});
|
|
109
|
-
result.l1TimelockStage = l1TimelockResult.stage;
|
|
110
|
-
if (l1TimelockResult.stage.status !== "COMPLETED" || !l1TimelockResult.executionTxHash) {
|
|
111
|
-
return result;
|
|
112
|
-
}
|
|
113
|
-
result.l1ExecutionTxHash = l1TimelockResult.executionTxHash;
|
|
114
|
-
const retryableResult = await (0, retryables_1.trackRetryables)(l1TimelockResult.executionTxHash, l1Provider, {
|
|
115
|
-
l2Provider,
|
|
116
|
-
novaProvider,
|
|
117
|
-
});
|
|
118
|
-
result.retryableStage = retryableResult.stage;
|
|
119
|
-
return result;
|
|
120
|
-
}
|
|
121
|
-
async function trackElectionProposal(electionIndex, l2Provider, l1Provider, options = {}) {
|
|
122
|
-
const nomineeGovernorAddress = options.nomineeGovernorAddress ?? constants_1.ADDRESSES.ELECTION_NOMINEE_GOVERNOR;
|
|
123
|
-
const memberGovernorAddress = options.memberGovernorAddress ?? constants_1.ADDRESSES.ELECTION_MEMBER_GOVERNOR;
|
|
124
|
-
log("trackElectionProposal for index %d", electionIndex);
|
|
125
|
-
const nomineeGovernor = (0, contracts_1.getNomineeGovernor)(nomineeGovernorAddress, l2Provider);
|
|
126
|
-
const memberGovernor = (0, contracts_1.getMemberGovernor)(memberGovernorAddress, l2Provider);
|
|
127
|
-
const cohort = (await (0, rpc_utils_1.queryWithRetry)(() => nomineeGovernor.electionIndexToCohort(electionIndex)));
|
|
128
|
-
const nomineeProposalId = await (0, proposal_ids_1.getElectionProposalId)(electionIndex, l2Provider, nomineeGovernorAddress);
|
|
129
|
-
if (!nomineeProposalId) {
|
|
130
|
-
return {
|
|
131
|
-
electionIndex,
|
|
132
|
-
phase: "NOT_STARTED",
|
|
133
|
-
cohort,
|
|
134
|
-
nomineeProposalId: null,
|
|
135
|
-
memberProposalId: null,
|
|
136
|
-
nomineeProposalState: null,
|
|
137
|
-
memberProposalState: null,
|
|
138
|
-
compliantNomineeCount: 0,
|
|
139
|
-
targetNomineeCount: constants_1.TIMING.SECURITY_COUNCIL_TARGET_NOMINEES,
|
|
140
|
-
vettingDeadline: null,
|
|
141
|
-
isInVettingPeriod: false,
|
|
142
|
-
canProceedToMemberPhase: false,
|
|
143
|
-
canExecuteMember: false,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
const [nomineeResults, currentL1Block] = await Promise.all([
|
|
147
|
-
(0, multicall_1.multicall)(l2Provider, [
|
|
148
|
-
(0, multicall_1.buildCallInput)(nomineeGovernorAddress, abis_1.nomineeElectionGovernorInterface, "state", [
|
|
149
|
-
nomineeProposalId,
|
|
150
|
-
]),
|
|
151
|
-
(0, multicall_1.buildCallInput)(nomineeGovernorAddress, abis_1.nomineeElectionGovernorInterface, "proposalVettingDeadline", [nomineeProposalId]),
|
|
152
|
-
(0, multicall_1.buildCallInput)(nomineeGovernorAddress, abis_1.nomineeElectionGovernorInterface, "compliantNomineeCount", [nomineeProposalId]),
|
|
153
|
-
]),
|
|
154
|
-
(0, timing_1.getL1BlockNumberFromL2)(l2Provider),
|
|
155
|
-
]);
|
|
156
|
-
const nomineeState = nomineeResults[0];
|
|
157
|
-
const nomineeProposalState = (0, constants_1.proposalStateToString)(nomineeState);
|
|
158
|
-
const vettingDeadlineBN = nomineeResults[1] ?? ethers_1.BigNumber.from(0);
|
|
159
|
-
const vettingDeadline = vettingDeadlineBN.toNumber();
|
|
160
|
-
const compliantNomineeCount = (nomineeResults[2] ?? ethers_1.BigNumber.from(0)).toNumber();
|
|
161
|
-
const isInVettingPeriod = nomineeProposalState === "Succeeded" && currentL1Block.lte(vettingDeadlineBN);
|
|
162
|
-
let memberProposalId = null;
|
|
163
|
-
let memberProposalState = null;
|
|
164
|
-
const computedMemberProposalId = await (0, proposal_ids_1.computeElectionProposalId)(electionIndex, memberGovernor);
|
|
165
|
-
try {
|
|
166
|
-
const memberState = await (0, rpc_utils_1.queryWithRetry)(() => memberGovernor.state(computedMemberProposalId));
|
|
167
|
-
memberProposalId = computedMemberProposalId;
|
|
168
|
-
memberProposalState = (0, constants_1.proposalStateToString)(memberState);
|
|
169
|
-
}
|
|
170
|
-
catch {
|
|
171
|
-
// Member election not yet created
|
|
172
|
-
}
|
|
173
|
-
const phase = (0, status_1.determineElectionPhase)(nomineeProposalState, memberProposalId, memberProposalState, isInVettingPeriod);
|
|
174
|
-
const canProceedToMemberPhase = nomineeProposalState === "Succeeded" &&
|
|
175
|
-
!isInVettingPeriod &&
|
|
176
|
-
compliantNomineeCount >= constants_1.TIMING.SECURITY_COUNCIL_TARGET_NOMINEES &&
|
|
177
|
-
!memberProposalId;
|
|
178
|
-
const canExecuteMember = memberProposalState === "Succeeded";
|
|
179
|
-
const stages = [];
|
|
180
|
-
let creationTxHash;
|
|
181
|
-
let nomineeExecuteTxHash;
|
|
182
|
-
let memberExecuteTxHash;
|
|
183
|
-
let failureReason;
|
|
184
|
-
const createStage = new builder_1.StageBuilder("CREATE_ELECTION", "arb1").status("COMPLETED").data({
|
|
185
|
-
electionIndex,
|
|
186
|
-
cohort,
|
|
187
|
-
startTimestamp: 0,
|
|
188
|
-
nomineeProposalId,
|
|
189
|
-
});
|
|
190
|
-
try {
|
|
191
|
-
const creationEvent = await findElectionCreationTxHash(nomineeProposalId, nomineeGovernorAddress, l2Provider, electionIndex);
|
|
192
|
-
if (creationEvent) {
|
|
193
|
-
creationTxHash = creationEvent.txHash;
|
|
194
|
-
createStage.tx(creationEvent.txHash, creationEvent.blockNumber, "arb1", 42161);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
// TX hash discovery failed, continue without it
|
|
199
|
-
}
|
|
200
|
-
stages.push(createStage.build());
|
|
201
|
-
const nomineeElectionStage = new builder_1.StageBuilder("NOMINEE_ELECTION", "arb1").data({
|
|
202
|
-
nomineeProposalId,
|
|
203
|
-
proposalState: nomineeProposalState,
|
|
204
|
-
contenderCount: 0,
|
|
205
|
-
compliantNomineeCount,
|
|
206
|
-
targetNomineeCount: constants_1.TIMING.SECURITY_COUNCIL_TARGET_NOMINEES,
|
|
207
|
-
});
|
|
208
|
-
if (nomineeProposalState === "Active" || nomineeProposalState === "Pending") {
|
|
209
|
-
nomineeElectionStage.status("PENDING");
|
|
210
|
-
}
|
|
211
|
-
else if (nomineeProposalState === "Defeated" || nomineeProposalState === "Canceled") {
|
|
212
|
-
nomineeElectionStage.status("FAILED");
|
|
213
|
-
failureReason = `Nominee election ${nomineeProposalState.toLowerCase()}`;
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
nomineeElectionStage.status("COMPLETED");
|
|
217
|
-
}
|
|
218
|
-
stages.push(nomineeElectionStage.build());
|
|
219
|
-
if (nomineeProposalState === "Succeeded" || nomineeProposalState === "Executed") {
|
|
220
|
-
const vettingStage = new builder_1.StageBuilder("NOMINEE_VETTING", "arb1").data({
|
|
221
|
-
nomineeProposalId,
|
|
222
|
-
vettingDeadline,
|
|
223
|
-
currentL1Block: currentL1Block.toNumber(),
|
|
224
|
-
compliantNomineeCount,
|
|
225
|
-
memberProposalId: memberProposalId ?? undefined,
|
|
226
|
-
});
|
|
227
|
-
if (nomineeProposalState === "Executed" || memberProposalId) {
|
|
228
|
-
vettingStage.status("COMPLETED");
|
|
229
|
-
try {
|
|
230
|
-
const executeEvent = await findElectionExecuteTxHash(nomineeProposalId, nomineeGovernorAddress, l2Provider);
|
|
231
|
-
if (executeEvent) {
|
|
232
|
-
nomineeExecuteTxHash = executeEvent.txHash;
|
|
233
|
-
vettingStage.tx(executeEvent.txHash, executeEvent.blockNumber, "arb1", 42161);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
catch {
|
|
237
|
-
// TX hash discovery failed, continue without it
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
else if (canProceedToMemberPhase) {
|
|
241
|
-
vettingStage.status("READY");
|
|
242
|
-
}
|
|
243
|
-
else if (isInVettingPeriod) {
|
|
244
|
-
vettingStage.status("PENDING");
|
|
245
|
-
}
|
|
246
|
-
else if (compliantNomineeCount < constants_1.TIMING.SECURITY_COUNCIL_TARGET_NOMINEES) {
|
|
247
|
-
vettingStage.status("FAILED");
|
|
248
|
-
failureReason = `Only ${compliantNomineeCount}/${constants_1.TIMING.SECURITY_COUNCIL_TARGET_NOMINEES} compliant nominees`;
|
|
249
|
-
}
|
|
250
|
-
stages.push(vettingStage.build());
|
|
251
|
-
}
|
|
252
|
-
let timelockOperationId;
|
|
253
|
-
let memberExecuteBlock;
|
|
254
|
-
if (memberProposalId && memberProposalState) {
|
|
255
|
-
const memberStage = new builder_1.StageBuilder("MEMBER_ELECTION", "arb1").data({
|
|
256
|
-
memberProposalId,
|
|
257
|
-
proposalState: memberProposalState,
|
|
258
|
-
winnersCount: 0,
|
|
259
|
-
});
|
|
260
|
-
if (memberProposalState === "Active" || memberProposalState === "Pending") {
|
|
261
|
-
memberStage.status("PENDING");
|
|
262
|
-
}
|
|
263
|
-
else if (memberProposalState === "Succeeded") {
|
|
264
|
-
memberStage.status("READY");
|
|
265
|
-
}
|
|
266
|
-
else if (memberProposalState === "Executed") {
|
|
267
|
-
memberStage.status("COMPLETED");
|
|
268
|
-
try {
|
|
269
|
-
const executeEvent = await findElectionExecuteTxHash(memberProposalId, memberGovernorAddress, l2Provider);
|
|
270
|
-
if (executeEvent) {
|
|
271
|
-
memberExecuteTxHash = executeEvent.txHash;
|
|
272
|
-
memberExecuteBlock = executeEvent.blockNumber;
|
|
273
|
-
memberStage.tx(executeEvent.txHash, executeEvent.blockNumber, "arb1", 42161);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
catch {
|
|
277
|
-
// TX hash discovery failed, continue without it
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
else if (memberProposalState === "Defeated" || memberProposalState === "Canceled") {
|
|
281
|
-
memberStage.status("FAILED");
|
|
282
|
-
failureReason = `Member election ${memberProposalState.toLowerCase()}`;
|
|
283
|
-
}
|
|
284
|
-
stages.push(memberStage.build());
|
|
285
|
-
}
|
|
286
|
-
if (memberProposalState === "Executed" && memberExecuteTxHash && memberExecuteBlock) {
|
|
287
|
-
try {
|
|
288
|
-
const postExecuteResult = await trackPostMemberExecuteStages(memberExecuteTxHash, memberExecuteBlock, l2Provider, l1Provider, options.novaProvider);
|
|
289
|
-
timelockOperationId = postExecuteResult.operationId;
|
|
290
|
-
if (postExecuteResult.l2TimelockStage) {
|
|
291
|
-
stages.push(postExecuteResult.l2TimelockStage);
|
|
292
|
-
}
|
|
293
|
-
if (postExecuteResult.l2ToL1Stage) {
|
|
294
|
-
stages.push(postExecuteResult.l2ToL1Stage);
|
|
295
|
-
}
|
|
296
|
-
if (postExecuteResult.l1TimelockStage) {
|
|
297
|
-
stages.push(postExecuteResult.l1TimelockStage);
|
|
298
|
-
}
|
|
299
|
-
if (postExecuteResult.retryableStage) {
|
|
300
|
-
stages.push(postExecuteResult.retryableStage);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
catch (err) {
|
|
304
|
-
log("Failed to track post-member-execute stages: %s", err.message);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
return {
|
|
308
|
-
electionIndex,
|
|
309
|
-
phase,
|
|
310
|
-
cohort,
|
|
311
|
-
nomineeProposalId,
|
|
312
|
-
memberProposalId,
|
|
313
|
-
nomineeProposalState,
|
|
314
|
-
memberProposalState,
|
|
315
|
-
compliantNomineeCount,
|
|
316
|
-
targetNomineeCount: constants_1.TIMING.SECURITY_COUNCIL_TARGET_NOMINEES,
|
|
317
|
-
vettingDeadline,
|
|
318
|
-
isInVettingPeriod,
|
|
319
|
-
canProceedToMemberPhase,
|
|
320
|
-
canExecuteMember,
|
|
321
|
-
stages,
|
|
322
|
-
isFailed: failureReason ? true : undefined,
|
|
323
|
-
failureReason,
|
|
324
|
-
timelockOperationId,
|
|
325
|
-
creationTxHash,
|
|
326
|
-
nomineeExecuteTxHash,
|
|
327
|
-
memberExecuteTxHash,
|
|
328
|
-
};
|
|
329
|
-
}
|
|
330
|
-
async function trackAllElections(l2Provider, l1Provider, options = {}) {
|
|
331
|
-
log("trackAllElections: fetching all active elections");
|
|
332
|
-
const status = await (0, status_1.checkElectionStatus)(l2Provider, l1Provider);
|
|
333
|
-
const electionCount = status.electionCount;
|
|
334
|
-
const results = [];
|
|
335
|
-
for (let i = 0; i < electionCount; i++) {
|
|
336
|
-
try {
|
|
337
|
-
const electionStatus = await trackElectionProposal(i, l2Provider, l1Provider, {
|
|
338
|
-
novaProvider: options.novaProvider,
|
|
339
|
-
l2BlockNumber: options.l2BlockNumber,
|
|
340
|
-
timestamp: options.timestamp,
|
|
341
|
-
skipCache: options.skipCache,
|
|
342
|
-
});
|
|
343
|
-
results.push(electionStatus);
|
|
344
|
-
}
|
|
345
|
-
catch (err) {
|
|
346
|
-
log("Failed to track election %d: %s", i, err);
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
if (options.includeNext ?? true) {
|
|
350
|
-
try {
|
|
351
|
-
const nextElectionStatus = await trackElectionProposal(electionCount, l2Provider, l1Provider, {
|
|
352
|
-
novaProvider: options.novaProvider,
|
|
353
|
-
l2BlockNumber: options.l2BlockNumber,
|
|
354
|
-
timestamp: options.timestamp,
|
|
355
|
-
skipCache: options.skipCache,
|
|
356
|
-
});
|
|
357
|
-
results.push({
|
|
358
|
-
...nextElectionStatus,
|
|
359
|
-
canCreateElection: status.canCreateElection,
|
|
360
|
-
secondsUntilElection: status.secondsUntilElection,
|
|
361
|
-
timeUntilElection: status.timeUntilElection,
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
catch (err) {
|
|
365
|
-
log("Failed to track next election %d: %s", electionCount, err);
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
log("Tracked %d elections", results.length);
|
|
369
|
-
return results;
|
|
370
|
-
}
|
|
371
|
-
async function trackIncompleteElections(l2Provider, l1Provider, options = {}) {
|
|
372
|
-
const all = await trackAllElections(l2Provider, l1Provider, {
|
|
373
|
-
novaProvider: options.novaProvider,
|
|
374
|
-
l2BlockNumber: options.l2BlockNumber,
|
|
375
|
-
timestamp: options.timestamp,
|
|
376
|
-
skipCache: options.skipCache,
|
|
377
|
-
});
|
|
378
|
-
return all.filter((e) => e.phase !== "COMPLETED");
|
|
379
|
-
}
|
|
380
|
-
async function getElectionIndexForProposalId(proposalId, l2Provider, l1Provider, options = {}) {
|
|
381
|
-
const { blockNumber } = options;
|
|
382
|
-
log("getElectionIndexForProposalId: searching for proposal %s", proposalId);
|
|
383
|
-
const status = await (0, status_1.checkElectionStatus)(l2Provider, l1Provider);
|
|
384
|
-
const electionCount = status.electionCount;
|
|
385
|
-
for (let i = electionCount - 1; i >= 0; i--) {
|
|
386
|
-
log("checking election %d", i);
|
|
387
|
-
try {
|
|
388
|
-
const { nomineeProposalId, memberProposalId } = await (0, proposal_ids_1.getElectionProposalIds)(i, l2Provider, {
|
|
389
|
-
blockNumber,
|
|
390
|
-
});
|
|
391
|
-
log("got election %d proposal IDs", i);
|
|
392
|
-
const nomMatch = nomineeProposalId === proposalId;
|
|
393
|
-
const memMatch = memberProposalId === proposalId;
|
|
394
|
-
log("election %d: nomId=%s nomMatch=%s", i, nomineeProposalId, nomMatch);
|
|
395
|
-
if (nomMatch) {
|
|
396
|
-
log("Found proposal %s as nominee proposal for election %d", proposalId, i);
|
|
397
|
-
return i;
|
|
398
|
-
}
|
|
399
|
-
if (memMatch) {
|
|
400
|
-
log("Found proposal %s as member proposal for election %d", proposalId, i);
|
|
401
|
-
return i;
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
catch (err) {
|
|
405
|
-
log(" -> error: %s", err.message);
|
|
406
|
-
continue;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
log("Proposal %s not found in any election", proposalId);
|
|
410
|
-
return null;
|
|
411
|
-
}
|
|
412
|
-
//# sourceMappingURL=tracking.js.map
|