@gzeoneth/gov-tracker 0.2.1-beta.e9f73a3 → 0.2.1-beta.f5af747

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +114 -88
  2. package/dist/abis.d.ts +3 -0
  3. package/dist/abis.d.ts.map +1 -1
  4. package/dist/abis.js +30 -2
  5. package/dist/abis.js.map +1 -1
  6. package/dist/cli/cli.js +266 -27
  7. package/dist/cli/cli.js.map +1 -1
  8. package/dist/cli/lib/cli.d.ts +48 -2
  9. package/dist/cli/lib/cli.d.ts.map +1 -1
  10. package/dist/cli/lib/cli.js +356 -63
  11. package/dist/cli/lib/cli.js.map +1 -1
  12. package/dist/cli/lib/json-state.d.ts +23 -0
  13. package/dist/cli/lib/json-state.d.ts.map +1 -1
  14. package/dist/cli/lib/json-state.js +51 -4
  15. package/dist/cli/lib/json-state.js.map +1 -1
  16. package/dist/constants.d.ts +9 -1
  17. package/dist/constants.d.ts.map +1 -1
  18. package/dist/constants.js +16 -1
  19. package/dist/constants.js.map +1 -1
  20. package/dist/data/bundled-cache.json +3720 -1240
  21. package/dist/deduplication.d.ts +132 -0
  22. package/dist/deduplication.d.ts.map +1 -0
  23. package/dist/deduplication.js +270 -0
  24. package/dist/deduplication.js.map +1 -0
  25. package/dist/discovery/governor-discovery.d.ts.map +1 -1
  26. package/dist/discovery/governor-discovery.js +50 -35
  27. package/dist/discovery/governor-discovery.js.map +1 -1
  28. package/dist/discovery/timelock-discovery.d.ts +15 -6
  29. package/dist/discovery/timelock-discovery.d.ts.map +1 -1
  30. package/dist/discovery/timelock-discovery.js +27 -11
  31. package/dist/discovery/timelock-discovery.js.map +1 -1
  32. package/dist/election/contracts.d.ts +8 -0
  33. package/dist/election/contracts.d.ts.map +1 -0
  34. package/dist/election/contracts.js +28 -0
  35. package/dist/election/contracts.js.map +1 -0
  36. package/dist/election/details.d.ts +5 -0
  37. package/dist/election/details.d.ts.map +1 -0
  38. package/dist/election/details.js +95 -0
  39. package/dist/election/details.js.map +1 -0
  40. package/dist/election/index.d.ts +11 -0
  41. package/dist/election/index.d.ts.map +1 -0
  42. package/dist/election/index.js +45 -0
  43. package/dist/election/index.js.map +1 -0
  44. package/dist/election/params.d.ts +13 -0
  45. package/dist/election/params.d.ts.map +1 -0
  46. package/dist/election/params.js +93 -0
  47. package/dist/election/params.js.map +1 -0
  48. package/dist/election/participants.d.ts +6 -0
  49. package/dist/election/participants.d.ts.map +1 -0
  50. package/dist/election/participants.js +102 -0
  51. package/dist/election/participants.js.map +1 -0
  52. package/dist/election/prepare.d.ts +10 -0
  53. package/dist/election/prepare.d.ts.map +1 -0
  54. package/dist/election/prepare.js +52 -0
  55. package/dist/election/prepare.js.map +1 -0
  56. package/dist/election/proposal-ids.d.ts +18 -0
  57. package/dist/election/proposal-ids.d.ts.map +1 -0
  58. package/dist/election/proposal-ids.js +77 -0
  59. package/dist/election/proposal-ids.js.map +1 -0
  60. package/dist/election/status.d.ts +6 -0
  61. package/dist/election/status.d.ts.map +1 -0
  62. package/dist/election/status.js +86 -0
  63. package/dist/election/status.js.map +1 -0
  64. package/dist/election/tracking.d.ts +28 -0
  65. package/dist/election/tracking.d.ts.map +1 -0
  66. package/dist/election/tracking.js +412 -0
  67. package/dist/election/tracking.js.map +1 -0
  68. package/dist/index.d.ts +9 -5
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +62 -7
  71. package/dist/index.js.map +1 -1
  72. package/dist/stages/builder.d.ts +4 -0
  73. package/dist/stages/builder.d.ts.map +1 -1
  74. package/dist/stages/builder.js +7 -0
  75. package/dist/stages/builder.js.map +1 -1
  76. package/dist/stages/l2-to-l1-message.d.ts +3 -1
  77. package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
  78. package/dist/stages/l2-to-l1-message.js +6 -6
  79. package/dist/stages/l2-to-l1-message.js.map +1 -1
  80. package/dist/stages/proposal-created.d.ts +1 -0
  81. package/dist/stages/proposal-created.d.ts.map +1 -1
  82. package/dist/stages/proposal-created.js +1 -0
  83. package/dist/stages/proposal-created.js.map +1 -1
  84. package/dist/stages/proposal-queued.d.ts +1 -0
  85. package/dist/stages/proposal-queued.d.ts.map +1 -1
  86. package/dist/stages/proposal-queued.js +3 -1
  87. package/dist/stages/proposal-queued.js.map +1 -1
  88. package/dist/stages/retryables.js +2 -2
  89. package/dist/stages/retryables.js.map +1 -1
  90. package/dist/stages/timelock.d.ts +3 -1
  91. package/dist/stages/timelock.d.ts.map +1 -1
  92. package/dist/stages/timelock.js +11 -7
  93. package/dist/stages/timelock.js.map +1 -1
  94. package/dist/stages/utils.d.ts +4 -7
  95. package/dist/stages/utils.d.ts.map +1 -1
  96. package/dist/stages/utils.js +31 -22
  97. package/dist/stages/utils.js.map +1 -1
  98. package/dist/stages/voting.d.ts.map +1 -1
  99. package/dist/stages/voting.js +5 -4
  100. package/dist/stages/voting.js.map +1 -1
  101. package/dist/tracker/cache.d.ts +10 -6
  102. package/dist/tracker/cache.d.ts.map +1 -1
  103. package/dist/tracker/cache.js +36 -13
  104. package/dist/tracker/cache.js.map +1 -1
  105. package/dist/tracker/checkpoint-helpers.d.ts +63 -0
  106. package/dist/tracker/checkpoint-helpers.d.ts.map +1 -0
  107. package/dist/tracker/checkpoint-helpers.js +176 -0
  108. package/dist/tracker/checkpoint-helpers.js.map +1 -0
  109. package/dist/tracker/discovery.d.ts +40 -9
  110. package/dist/tracker/discovery.d.ts.map +1 -1
  111. package/dist/tracker/discovery.js +152 -15
  112. package/dist/tracker/discovery.js.map +1 -1
  113. package/dist/tracker/execute.d.ts.map +1 -1
  114. package/dist/tracker/execute.js +1 -25
  115. package/dist/tracker/execute.js.map +1 -1
  116. package/dist/tracker/pipeline.d.ts.map +1 -1
  117. package/dist/tracker/pipeline.js +26 -11
  118. package/dist/tracker/pipeline.js.map +1 -1
  119. package/dist/tracker/query.d.ts +1 -0
  120. package/dist/tracker/query.d.ts.map +1 -1
  121. package/dist/tracker/query.js +14 -61
  122. package/dist/tracker/query.js.map +1 -1
  123. package/dist/tracker/state.d.ts +0 -10
  124. package/dist/tracker/state.d.ts.map +1 -1
  125. package/dist/tracker/state.js +1 -28
  126. package/dist/tracker/state.js.map +1 -1
  127. package/dist/tracker.d.ts +69 -4
  128. package/dist/tracker.d.ts.map +1 -1
  129. package/dist/tracker.js +274 -13
  130. package/dist/tracker.js.map +1 -1
  131. package/dist/types/config.d.ts +49 -0
  132. package/dist/types/config.d.ts.map +1 -1
  133. package/dist/types/core.d.ts +4 -2
  134. package/dist/types/core.d.ts.map +1 -1
  135. package/dist/types/election.d.ts +91 -0
  136. package/dist/types/election.d.ts.map +1 -1
  137. package/dist/types/index.d.ts +5 -7
  138. package/dist/types/index.d.ts.map +1 -1
  139. package/dist/types/index.js +2 -3
  140. package/dist/types/index.js.map +1 -1
  141. package/dist/types/stages.d.ts +70 -1
  142. package/dist/types/stages.d.ts.map +1 -1
  143. package/dist/types/stages.js.map +1 -1
  144. package/dist/types/tracking.d.ts +30 -4
  145. package/dist/types/tracking.d.ts.map +1 -1
  146. package/dist/utils/block-cache.d.ts +50 -0
  147. package/dist/utils/block-cache.d.ts.map +1 -0
  148. package/dist/utils/block-cache.js +80 -0
  149. package/dist/utils/block-cache.js.map +1 -0
  150. package/dist/utils/formatters.d.ts +91 -0
  151. package/dist/utils/formatters.d.ts.map +1 -0
  152. package/dist/utils/formatters.js +327 -0
  153. package/dist/utils/formatters.js.map +1 -0
  154. package/dist/utils/multicall.d.ts +52 -0
  155. package/dist/utils/multicall.d.ts.map +1 -0
  156. package/dist/utils/multicall.js +75 -0
  157. package/dist/utils/multicall.js.map +1 -0
  158. package/dist/utils/salt-computation.d.ts.map +1 -1
  159. package/dist/utils/salt-computation.js +33 -7
  160. package/dist/utils/salt-computation.js.map +1 -1
  161. package/dist/utils/stage-metadata.d.ts +0 -20
  162. package/dist/utils/stage-metadata.d.ts.map +1 -1
  163. package/dist/utils/stage-metadata.js +29 -44
  164. package/dist/utils/stage-metadata.js.map +1 -1
  165. package/dist/utils/timing.d.ts +13 -0
  166. package/dist/utils/timing.d.ts.map +1 -1
  167. package/dist/utils/timing.js +37 -1
  168. package/dist/utils/timing.js.map +1 -1
  169. package/package.json +3 -2
  170. package/dist/election.d.ts +0 -172
  171. package/dist/election.d.ts.map +0 -1
  172. package/dist/election.js +0 -467
  173. package/dist/election.js.map +0 -1
  174. package/dist/types/cross-chain.d.ts +0 -24
  175. package/dist/types/cross-chain.d.ts.map +0 -1
  176. package/dist/types/cross-chain.js +0 -6
  177. package/dist/types/cross-chain.js.map +0 -1
package/README.md CHANGED
@@ -4,35 +4,45 @@
4
4
  [![codecov](https://codecov.io/gh/gzeoneth/gov-tracker/graph/badge.svg?token=2WVH8Z82TE)](https://codecov.io/gh/gzeoneth/gov-tracker)
5
5
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
6
6
 
7
- Track and execute Arbitrum DAO governance proposal lifecycle stages.
7
+ Track and execute Arbitrum DAO governance proposal lifecycle stages and Security Council elections.
8
8
 
9
9
  ## Installation
10
10
 
11
11
  ```bash
12
- yarn add @gzeoneth/gov-tracker
12
+ yarn add @gzeoneth/gov-tracker ethers@^5.8.0
13
13
  ```
14
14
 
15
15
  ## Quick Start
16
16
 
17
17
  ```typescript
18
- import { createTracker, ADDRESSES } from "@gzeoneth/gov-tracker";
18
+ import { ethers } from "ethers";
19
+ import { createTracker, findExecutableStage, ADDRESSES } from "@gzeoneth/gov-tracker";
19
20
 
20
21
  // Use StaticJsonRpcProvider for better performance
21
22
  const tracker = createTracker({
22
- l2Provider: new ethers.providers.StaticJsonRpcProvider(ARB1_RPC_URL),
23
- l1Provider: new ethers.providers.StaticJsonRpcProvider(ETH_RPC_URL),
24
- novaProvider: new ethers.providers.StaticJsonRpcProvider(NOVA_RPC),
23
+ l2Provider: new ethers.providers.StaticJsonRpcProvider(process.env.ARB1_RPC),
24
+ l1Provider: new ethers.providers.StaticJsonRpcProvider(process.env.ETH_RPC),
25
+ novaProvider: new ethers.providers.StaticJsonRpcProvider(process.env.NOVA_RPC),
26
+ cachePath: "./gov-tracker-cache.json",
25
27
  });
26
28
 
27
- // Track from governor proposal
28
- const result = await tracker.trackFromGovernor(ADDRESSES.CONSTITUTIONAL_GOVERNOR, proposalId);
29
-
30
- for (const stage of result.stages) {
29
+ // Track from transaction hash
30
+ const results = await tracker.trackByTxHash("0x...");
31
+ for (const stage of results[0].stages) {
31
32
  console.log(`${stage.type}: ${stage.status}`);
32
33
  }
33
34
 
34
- // Track from transaction hash
35
- const results = await tracker.trackByTxHash("0x...");
35
+ // Or track from governor
36
+ const result = await tracker.trackFromGovernor(ADDRESSES.CONSTITUTIONAL_GOVERNOR, proposalId);
37
+
38
+ // Execute ready stages
39
+ const readyStage = findExecutableStage(results[0].stages);
40
+ if (readyStage) {
41
+ const prep = await tracker.prepareTransaction(readyStage);
42
+ if (prep.success) {
43
+ await signer.sendTransaction(prep.prepared);
44
+ }
45
+ }
36
46
  ```
37
47
 
38
48
  ## Stages
@@ -49,89 +59,112 @@ const results = await tracker.trackByTxHash("0x...");
49
59
 
50
60
  Statuses: `NOT_STARTED`, `PENDING`, `READY`, `COMPLETED`, `FAILED`, `SKIPPED`
51
61
 
52
- ## Execution
53
-
54
- ```typescript
55
- import { findExecutableStage } from "@gzeoneth/gov-tracker";
56
-
57
- const readyStage = findExecutableStage(result.stages);
58
- if (readyStage) {
59
- const prepResult = await tracker.prepareTransaction(readyStage);
60
- if (prepResult.success) {
61
- const { to, data, value, chain } = prepResult.prepared;
62
- const tx = await signer.sendTransaction({ to, data, value });
63
- await tx.wait();
64
- }
65
- }
66
- ```
67
-
68
- ## Calldata Decoding & Simulation
69
-
70
- Decode proposal calldata and prepare simulation data for Tenderly, Foundry, or other tools.
71
-
72
- ```typescript
73
- import {
74
- decodeCalldata,
75
- extractAllSimulationsFromDecoded,
76
- getAddressLabel
77
- } from "@gzeoneth/gov-tracker";
78
-
79
- // Decode proposal actions
80
- const stage = result.stages[0]; // PROPOSAL_CREATED
81
- const { calldatas, targets } = stage.data;
82
-
83
- for (let i = 0; i < calldatas.length; i++) {
84
- const decoded = await decodeCalldata(calldatas[i], targets[i], 0, "arb1");
85
-
86
- console.log(`${decoded.signature}`);
87
- console.log(`Target: ${getAddressLabel(targets[i], "arb1")}`);
88
-
89
- // Extract simulation data
90
- const sims = extractAllSimulationsFromDecoded(decoded, "arb1");
91
- for (const sim of sims) {
92
- console.log(`Network: ${sim.simulation.networkId}`);
93
- console.log(`From: ${sim.simulation.from}`);
94
- console.log(`To: ${sim.simulation.to}`);
95
- }
96
- }
97
- ```
98
-
99
- See [Examples](./docs/EXAMPLES.md#calldata-decoding--simulation) for Tenderly and Foundry integration.
100
-
101
62
  ## CLI
102
63
 
103
64
  ```bash
104
- # Track a proposal by transaction hash
65
+ # Track a proposal
105
66
  npx @gzeoneth/gov-tracker track 0x...
106
67
 
107
- # Track AND inspect calldata (new in v0.2.1)
108
- npx @gzeoneth/gov-tracker track 0x... --inspect
109
- npx @gzeoneth/gov-tracker track 0x... -i # shorthand
68
+ # Track AND decode calldata
69
+ npx @gzeoneth/gov-tracker track 0x... -i
110
70
 
111
71
  # Decode calldata only (no tracking)
112
72
  npx @gzeoneth/gov-tracker track 0x... --inspect-only
113
73
 
114
- # Show simulation data for Tenderly/Foundry integration
74
+ # Show simulation data
115
75
  npx @gzeoneth/gov-tracker track 0x... --show-simulation
116
76
 
117
- # Execute ready stages (with shorthands)
77
+ # Execute ready stages
118
78
  npx @gzeoneth/gov-tracker track 0x... -w --private-key $PRIVATE_KEY
119
- npx @gzeoneth/gov-tracker track 0x... -v -p -w --private-key $PRIVATE_KEY # verbose + prepare + write
120
79
 
121
80
  # Discover and track all proposals
122
81
  npx @gzeoneth/gov-tracker run
123
82
 
124
- # Disable caching (useful for one-off checks)
83
+ # Selective tracking (only track specific types)
84
+ npx @gzeoneth/gov-tracker run --track-core # Constitutional proposals only
85
+ npx @gzeoneth/gov-tracker run --track-treasury # Non-constitutional proposals only
86
+ npx @gzeoneth/gov-tracker run --track-elections # Election governors only
87
+ npx @gzeoneth/gov-tracker run --track-timelocks # Direct timelock operations only
88
+
89
+ # Track with elections enabled in run loop
90
+ npx @gzeoneth/gov-tracker run --loop --election
91
+
92
+ # Disable caching
125
93
  npx @gzeoneth/gov-tracker track 0x... --no-cache
94
+
95
+ # Interactive TUI (requires ink)
96
+ npx @gzeoneth/gov-tracker ui
97
+
98
+ # Track election creation tx (auto-switches to election view)
99
+ npx @gzeoneth/gov-tracker track 0x82a0baf3...
126
100
  ```
127
101
 
128
- **CLI Shorthands** (v0.2.1+):
129
- - `-v` for `--verbose` - Enable verbose logging
130
- - `-p` for `--prepare` - Prepare transactions for ready stages
131
- - `-w` for `--write` - Execute prepared transactions
132
- - `-i` for `--inspect` - Track AND decode calldata
102
+ **Shorthands:** `-v` (verbose), `-p` (prepare), `-w` (write), `-i` (inspect)
103
+
104
+ ### Interactive TUI
105
+
106
+ The `ui` command launches an interactive terminal interface for browsing proposals:
133
107
 
134
- **Bundled Cache**: The CLI includes a pre-built cache of completed proposals (~95 proposals). On first run, this is copied to your local cache directory, eliminating initial discovery RPC calls. SDK users can access via `getBundledCachePath()` (Node.js) or direct JSON import for bundlers - see [Bundled Cache](./docs/EXAMPLES.md#bundled-cache-bootstrap).
108
+ ```bash
109
+ # Browse bundled cache (no RPC required)
110
+ npx @gzeoneth/gov-tracker ui
111
+
112
+ # Enable live tracking with RPC
113
+ npx @gzeoneth/gov-tracker ui --l2-rpc $ARB1_RPC --l1-rpc $ETH_RPC
114
+ ```
115
+
116
+ **Features:**
117
+ - Browse bundled proposals with filter tabs (All, Active, Complete, Timelocks, Elections)
118
+ - View proposal details, voting statistics, and stage progress
119
+ - Inspect decoded calldata with nested parameter display
120
+ - View simulation data for Tenderly/Foundry fork testing
121
+ - Monitor Security Council election status with detailed nominee/member info (requires RPC)
122
+ - Live tracking and discovery when RPC providers are configured
123
+
124
+ **Navigation:**
125
+ | Key | Action |
126
+ |-----|--------|
127
+ | `↑↓` | Navigate |
128
+ | `PgUp/Dn` | Page navigation |
129
+ | `Enter` | View details |
130
+ | `Tab` | Cycle filter |
131
+ | `c` | View calldata |
132
+ | `s` | View simulation |
133
+ | `d` | Discover proposals (with RPC) |
134
+ | `e` | Election status (with RPC) |
135
+ | `r` | Re-track (with RPC) |
136
+ | `b`/`Esc` | Go back |
137
+ | `q` | Quit |
138
+
139
+ **Note:** The TUI requires `ink` and `react` packages (installed as optional dependencies).
140
+
141
+ **Auto-Switch:** When tracking a `createElection` transaction, the CLI automatically displays election-specific status (phase, cohort, nominees) instead of proposal stages.
142
+
143
+ ### Elections
144
+
145
+ ```bash
146
+ # Check election status (next election, can create)
147
+ npx @gzeoneth/gov-tracker election
148
+
149
+ # List all elections with statuses
150
+ npx @gzeoneth/gov-tracker election --list
151
+
152
+ # Track specific election by index
153
+ npx @gzeoneth/gov-tracker election --track 0
154
+
155
+ # Track with detailed nominee/member info
156
+ npx @gzeoneth/gov-tracker election --track 0 --details -v
157
+
158
+ # Create election or execute phase transition
159
+ npx @gzeoneth/gov-tracker election --track 0 -w --private-key $PRIVATE_KEY
160
+
161
+ # Monitor elections in loop mode
162
+ npx @gzeoneth/gov-tracker election --loop --interval 300
163
+ ```
164
+
165
+ **Election Phases:** `NOT_STARTED` → `NOMINEE_SELECTION` → `VETTING_PERIOD` → `MEMBER_ELECTION` → `PENDING_EXECUTION` → `COMPLETED`
166
+
167
+ **Bundled Cache**: The CLI includes a pre-built cache of completed proposals. On first run, this eliminates initial discovery RPC calls. SDK users can access via `getBundledCachePath()` or direct JSON import - see [Examples](./docs/EXAMPLES.md#bundled-cache-bootstrap).
135
168
 
136
169
  ## Environment
137
170
 
@@ -142,29 +175,23 @@ NOVA_RPC=https://nova.arbitrum.io/rpc
142
175
  PRIVATE_KEY=0x... # For execution
143
176
  ```
144
177
 
145
- ## Security & Privacy
178
+ The CLI warns when using default public RPCs. For production, set these environment variables.
146
179
 
147
- **RPC URLs**: The CLI warns when using default public RPCs. For production use, set `ETH_RPC`, `ARB1_RPC`, and `NOVA_RPC` environment variables to avoid rate limits and ensure reliability.
180
+ ## Security & Privacy
148
181
 
149
- **External API Lookups**: When decoding calldata, unknown function selectors are looked up via [4byte.directory](https://www.4byte.directory/). This sends selector hashes to an external API. To disable:
182
+ **External API Lookups**: When decoding calldata, unknown function selectors are looked up via [4byte.directory](https://www.4byte.directory/). To disable:
150
183
 
151
184
  ```bash
152
- # Via environment variable
153
185
  DISABLE_4BYTE_LOOKUP=1 npx @gzeoneth/gov-tracker track 0x...
154
186
  ```
155
187
 
156
188
  ```typescript
157
- // Via SDK option
158
189
  import { lookupSignature } from "@gzeoneth/gov-tracker";
159
-
160
190
  const result = await lookupSignature("0x12345678", { disableApiLookup: true });
161
191
  ```
162
192
 
163
- When disabled, only local signatures (governance-related functions) are available.
164
-
165
193
  ## Documentation
166
194
 
167
- - [Getting Started](./docs/GETTING_STARTED.md) - Installation and basic usage
168
195
  - [API Reference](./docs/API.md) - Complete API documentation
169
196
  - [Examples](./docs/EXAMPLES.md) - Common patterns and use cases
170
197
  - [Architecture](./docs/ARCHITECTURE.md) - SDK internals and design
@@ -175,12 +202,10 @@ When disabled, only local signatures (governance-related functions) are availabl
175
202
  yarn build # Compile TypeScript
176
203
  yarn test # Run fast tests (no RPC)
177
204
  yarn test:coverage # Run tests with coverage
178
- yarn test:coverage:fork # Run fork tests with coverage (requires archive RPC)
179
- yarn test:coverage:all # Merge all coverage reports
180
205
  yarn lint # Run ESLint
181
206
  ```
182
207
 
183
- See [CONTRIBUTING.md](./CONTRIBUTING.md) for development workflow and publishing instructions.
208
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for development workflow.
184
209
 
185
210
  ## Terminology
186
211
 
@@ -188,7 +213,8 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for development workflow and publishing
188
213
  |----------|-------------|
189
214
  | Constitutional | Core proposals requiring L1 round-trip (8-day L2 timelock) |
190
215
  | Non-Constitutional | Treasury proposals, L2-only execution (3-day L2 timelock) |
191
- | Election | Security Council election proposals |
216
+ | Election | Security Council election with 6-phase lifecycle |
217
+ | Cohort | Security Council has two cohorts (0 and 1) that alternate elections |
192
218
 
193
219
  See [Arbitrum governance docs](https://docs.arbitrum.foundation/concepts/lifecycle-anatomy-aip-proposal) for more details.
194
220
 
package/dist/abis.d.ts CHANGED
@@ -44,4 +44,7 @@ export declare const upgradeExecutorInterface: ethers.utils.Interface;
44
44
  export declare const memberSyncActionInterface: ethers.utils.Interface;
45
45
  export declare const proposalCreatedInterface: ethers.utils.Interface;
46
46
  export declare const proposalQueuedInterface: ethers.utils.Interface;
47
+ export declare const proposalExecutedInterface: ethers.utils.Interface;
48
+ export declare const nomineeElectionGovernorInterface: ethers.utils.Interface;
49
+ export declare const memberElectionGovernorInterface: ethers.utils.Interface;
47
50
  //# sourceMappingURL=abis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../src/abis.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,YAAY,UAmBxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,UAIpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,UAiBxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,UAOxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,UAErB,CAAC;AA0CF;;GAEG;AACH,eAAO,MAAM,6BAA6B,UAazC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,UAIxC,CAAC;AAeF,eAAO,MAAM,iBAAiB,wBAA2C,CAAC;AAC1E,eAAO,MAAM,iBAAiB,wBAA2C,CAAC;AAC1E,eAAO,MAAM,eAAe,wBAA0C,CAAC;AACvE,eAAO,MAAM,eAAe,wBAAyC,CAAC;AACtE,eAAO,MAAM,sBAAsB,wBAAiD,CAAC;AACrF,eAAO,MAAM,qBAAqB,wBAAmD,CAAC;AACtF,eAAO,MAAM,wBAAwB,wBAAmD,CAAC;AACzF,eAAO,MAAM,yBAAyB,wBAAqD,CAAC;AAC5F,eAAO,MAAM,wBAAwB,wBAAuD,CAAC;AAC7F,eAAO,MAAM,uBAAuB,wBAAsD,CAAC"}
1
+ {"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../src/abis.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,YAAY,UAmBxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,UAIpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,UAiBxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,UAOxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,UAErB,CAAC;AA0CF;;GAEG;AACH,eAAO,MAAM,6BAA6B,UAwBzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,UAcxC,CAAC;AAoBF,eAAO,MAAM,iBAAiB,wBAA2C,CAAC;AAC1E,eAAO,MAAM,iBAAiB,wBAA2C,CAAC;AAC1E,eAAO,MAAM,eAAe,wBAA0C,CAAC;AACvE,eAAO,MAAM,eAAe,wBAAyC,CAAC;AACtE,eAAO,MAAM,sBAAsB,wBAAiD,CAAC;AACrF,eAAO,MAAM,qBAAqB,wBAAmD,CAAC;AACtF,eAAO,MAAM,wBAAwB,wBAAmD,CAAC;AACzF,eAAO,MAAM,yBAAyB,wBAAqD,CAAC;AAC5F,eAAO,MAAM,wBAAwB,wBAAuD,CAAC;AAC7F,eAAO,MAAM,uBAAuB,wBAAsD,CAAC;AAC3F,eAAO,MAAM,yBAAyB,wBAAwD,CAAC;AAC/F,eAAO,MAAM,gCAAgC,wBAE5C,CAAC;AACF,eAAO,MAAM,+BAA+B,wBAE3C,CAAC"}
package/dist/abis.js CHANGED
@@ -7,7 +7,7 @@
7
7
  * repeated interface creation throughout the codebase.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.proposalQueuedInterface = exports.proposalCreatedInterface = exports.memberSyncActionInterface = exports.upgradeExecutorInterface = exports.arbRetryableInterface = exports.outboxExecuteInterface = exports.outboxInterface = exports.arbSysInterface = exports.timelockInterface = exports.governorInterface = exports.MEMBER_ELECTION_GOVERNOR_ABI = exports.NOMINEE_ELECTION_GOVERNOR_ABI = exports.INBOX_ABI = exports.SECURITY_COUNCIL_MANAGER_ABI = exports.TIMELOCK_ABI = exports.GOVERNOR_WITH_VETTER_ABI = exports.GOVERNOR_ABI = void 0;
10
+ exports.memberElectionGovernorInterface = exports.nomineeElectionGovernorInterface = exports.proposalExecutedInterface = exports.proposalQueuedInterface = exports.proposalCreatedInterface = exports.memberSyncActionInterface = exports.upgradeExecutorInterface = exports.arbRetryableInterface = exports.outboxExecuteInterface = exports.outboxInterface = exports.arbSysInterface = exports.timelockInterface = exports.governorInterface = exports.MEMBER_ELECTION_GOVERNOR_ABI = exports.NOMINEE_ELECTION_GOVERNOR_ABI = exports.INBOX_ABI = exports.SECURITY_COUNCIL_MANAGER_ABI = exports.TIMELOCK_ABI = exports.GOVERNOR_WITH_VETTER_ABI = exports.GOVERNOR_ABI = void 0;
11
11
  const ethers_1 = require("ethers");
12
12
  /**
13
13
  * Governor contract ABI (minimal required interface)
@@ -128,6 +128,17 @@ exports.NOMINEE_ELECTION_GOVERNOR_ABI = [
128
128
  "function state(uint256 proposalId) view returns (uint8)",
129
129
  "function getProposeArgs(uint256 electionIndex) view returns (address[], uint256[], bytes[], string)",
130
130
  "function hashProposal(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) view returns (bytes32)",
131
+ // Detailed nominee tracking
132
+ "function nominees(uint256 proposalId) view returns (address[])",
133
+ "function compliantNominees(uint256 proposalId) view returns (address[])",
134
+ "function votesReceived(uint256 proposalId, address contender) view returns (uint256)",
135
+ "function isExcluded(uint256 proposalId, address nominee) view returns (bool)",
136
+ "function quorum(uint256 blockNumber) view returns (uint256)",
137
+ // Events
138
+ "event ContenderAdded(uint256 indexed proposalId, address indexed contender)",
139
+ "event NewNominee(uint256 indexed proposalId, address indexed nominee)",
140
+ "event NomineeExcluded(uint256 indexed proposalId, address indexed nominee)",
141
+ "event VoteCastForContender(uint256 indexed proposalId, address indexed voter, address indexed contender, uint256 votes, uint256 totalUsedVotes, uint256 usableVotes)",
131
142
  ];
132
143
  /**
133
144
  * SecurityCouncilMemberElectionGovernor ABI
@@ -135,7 +146,17 @@ exports.NOMINEE_ELECTION_GOVERNOR_ABI = [
135
146
  exports.MEMBER_ELECTION_GOVERNOR_ABI = [
136
147
  "function state(uint256 proposalId) view returns (uint8)",
137
148
  "function proposalDeadline(uint256 proposalId) view returns (uint256)",
138
- "function electionIndexToProposalId(uint256 electionIndex) view returns (uint256)",
149
+ "function proposalSnapshot(uint256 proposalId) view returns (uint256)",
150
+ // From ElectionGovernor base - used to compute proposal ID
151
+ "function getProposeArgs(uint256 electionIndex) view returns (address[], uint256[], bytes[], string)",
152
+ "function hashProposal(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) view returns (bytes32)",
153
+ // Detailed member election tracking
154
+ "function weightReceived(uint256 proposalId, address nominee) view returns (uint256)",
155
+ "function topNominees(uint256 proposalId) view returns (address[])",
156
+ "function fullWeightVotingDeadline(uint256 proposalId) view returns (uint256)",
157
+ "function fullWeightDuration() view returns (uint256)",
158
+ // Events
159
+ "event VoteCastForNominee(address indexed voter, uint256 indexed proposalId, address indexed nominee, uint256 votes, uint256 weight, uint256 totalUsedVotes, uint256 usableVotes, uint256 weightReceived)",
139
160
  ];
140
161
  /**
141
162
  * ProposalCreated event signature for parsing
@@ -145,6 +166,10 @@ const PROPOSAL_CREATED_EVENT = "event ProposalCreated(uint256 proposalId, addres
145
166
  * ProposalQueued event signature for parsing
146
167
  */
147
168
  const PROPOSAL_QUEUED_EVENT = "event ProposalQueued(uint256 proposalId, uint256 eta)";
169
+ /**
170
+ * ProposalExecuted event signature for parsing
171
+ */
172
+ const PROPOSAL_EXECUTED_EVENT = "event ProposalExecuted(uint256 proposalId)";
148
173
  // Pre-created Interface instances
149
174
  exports.governorInterface = new ethers_1.ethers.utils.Interface(exports.GOVERNOR_ABI);
150
175
  exports.timelockInterface = new ethers_1.ethers.utils.Interface(exports.TIMELOCK_ABI);
@@ -156,4 +181,7 @@ exports.upgradeExecutorInterface = new ethers_1.ethers.utils.Interface(UPGRADE_E
156
181
  exports.memberSyncActionInterface = new ethers_1.ethers.utils.Interface(MEMBER_SYNC_ACTION_ABI);
157
182
  exports.proposalCreatedInterface = new ethers_1.ethers.utils.Interface([PROPOSAL_CREATED_EVENT]);
158
183
  exports.proposalQueuedInterface = new ethers_1.ethers.utils.Interface([PROPOSAL_QUEUED_EVENT]);
184
+ exports.proposalExecutedInterface = new ethers_1.ethers.utils.Interface([PROPOSAL_EXECUTED_EVENT]);
185
+ exports.nomineeElectionGovernorInterface = new ethers_1.ethers.utils.Interface(exports.NOMINEE_ELECTION_GOVERNOR_ABI);
186
+ exports.memberElectionGovernorInterface = new ethers_1.ethers.utils.Interface(exports.MEMBER_ELECTION_GOVERNOR_ABI);
159
187
  //# sourceMappingURL=abis.js.map
package/dist/abis.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"abis.js","sourceRoot":"","sources":["../src/abis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abis.js","sourceRoot":"","sources":["../src/abis.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,mCAAgC;AAEhC;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,yDAAyD;IACzD,sEAAsE;IACtE,sEAAsE;IACtE,wHAAwH;IACxH,6DAA6D;IAC7D,iEAAiE;IACjE,gDAAgD;IAChD,+CAA+C;IAC/C,gDAAgD;IAChD,4CAA4C;IAC5C,qEAAqE;IACrE,iDAAiD;IACjD,6EAA6E;IAC7E,oCAAoC;IACpC,6EAA6E;IAC7E,8BAA8B;IAC9B,mHAAmH;IACnH,6HAA6H;CAC9H,CAAC;AAEF;;GAEG;AACU,QAAA,wBAAwB,GAAG;IACtC,6EAA6E;IAC7E,0CAA0C;IAC1C,2EAA2E;CAC5E,CAAC;AAEF;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,sDAAsD;IACtD,6DAA6D;IAC7D,2DAA2D;IAC3D,0DAA0D;IAC1D,0DAA0D;IAC1D,+CAA+C;IAC/C,sIAAsI;IACtI,yKAAyK;IACzK,oHAAoH;IACpH,oJAAoJ;IACpJ,gHAAgH;IAChH,iIAAiI;IACjI,0DAA0D;IAC1D,yBAAyB;IACzB,+IAA+I;IAC/I,0GAA0G;CAC3G,CAAC;AAEF;;GAEG;AACU,QAAA,4BAA4B,GAAG;IAC1C,8CAA8C;IAC9C,6DAA6D;IAC7D,8DAA8D;IAC9D,+CAA+C;IAC/C,oFAAoF;IACpF,mFAAmF;CACpF,CAAC;AAEF;;GAEG;AACU,QAAA,SAAS,GAAG;IACvB,sGAAsG;CACvG,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,kDAAkD;IAClD,gFAAgF;IAChF,yMAAyM;CAC1M,CAAC;AAEF;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAE/E;;GAEG;AACH,MAAM,sBAAsB,GAAG;IAC7B,4FAA4F;CAC7F,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,GAAG;IACjB,+HAA+H;CAChI,CAAC;AAEF;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAE5E;;GAEG;AACH,MAAM,kBAAkB,GAAG;IACzB,wMAAwM;CACzM,CAAC;AAEF;;GAEG;AACU,QAAA,6BAA6B,GAAG;IAC3C,iDAAiD;IACjD,4EAA4E;IAC5E,4EAA4E;IAC5E,sDAAsD;IACtD,iDAAiD;IACjD,6EAA6E;IAC7E,2EAA2E;IAC3E,sEAAsE;IACtE,sEAAsE;IACtE,yDAAyD;IACzD,qGAAqG;IACrG,+HAA+H;IAC/H,4BAA4B;IAC5B,gEAAgE;IAChE,yEAAyE;IACzE,sFAAsF;IACtF,8EAA8E;IAC9E,6DAA6D;IAC7D,SAAS;IACT,6EAA6E;IAC7E,uEAAuE;IACvE,4EAA4E;IAC5E,sKAAsK;CACvK,CAAC;AAEF;;GAEG;AACU,QAAA,4BAA4B,GAAG;IAC1C,yDAAyD;IACzD,sEAAsE;IACtE,sEAAsE;IACtE,2DAA2D;IAC3D,qGAAqG;IACrG,+HAA+H;IAC/H,oCAAoC;IACpC,qFAAqF;IACrF,mEAAmE;IACnE,8EAA8E;IAC9E,sDAAsD;IACtD,SAAS;IACT,0MAA0M;CAC3M,CAAC;AAEF;;GAEG;AACH,MAAM,sBAAsB,GAC1B,oMAAoM,CAAC;AAEvM;;GAEG;AACH,MAAM,qBAAqB,GAAG,uDAAuD,CAAC;AAEtF;;GAEG;AACH,MAAM,uBAAuB,GAAG,4CAA4C,CAAC;AAE7E,kCAAkC;AAErB,QAAA,iBAAiB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,oBAAY,CAAC,CAAC;AAC7D,QAAA,iBAAiB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,oBAAY,CAAC,CAAC;AAC7D,QAAA,eAAe,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC1D,QAAA,eAAe,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACzD,QAAA,sBAAsB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACxE,QAAA,qBAAqB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;AACzE,QAAA,wBAAwB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;AAC5E,QAAA,yBAAyB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;AAC/E,QAAA,wBAAwB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAChF,QAAA,uBAAuB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC9E,QAAA,yBAAyB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAClF,QAAA,gCAAgC,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CACxE,qCAA6B,CAC9B,CAAC;AACW,QAAA,+BAA+B,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CACvE,oCAA4B,CAC7B,CAAC"}