@aztec/ethereum 1.2.0 → 2.0.0-nightly.20250813

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 (98) hide show
  1. package/dest/config.d.ts +22 -7
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +49 -14
  4. package/dest/contracts/empire_base.d.ts +12 -10
  5. package/dest/contracts/empire_base.d.ts.map +1 -1
  6. package/dest/contracts/empire_base.js +21 -16
  7. package/dest/contracts/governance.d.ts +4 -4
  8. package/dest/contracts/governance.js +2 -2
  9. package/dest/contracts/governance_proposer.d.ts +7 -7
  10. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  11. package/dest/contracts/governance_proposer.js +13 -13
  12. package/dest/contracts/gse.d.ts +29 -0
  13. package/dest/contracts/gse.d.ts.map +1 -0
  14. package/dest/contracts/gse.js +56 -0
  15. package/dest/contracts/index.d.ts +1 -0
  16. package/dest/contracts/index.d.ts.map +1 -1
  17. package/dest/contracts/index.js +1 -0
  18. package/dest/contracts/multicall.d.ts +3 -1
  19. package/dest/contracts/multicall.d.ts.map +1 -1
  20. package/dest/contracts/multicall.js +11 -2
  21. package/dest/contracts/registry.d.ts +1 -0
  22. package/dest/contracts/registry.d.ts.map +1 -1
  23. package/dest/contracts/registry.js +3 -0
  24. package/dest/contracts/rollup.d.ts +39 -5
  25. package/dest/contracts/rollup.d.ts.map +1 -1
  26. package/dest/contracts/rollup.js +92 -14
  27. package/dest/contracts/slashing_proposer.d.ts +21 -10
  28. package/dest/contracts/slashing_proposer.d.ts.map +1 -1
  29. package/dest/contracts/slashing_proposer.js +43 -23
  30. package/dest/deploy_l1_contracts.d.ts +11 -36664
  31. package/dest/deploy_l1_contracts.d.ts.map +1 -1
  32. package/dest/deploy_l1_contracts.js +92 -177
  33. package/dest/index.d.ts +1 -1
  34. package/dest/index.d.ts.map +1 -1
  35. package/dest/index.js +1 -1
  36. package/dest/l1_artifacts.d.ts +51869 -0
  37. package/dest/l1_artifacts.d.ts.map +1 -0
  38. package/dest/l1_artifacts.js +141 -0
  39. package/dest/l1_tx_utils.d.ts +4 -2
  40. package/dest/l1_tx_utils.d.ts.map +1 -1
  41. package/dest/l1_tx_utils.js +46 -21
  42. package/dest/queries.d.ts +1 -8
  43. package/dest/queries.d.ts.map +1 -1
  44. package/dest/queries.js +20 -15
  45. package/dest/test/chain_monitor.d.ts +4 -2
  46. package/dest/test/chain_monitor.d.ts.map +1 -1
  47. package/dest/test/chain_monitor.js +12 -3
  48. package/dest/test/delayed_tx_utils.js +2 -2
  49. package/dest/{eth_cheat_codes.d.ts → test/eth_cheat_codes.d.ts} +8 -4
  50. package/dest/test/eth_cheat_codes.d.ts.map +1 -0
  51. package/dest/{eth_cheat_codes.js → test/eth_cheat_codes.js} +27 -11
  52. package/dest/test/eth_cheat_codes_with_state.d.ts +1 -1
  53. package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
  54. package/dest/test/eth_cheat_codes_with_state.js +1 -1
  55. package/dest/test/index.d.ts +2 -0
  56. package/dest/test/index.d.ts.map +1 -1
  57. package/dest/test/index.js +2 -0
  58. package/dest/test/rollup_cheat_codes.d.ts +81 -0
  59. package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
  60. package/dest/test/rollup_cheat_codes.js +234 -0
  61. package/dest/test/start_anvil.d.ts +1 -0
  62. package/dest/test/start_anvil.d.ts.map +1 -1
  63. package/dest/test/start_anvil.js +6 -1
  64. package/dest/test/tx_delayer.d.ts +8 -1
  65. package/dest/test/tx_delayer.d.ts.map +1 -1
  66. package/dest/test/tx_delayer.js +51 -11
  67. package/dest/test/upgrade_utils.d.ts.map +1 -1
  68. package/dest/test/upgrade_utils.js +1 -1
  69. package/dest/utils.d.ts +1 -0
  70. package/dest/utils.d.ts.map +1 -1
  71. package/dest/utils.js +1 -1
  72. package/package.json +5 -5
  73. package/src/config.ts +62 -18
  74. package/src/contracts/empire_base.ts +28 -19
  75. package/src/contracts/governance.ts +2 -2
  76. package/src/contracts/governance_proposer.ts +23 -15
  77. package/src/contracts/gse.ts +73 -0
  78. package/src/contracts/index.ts +1 -0
  79. package/src/contracts/multicall.ts +8 -1
  80. package/src/contracts/registry.ts +4 -0
  81. package/src/contracts/rollup.ts +115 -9
  82. package/src/contracts/slashing_proposer.ts +55 -27
  83. package/src/deploy_l1_contracts.ts +151 -238
  84. package/src/index.ts +1 -1
  85. package/src/l1_artifacts.ts +216 -0
  86. package/src/l1_tx_utils.ts +52 -26
  87. package/src/queries.ts +20 -31
  88. package/src/test/chain_monitor.ts +9 -2
  89. package/src/test/delayed_tx_utils.ts +2 -2
  90. package/src/{eth_cheat_codes.ts → test/eth_cheat_codes.ts} +20 -14
  91. package/src/test/eth_cheat_codes_with_state.ts +1 -1
  92. package/src/test/index.ts +2 -0
  93. package/src/test/rollup_cheat_codes.ts +257 -0
  94. package/src/test/start_anvil.ts +9 -1
  95. package/src/test/tx_delayer.ts +55 -9
  96. package/src/test/upgrade_utils.ts +1 -1
  97. package/src/utils.ts +1 -1
  98. package/dest/eth_cheat_codes.d.ts.map +0 -1
package/dest/config.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type ConfigMappingsType, type NetworkNames } from '@aztec/foundation/config';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
3
  import { type L1TxUtilsConfig } from './l1_tx_utils.js';
3
4
  export type GenesisStateConfig = {
4
5
  /** Whether to populate the genesis state with initial fee juice for the test accounts */
@@ -18,13 +19,19 @@ export type L1ContractsConfig = {
18
19
  /** The number of epochs after an epoch ends that proofs are still accepted. */
19
20
  aztecProofSubmissionEpochs: number;
20
21
  /** The deposit amount for a validator */
21
- depositAmount: bigint;
22
+ activationThreshold: bigint;
22
23
  /** The minimum stake for a validator. */
23
- minimumStake: bigint;
24
- /** The slashing quorum */
24
+ ejectionThreshold: bigint;
25
+ /** The slashing quorum, i.e. how many slots must signal for the same payload in a round for it to be submittable to the Slasher */
25
26
  slashingQuorum: number;
26
- /** The slashing round size */
27
+ /** The slashing round size, i.e. how many slots are in a round */
27
28
  slashingRoundSize: number;
29
+ /** The slashing lifetime in rounds. I.e., if 1, round N must be submitted before round N + 2 */
30
+ slashingLifetimeInRounds: number;
31
+ /** The slashing execution delay in rounds. I.e., if 1, round N may not be submitted until round N + 2 */
32
+ slashingExecutionDelayInRounds: number;
33
+ /** The slashing vetoer. May blacklist a payload from being submitted. */
34
+ slashingVetoer: EthAddress;
28
35
  /** Governance proposing quorum */
29
36
  governanceProposerQuorum: number;
30
37
  /** Governance proposing round size */
@@ -42,10 +49,13 @@ export declare const DefaultL1ContractsConfig: {
42
49
  aztecEpochDuration: number;
43
50
  aztecTargetCommitteeSize: number;
44
51
  aztecProofSubmissionEpochs: number;
45
- depositAmount: bigint;
46
- minimumStake: bigint;
52
+ activationThreshold: bigint;
53
+ ejectionThreshold: bigint;
47
54
  slashingQuorum: number;
48
55
  slashingRoundSize: number;
56
+ slashingLifetimeInRounds: number;
57
+ slashingExecutionDelayInRounds: number;
58
+ slashingVetoer: EthAddress;
49
59
  governanceProposerQuorum: number;
50
60
  governanceProposerRoundSize: number;
51
61
  manaTarget: bigint;
@@ -62,13 +72,18 @@ export declare const getGovernanceConfiguration: (networkName: NetworkNames) =>
62
72
  executionDelay: bigint;
63
73
  gracePeriod: bigint;
64
74
  quorum: bigint;
65
- voteDifferential: bigint;
75
+ requiredYeaMargin: bigint;
66
76
  minimumVotes: bigint;
67
77
  };
78
+ export declare const getGSEConfiguration: (networkName: NetworkNames) => {
79
+ activationThreshold: bigint;
80
+ ejectionThreshold: bigint;
81
+ };
68
82
  export declare const getRewardConfig: (networkName: NetworkNames) => {
69
83
  sequencerBps: number;
70
84
  rewardDistributor: `0x${string}`;
71
85
  booster: `0x${string}`;
86
+ blockReward: bigint;
72
87
  };
73
88
  export declare const getRewardBoostConfig: (networkName: NetworkNames) => {
74
89
  increment: number;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,YAAY,EAKlB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,KAAK,eAAe,EAA2B,MAAM,kBAAkB,CAAC;AAEjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAC;IACtB,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yCAAyC;IACzC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uFAAuF;IACvF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,wBAAwB,EAAE,MAAM,CAAC;IACjC,+EAA+E;IAC/E,0BAA0B,EAAE,MAAM,CAAC;IACnC,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,wBAAwB,EAAE,MAAM,CAAC;IACjC,sCAAsC;IACtC,2BAA2B,EAAE,MAAM,CAAC;IACpC,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,eAAe,CAAC;AAEpB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;CAeR,CAAC;AA8B9B,eAAO,MAAM,0BAA0B,GAAI,aAAa,YAAY;;;;;;;;;;;;CAKnE,CAAC;AAiBF,eAAO,MAAM,eAAe,GAAI,aAAa,YAAY;;;;CAKxD,CAAC;AAkBF,eAAO,MAAM,oBAAoB,GAAI,aAAa,YAAY;;;;;;CAK7D,CAAC;AAiBF,eAAO,MAAM,mBAAmB,GAAI,aAAa,YAAY;;;;;CAK5D,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CAwE3E,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CAW7E,CAAC;AAEF,wBAAgB,2BAA2B,IAAI,iBAAiB,CAE/D;AAED,wBAAgB,4BAA4B,IAAI,kBAAkB,CAEjE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,YAAY,EAKlB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,KAAK,eAAe,EAA2B,MAAM,kBAAkB,CAAC;AAEjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAC;IACtB,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yCAAyC;IACzC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uFAAuF;IACvF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,wBAAwB,EAAE,MAAM,CAAC;IACjC,+EAA+E;IAC/E,0BAA0B,EAAE,MAAM,CAAC;IACnC,yCAAyC;IACzC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mIAAmI;IACnI,cAAc,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gGAAgG;IAChG,wBAAwB,EAAE,MAAM,CAAC;IACjC,yGAAyG;IACzG,8BAA8B,EAAE,MAAM,CAAC;IACvC,yEAAyE;IACzE,cAAc,EAAE,UAAU,CAAC;IAC3B,kCAAkC;IAClC,wBAAwB,EAAE,MAAM,CAAC;IACjC,sCAAsC;IACtC,2BAA2B,EAAE,MAAM,CAAC;IACpC,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,eAAe,CAAC;AAEpB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;CAkBR,CAAC;AA8B9B,eAAO,MAAM,0BAA0B,GAAI,aAAa,YAAY;;;;;;;;;;;;CAKnE,CAAC;AAYF,eAAO,MAAM,mBAAmB,GAAI,aAAa,YAAY;;;CAK5D,CAAC;AAmBF,eAAO,MAAM,eAAe,GAAI,aAAa,YAAY;;;;;CAKxD,CAAC;AAkBF,eAAO,MAAM,oBAAoB,GAAI,aAAa,YAAY;;;;;;CAK7D,CAAC;AAiBF,eAAO,MAAM,mBAAmB,GAAI,aAAa,YAAY;;;;;CAK5D,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CAwF3E,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CAW7E,CAAC;AAEF,wBAAgB,2BAA2B,IAAI,iBAAiB,CAE/D;AAED,wBAAgB,4BAA4B,IAAI,kBAAkB,CAEjE"}
package/dest/config.js CHANGED
@@ -7,10 +7,13 @@ export const DefaultL1ContractsConfig = {
7
7
  aztecEpochDuration: 32,
8
8
  aztecTargetCommitteeSize: 48,
9
9
  aztecProofSubmissionEpochs: 1,
10
- depositAmount: BigInt(100e18),
11
- minimumStake: BigInt(50e18),
10
+ activationThreshold: BigInt(100e18),
11
+ ejectionThreshold: BigInt(50e18),
12
12
  slashingQuorum: 101,
13
13
  slashingRoundSize: 200,
14
+ slashingLifetimeInRounds: 5,
15
+ slashingExecutionDelayInRounds: 0,
16
+ slashingVetoer: EthAddress.ZERO,
14
17
  governanceProposerQuorum: 151,
15
18
  governanceProposerRoundSize: 300,
16
19
  manaTarget: BigInt(1e10),
@@ -27,21 +30,21 @@ const LocalGovernanceConfiguration = {
27
30
  executionDelay: 60n,
28
31
  gracePeriod: 60n * 60n * 24n * 7n,
29
32
  quorum: 1n * 10n ** 17n,
30
- voteDifferential: 4n * 10n ** 16n,
33
+ requiredYeaMargin: 4n * 10n ** 16n,
31
34
  minimumVotes: 400n * 10n ** 18n
32
35
  };
33
36
  const TestnetGovernanceConfiguration = {
34
37
  proposeConfig: {
35
38
  lockDelay: 60n * 60n * 24n,
36
- lockAmount: DefaultL1ContractsConfig.depositAmount * 100n
39
+ lockAmount: DefaultL1ContractsConfig.activationThreshold * 100n
37
40
  },
38
41
  votingDelay: 60n,
39
42
  votingDuration: 60n * 60n,
40
43
  executionDelay: 60n * 60n * 24n,
41
44
  gracePeriod: 60n * 60n * 24n * 7n,
42
45
  quorum: 3n * 10n ** 17n,
43
- voteDifferential: 4n * 10n ** 16n,
44
- minimumVotes: DefaultL1ContractsConfig.minimumStake * 200n
46
+ requiredYeaMargin: 4n * 10n ** 16n,
47
+ minimumVotes: DefaultL1ContractsConfig.ejectionThreshold * 200n
45
48
  };
46
49
  export const getGovernanceConfiguration = (networkName)=>{
47
50
  if (networkName === 'alpha-testnet' || networkName === 'testnet') {
@@ -49,18 +52,34 @@ export const getGovernanceConfiguration = (networkName)=>{
49
52
  }
50
53
  return LocalGovernanceConfiguration;
51
54
  };
55
+ const TestnetGSEConfiguration = {
56
+ activationThreshold: BigInt(100e18),
57
+ ejectionThreshold: BigInt(50e18)
58
+ };
59
+ const LocalGSEConfiguration = {
60
+ activationThreshold: BigInt(100e18),
61
+ ejectionThreshold: BigInt(50e18)
62
+ };
63
+ export const getGSEConfiguration = (networkName)=>{
64
+ if (networkName === 'alpha-testnet' || networkName === 'testnet') {
65
+ return TestnetGSEConfiguration;
66
+ }
67
+ return LocalGSEConfiguration;
68
+ };
52
69
  // Making a default config here as we are only using it thought the deployment
53
70
  // and do not expect to be using different setups, so having environment variables
54
71
  // for it seems overkill
55
72
  const LocalRewardConfig = {
56
73
  sequencerBps: 5000,
57
74
  rewardDistributor: EthAddress.ZERO.toString(),
58
- booster: EthAddress.ZERO.toString()
75
+ booster: EthAddress.ZERO.toString(),
76
+ blockReward: BigInt(50e18)
59
77
  };
60
78
  const TestnetRewardConfig = {
61
79
  sequencerBps: 5000,
62
80
  rewardDistributor: EthAddress.ZERO.toString(),
63
- booster: EthAddress.ZERO.toString()
81
+ booster: EthAddress.ZERO.toString(),
82
+ blockReward: BigInt(50e18)
64
83
  };
65
84
  export const getRewardConfig = (networkName)=>{
66
85
  if (networkName === 'alpha-testnet' || networkName === 'testnet') {
@@ -133,15 +152,15 @@ export const l1ContractsConfigMappings = {
133
152
  description: 'The number of epochs after an epoch ends that proofs are still accepted.',
134
153
  ...numberConfigHelper(DefaultL1ContractsConfig.aztecProofSubmissionEpochs)
135
154
  },
136
- depositAmount: {
137
- env: 'AZTEC_DEPOSIT_AMOUNT',
155
+ activationThreshold: {
156
+ env: 'AZTEC_ACTIVATION_THRESHOLD',
138
157
  description: 'The deposit amount for a validator',
139
- ...bigintConfigHelper(DefaultL1ContractsConfig.depositAmount)
158
+ ...bigintConfigHelper(DefaultL1ContractsConfig.activationThreshold)
140
159
  },
141
- minimumStake: {
142
- env: 'AZTEC_MINIMUM_STAKE',
160
+ ejectionThreshold: {
161
+ env: 'AZTEC_EJECTION_THRESHOLD',
143
162
  description: 'The minimum stake for a validator.',
144
- ...bigintConfigHelper(DefaultL1ContractsConfig.minimumStake)
163
+ ...bigintConfigHelper(DefaultL1ContractsConfig.ejectionThreshold)
145
164
  },
146
165
  slashingQuorum: {
147
166
  env: 'AZTEC_SLASHING_QUORUM',
@@ -153,6 +172,22 @@ export const l1ContractsConfigMappings = {
153
172
  description: 'The slashing round size',
154
173
  ...numberConfigHelper(DefaultL1ContractsConfig.slashingRoundSize)
155
174
  },
175
+ slashingLifetimeInRounds: {
176
+ env: 'AZTEC_SLASHING_LIFETIME_IN_ROUNDS',
177
+ description: 'The slashing lifetime in rounds',
178
+ ...numberConfigHelper(DefaultL1ContractsConfig.slashingLifetimeInRounds)
179
+ },
180
+ slashingExecutionDelayInRounds: {
181
+ env: 'AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS',
182
+ description: 'The slashing execution delay in rounds',
183
+ ...numberConfigHelper(DefaultL1ContractsConfig.slashingExecutionDelayInRounds)
184
+ },
185
+ slashingVetoer: {
186
+ env: 'AZTEC_SLASHING_VETOER',
187
+ description: 'The slashing vetoer',
188
+ parseEnv: (val)=>EthAddress.fromString(val),
189
+ defaultValue: DefaultL1ContractsConfig.slashingVetoer
190
+ },
156
191
  governanceProposerQuorum: {
157
192
  env: 'AZTEC_GOVERNANCE_PROPOSER_QUORUM',
158
193
  description: 'The governance proposing quorum',
@@ -1,26 +1,28 @@
1
+ import type { EthAddress } from '@aztec/foundation/eth-address';
1
2
  import { Signature } from '@aztec/foundation/eth-signature';
2
- import { type Hex } from 'viem';
3
+ import { type Hex, type TypedDataDefinition } from 'viem';
3
4
  import type { L1TxRequest } from '../l1_tx_utils.js';
4
5
  export interface IEmpireBase {
6
+ get address(): EthAddress;
5
7
  getRoundInfo(rollupAddress: Hex, round: bigint): Promise<{
6
- lastVote: bigint;
7
- leader: Hex;
8
+ lastSignalSlot: bigint;
9
+ payloadWithMostSignals: Hex;
8
10
  executed: boolean;
9
11
  }>;
10
12
  computeRound(slot: bigint): Promise<bigint>;
11
- createVoteRequest(payload: Hex): L1TxRequest;
12
- createVoteRequestWithSignature(payload: Hex, chainId: number, signerAddress: Hex, signer: (msg: Hex) => Promise<Hex>): Promise<L1TxRequest>;
13
+ createSignalRequest(payload: Hex): L1TxRequest;
14
+ createSignalRequestWithSignature(payload: Hex, round: bigint, chainId: number, signerAddress: Hex, signer: (msg: TypedDataDefinition) => Promise<Hex>): Promise<L1TxRequest>;
13
15
  }
14
- export declare function encodeVote(payload: Hex): Hex;
15
- export declare function encodeVoteWithSignature(payload: Hex, signature: Signature): `0x${string}`;
16
+ export declare function encodeSignal(payload: Hex): Hex;
17
+ export declare function encodeSignalWithSignature(payload: Hex, signature: Signature): `0x${string}`;
16
18
  /**
17
- * Signs a vote proposal using EIP-712 typed data for use with voteWithSig
19
+ * Signs a signal proposal using EIP-712 typed data for use with signalWithSig
18
20
  * @param walletClient - The viem wallet client to sign with
19
- * @param proposal - The proposal address to vote on
21
+ * @param payload - The payload address to signal
20
22
  * @param verifyingContract - The address of the EmpireBase contract
21
23
  * @param chainId - The chain ID where the contract is deployed
22
24
  * @param account - The account to sign with (optional if hoisted on wallet client)
23
25
  * @returns The EIP-712 signature
24
26
  */
25
- export declare function signVoteWithSig(signer: (msg: Hex) => Promise<Hex>, proposal: Hex, nonce: bigint, verifyingContract: Hex, chainId: number): Promise<Signature>;
27
+ export declare function signSignalWithSig(signer: (msg: TypedDataDefinition) => Promise<Hex>, payload: Hex, nonce: bigint, round: bigint, verifyingContract: Hex, chainId: number): Promise<Signature>;
26
28
  //# sourceMappingURL=empire_base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"empire_base.d.ts","sourceRoot":"","sources":["../../src/contracts/empire_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAG5D,OAAO,EAAE,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC/G,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAAC;IAC7C,8BAA8B,CAC5B,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,CAM5C;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,iBAMzE;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EAClC,QAAQ,EAAE,GAAG,EACb,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,GAAG,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC,CAsBpB"}
1
+ {"version":3,"file":"empire_base.d.ts","sourceRoot":"","sources":["../../src/contracts/empire_base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAG5D,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,mBAAmB,EAAsB,MAAM,MAAM,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,OAAO,IAAI,UAAU,CAAC;IAC1B,YAAY,CACV,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,sBAAsB,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAAC;IAC/C,gCAAgC,CAC9B,OAAO,EAAE,GAAG,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,CAM9C;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,iBAM3E;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,EAClD,OAAO,EAAE,GAAG,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,GAAG,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC,CAwBpB"}
@@ -1,19 +1,19 @@
1
1
  import { Signature } from '@aztec/foundation/eth-signature';
2
2
  import { EmpireBaseAbi } from '@aztec/l1-artifacts/EmpireBaseAbi';
3
- import { encodeFunctionData, hashTypedData } from 'viem';
4
- export function encodeVote(payload) {
3
+ import { encodeFunctionData } from 'viem';
4
+ export function encodeSignal(payload) {
5
5
  return encodeFunctionData({
6
6
  abi: EmpireBaseAbi,
7
- functionName: 'vote',
7
+ functionName: 'signal',
8
8
  args: [
9
9
  payload
10
10
  ]
11
11
  });
12
12
  }
13
- export function encodeVoteWithSignature(payload, signature) {
13
+ export function encodeSignalWithSignature(payload, signature) {
14
14
  return encodeFunctionData({
15
15
  abi: EmpireBaseAbi,
16
- functionName: 'voteWithSig',
16
+ functionName: 'signalWithSig',
17
17
  args: [
18
18
  payload,
19
19
  signature.toViemSignature()
@@ -21,14 +21,14 @@ export function encodeVoteWithSignature(payload, signature) {
21
21
  });
22
22
  }
23
23
  /**
24
- * Signs a vote proposal using EIP-712 typed data for use with voteWithSig
24
+ * Signs a signal proposal using EIP-712 typed data for use with signalWithSig
25
25
  * @param walletClient - The viem wallet client to sign with
26
- * @param proposal - The proposal address to vote on
26
+ * @param payload - The payload address to signal
27
27
  * @param verifyingContract - The address of the EmpireBase contract
28
28
  * @param chainId - The chain ID where the contract is deployed
29
29
  * @param account - The account to sign with (optional if hoisted on wallet client)
30
30
  * @returns The EIP-712 signature
31
- */ export async function signVoteWithSig(signer, proposal, nonce, verifyingContract, chainId) {
31
+ */ export async function signSignalWithSig(signer, payload, nonce, round, verifyingContract, chainId) {
32
32
  const domain = {
33
33
  name: 'EmpireBase',
34
34
  version: '1',
@@ -36,26 +36,31 @@ export function encodeVoteWithSignature(payload, signature) {
36
36
  verifyingContract
37
37
  };
38
38
  const types = {
39
- Vote: [
39
+ Signal: [
40
40
  {
41
- name: 'proposal',
41
+ name: 'payload',
42
42
  type: 'address'
43
43
  },
44
44
  {
45
45
  name: 'nonce',
46
46
  type: 'uint256'
47
+ },
48
+ {
49
+ name: 'round',
50
+ type: 'uint256'
47
51
  }
48
52
  ]
49
53
  };
50
54
  const message = {
51
- proposal,
52
- nonce
55
+ payload,
56
+ nonce,
57
+ round
53
58
  };
54
- const msg = hashTypedData({
59
+ const typedData = {
55
60
  domain,
56
61
  types,
57
- primaryType: 'Vote',
62
+ primaryType: 'Signal',
58
63
  message
59
- });
60
- return Signature.fromString(await signer(msg));
64
+ };
65
+ return Signature.fromString(await signer(typedData));
61
66
  }
@@ -32,7 +32,7 @@ export declare class ReadOnlyGovernanceContract {
32
32
  executionDelay: bigint;
33
33
  gracePeriod: bigint;
34
34
  quorum: bigint;
35
- voteDifferential: bigint;
35
+ requiredYeaMargin: bigint;
36
36
  minimumVotes: bigint;
37
37
  }>;
38
38
  getProposal(proposalId: bigint): Promise<{
@@ -46,16 +46,16 @@ export declare class ReadOnlyGovernanceContract {
46
46
  executionDelay: bigint;
47
47
  gracePeriod: bigint;
48
48
  quorum: bigint;
49
- voteDifferential: bigint;
49
+ requiredYeaMargin: bigint;
50
50
  minimumVotes: bigint;
51
51
  };
52
- state: number;
52
+ cachedState: number;
53
53
  payload: `0x${string}`;
54
54
  proposer: `0x${string}`;
55
55
  creation: bigint;
56
56
  summedBallot: {
57
57
  yea: bigint;
58
- nea: bigint;
58
+ nay: bigint;
59
59
  };
60
60
  }>;
61
61
  getProposalState(proposalId: bigint): Promise<ProposalState>;
@@ -195,9 +195,9 @@ export class GovernanceContract extends ReadOnlyGovernanceContract {
195
195
  }
196
196
  logger.info(`Voted [${inFavor ? 'yea' : 'nay'}] on proposal [${proposalId}]`);
197
197
  const proposal = await this.getProposal(proposalId);
198
- logger.info(`Proposal [${proposalId}] has state [${proposal.state}]`);
198
+ logger.info(`Proposal [${proposalId}] has cached state [${proposal.cachedState}]`);
199
199
  logger.info(`Proposal [${proposalId}] has summedBallot yea [${proposal.summedBallot.yea}]`);
200
- logger.info(`Proposal [${proposalId}] has summedBallot nea [${proposal.summedBallot.nea}]`);
200
+ logger.info(`Proposal [${proposalId}] has summedBallot nay [${proposal.summedBallot.nay}]`);
201
201
  }
202
202
  async executeProposal({ proposalId, retries = 10, logger }) {
203
203
  const l1TxUtils = new L1TxUtils(this.client, logger);
@@ -1,5 +1,5 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
- import { type Hex, type TransactionReceipt } from 'viem';
2
+ import { type Hex, type TransactionReceipt, type TypedDataDefinition } from 'viem';
3
3
  import type { GasPrice, L1TxRequest, L1TxUtils } from '../l1_tx_utils.js';
4
4
  import type { ViemClient } from '../types.js';
5
5
  import { type IEmpireBase } from './empire_base.js';
@@ -15,14 +15,14 @@ export declare class GovernanceProposerContract implements IEmpireBase {
15
15
  computeRound(slot: bigint): Promise<bigint>;
16
16
  getNonce(proposer: Hex): Promise<bigint>;
17
17
  getRoundInfo(rollupAddress: Hex, round: bigint): Promise<{
18
- lastVote: bigint;
19
- leader: Hex;
18
+ lastSignalSlot: bigint;
19
+ payloadWithMostSignals: Hex;
20
20
  executed: boolean;
21
21
  }>;
22
- getProposalVotes(rollupAddress: Hex, round: bigint, proposal: Hex): Promise<bigint>;
23
- createVoteRequest(payload: Hex): L1TxRequest;
24
- createVoteRequestWithSignature(payload: Hex, chainId: number, signerAddress: Hex, signer: (msg: Hex) => Promise<Hex>): Promise<L1TxRequest>;
25
- executeProposal(round: bigint, l1TxUtils: L1TxUtils): Promise<{
22
+ getPayloadSignals(rollupAddress: Hex, round: bigint, payload: Hex): Promise<bigint>;
23
+ createSignalRequest(payload: Hex): L1TxRequest;
24
+ createSignalRequestWithSignature(payload: Hex, round: bigint, chainId: number, signerAddress: Hex, signer: (msg: TypedDataDefinition) => Promise<Hex>): Promise<L1TxRequest>;
25
+ submitRoundWinner(round: bigint, l1TxUtils: L1TxUtils): Promise<{
26
26
  receipt: TransactionReceipt;
27
27
  gasPrice: GasPrice;
28
28
  proposalId: bigint;
@@ -1 +1 @@
1
- {"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAA8B,KAAK,GAAG,EAAE,KAAK,kBAAkB,EAAmC,MAAM,MAAM,CAAC;AAEtH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAAwD,MAAM,kBAAkB,CAAC;AAG1G,qBAAa,0BAA2B,YAAW,WAAW;aAI1C,MAAM,EAAE,UAAU;IAHpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;gBAGzE,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG;IAKd,IAAW,OAAO,eAEjB;IAEY,gBAAgB;IAKhB,kBAAkB;IAIxB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlC,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAIzD,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAInF,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW;IAOtC,8BAA8B,CACzC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC;IASV,eAAe,CAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CAYH"}
1
+ {"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AACA,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,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1E,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;gBAGzE,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG;IAKd,IAAW,OAAO,eAEjB;IAEY,gBAAgB;IAKhB,kBAAkB;IAIxB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlC,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,sBAAsB,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAI/E,iBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAInF,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW;IAOxC,gCAAgC,CAC3C,OAAO,EAAE,GAAG,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,OAAO,CAAC,WAAW,CAAC;IASV,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CAYH"}
@@ -8,7 +8,7 @@ import { memoize } from '@aztec/foundation/decorators';
8
8
  import { EthAddress } from '@aztec/foundation/eth-address';
9
9
  import { GovernanceProposerAbi } from '@aztec/l1-artifacts/GovernanceProposerAbi';
10
10
  import { encodeFunctionData, getContract } from 'viem';
11
- import { encodeVote, encodeVoteWithSignature, signVoteWithSig } from './empire_base.js';
11
+ import { encodeSignal, encodeSignalWithSignature, signSignalWithSig } from './empire_base.js';
12
12
  import { extractProposalIdFromLogs } from './governance.js';
13
13
  export class GovernanceProposerContract {
14
14
  client;
@@ -31,10 +31,10 @@ export class GovernanceProposerContract {
31
31
  return EthAddress.fromString(await this.proposer.read.REGISTRY());
32
32
  }
33
33
  getQuorumSize() {
34
- return this.proposer.read.N();
34
+ return this.proposer.read.QUORUM_SIZE();
35
35
  }
36
36
  getRoundSize() {
37
- return this.proposer.read.M();
37
+ return this.proposer.read.ROUND_SIZE();
38
38
  }
39
39
  computeRound(slot) {
40
40
  return this.proposer.read.computeRound([
@@ -52,33 +52,33 @@ export class GovernanceProposerContract {
52
52
  round
53
53
  ]);
54
54
  }
55
- getProposalVotes(rollupAddress, round, proposal) {
56
- return this.proposer.read.yeaCount([
55
+ getPayloadSignals(rollupAddress, round, payload) {
56
+ return this.proposer.read.signalCount([
57
57
  rollupAddress,
58
58
  round,
59
- proposal
59
+ payload
60
60
  ]);
61
61
  }
62
- createVoteRequest(payload) {
62
+ createSignalRequest(payload) {
63
63
  return {
64
64
  to: this.address.toString(),
65
- data: encodeVote(payload)
65
+ data: encodeSignal(payload)
66
66
  };
67
67
  }
68
- async createVoteRequestWithSignature(payload, chainId, signerAddress, signer) {
68
+ async createSignalRequestWithSignature(payload, round, chainId, signerAddress, signer) {
69
69
  const nonce = await this.getNonce(signerAddress);
70
- const signature = await signVoteWithSig(signer, payload, nonce, this.address.toString(), chainId);
70
+ const signature = await signSignalWithSig(signer, payload, nonce, round, this.address.toString(), chainId);
71
71
  return {
72
72
  to: this.address.toString(),
73
- data: encodeVoteWithSignature(payload, signature)
73
+ data: encodeSignalWithSignature(payload, signature)
74
74
  };
75
75
  }
76
- async executeProposal(round, l1TxUtils) {
76
+ async submitRoundWinner(round, l1TxUtils) {
77
77
  const { receipt, gasPrice } = await l1TxUtils.sendAndMonitorTransaction({
78
78
  to: this.address.toString(),
79
79
  data: encodeFunctionData({
80
80
  abi: this.proposer.abi,
81
- functionName: 'executeProposal',
81
+ functionName: 'submitRoundWinner',
82
82
  args: [
83
83
  round
84
84
  ]
@@ -0,0 +1,29 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import type { ProjPointType } from '@noble/curves/abstract/weierstrass';
3
+ import { type Hex } from 'viem';
4
+ import type { ViemClient } from '../types.js';
5
+ export type RegistrationTuple = {
6
+ publicKeyInG1: {
7
+ x: bigint;
8
+ y: bigint;
9
+ };
10
+ publicKeyInG2: {
11
+ x0: bigint;
12
+ x1: bigint;
13
+ y0: bigint;
14
+ y1: bigint;
15
+ };
16
+ proofOfPossession: {
17
+ x: bigint;
18
+ y: bigint;
19
+ };
20
+ };
21
+ export declare class GSEContract {
22
+ readonly client: ViemClient;
23
+ address: EthAddress;
24
+ private readonly gse;
25
+ constructor(client: ViemClient, address: Hex | EthAddress);
26
+ getRegistrationDigest(publicKey: ProjPointType<bigint>): Promise<ProjPointType<bigint>>;
27
+ makeRegistrationTuple(privateKey: bigint): Promise<RegistrationTuple>;
28
+ }
29
+ //# sourceMappingURL=gse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gse.d.ts","sourceRoot":"","sources":["../../src/contracts/gse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE;QACb,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;IACF,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,iBAAiB,EAAE;QACjB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH,CAAC;AAEF,qBAAa,WAAW;aAKJ,MAAM,EAAE,UAAU;IAJ7B,OAAO,EAAE,UAAU,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmD;gBAGrD,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU;IASd,qBAAqB,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAMvF,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAyBnF"}
@@ -0,0 +1,56 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { GSEAbi } from '@aztec/l1-artifacts/GSEAbi';
3
+ import { bn254 } from '@noble/curves/bn254';
4
+ import { getContract } from 'viem';
5
+ export class GSEContract {
6
+ client;
7
+ address;
8
+ gse;
9
+ constructor(client, address){
10
+ this.client = client;
11
+ if (address instanceof EthAddress) {
12
+ address = address.toString();
13
+ }
14
+ this.address = EthAddress.fromString(address);
15
+ this.gse = getContract({
16
+ address,
17
+ abi: GSEAbi,
18
+ client
19
+ });
20
+ }
21
+ async getRegistrationDigest(publicKey) {
22
+ const affinePublicKey = publicKey.toAffine();
23
+ const g1PointDigest = await this.gse.read.getRegistrationDigest([
24
+ {
25
+ x: affinePublicKey.x,
26
+ y: affinePublicKey.y
27
+ }
28
+ ]);
29
+ return bn254.G1.ProjectivePoint.fromAffine(g1PointDigest);
30
+ }
31
+ async makeRegistrationTuple(privateKey) {
32
+ const publicKeyG1 = bn254.G1.ProjectivePoint.BASE.multiply(privateKey);
33
+ const digest = await this.getRegistrationDigest(publicKeyG1);
34
+ const signature = digest.multiply(privateKey);
35
+ const publicKeyG2 = bn254.G2.ProjectivePoint.BASE.multiply(privateKey);
36
+ const publicKeyG1Affine = publicKeyG1.toAffine();
37
+ const signatureAffine = signature.toAffine();
38
+ const publicKeyG2Affine = publicKeyG2.toAffine();
39
+ return {
40
+ publicKeyInG1: {
41
+ x: publicKeyG1Affine.x,
42
+ y: publicKeyG1Affine.y
43
+ },
44
+ publicKeyInG2: {
45
+ x0: publicKeyG2Affine.x.c0,
46
+ x1: publicKeyG2Affine.x.c1,
47
+ y0: publicKeyG2Affine.y.c0,
48
+ y1: publicKeyG2Affine.y.c1
49
+ },
50
+ proofOfPossession: {
51
+ x: signatureAffine.x,
52
+ y: signatureAffine.y
53
+ }
54
+ };
55
+ }
56
+ }
@@ -4,6 +4,7 @@ export * from './fee_asset_handler.js';
4
4
  export * from './fee_juice.js';
5
5
  export * from './governance.js';
6
6
  export * from './governance_proposer.js';
7
+ export * from './gse.js';
7
8
  export * from './inbox.js';
8
9
  export * from './multicall.js';
9
10
  export * from './registry.js';
@@ -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,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,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,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
@@ -4,6 +4,7 @@ export * from './fee_asset_handler.js';
4
4
  export * from './fee_juice.js';
5
5
  export * from './governance.js';
6
6
  export * from './governance_proposer.js';
7
+ export * from './gse.js';
7
8
  export * from './inbox.js';
8
9
  export * from './multicall.js';
9
10
  export * from './registry.js';
@@ -5,7 +5,9 @@ import type { ExtendedViemWalletClient } from '../types.js';
5
5
  import { FormattedViemError } from '../utils.js';
6
6
  export declare const MULTI_CALL_3_ADDRESS: "0xcA11bde05977b3631167028862bE2a173976CA11";
7
7
  export declare class Multicall3 {
8
- static forward(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: L1GasConfig | undefined, blobConfig: L1BlobInputs | undefined, rollupAddress: Hex, logger: Logger): Promise<FormattedViemError | {
8
+ static forward(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: L1GasConfig | undefined, blobConfig: L1BlobInputs | undefined, rollupAddress: Hex, logger: Logger, opts?: {
9
+ revertOnFailure?: boolean;
10
+ }): Promise<FormattedViemError | {
9
11
  receipt: import("viem").TransactionReceipt;
10
12
  gasPrice: import("../l1_tx_utils.js").GasPrice;
11
13
  stats: import("../l1_tx_utils.js").TransactionStats | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,oBAAoB,EAAG,4CAAqD,CAAC;AAE1F,qBAAa,UAAU;WACR,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,MAAM;;;;;;;;;;;CAmGjB;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,iBAyBxF"}
1
+ {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,oBAAoB,EAAG,4CAAqD,CAAC;AAE1F,qBAAa,UAAU;WACR,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;;;;;;;;;;;CAmG3C;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,iBA+BxF"}
@@ -4,12 +4,12 @@ import { FormattedViemError, formatViemError } from '../utils.js';
4
4
  import { RollupContract } from './rollup.js';
5
5
  export const MULTI_CALL_3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11';
6
6
  export class Multicall3 {
7
- static async forward(requests, l1TxUtils, gasConfig, blobConfig, rollupAddress, logger) {
7
+ static async forward(requests, l1TxUtils, gasConfig, blobConfig, rollupAddress, logger, opts = {}) {
8
8
  requests = requests.filter((request)=>request.to !== null);
9
9
  const args = requests.map((r)=>({
10
10
  target: r.to,
11
11
  callData: r.data,
12
- allowFailure: false
12
+ allowFailure: !opts.revertOnFailure
13
13
  }));
14
14
  const forwarderFunctionData = {
15
15
  abi: multicall3Abi,
@@ -104,6 +104,15 @@ export class Multicall3 {
104
104
  }
105
105
  }
106
106
  export async function deployMulticall3(l1Client, logger) {
107
+ const existing = await l1Client.getCode({
108
+ address: MULTI_CALL_3_ADDRESS
109
+ });
110
+ if (existing && existing !== '0x') {
111
+ logger.verbose('Multicall3 already deployed', {
112
+ address: MULTI_CALL_3_ADDRESS
113
+ });
114
+ return;
115
+ }
107
116
  const deployer = '0x05f32b3cc3888453ff71b01135b34ff8e41263f2';
108
117
  const sendEth = await l1Client.sendTransaction({
109
118
  to: deployer,