@aztec/ethereum 0.0.1-commit.fffb133c → 0.0.1-dev

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 (143) hide show
  1. package/dest/client.d.ts +10 -2
  2. package/dest/client.d.ts.map +1 -1
  3. package/dest/client.js +13 -7
  4. package/dest/config.d.ts +3 -1
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/config.js +11 -3
  7. package/dest/contracts/empire_slashing_proposer.d.ts +3 -1
  8. package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -1
  9. package/dest/contracts/empire_slashing_proposer.js +22 -15
  10. package/dest/contracts/fee_asset_handler.d.ts +1 -1
  11. package/dest/contracts/fee_asset_handler.d.ts.map +1 -1
  12. package/dest/contracts/fee_asset_handler.js +2 -0
  13. package/dest/contracts/fee_asset_price_oracle.d.ts +101 -0
  14. package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
  15. package/dest/contracts/fee_asset_price_oracle.js +651 -0
  16. package/dest/contracts/governance.d.ts +108 -33
  17. package/dest/contracts/governance.d.ts.map +1 -1
  18. package/dest/contracts/governance.js +198 -15
  19. package/dest/contracts/governance_proposer.d.ts +16 -1
  20. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  21. package/dest/contracts/governance_proposer.js +28 -2
  22. package/dest/contracts/index.d.ts +2 -1
  23. package/dest/contracts/index.d.ts.map +1 -1
  24. package/dest/contracts/index.js +1 -0
  25. package/dest/contracts/multicall.d.ts +1 -1
  26. package/dest/contracts/multicall.d.ts.map +1 -1
  27. package/dest/contracts/multicall.js +2 -1
  28. package/dest/contracts/registry.d.ts +3 -1
  29. package/dest/contracts/registry.d.ts.map +1 -1
  30. package/dest/contracts/registry.js +30 -1
  31. package/dest/contracts/rollup.d.ts +22 -8
  32. package/dest/contracts/rollup.d.ts.map +1 -1
  33. package/dest/contracts/rollup.js +68 -12
  34. package/dest/contracts/tally_slashing_proposer.d.ts +1 -1
  35. package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -1
  36. package/dest/contracts/tally_slashing_proposer.js +8 -1
  37. package/dest/deploy_aztec_l1_contracts.d.ts +2 -3
  38. package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
  39. package/dest/deploy_aztec_l1_contracts.js +37 -22
  40. package/dest/deploy_l1_contract.js +3 -3
  41. package/dest/generated/l1-contracts-defaults.d.ts +2 -2
  42. package/dest/generated/l1-contracts-defaults.js +2 -2
  43. package/dest/l1_artifacts.d.ts +1051 -42
  44. package/dest/l1_artifacts.d.ts.map +1 -1
  45. package/dest/l1_reader.d.ts +3 -1
  46. package/dest/l1_reader.d.ts.map +1 -1
  47. package/dest/l1_reader.js +6 -1
  48. package/dest/l1_tx_utils/config.d.ts +7 -1
  49. package/dest/l1_tx_utils/config.d.ts.map +1 -1
  50. package/dest/l1_tx_utils/config.js +14 -1
  51. package/dest/l1_tx_utils/constants.d.ts +1 -1
  52. package/dest/l1_tx_utils/constants.js +2 -2
  53. package/dest/l1_tx_utils/factory.d.ts +18 -10
  54. package/dest/l1_tx_utils/factory.d.ts.map +1 -1
  55. package/dest/l1_tx_utils/factory.js +17 -7
  56. package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +1 -1
  57. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +1 -1
  58. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +15 -15
  59. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -1
  60. package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +9 -15
  61. package/dest/l1_tx_utils/index-blobs.d.ts +3 -3
  62. package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -1
  63. package/dest/l1_tx_utils/index-blobs.js +2 -2
  64. package/dest/l1_tx_utils/index.d.ts +2 -1
  65. package/dest/l1_tx_utils/index.d.ts.map +1 -1
  66. package/dest/l1_tx_utils/index.js +1 -0
  67. package/dest/l1_tx_utils/l1_tx_utils.d.ts +18 -7
  68. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
  69. package/dest/l1_tx_utils/l1_tx_utils.js +58 -42
  70. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +1 -1
  71. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
  72. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +11 -7
  73. package/dest/l1_tx_utils/tx_delayer.d.ts +56 -0
  74. package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
  75. package/dest/{test → l1_tx_utils}/tx_delayer.js +62 -34
  76. package/dest/publisher_manager.d.ts +3 -2
  77. package/dest/publisher_manager.d.ts.map +1 -1
  78. package/dest/publisher_manager.js +2 -2
  79. package/dest/test/chain_monitor.d.ts +22 -3
  80. package/dest/test/chain_monitor.d.ts.map +1 -1
  81. package/dest/test/chain_monitor.js +33 -2
  82. package/dest/test/eth_cheat_codes.d.ts +6 -4
  83. package/dest/test/eth_cheat_codes.d.ts.map +1 -1
  84. package/dest/test/eth_cheat_codes.js +6 -4
  85. package/dest/test/index.d.ts +1 -3
  86. package/dest/test/index.d.ts.map +1 -1
  87. package/dest/test/index.js +0 -2
  88. package/dest/test/rollup_cheat_codes.d.ts +7 -1
  89. package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
  90. package/dest/test/rollup_cheat_codes.js +18 -1
  91. package/dest/test/start_anvil.d.ts +23 -3
  92. package/dest/test/start_anvil.d.ts.map +1 -1
  93. package/dest/test/start_anvil.js +143 -29
  94. package/dest/test/upgrade_utils.js +2 -2
  95. package/dest/utils.d.ts +2 -1
  96. package/dest/utils.d.ts.map +1 -1
  97. package/dest/utils.js +46 -0
  98. package/package.json +5 -5
  99. package/src/client.ts +10 -2
  100. package/src/config.ts +15 -2
  101. package/src/contracts/empire_slashing_proposer.ts +22 -27
  102. package/src/contracts/fee_asset_handler.ts +2 -0
  103. package/src/contracts/fee_asset_price_oracle.ts +280 -0
  104. package/src/contracts/governance.ts +271 -12
  105. package/src/contracts/governance_proposer.ts +28 -2
  106. package/src/contracts/index.ts +1 -0
  107. package/src/contracts/multicall.ts +5 -2
  108. package/src/contracts/registry.ts +31 -1
  109. package/src/contracts/rollup.ts +79 -16
  110. package/src/contracts/tally_slashing_proposer.ts +5 -1
  111. package/src/deploy_aztec_l1_contracts.ts +60 -29
  112. package/src/deploy_l1_contract.ts +3 -3
  113. package/src/generated/l1-contracts-defaults.ts +2 -2
  114. package/src/l1_reader.ts +13 -1
  115. package/src/l1_tx_utils/config.ts +20 -0
  116. package/src/l1_tx_utils/constants.ts +2 -2
  117. package/src/l1_tx_utils/factory.ts +31 -31
  118. package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +1 -1
  119. package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +1 -1
  120. package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +43 -54
  121. package/src/l1_tx_utils/index-blobs.ts +2 -2
  122. package/src/l1_tx_utils/index.ts +1 -0
  123. package/src/l1_tx_utils/l1_tx_utils.ts +60 -32
  124. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +11 -7
  125. package/src/{test → l1_tx_utils}/tx_delayer.ts +78 -50
  126. package/src/publisher_manager.ts +4 -2
  127. package/src/test/chain_monitor.ts +60 -3
  128. package/src/test/eth_cheat_codes.ts +6 -4
  129. package/src/test/index.ts +0 -2
  130. package/src/test/rollup_cheat_codes.ts +20 -1
  131. package/src/test/start_anvil.ts +177 -29
  132. package/src/test/upgrade_utils.ts +2 -2
  133. package/src/utils.ts +53 -0
  134. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +0 -26
  135. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +0 -1
  136. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +0 -26
  137. package/dest/test/delayed_tx_utils.d.ts +0 -13
  138. package/dest/test/delayed_tx_utils.d.ts.map +0 -1
  139. package/dest/test/delayed_tx_utils.js +0 -28
  140. package/dest/test/tx_delayer.d.ts +0 -36
  141. package/dest/test/tx_delayer.d.ts.map +0 -1
  142. package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +0 -77
  143. package/src/test/delayed_tx_utils.ts +0 -52
@@ -15,46 +15,121 @@ export declare enum ProposalState {
15
15
  Dropped = 6,
16
16
  Expired = 7
17
17
  }
18
+ /** Vote tallies on a single proposal. Both fields are mutated by `Governance.vote`. */
19
+ export interface Ballot {
20
+ yea: bigint;
21
+ nay: bigint;
22
+ }
23
+ /**
24
+ * Snapshot of the timing/quorum parameters that govern a single proposal's lifecycle. Each proposal
25
+ * stores its own copy at creation time (see `_propose` in Governance.sol), so this snapshot is
26
+ * immutable for the lifetime of the proposal even if the global `Configuration` changes later.
27
+ */
28
+ export interface ProposalConfiguration {
29
+ votingDelay: bigint;
30
+ votingDuration: bigint;
31
+ executionDelay: bigint;
32
+ gracePeriod: bigint;
33
+ quorum: bigint;
34
+ requiredYeaMargin: bigint;
35
+ minimumVotes: bigint;
36
+ }
37
+ /** Parameters for `Governance.proposeWithLock`. Stored only in the global Configuration, never on a proposal. */
38
+ export interface ProposeWithLockConfiguration {
39
+ lockDelay: bigint;
40
+ lockAmount: bigint;
41
+ }
42
+ /**
43
+ * Live, mutable governance configuration. `proposeConfig` is the lock configuration used by
44
+ * `proposeWithLock`; the remaining fields are the same shape as `ProposalConfiguration` and are
45
+ * snapshotted onto each new proposal at creation time.
46
+ */
47
+ export interface GovernanceConfiguration extends ProposalConfiguration {
48
+ proposeConfig: ProposeWithLockConfiguration;
49
+ }
50
+ /**
51
+ * A governance proposal augmented with its live (computed) state.
52
+ *
53
+ * Mutability:
54
+ * - `config`, `payload`, `proposer`, `creation` are immutable for the lifetime of the proposal.
55
+ * - `cachedState` is the raw value stored on-chain. It is only written when a proposal is explicitly
56
+ * executed or dropped, so for time-derived terminal states (Rejected, Expired) it remains at the
57
+ * value that was current when the proposal was created.
58
+ * - `state` is the computed state returned by `Governance.getProposalState`. This is the value
59
+ * callers almost always want -- it reflects time-derived transitions that `cachedState` does not.
60
+ * - `summedBallot` is mutated by every `Governance.vote` call while the proposal is Active.
61
+ *
62
+ * Once `state` is in a terminal phase (`Executed`/`Rejected`/`Dropped`/`Expired`) the entire struct
63
+ * is provably immutable on-chain (no further votes can be cast and no state-mutating call to
64
+ * `execute`/`dropProposal` can succeed), and the wrapper memoizes it.
65
+ */
66
+ export interface Proposal {
67
+ config: ProposalConfiguration;
68
+ cachedState: ProposalState;
69
+ state: ProposalState;
70
+ payload: EthAddress;
71
+ proposer: EthAddress;
72
+ creation: bigint;
73
+ summedBallot: Ballot;
74
+ }
75
+ export declare const MAX_PROPOSAL_LIFETIME_SECONDS: bigint;
18
76
  export declare function extractProposalIdFromLogs(logs: Log[]): bigint;
19
77
  export declare class ReadOnlyGovernanceContract {
20
78
  readonly client: ViemClient;
21
79
  protected readonly governanceContract: GetContractReturnType<typeof GovernanceAbi, ViemClient>;
80
+ /**
81
+ * Cache of fully-resolved proposals keyed by id. We populate this lazily and only retain entries
82
+ * whose state is provably terminal -- once `cachedState` is `Executed` or `Dropped` the on-chain
83
+ * proposal struct is frozen and safe to memoize indefinitely. Other state transitions (e.g.
84
+ * Pending -> Active, or accumulating votes) leave the cache untouched and force a fresh fetch.
85
+ */
86
+ private readonly proposalCache;
87
+ /**
88
+ * Cache of `IProposerPayload.getOriginalPayload()` results keyed by wrapper address. The wrapper
89
+ * contract's bytecode is immutable, so this mapping never changes -- a value of `undefined`
90
+ * encodes a proposal whose payload doesn't implement `getOriginalPayload` (e.g. proposeWithLock
91
+ * proposals) and should be treated as "no original".
92
+ */
93
+ private readonly originalPayloadCache;
22
94
  constructor(address: Hex, client: ViemClient);
23
95
  get address(): EthAddress;
24
96
  getGovernanceProposerAddress(): Promise<EthAddress>;
25
- getConfiguration(): Promise<{
26
- executionDelay: bigint;
27
- gracePeriod: bigint;
28
- minimumVotes: bigint;
29
- proposeConfig: {
30
- lockAmount: bigint;
31
- lockDelay: bigint;
32
- };
33
- quorum: bigint;
34
- requiredYeaMargin: bigint;
35
- votingDelay: bigint;
36
- votingDuration: bigint;
37
- }>;
38
- getProposal(proposalId: bigint): Promise<{
39
- cachedState: number;
40
- config: {
41
- executionDelay: bigint;
42
- gracePeriod: bigint;
43
- minimumVotes: bigint;
44
- quorum: bigint;
45
- requiredYeaMargin: bigint;
46
- votingDelay: bigint;
47
- votingDuration: bigint;
48
- };
49
- creation: bigint;
50
- payload: `0x${string}`;
51
- proposer: `0x${string}`;
52
- summedBallot: {
53
- nay: bigint;
54
- yea: bigint;
55
- };
56
- }>;
97
+ getConfiguration(): Promise<GovernanceConfiguration>;
98
+ /**
99
+ * Fetches a proposal by id together with its live state, returning the mapped {@link Proposal}
100
+ * type. Issues `getProposal` and `getProposalState` in parallel so the result carries both the
101
+ * raw stored `cachedState` and the time-derived `state` -- callers can use whichever they need
102
+ * without an extra round-trip.
103
+ *
104
+ * Backed by an in-memory cache that retains entries only when `state` is in one of the four
105
+ * terminal phases (`Executed` / `Rejected` / `Dropped` / `Expired`). At that point the entire
106
+ * proposal struct is provably immutable on-chain (no further votes can be cast and no
107
+ * state-mutating call can succeed), so caching is safe forever. Non-terminal states force a
108
+ * fresh fetch on every call so callers always see fresh `state` and `summedBallot` values.
109
+ */
110
+ getProposal(proposalId: bigint): Promise<Proposal>;
111
+ /**
112
+ * Returns the live state of a proposal as computed by `Governance.getProposalState`. Prefer
113
+ * {@link getProposal} when you also need any other proposal data -- it returns this same value
114
+ * via {@link Proposal.state} alongside the rest of the struct in a single round-trip.
115
+ */
57
116
  getProposalState(proposalId: bigint): Promise<ProposalState>;
117
+ getProposalCount(): Promise<bigint>;
118
+ /**
119
+ * Checks whether the given original payload is currently the subject of a live (non-terminal)
120
+ * Governance proposal. Returns true only if a proposal references this payload and is still in
121
+ * Pending, Active, Queued, or Executable state. Terminal proposals (Executed, Rejected, Dropped,
122
+ * Expired) are ignored, because once a proposal reaches a terminal state the same original
123
+ * payload may legitimately be re-signaled and re-submitted via the GovernanceProposer (each round
124
+ * is independent and there is no payload-level uniqueness check on-chain).
125
+ *
126
+ * Implemented as a bounded view-call sweep over `Governance.proposals` rather than an event scan,
127
+ * because `eth_getLogs` over the full deployment history of a long-lived rollup exceeds typical
128
+ * RPC block-range caps. The number of proposals (`proposalCount`) is small in practice, and we
129
+ * walk newest -> oldest with a hard early-stop on the protocol-wide proposal lifetime cap.
130
+ */
131
+ hasActiveProposalWithPayload(payload: Hex): Promise<boolean>;
132
+ private getOriginalPayload;
58
133
  awaitProposalActive({ proposalId, logger }: {
59
134
  proposalId: bigint;
60
135
  logger: Logger;
@@ -89,4 +164,4 @@ export declare class GovernanceContract extends ReadOnlyGovernanceContract {
89
164
  logger: Logger;
90
165
  }): Promise<void>;
91
166
  }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUVMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssR0FBRyxFQUNSLEtBQUssR0FBRyxFQUlULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsS0FBSyx3QkFBd0IsRUFBRSxLQUFLLFVBQVUsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFFL0YsTUFBTSxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FDOUMsbUJBQW1CLEVBQ25CLG1CQUFtQixHQUFHLGVBQWUsR0FBRyxpQkFBaUIsR0FBRywyQkFBMkIsQ0FDeEYsQ0FBQztBQUdGLG9CQUFZLGFBQWE7SUFDdkIsT0FBTyxJQUFBO0lBQ1AsTUFBTSxJQUFBO0lBQ04sTUFBTSxJQUFBO0lBQ04sVUFBVSxJQUFBO0lBQ1YsUUFBUSxJQUFBO0lBQ1IsUUFBUSxJQUFBO0lBQ1IsT0FBTyxJQUFBO0lBQ1AsT0FBTyxJQUFBO0NBQ1I7QUFFRCx3QkFBZ0IseUJBQXlCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FXN0Q7QUFFRCxxQkFBYSwwQkFBMEI7YUFLbkIsTUFBTSxFQUFFLFVBQVU7SUFKcEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvRixZQUNFLE9BQU8sRUFBRSxHQUFHLEVBQ0ksTUFBTSxFQUFFLFVBQVUsRUFHbkM7SUFFRCxJQUFXLE9BQU8sZUFFakI7SUFFWSw0QkFBNEIsd0JBRXhDO0lBRU0sZ0JBQWdCOzs7Ozs7Ozs7Ozs7T0FFdEI7SUFFTSxXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7OztPQUVwQztJQUVZLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQU94RTtJQUVZLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQztRQUFDLE1BQU0sRUFBRSxNQUFNLENBQUE7S0FBRSxpQkFvQjlGO0lBRVksdUJBQXVCLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDO1FBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQTtLQUFFLGlCQXlCbEc7Q0FDRjtBQUVELHFCQUFhLGtCQUFtQixTQUFRLDBCQUEwQjthQUtyQyxNQUFNLEVBQUUsd0JBQXdCO0lBSjNELG1CQUE0QixrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLGFBQWEsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBRXRILFlBQ0UsT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBQ0EsTUFBTSxFQUFFLHdCQUF3QixFQVUxRDtJQUVZLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUduRDtJQUVZLGVBQWUsQ0FBQyxFQUMzQixjQUFjLEVBQ2QsZUFBZSxFQUNoQixFQUFFO1FBQ0QsY0FBYyxFQUFFLEdBQUcsQ0FBQztRQUNwQixlQUFlLEVBQUUsR0FBRyxDQUFDO0tBQ3RCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQU9sQjtJQUVZLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBR3ZDO0lBRUQsb0dBQW9HO0lBQ3ZGLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUlwRTtJQUVZLElBQUksQ0FBQyxFQUNoQixVQUFVLEVBQ1YsVUFBVSxFQUNWLE9BQU8sRUFDUCxPQUFZLEVBQ1osTUFBTSxFQUNQLEVBQUU7UUFDRCxVQUFVLEVBQUUsTUFBTSxDQUFDO1FBQ25CLFVBQVUsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQy9CLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDakIsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUNoQixNQUFNLEVBQUUsTUFBTSxDQUFDO0tBQ2hCLGlCQStDQTtJQUVZLGVBQWUsQ0FBQyxFQUMzQixVQUFVLEVBQ1YsT0FBWSxFQUNaLE1BQU0sRUFDUCxFQUFFO1FBQ0QsVUFBVSxFQUFFLE1BQU0sQ0FBQztRQUNuQixPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQ2hCLE1BQU0sRUFBRSxNQUFNLENBQUM7S0FDaEIsaUJBeUNBO0NBQ0YifQ==
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUVMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssR0FBRyxFQUNSLEtBQUssR0FBRyxFQUlULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsS0FBSyx3QkFBd0IsRUFBRSxLQUFLLFVBQVUsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFpQi9GLE1BQU0sTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQzlDLG1CQUFtQixFQUNuQixtQkFBbUIsR0FBRyxlQUFlLEdBQUcsaUJBQWlCLEdBQUcsMkJBQTJCLENBQ3hGLENBQUM7QUFHRixvQkFBWSxhQUFhO0lBQ3ZCLE9BQU8sSUFBQTtJQUNQLE1BQU0sSUFBQTtJQUNOLE1BQU0sSUFBQTtJQUNOLFVBQVUsSUFBQTtJQUNWLFFBQVEsSUFBQTtJQUNSLFFBQVEsSUFBQTtJQUNSLE9BQU8sSUFBQTtJQUNQLE9BQU8sSUFBQTtDQUNSO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sV0FBVyxNQUFNO0lBQ3JCLEdBQUcsRUFBRSxNQUFNLENBQUM7SUFDWixHQUFHLEVBQUUsTUFBTSxDQUFDO0NBQ2I7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxXQUFXLHFCQUFxQjtJQUNwQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDdkIsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUN2QixXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixpQkFBaUIsRUFBRSxNQUFNLENBQUM7SUFDMUIsWUFBWSxFQUFFLE1BQU0sQ0FBQztDQUN0QjtBQUVELGlIQUFpSDtBQUNqSCxNQUFNLFdBQVcsNEJBQTRCO0lBQzNDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQztDQUNwQjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFdBQVcsdUJBQXdCLFNBQVEscUJBQXFCO0lBQ3BFLGFBQWEsRUFBRSw0QkFBNEIsQ0FBQztDQUM3QztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sV0FBVyxRQUFRO0lBQ3ZCLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQztJQUM5QixXQUFXLEVBQUUsYUFBYSxDQUFDO0lBQzNCLEtBQUssRUFBRSxhQUFhLENBQUM7SUFDckIsT0FBTyxFQUFFLFVBQVUsQ0FBQztJQUNwQixRQUFRLEVBQUUsVUFBVSxDQUFDO0lBQ3JCLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDakIsWUFBWSxFQUFFLE1BQU0sQ0FBQztDQUN0QjtBQWtCRCxlQUFPLE1BQU0sNkJBQTZCLFFBQXlCLENBQUM7QUFjcEUsd0JBQWdCLHlCQUF5QixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBVzdEO0FBRUQscUJBQWEsMEJBQTBCO2FBcUJuQixNQUFNLEVBQUUsVUFBVTtJQXBCcEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvRjs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFvQztJQUVsRTs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQXdDO0lBRTdFLFlBQ0UsT0FBTyxFQUFFLEdBQUcsRUFDSSxNQUFNLEVBQUUsVUFBVSxFQUduQztJQUVELElBQVcsT0FBTyxlQUVqQjtJQUVZLDRCQUE0Qix3QkFFeEM7SUFFWSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FlaEU7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNVLFdBQVcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0E4QjlEO0lBRUQ7Ozs7T0FJRztJQUNVLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUV4RTtJQUVNLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFekM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDVSw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FxQ3hFO1lBUWEsa0JBQWtCO0lBbUJuQixtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUFFLFVBQVUsRUFBRSxNQUFNLENBQUM7UUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFBO0tBQUUsaUJBb0I5RjtJQUVZLHVCQUF1QixDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQztRQUFDLE1BQU0sRUFBRSxNQUFNLENBQUE7S0FBRSxpQkF5QmxHO0NBQ0Y7QUFFRCxxQkFBYSxrQkFBbUIsU0FBUSwwQkFBMEI7YUFLckMsTUFBTSxFQUFFLHdCQUF3QjtJQUozRCxtQkFBNEIsa0JBQWtCLEVBQUUscUJBQXFCLENBQUMsT0FBTyxhQUFhLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUV0SCxZQUNFLE9BQU8sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUNBLE1BQU0sRUFBRSx3QkFBd0IsRUFVMUQ7SUFFWSxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFHbkQ7SUFFWSxlQUFlLENBQUMsRUFDM0IsY0FBYyxFQUNkLGVBQWUsRUFDaEIsRUFBRTtRQUNELGNBQWMsRUFBRSxHQUFHLENBQUM7UUFDcEIsZUFBZSxFQUFFLEdBQUcsQ0FBQztLQUN0QixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FPbEI7SUFFWSxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUd2QztJQUVELG9HQUFvRztJQUN2RixtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FJcEU7SUFFWSxJQUFJLENBQUMsRUFDaEIsVUFBVSxFQUNWLFVBQVUsRUFDVixPQUFPLEVBQ1AsT0FBWSxFQUNaLE1BQU0sRUFDUCxFQUFFO1FBQ0QsVUFBVSxFQUFFLE1BQU0sQ0FBQztRQUNuQixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMvQixPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUM7UUFDaEIsTUFBTSxFQUFFLE1BQU0sQ0FBQztLQUNoQixpQkFnREE7SUFFWSxlQUFlLENBQUMsRUFDM0IsVUFBVSxFQUNWLE9BQVksRUFDWixNQUFNLEVBQ1AsRUFBRTtRQUNELFVBQVUsRUFBRSxNQUFNLENBQUM7UUFDbkIsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUNoQixNQUFNLEVBQUUsTUFBTSxDQUFDO0tBQ2hCLGlCQTBDQTtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/contracts/governance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/contracts/governance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,GAAG,EACR,KAAK,GAAG,EAIT,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,UAAU,EAAoB,MAAM,aAAa,CAAC;AAiB/F,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAC9C,mBAAmB,EACnB,mBAAmB,GAAG,eAAe,GAAG,iBAAiB,GAAG,2BAA2B,CACxF,CAAC;AAGF,oBAAY,aAAa;IACvB,OAAO,IAAA;IACP,MAAM,IAAA;IACN,MAAM,IAAA;IACN,UAAU,IAAA;IACV,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,OAAO,IAAA;CACR;AAED,uFAAuF;AACvF,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,iHAAiH;AACjH,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE,aAAa,EAAE,4BAA4B,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,WAAW,EAAE,aAAa,CAAC;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAkBD,eAAO,MAAM,6BAA6B,QAAyB,CAAC;AAcpE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAW7D;AAED,qBAAa,0BAA0B;aAqBnB,MAAM,EAAE,UAAU;IApBpC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,OAAO,aAAa,EAAE,UAAU,CAAC,CAAC;IAE/F;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAElE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwC;IAE7E,YACE,OAAO,EAAE,GAAG,EACI,MAAM,EAAE,UAAU,EAGnC;IAED,IAAW,OAAO,eAEjB;IAEY,4BAA4B,wBAExC;IAEY,gBAAgB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAehE;IAED;;;;;;;;;;;OAWG;IACU,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CA8B9D;IAED;;;;OAIG;IACU,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAExE;IAEM,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAEzC;IAED;;;;;;;;;;;;OAYG;IACU,4BAA4B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCxE;YAQa,kBAAkB;IAmBnB,mBAAmB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,iBAoB9F;IAEY,uBAAuB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,iBAyBlG;CACF;AAED,qBAAa,kBAAmB,SAAQ,0BAA0B;aAKrC,MAAM,EAAE,wBAAwB;IAJ3D,mBAA4B,kBAAkB,EAAE,qBAAqB,CAAC,OAAO,aAAa,EAAE,wBAAwB,CAAC,CAAC;IAEtH,YACE,OAAO,EAAE,GAAG,GAAG,UAAU,EACA,MAAM,EAAE,wBAAwB,EAU1D;IAEY,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,iBAGnD;IAEY,eAAe,CAAC,EAC3B,cAAc,EACd,eAAe,EAChB,EAAE;QACD,cAAc,EAAE,GAAG,CAAC;QACpB,eAAe,EAAE,GAAG,CAAC;KACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlB;IAEY,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAGvC;IAED,oGAAoG;IACvF,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIpE;IAEY,IAAI,CAAC,EAChB,UAAU,EACV,UAAU,EACV,OAAO,EACP,OAAY,EACZ,MAAM,EACP,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,iBAgDA;IAEY,eAAe,CAAC,EAC3B,UAAU,EACV,OAAY,EACZ,MAAM,EACP,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,iBA0CA;CACF"}
@@ -2,8 +2,26 @@ import { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import { sleep } from '@aztec/foundation/sleep';
3
3
  import { GovernanceAbi } from '@aztec/l1-artifacts/GovernanceAbi';
4
4
  import { encodeFunctionData, getContract, parseEventLogs } from 'viem';
5
- import { createL1TxUtilsFromViemWallet } from '../l1_tx_utils/index.js';
5
+ import { createL1TxUtils } from '../l1_tx_utils/index.js';
6
6
  import { isExtendedClient } from '../types.js';
7
+ // Minimal ABI for IProposerPayload (`l1-contracts/src/governance/interfaces/IProposerPayload.sol`).
8
+ // The GovernanceProposer wraps every original payload in a GSEPayload before submitting it to
9
+ // Governance, so `Proposal.payload` on the Governance contract is the wrapper address rather than
10
+ // the original. We only need `getOriginalPayload` to recover the underlying payload, so we inline
11
+ // the ABI here instead of generating a full artifact.
12
+ const ProposerPayloadAbi = [
13
+ {
14
+ type: 'function',
15
+ name: 'getOriginalPayload',
16
+ inputs: [],
17
+ outputs: [
18
+ {
19
+ type: 'address'
20
+ }
21
+ ],
22
+ stateMutability: 'view'
23
+ }
24
+ ];
7
25
  // NOTE: Must be kept in sync with DataStructures.ProposalState in l1-contracts
8
26
  export var ProposalState = /*#__PURE__*/ function(ProposalState) {
9
27
  ProposalState[ProposalState["Pending"] = 0] = "Pending";
@@ -16,6 +34,31 @@ export var ProposalState = /*#__PURE__*/ function(ProposalState) {
16
34
  ProposalState[ProposalState["Expired"] = 7] = "Expired";
17
35
  return ProposalState;
18
36
  }({});
37
+ /** Set of `ProposalState` values for which a proposal is fully immutable on-chain. */ const TERMINAL_PROPOSAL_STATES = new Set([
38
+ 5,
39
+ 4,
40
+ 6,
41
+ 7
42
+ ]);
43
+ // Hard upper bound on the wall-clock lifetime of any Governance proposal, in seconds.
44
+ // Each proposal stores its own snapshot of `ProposalConfiguration` at creation time and progresses
45
+ // through Pending -> Active -> Queued -> Executable using those frozen durations
46
+ // (see `ProposalLib.{pendingThrough,activeThrough,queuedThrough,executableThrough}`). Each of those
47
+ // four durations is bounded by `ConfigurationLib.TIME_UPPER = 90 days` (validated in
48
+ // `ConfigurationLib.assertValid`), so no proposal can be live for more than 4 * 90 days regardless
49
+ // of what config it was created under. Once past this point, the proposal is guaranteed to be in a
50
+ // terminal state (Executed / Rejected / Dropped / Expired).
51
+ export const MAX_PROPOSAL_LIFETIME_SECONDS = 4n * 90n * 24n * 3600n;
52
+ /**
53
+ * Validates a number returned by an on-chain `ProposalState` enum field and narrows it to the
54
+ * `ProposalState` enum. Throws if the value is out of range.
55
+ */ function asProposalState(raw) {
56
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
57
+ if (raw < 0 || raw > 7) {
58
+ throw new Error(`Invalid proposal state: ${raw}`);
59
+ }
60
+ return raw;
61
+ }
19
62
  export function extractProposalIdFromLogs(logs) {
20
63
  const parsedLogs = parseEventLogs({
21
64
  abi: GovernanceAbi,
@@ -30,8 +73,22 @@ export function extractProposalIdFromLogs(logs) {
30
73
  export class ReadOnlyGovernanceContract {
31
74
  client;
32
75
  governanceContract;
76
+ /**
77
+ * Cache of fully-resolved proposals keyed by id. We populate this lazily and only retain entries
78
+ * whose state is provably terminal -- once `cachedState` is `Executed` or `Dropped` the on-chain
79
+ * proposal struct is frozen and safe to memoize indefinitely. Other state transitions (e.g.
80
+ * Pending -> Active, or accumulating votes) leave the cache untouched and force a fresh fetch.
81
+ */ proposalCache;
82
+ /**
83
+ * Cache of `IProposerPayload.getOriginalPayload()` results keyed by wrapper address. The wrapper
84
+ * contract's bytecode is immutable, so this mapping never changes -- a value of `undefined`
85
+ * encodes a proposal whose payload doesn't implement `getOriginalPayload` (e.g. proposeWithLock
86
+ * proposals) and should be treated as "no original".
87
+ */ originalPayloadCache;
33
88
  constructor(address, client){
34
89
  this.client = client;
90
+ this.proposalCache = new Map();
91
+ this.originalPayloadCache = new Map();
35
92
  this.governanceContract = getContract({
36
93
  address,
37
94
  abi: GovernanceAbi,
@@ -44,23 +101,147 @@ export class ReadOnlyGovernanceContract {
44
101
  async getGovernanceProposerAddress() {
45
102
  return EthAddress.fromString(await this.governanceContract.read.governanceProposer());
46
103
  }
47
- getConfiguration() {
48
- return this.governanceContract.read.getConfiguration();
104
+ async getConfiguration() {
105
+ const raw = await this.governanceContract.read.getConfiguration();
106
+ return {
107
+ proposeConfig: {
108
+ lockDelay: raw.proposeConfig.lockDelay,
109
+ lockAmount: raw.proposeConfig.lockAmount
110
+ },
111
+ votingDelay: raw.votingDelay,
112
+ votingDuration: raw.votingDuration,
113
+ executionDelay: raw.executionDelay,
114
+ gracePeriod: raw.gracePeriod,
115
+ quorum: raw.quorum,
116
+ requiredYeaMargin: raw.requiredYeaMargin,
117
+ minimumVotes: raw.minimumVotes
118
+ };
49
119
  }
50
- getProposal(proposalId) {
51
- return this.governanceContract.read.getProposal([
52
- proposalId
120
+ /**
121
+ * Fetches a proposal by id together with its live state, returning the mapped {@link Proposal}
122
+ * type. Issues `getProposal` and `getProposalState` in parallel so the result carries both the
123
+ * raw stored `cachedState` and the time-derived `state` -- callers can use whichever they need
124
+ * without an extra round-trip.
125
+ *
126
+ * Backed by an in-memory cache that retains entries only when `state` is in one of the four
127
+ * terminal phases (`Executed` / `Rejected` / `Dropped` / `Expired`). At that point the entire
128
+ * proposal struct is provably immutable on-chain (no further votes can be cast and no
129
+ * state-mutating call can succeed), so caching is safe forever. Non-terminal states force a
130
+ * fresh fetch on every call so callers always see fresh `state` and `summedBallot` values.
131
+ */ async getProposal(proposalId) {
132
+ const cached = this.proposalCache.get(proposalId);
133
+ if (cached !== undefined) {
134
+ return cached;
135
+ }
136
+ const [raw, rawState] = await Promise.all([
137
+ this.governanceContract.read.getProposal([
138
+ proposalId
139
+ ]),
140
+ this.governanceContract.read.getProposalState([
141
+ proposalId
142
+ ])
53
143
  ]);
144
+ const proposal = {
145
+ config: {
146
+ votingDelay: raw.config.votingDelay,
147
+ votingDuration: raw.config.votingDuration,
148
+ executionDelay: raw.config.executionDelay,
149
+ gracePeriod: raw.config.gracePeriod,
150
+ quorum: raw.config.quorum,
151
+ requiredYeaMargin: raw.config.requiredYeaMargin,
152
+ minimumVotes: raw.config.minimumVotes
153
+ },
154
+ cachedState: asProposalState(raw.cachedState),
155
+ state: asProposalState(rawState),
156
+ payload: EthAddress.fromString(raw.payload),
157
+ proposer: EthAddress.fromString(raw.proposer),
158
+ creation: raw.creation,
159
+ summedBallot: {
160
+ yea: raw.summedBallot.yea,
161
+ nay: raw.summedBallot.nay
162
+ }
163
+ };
164
+ if (TERMINAL_PROPOSAL_STATES.has(proposal.state)) {
165
+ this.proposalCache.set(proposalId, proposal);
166
+ }
167
+ return proposal;
54
168
  }
55
- async getProposalState(proposalId) {
56
- const state = await this.governanceContract.read.getProposalState([
169
+ /**
170
+ * Returns the live state of a proposal as computed by `Governance.getProposalState`. Prefer
171
+ * {@link getProposal} when you also need any other proposal data -- it returns this same value
172
+ * via {@link Proposal.state} alongside the rest of the struct in a single round-trip.
173
+ */ async getProposalState(proposalId) {
174
+ return asProposalState(await this.governanceContract.read.getProposalState([
57
175
  proposalId
58
- ]);
59
- // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
60
- if (state < 0 || state > 7) {
61
- throw new Error(`Invalid proposal state: ${state}`);
176
+ ]));
177
+ }
178
+ getProposalCount() {
179
+ return this.governanceContract.read.proposalCount();
180
+ }
181
+ /**
182
+ * Checks whether the given original payload is currently the subject of a live (non-terminal)
183
+ * Governance proposal. Returns true only if a proposal references this payload and is still in
184
+ * Pending, Active, Queued, or Executable state. Terminal proposals (Executed, Rejected, Dropped,
185
+ * Expired) are ignored, because once a proposal reaches a terminal state the same original
186
+ * payload may legitimately be re-signaled and re-submitted via the GovernanceProposer (each round
187
+ * is independent and there is no payload-level uniqueness check on-chain).
188
+ *
189
+ * Implemented as a bounded view-call sweep over `Governance.proposals` rather than an event scan,
190
+ * because `eth_getLogs` over the full deployment history of a long-lived rollup exceeds typical
191
+ * RPC block-range caps. The number of proposals (`proposalCount`) is small in practice, and we
192
+ * walk newest -> oldest with a hard early-stop on the protocol-wide proposal lifetime cap.
193
+ */ async hasActiveProposalWithPayload(payload) {
194
+ const proposalCount = await this.getProposalCount();
195
+ if (proposalCount === 0n) {
196
+ return false;
197
+ }
198
+ // Anything created before this cutoff is guaranteed terminal regardless of its frozen config.
199
+ const block = await this.client.getBlock();
200
+ const hardCutoff = block.timestamp - MAX_PROPOSAL_LIFETIME_SECONDS;
201
+ const target = payload.toLowerCase();
202
+ // Proposals are append-only with monotonically non-decreasing creation timestamps, so iterating
203
+ // from newest -> oldest lets us early-stop as soon as we cross the lifetime cutoff.
204
+ for(let id = proposalCount - 1n; id >= 0n; id--){
205
+ const proposal = await this.getProposal(id);
206
+ // Hard early-stop: every older proposal is also older than the cutoff and therefore terminal.
207
+ if (proposal.creation < hardCutoff) {
208
+ return false;
209
+ }
210
+ const original = await this.getOriginalPayload(proposal.payload);
211
+ if (original === undefined || original.toLowerCase() !== target) {
212
+ continue;
213
+ }
214
+ // The wrapper unwraps to our payload. Only treat this as "already proposed" if the proposal
215
+ // is still live -- terminal states allow re-proposing the same payload in a later round.
216
+ if (TERMINAL_PROPOSAL_STATES.has(proposal.state)) {
217
+ continue;
218
+ }
219
+ return true;
62
220
  }
63
- return state;
221
+ return false;
222
+ }
223
+ /**
224
+ * Resolves the original payload behind a `GSEPayload` wrapper. Returns `undefined` if the
225
+ * wrapper does not implement `IProposerPayload.getOriginalPayload` (e.g. proposals created via
226
+ * `Governance.proposeWithLock`, which bypass GSEPayload entirely and store the raw `IPayload`
227
+ * directly). Results are memoized indefinitely because deployed wrapper bytecode is immutable.
228
+ */ async getOriginalPayload(wrapper) {
229
+ const key = wrapper.toString();
230
+ if (this.originalPayloadCache.has(key)) {
231
+ return this.originalPayloadCache.get(key);
232
+ }
233
+ let original;
234
+ try {
235
+ original = await this.client.readContract({
236
+ address: key,
237
+ abi: ProposerPayloadAbi,
238
+ functionName: 'getOriginalPayload'
239
+ });
240
+ } catch {
241
+ original = undefined;
242
+ }
243
+ this.originalPayloadCache.set(key, original);
244
+ return original;
64
245
  }
65
246
  async awaitProposalActive({ proposalId, logger }) {
66
247
  const state = await this.getProposalState(proposalId);
@@ -164,7 +345,7 @@ export class GovernanceContract extends ReadOnlyGovernanceContract {
164
345
  ]);
165
346
  }
166
347
  async vote({ proposalId, voteAmount, inFavor, retries = 10, logger }) {
167
- const l1TxUtils = createL1TxUtilsFromViemWallet(this.client, {
348
+ const l1TxUtils = createL1TxUtils(this.client, {
168
349
  logger
169
350
  });
170
351
  const retryDelaySeconds = 12;
@@ -184,6 +365,7 @@ export class GovernanceContract extends ReadOnlyGovernanceContract {
184
365
  const encodedVoteData = encodeFunctionData(voteFunctionData);
185
366
  const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
186
367
  to: this.governanceContract.address,
368
+ abi: GovernanceAbi,
187
369
  data: encodedVoteData
188
370
  });
189
371
  if (receipt.status === 'success') {
@@ -213,7 +395,7 @@ export class GovernanceContract extends ReadOnlyGovernanceContract {
213
395
  logger.info(`Proposal [${proposalId}] has summedBallot nay [${proposal.summedBallot.nay}]`);
214
396
  }
215
397
  async executeProposal({ proposalId, retries = 10, logger }) {
216
- const l1TxUtils = createL1TxUtilsFromViemWallet(this.client, {
398
+ const l1TxUtils = createL1TxUtils(this.client, {
217
399
  logger
218
400
  });
219
401
  const retryDelaySeconds = 12;
@@ -230,6 +412,7 @@ export class GovernanceContract extends ReadOnlyGovernanceContract {
230
412
  const encodedExecuteData = encodeFunctionData(executeFunctionData);
231
413
  const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
232
414
  to: this.governanceContract.address,
415
+ abi: GovernanceAbi,
233
416
  data: encodedExecuteData
234
417
  });
235
418
  if (receipt.status === 'success') {
@@ -4,6 +4,7 @@ import { type Hex, type TransactionReceipt, type TypedDataDefinition } from 'vie
4
4
  import type { L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
5
5
  import type { ViemClient } from '../types.js';
6
6
  import { type IEmpireBase } from './empire_base.js';
7
+ import { ReadOnlyGovernanceContract } from './governance.js';
7
8
  export declare class GovernanceProposerContract implements IEmpireBase {
8
9
  readonly client: ViemClient;
9
10
  private readonly proposer;
@@ -24,9 +25,23 @@ export declare class GovernanceProposerContract implements IEmpireBase {
24
25
  getPayloadSignals(rollupAddress: Hex, round: bigint, payload: Hex): Promise<bigint>;
25
26
  createSignalRequest(payload: Hex): L1TxRequest;
26
27
  createSignalRequestWithSignature(payload: Hex, slot: SlotNumber, chainId: number, signerAddress: Hex, signer: (msg: TypedDataDefinition) => Promise<Hex>): Promise<L1TxRequest>;
28
+ /**
29
+ * Resolves the Governance contract this proposer submits winners to. Lazily reads
30
+ * `GovernanceProposer.getGovernance()` (which itself looks the address up via the registry) and
31
+ * memoizes the resulting wrapper.
32
+ */
33
+ getGovernance(): Promise<ReadOnlyGovernanceContract>;
34
+ /**
35
+ * Returns true iff the given original payload is currently the subject of a live (non-terminal)
36
+ * Governance proposal. Delegates to `ReadOnlyGovernanceContract.hasActiveProposalWithPayload`, which
37
+ * implements the actual sweep against the Governance contract -- this method exists only as a
38
+ * convenience wrapper so callers that already hold a GovernanceProposer reference don't have to
39
+ * resolve the Governance address themselves.
40
+ */
41
+ hasActiveProposalWithPayload(payload: Hex): Promise<boolean>;
27
42
  submitRoundWinner(round: bigint, l1TxUtils: L1TxUtils): Promise<{
28
43
  receipt: TransactionReceipt;
29
44
  proposalId: bigint;
30
45
  }>;
31
46
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZV9wcm9wb3Nlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlX3Byb3Bvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUVMLEtBQUssR0FBRyxFQUNSLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssbUJBQW1CLEVBR3pCLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQThELE1BQU0sa0JBQWtCLENBQUM7QUFHaEgscUJBQWEsMEJBQTJCLFlBQVcsV0FBVzthQUkxQyxNQUFNLEVBQUUsVUFBVTtJQUhwQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBa0U7SUFFM0YsWUFDa0IsTUFBTSxFQUFFLFVBQVUsRUFDbEMsT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBTTFCO0lBRUQsSUFBVyxPQUFPLGVBRWpCO0lBRVksZ0JBQWdCLHdCQUU1QjtJQUdZLGtCQUFrQix3QkFFOUI7SUFFTSxhQUFhLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUV0QztJQUVNLFlBQVksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJDO0lBRU0sV0FBVywyQkFFakI7SUFFTSxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJEO0lBRVksWUFBWSxDQUN2QixhQUFhLEVBQUUsR0FBRyxFQUNsQixLQUFLLEVBQUUsTUFBTSxHQUNaLE9BQU8sQ0FBQztRQUFFLGNBQWMsRUFBRSxVQUFVLENBQUM7UUFBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUM7UUFBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO1FBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQTtLQUFFLENBQUMsQ0FZakg7SUFFTSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXpGO0lBRU0sbUJBQW1CLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxXQUFXLENBS3BEO0lBRVksZ0NBQWdDLENBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQ1osSUFBSSxFQUFFLFVBQVUsRUFDaEIsT0FBTyxFQUFFLE1BQU0sRUFDZixhQUFhLEVBQUUsR0FBRyxFQUNsQixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUNqRCxPQUFPLENBQUMsV0FBVyxDQUFDLENBYXRCO0lBRVksaUJBQWlCLENBQzVCLEtBQUssRUFBRSxNQUFNLEVBQ2IsU0FBUyxFQUFFLFNBQVMsR0FDbkIsT0FBTyxDQUFDO1FBQ1QsT0FBTyxFQUFFLGtCQUFrQixDQUFDO1FBQzVCLFVBQVUsRUFBRSxNQUFNLENBQUM7S0FDcEIsQ0FBQyxDQVdEO0NBQ0YifQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZV9wcm9wb3Nlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlX3Byb3Bvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUVMLEtBQUssR0FBRyxFQUNSLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssbUJBQW1CLEVBR3pCLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQThELE1BQU0sa0JBQWtCLENBQUM7QUFDaEgsT0FBTyxFQUFFLDBCQUEwQixFQUE2QixNQUFNLGlCQUFpQixDQUFDO0FBRXhGLHFCQUFhLDBCQUEyQixZQUFXLFdBQVc7YUFJMUMsTUFBTSxFQUFFLFVBQVU7SUFIcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQWtFO0lBRTNGLFlBQ2tCLE1BQU0sRUFBRSxVQUFVLEVBQ2xDLE9BQU8sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQU0xQjtJQUVELElBQVcsT0FBTyxlQUVqQjtJQUVZLGdCQUFnQix3QkFFNUI7SUFHWSxrQkFBa0Isd0JBRTlCO0lBRU0sYUFBYSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFdEM7SUFFTSxZQUFZLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUVyQztJQUVNLFdBQVcsMkJBRWpCO0lBRU0sWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUVyRDtJQUVZLFlBQVksQ0FDdkIsYUFBYSxFQUFFLEdBQUcsRUFDbEIsS0FBSyxFQUFFLE1BQU0sR0FDWixPQUFPLENBQUM7UUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDO1FBQUMsc0JBQXNCLEVBQUUsR0FBRyxDQUFDO1FBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztRQUFDLFFBQVEsRUFBRSxPQUFPLENBQUE7S0FBRSxDQUFDLENBWWpIO0lBRU0saUJBQWlCLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUV6RjtJQUVNLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsV0FBVyxDQU1wRDtJQUVZLGdDQUFnQyxDQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUNaLElBQUksRUFBRSxVQUFVLEVBQ2hCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsYUFBYSxFQUFFLEdBQUcsRUFDbEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLG1CQUFtQixLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FDakQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQWN0QjtJQUVEOzs7O09BSUc7SUFFVSxhQUFhLElBQUksT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBR2hFO0lBRUQ7Ozs7OztPQU1HO0lBQ1UsNEJBQTRCLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBR3hFO0lBRVksaUJBQWlCLENBQzVCLEtBQUssRUFBRSxNQUFNLEVBQ2IsU0FBUyxFQUFFLFNBQVMsR0FDbkIsT0FBTyxDQUFDO1FBQ1QsT0FBTyxFQUFFLGtCQUFrQixDQUFDO1FBQzVCLFVBQVUsRUFBRSxNQUFNLENBQUM7S0FDcEIsQ0FBQyxDQVlEO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAGzB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAA8D,MAAM,kBAAkB,CAAC;AAGhH,qBAAa,0BAA2B,YAAW,WAAW;aAI1C,MAAM,EAAE,UAAU;IAHpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;IAE3F,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAED,IAAW,OAAO,eAEjB;IAEY,gBAAgB,wBAE5B;IAGY,kBAAkB,wBAE9B;IAEM,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAEtC;IAEM,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAErC;IAEM,WAAW,2BAEjB;IAEM,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAErD;IAEY,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,cAAc,EAAE,UAAU,CAAC;QAAC,sBAAsB,EAAE,GAAG,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAYjH;IAEM,iBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzF;IAEM,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAKpD;IAEY,gCAAgC,CAC3C,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,OAAO,CAAC,WAAW,CAAC,CAatB;IAEY,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAWD;CACF"}
1
+ {"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAGzB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAA8D,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,0BAA0B,EAA6B,MAAM,iBAAiB,CAAC;AAExF,qBAAa,0BAA2B,YAAW,WAAW;aAI1C,MAAM,EAAE,UAAU;IAHpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;IAE3F,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAED,IAAW,OAAO,eAEjB;IAEY,gBAAgB,wBAE5B;IAGY,kBAAkB,wBAE9B;IAEM,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAEtC;IAEM,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAErC;IAEM,WAAW,2BAEjB;IAEM,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAErD;IAEY,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,cAAc,EAAE,UAAU,CAAC;QAAC,sBAAsB,EAAE,GAAG,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAYjH;IAEM,iBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzF;IAEM,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAMpD;IAEY,gCAAgC,CAC3C,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,OAAO,CAAC,WAAW,CAAC,CActB;IAED;;;;OAIG;IAEU,aAAa,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAGhE;IAED;;;;;;OAMG;IACU,4BAA4B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGxE;IAEY,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAYD;CACF"}
@@ -377,7 +377,7 @@ import { EthAddress } from '@aztec/foundation/eth-address';
377
377
  import { GovernanceProposerAbi } from '@aztec/l1-artifacts/GovernanceProposerAbi';
378
378
  import { encodeFunctionData, getContract } from 'viem';
379
379
  import { encodeSignal, encodeSignalWithSignature, signSignalWithSig } from './empire_base.js';
380
- import { extractProposalIdFromLogs } from './governance.js';
380
+ import { ReadOnlyGovernanceContract, extractProposalIdFromLogs } from './governance.js';
381
381
  export class GovernanceProposerContract {
382
382
  client;
383
383
  static{
@@ -386,6 +386,11 @@ export class GovernanceProposerContract {
386
386
  memoize,
387
387
  2,
388
388
  "getRegistryAddress"
389
+ ],
390
+ [
391
+ memoize,
392
+ 2,
393
+ "getGovernance"
389
394
  ]
390
395
  ], []));
391
396
  }
@@ -455,6 +460,7 @@ export class GovernanceProposerContract {
455
460
  createSignalRequest(payload) {
456
461
  return {
457
462
  to: this.address.toString(),
463
+ abi: GovernanceProposerAbi,
458
464
  data: encodeSignal(payload)
459
465
  };
460
466
  }
@@ -462,14 +468,34 @@ export class GovernanceProposerContract {
462
468
  const signature = await signSignalWithSig(signer, payload, slot, await this.getInstance(), this.address.toString(), chainId);
463
469
  return {
464
470
  to: this.address.toString(),
471
+ abi: GovernanceProposerAbi,
465
472
  data: encodeSignalWithSignature(payload, signature)
466
473
  };
467
474
  }
475
+ /**
476
+ * Resolves the Governance contract this proposer submits winners to. Lazily reads
477
+ * `GovernanceProposer.getGovernance()` (which itself looks the address up via the registry) and
478
+ * memoizes the resulting wrapper.
479
+ */ async getGovernance() {
480
+ const address = await this.proposer.read.getGovernance();
481
+ return new ReadOnlyGovernanceContract(address, this.client);
482
+ }
483
+ /**
484
+ * Returns true iff the given original payload is currently the subject of a live (non-terminal)
485
+ * Governance proposal. Delegates to `ReadOnlyGovernanceContract.hasActiveProposalWithPayload`, which
486
+ * implements the actual sweep against the Governance contract -- this method exists only as a
487
+ * convenience wrapper so callers that already hold a GovernanceProposer reference don't have to
488
+ * resolve the Governance address themselves.
489
+ */ async hasActiveProposalWithPayload(payload) {
490
+ const governance = await this.getGovernance();
491
+ return governance.hasActiveProposalWithPayload(payload);
492
+ }
468
493
  async submitRoundWinner(round, l1TxUtils) {
469
494
  const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
470
495
  to: this.address.toString(),
496
+ abi: GovernanceProposerAbi,
471
497
  data: encodeFunctionData({
472
- abi: this.proposer.abi,
498
+ abi: GovernanceProposerAbi,
473
499
  functionName: 'submitRoundWinner',
474
500
  args: [
475
501
  round
@@ -1,6 +1,7 @@
1
1
  export * from './empire_base.js';
2
2
  export * from './errors.js';
3
3
  export * from './fee_asset_handler.js';
4
+ export * from './fee_asset_price_oracle.js';
4
5
  export * from './fee_juice.js';
5
6
  export * from './governance.js';
6
7
  export * from './governance_proposer.js';
@@ -14,4 +15,4 @@ export * from './rollup.js';
14
15
  export * from './empire_slashing_proposer.js';
15
16
  export * from './tally_slashing_proposer.js';
16
17
  export * from './slasher_contract.js';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsdUJBQXVCLENBQUMifQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx1QkFBdUIsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export * from './empire_base.js';
2
2
  export * from './errors.js';
3
3
  export * from './fee_asset_handler.js';
4
+ export * from './fee_asset_price_oracle.js';
4
5
  export * from './fee_juice.js';
5
6
  export * from './governance.js';
6
7
  export * from './governance_proposer.js';
@@ -18,4 +18,4 @@ export declare class Multicall3 {
18
18
  }>;
19
19
  }
20
20
  export declare function deployMulticall3(l1Client: ExtendedViemWalletClient, logger: Logger): Promise<void>;
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGljYWxsLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL211bHRpY2FsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQXFDLEtBQUssR0FBRyxFQUFxQyxNQUFNLE1BQU0sQ0FBQztBQUV0RyxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRyxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0sYUFBYSxDQUFDO0FBR2xFLGVBQU8sTUFBTSxvQkFBb0IsOENBQXdELENBQUM7QUFFMUYscUJBQWEsVUFBVTtJQUNyQixPQUFhLE9BQU8sQ0FDbEIsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUN2QixTQUFTLEVBQUUsU0FBUyxFQUNwQixTQUFTLEVBQUUsVUFBVSxHQUFHLFNBQVMsRUFDakMsVUFBVSxFQUFFLFlBQVksR0FBRyxTQUFTLEVBQ3BDLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsSUFBSSxHQUFFO1FBQUUsZUFBZSxDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQU87Ozs7Ozs7O09BbUd6QztDQUNGO0FBRUQsd0JBQXNCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkErQnhGIn0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGljYWxsLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL211bHRpY2FsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQXFDLEtBQUssR0FBRyxFQUFxQyxNQUFNLE1BQU0sQ0FBQztBQUV0RyxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRyxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0sYUFBYSxDQUFDO0FBR2xFLGVBQU8sTUFBTSxvQkFBb0IsOENBQXdELENBQUM7QUFFMUYscUJBQWEsVUFBVTtJQUNyQixPQUFhLE9BQU8sQ0FDbEIsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUN2QixTQUFTLEVBQUUsU0FBUyxFQUNwQixTQUFTLEVBQUUsVUFBVSxHQUFHLFNBQVMsRUFDakMsVUFBVSxFQUFFLFlBQVksR0FBRyxTQUFTLEVBQ3BDLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsSUFBSSxHQUFFO1FBQUUsZUFBZSxDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQU87Ozs7Ozs7O09Bc0d6QztDQUNGO0FBRUQsd0JBQXNCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkErQnhGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,oBAAoB,8CAAwD,CAAC;AAE1F,qBAAa,UAAU;IACrB,OAAa,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;;;;;;;;OAmGzC;CACF;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,iBA+BxF"}
1
+ {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,oBAAoB,8CAAwD,CAAC;AAE1F,qBAAa,UAAU;IACrB,OAAa,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;;;;;;;;OAsGzC;CACF;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,iBA+BxF"}
@@ -23,7 +23,8 @@ export class Multicall3 {
23
23
  try {
24
24
  const { receipt, state } = await l1TxUtils.sendAndMonitorTransaction({
25
25
  to: MULTI_CALL_3_ADDRESS,
26
- data: encodedForwarderData
26
+ data: encodedForwarderData,
27
+ abi: multicall3Abi
27
28
  }, gasConfig, blobConfig);
28
29
  if (receipt.status === 'success') {
29
30
  const stats = await l1TxUtils.getTransactionStats(receipt.transactionHash);