@aztec/ethereum 0.61.0 → 0.63.0

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.
@@ -0,0 +1,17 @@
1
+ import { type ConfigMappingsType } from '@aztec/foundation/config';
2
+ export type L1ContractsConfig = {
3
+ /** How many seconds an L1 slot lasts. */
4
+ ethereumSlotDuration: number;
5
+ /** How many seconds an L2 slots lasts (must be multiple of ethereum slot duration). */
6
+ aztecSlotDuration: number;
7
+ /** How many L2 slots an epoch lasts. */
8
+ aztecEpochDuration: number;
9
+ /** The target validator committee size. */
10
+ aztecTargetCommitteeSize: number;
11
+ /** The number of L2 slots that we can wait for a proof of an epoch to be produced. */
12
+ aztecEpochProofClaimWindowInL2Slots: number;
13
+ };
14
+ export declare const DefaultL1ContractsConfig: L1ContractsConfig;
15
+ export declare const l1ContractsConfigMappings: ConfigMappingsType<L1ContractsConfig>;
16
+ export declare function getL1ContractsConfigEnvVars(): L1ContractsConfig;
17
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAE9G,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,sFAAsF;IACtF,mCAAmC,EAAE,MAAM,CAAC;CAC7C,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,iBAMtC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CA0B3E,CAAC;AAEF,wBAAgB,2BAA2B,IAAI,iBAAiB,CAE/D"}
package/dest/config.js ADDED
@@ -0,0 +1,39 @@
1
+ import { getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
2
+ export const DefaultL1ContractsConfig = {
3
+ ethereumSlotDuration: 12,
4
+ aztecSlotDuration: 24,
5
+ aztecEpochDuration: 16,
6
+ aztecTargetCommitteeSize: 48,
7
+ aztecEpochProofClaimWindowInL2Slots: 13,
8
+ };
9
+ export const l1ContractsConfigMappings = {
10
+ ethereumSlotDuration: {
11
+ env: 'ETHEREUM_SLOT_DURATION',
12
+ description: 'How many seconds an L1 slot lasts.',
13
+ ...numberConfigHelper(DefaultL1ContractsConfig.ethereumSlotDuration),
14
+ },
15
+ aztecSlotDuration: {
16
+ env: 'AZTEC_SLOT_DURATION',
17
+ description: 'How many seconds an L2 slots lasts (must be multiple of ethereum slot duration).',
18
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecSlotDuration),
19
+ },
20
+ aztecEpochDuration: {
21
+ env: 'AZTEC_EPOCH_DURATION',
22
+ description: `How many L2 slots an epoch lasts (maximum AZTEC_MAX_EPOCH_DURATION).`,
23
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecEpochDuration),
24
+ },
25
+ aztecTargetCommitteeSize: {
26
+ env: 'AZTEC_TARGET_COMMITTEE_SIZE',
27
+ description: 'The target validator committee size.',
28
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecTargetCommitteeSize),
29
+ },
30
+ aztecEpochProofClaimWindowInL2Slots: {
31
+ env: 'AZTEC_EPOCH_PROOF_CLAIM_WINDOW_IN_L2_SLOTS',
32
+ description: 'The number of L2 slots that we can wait for a proof of an epoch to be produced.',
33
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecEpochProofClaimWindowInL2Slots),
34
+ },
35
+ };
36
+ export function getL1ContractsConfigEnvVars() {
37
+ return getConfigFromMappings(l1ContractsConfigMappings);
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJCLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFlOUcsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXNCO0lBQ3pELG9CQUFvQixFQUFFLEVBQUU7SUFDeEIsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLHdCQUF3QixFQUFFLEVBQUU7SUFDNUIsbUNBQW1DLEVBQUUsRUFBRTtDQUN4QyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQTBDO0lBQzlFLG9CQUFvQixFQUFFO1FBQ3BCLEdBQUcsRUFBRSx3QkFBd0I7UUFDN0IsV0FBVyxFQUFFLG9DQUFvQztRQUNqRCxHQUFHLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDO0tBQ3JFO0lBQ0QsaUJBQWlCLEVBQUU7UUFDakIsR0FBRyxFQUFFLHFCQUFxQjtRQUMxQixXQUFXLEVBQUUsa0ZBQWtGO1FBQy9GLEdBQUcsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUM7S0FDbEU7SUFDRCxrQkFBa0IsRUFBRTtRQUNsQixHQUFHLEVBQUUsc0JBQXNCO1FBQzNCLFdBQVcsRUFBRSxzRUFBc0U7UUFDbkYsR0FBRyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQztLQUNuRTtJQUNELHdCQUF3QixFQUFFO1FBQ3hCLEdBQUcsRUFBRSw2QkFBNkI7UUFDbEMsV0FBVyxFQUFFLHNDQUFzQztRQUNuRCxHQUFHLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLHdCQUF3QixDQUFDO0tBQ3pFO0lBQ0QsbUNBQW1DLEVBQUU7UUFDbkMsR0FBRyxFQUFFLDRDQUE0QztRQUNqRCxXQUFXLEVBQUUsaUZBQWlGO1FBQzlGLEdBQUcsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsbUNBQW1DLENBQUM7S0FDcEY7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLDJCQUEyQjtJQUN6QyxPQUFPLHFCQUFxQixDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDMUQsQ0FBQyJ9
@@ -5,6 +5,7 @@ import { type DebugLogger } from '@aztec/foundation/log';
5
5
  import type { Abi, Narrow } from 'abitype';
6
6
  import { type Account, type Chain, type Hex, type HttpTransport, type PublicClient, type WalletClient } from 'viem';
7
7
  import { type HDAccount, type PrivateKeyAccount } from 'viem/accounts';
8
+ import { type L1ContractsConfig } from './config.js';
8
9
  import { type L1ContractAddresses } from './l1_contract_addresses.js';
9
10
  /**
10
11
  * Return type of the deployL1Contract function.
@@ -81,47 +82,35 @@ export interface L1ContractArtifactsForDeployment {
81
82
  */
82
83
  feeJuicePortal: ContractArtifacts;
83
84
  /**
84
- * Nomismatokopio contract artifacts.
85
+ * CoinIssuer contract artifacts.
85
86
  */
86
- nomismatokopio: ContractArtifacts;
87
+ coinIssuer: ContractArtifacts;
87
88
  /**
88
- * Sysstia contract artifacts.
89
+ * RewardDistributor contract artifacts.
89
90
  */
90
- sysstia: ContractArtifacts;
91
+ rewardDistributor: ContractArtifacts;
91
92
  /**
92
- * Gerousia contract artifacts.
93
+ * GovernanceProposer contract artifacts.
93
94
  */
94
- gerousia: ContractArtifacts;
95
+ governanceProposer: ContractArtifacts;
95
96
  /**
96
- * Apella contract artifacts.
97
+ * Governance contract artifacts.
97
98
  */
98
- apella: ContractArtifacts;
99
+ governance: ContractArtifacts;
99
100
  }
100
101
  export declare const l1Artifacts: L1ContractArtifactsForDeployment;
101
- export interface DeployL1ContractsArgs {
102
- /**
103
- * The address of the L2 Fee Juice contract.
104
- */
102
+ export interface DeployL1ContractsArgs extends L1ContractsConfig {
103
+ /** The address of the L2 Fee Juice contract. */
105
104
  l2FeeJuiceAddress: AztecAddress;
106
- /**
107
- * The vk tree root.
108
- */
105
+ /** The vk tree root. */
109
106
  vkTreeRoot: Fr;
110
- /**
111
- * The protocol contract tree root.
112
- */
107
+ /** The protocol contract tree root. */
113
108
  protocolContractTreeRoot: Fr;
114
- /**
115
- * The block number to assume proven through.
116
- */
109
+ /** The block number to assume proven through. */
117
110
  assumeProvenThrough?: number;
118
- /**
119
- * The salt for CREATE2 deployment.
120
- */
111
+ /** The salt for CREATE2 deployment. */
121
112
  salt: number | undefined;
122
- /**
123
- * The initial validators for the rollup contract.
124
- */
113
+ /** The initial validators for the rollup contract. */
125
114
  initialValidators?: EthAddress[];
126
115
  }
127
116
  export type L1Clients = {
@@ -1 +1 @@
1
- {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_l1_contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_l1_contracts.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
- import { ApellaAbi, ApellaBytecode, FeeJuicePortalAbi, FeeJuicePortalBytecode, GerousiaAbi, GerousiaBytecode, InboxAbi, InboxBytecode, NomismatokopioAbi, NomismatokopioBytecode, OutboxAbi, OutboxBytecode, RegistryAbi, RegistryBytecode, RollupAbi, RollupBytecode, RollupLinkReferences, SysstiaAbi, SysstiaBytecode, TestERC20Abi, TestERC20Bytecode, TxsDecoderAbi, TxsDecoderBytecode, } from '@aztec/l1-artifacts';
2
+ import { CoinIssuerAbi, CoinIssuerBytecode, FeeJuicePortalAbi, FeeJuicePortalBytecode, GovernanceAbi, GovernanceBytecode, GovernanceProposerAbi, GovernanceProposerBytecode, InboxAbi, InboxBytecode, OutboxAbi, OutboxBytecode, RegistryAbi, RegistryBytecode, RewardDistributorAbi, RewardDistributorBytecode, RollupAbi, RollupBytecode, RollupLinkReferences, TestERC20Abi, TestERC20Bytecode, TxsDecoderAbi, TxsDecoderBytecode, } from '@aztec/l1-artifacts';
3
3
  import { concatHex, createPublicClient, createWalletClient, encodeDeployData, getAddress, getContract, getContractAddress, http, numberToHex, padHex, } from 'viem';
4
4
  import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
5
5
  import { foundry } from 'viem/chains';
@@ -38,21 +38,21 @@ export const l1Artifacts = {
38
38
  contractAbi: FeeJuicePortalAbi,
39
39
  contractBytecode: FeeJuicePortalBytecode,
40
40
  },
41
- sysstia: {
42
- contractAbi: SysstiaAbi,
43
- contractBytecode: SysstiaBytecode,
41
+ rewardDistributor: {
42
+ contractAbi: RewardDistributorAbi,
43
+ contractBytecode: RewardDistributorBytecode,
44
44
  },
45
- nomismatokopio: {
46
- contractAbi: NomismatokopioAbi,
47
- contractBytecode: NomismatokopioBytecode,
45
+ coinIssuer: {
46
+ contractAbi: CoinIssuerAbi,
47
+ contractBytecode: CoinIssuerBytecode,
48
48
  },
49
- gerousia: {
50
- contractAbi: GerousiaAbi,
51
- contractBytecode: GerousiaBytecode,
49
+ governanceProposer: {
50
+ contractAbi: GovernanceProposerAbi,
51
+ contractBytecode: GovernanceProposerBytecode,
52
52
  },
53
- apella: {
54
- contractAbi: ApellaAbi,
55
- contractBytecode: ApellaBytecode,
53
+ governance: {
54
+ contractAbi: GovernanceAbi,
55
+ contractBytecode: GovernanceBytecode,
56
56
  },
57
57
  };
58
58
  /**
@@ -102,12 +102,11 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, args) =>
102
102
  return await (await fetch(rpcUrl, content)).json();
103
103
  };
104
104
  if (isAnvilTestChain(chain.id)) {
105
- const interval = 12; // @todo #8084
106
- const res = await rpcCall('anvil_setBlockTimestampInterval', [interval]);
105
+ const res = await rpcCall('anvil_setBlockTimestampInterval', [args.ethereumSlotDuration]);
107
106
  if (res.error) {
108
107
  throw new Error(`Error setting block interval: ${res.error.message}`);
109
108
  }
110
- logger.info(`Set block interval to ${interval}`);
109
+ logger.info(`Set block interval to ${args.ethereumSlotDuration}`);
111
110
  }
112
111
  logger.info(`Deploying contracts from ${account.address.toString()}...`);
113
112
  const walletClient = createWalletClient({ account, chain, transport: http(rpcUrl) });
@@ -122,29 +121,29 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, args) =>
122
121
  // @note These numbers are just chosen to make testing simple.
123
122
  const quorumSize = 6n;
124
123
  const roundSize = 10n;
125
- const gerousiaAddress = await govDeployer.deploy(l1Artifacts.gerousia, [
124
+ const governanceProposerAddress = await govDeployer.deploy(l1Artifacts.governanceProposer, [
126
125
  registryAddress.toString(),
127
126
  quorumSize,
128
127
  roundSize,
129
128
  ]);
130
- logger.info(`Deployed Gerousia at ${gerousiaAddress}`);
131
- const apellaAddress = await govDeployer.deploy(l1Artifacts.apella, [
129
+ logger.info(`Deployed GovernanceProposer at ${governanceProposerAddress}`);
130
+ const governanceAddress = await govDeployer.deploy(l1Artifacts.governance, [
132
131
  feeJuiceAddress.toString(),
133
- gerousiaAddress.toString(),
132
+ governanceProposerAddress.toString(),
134
133
  ]);
135
- logger.info(`Deployed Apella at ${apellaAddress}`);
136
- const nomismatokopioAddress = await govDeployer.deploy(l1Artifacts.nomismatokopio, [
134
+ logger.info(`Deployed Governance at ${governanceAddress}`);
135
+ const coinIssuerAddress = await govDeployer.deploy(l1Artifacts.coinIssuer, [
137
136
  feeJuiceAddress.toString(),
138
137
  1n * 10n ** 18n, // @todo #8084
139
- apellaAddress.toString(),
138
+ governanceAddress.toString(),
140
139
  ]);
141
- logger.info(`Deployed Nomismatokopio at ${nomismatokopioAddress}`);
142
- const sysstiaAddress = await govDeployer.deploy(l1Artifacts.sysstia, [
140
+ logger.info(`Deployed CoinIssuer at ${coinIssuerAddress}`);
141
+ const rewardDistributorAddress = await govDeployer.deploy(l1Artifacts.rewardDistributor, [
143
142
  feeJuiceAddress.toString(),
144
143
  registryAddress.toString(),
145
- apellaAddress.toString(),
144
+ governanceAddress.toString(),
146
145
  ]);
147
- logger.info(`Deployed Sysstia at ${sysstiaAddress}`);
146
+ logger.info(`Deployed RewardDistributor at ${rewardDistributorAddress}`);
148
147
  await govDeployer.waitForDeployments();
149
148
  logger.info(`All governance contracts deployed`);
150
149
  const deployer = new L1Deployer(walletClient, publicClient, args.salt, logger);
@@ -154,15 +153,22 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, args) =>
154
153
  args.l2FeeJuiceAddress.toString(),
155
154
  ]);
156
155
  logger.info(`Deployed Fee Juice Portal at ${feeJuicePortalAddress}`);
156
+ const rollupArgs = {
157
+ aztecSlotDuration: args.aztecSlotDuration,
158
+ aztecEpochDuration: args.aztecEpochDuration,
159
+ targetCommitteeSize: args.aztecTargetCommitteeSize,
160
+ aztecEpochProofClaimWindowInL2Slots: args.aztecEpochProofClaimWindowInL2Slots,
161
+ };
157
162
  const rollupAddress = await deployer.deploy(l1Artifacts.rollup, [
158
163
  feeJuicePortalAddress.toString(),
159
- sysstiaAddress.toString(),
164
+ rewardDistributorAddress.toString(),
160
165
  args.vkTreeRoot.toString(),
161
166
  args.protocolContractTreeRoot.toString(),
162
167
  account.address.toString(),
163
168
  args.initialValidators?.map(v => v.toString()) ?? [],
169
+ rollupArgs,
164
170
  ]);
165
- logger.info(`Deployed Rollup at ${rollupAddress}`);
171
+ logger.info(`Deployed Rollup at ${rollupAddress}`, rollupArgs);
166
172
  await deployer.waitForDeployments();
167
173
  logger.info(`All core contracts deployed`);
168
174
  const feeJuicePortal = getContract({
@@ -186,7 +192,7 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, args) =>
186
192
  // because there is circular dependency hell. This is a temporary solution. #3342
187
193
  // @todo #8084
188
194
  // fund the portal contract with Fee Juice
189
- const FEE_JUICE_INITIAL_MINT = 20000000000;
195
+ const FEE_JUICE_INITIAL_MINT = 200000000000000;
190
196
  const mintTxHash = await feeJuice.write.mint([feeJuicePortalAddress.toString(), FEE_JUICE_INITIAL_MINT], {});
191
197
  // @note This is used to ensure we fully wait for the transaction when running against a real chain
192
198
  // otherwise we execute subsequent transactions too soon
@@ -246,12 +252,12 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, args) =>
246
252
  else {
247
253
  logger.verbose(`Registry ${registryAddress} has already registered rollup ${rollupAddress}`);
248
254
  }
249
- // If the owner is not the Apella contract, transfer ownership to the Apella contract
250
- if ((await registryContract.read.owner([])) !== getAddress(apellaAddress.toString())) {
251
- const transferOwnershipTxHash = await registryContract.write.transferOwnership([getAddress(apellaAddress.toString())], {
255
+ // If the owner is not the Governance contract, transfer ownership to the Governance contract
256
+ if ((await registryContract.read.owner([])) !== getAddress(governanceAddress.toString())) {
257
+ const transferOwnershipTxHash = await registryContract.write.transferOwnership([getAddress(governanceAddress.toString())], {
252
258
  account,
253
259
  });
254
- logger.verbose(`Transferring the ownership of the registry contract at ${registryAddress} to the Apella ${apellaAddress} in tx ${transferOwnershipTxHash}`);
260
+ logger.verbose(`Transferring the ownership of the registry contract at ${registryAddress} to the Governance ${governanceAddress} in tx ${transferOwnershipTxHash}`);
255
261
  txHashes.push(transferOwnershipTxHash);
256
262
  }
257
263
  // Wait for all actions to be mined
@@ -264,10 +270,10 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, args) =>
264
270
  outboxAddress,
265
271
  feeJuiceAddress,
266
272
  feeJuicePortalAddress,
267
- nomismatokopioAddress,
268
- sysstiaAddress,
269
- gerousiaAddress,
270
- apellaAddress,
273
+ coinIssuerAddress,
274
+ rewardDistributorAddress,
275
+ governanceProposerAddress,
276
+ governanceAddress,
271
277
  };
272
278
  return {
273
279
  walletClient,
@@ -392,4 +398,4 @@ export async function deployL1Contract(walletClient, publicClient, abi, bytecode
392
398
  return { address: EthAddress.fromString(address), txHash };
393
399
  }
394
400
  // docs:end:deployL1Contract
395
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXBsb3lfbDFfY29udHJhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEVBQ0wsU0FBUyxFQUNULGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxjQUFjLEVBQ2QsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsZUFBZSxFQUNmLFlBQVksRUFDWixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBRzdCLE9BQU8sRUFPTCxTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLEdBQ1AsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQTBDLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFtR3ZELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBcUM7SUFDM0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLFdBQVc7UUFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0tBQ25DO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsV0FBVyxFQUFFLFFBQVE7UUFDckIsZ0JBQWdCLEVBQUUsYUFB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
401
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXBsb3lfbDFfY29udHJhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixRQUFRLEVBQ1IsYUFBYSxFQUNiLFNBQVMsRUFDVCxjQUFjLEVBQ2QsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIseUJBQXlCLEVBQ3pCLFNBQVMsRUFDVCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBRzdCLE9BQU8sRUFPTCxTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLEdBQ1AsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQTBDLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFtR3ZELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBcUM7SUFDM0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLFdBQVc7UUFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0tBQ25DO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsV0FBVyxFQUFFLFFBQVE7UUFDckIsZ0JBQWdC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
package/dest/index.d.ts CHANGED
@@ -3,4 +3,6 @@ export * from './deploy_l1_contracts.js';
3
3
  export * from './l1_contract_addresses.js';
4
4
  export * from './l1_reader.js';
5
5
  export * from './ethereum_chain.js';
6
+ export * from './utils.js';
7
+ export * from './config.js';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
package/dest/index.js CHANGED
@@ -3,4 +3,6 @@ export * from './deploy_l1_contracts.js';
3
3
  export * from './l1_contract_addresses.js';
4
4
  export * from './l1_reader.js';
5
5
  export * from './ethereum_chain.js';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHFCQUFxQixDQUFDIn0=
6
+ export * from './utils.js';
7
+ export * from './config.js';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDIn0=
@@ -1,16 +1,50 @@
1
1
  import { type ConfigMappingsType } from '@aztec/foundation/config';
2
2
  import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import { type ZodFor } from '@aztec/foundation/schemas';
4
+ import { z } from 'zod';
3
5
  /**
4
6
  * The names of the current L1 contract addresses.
5
7
  * NOTE: When changing this list, make sure to update CLI & CI scripts accordingly.
6
8
  * For reference: https://github.com/AztecProtocol/aztec-packages/pull/5553
7
9
  */
8
- export declare const l1ContractsNames: readonly ["rollupAddress", "registryAddress", "inboxAddress", "outboxAddress", "feeJuiceAddress", "feeJuicePortalAddress", "nomismatokopioAddress", "sysstiaAddress", "gerousiaAddress", "apellaAddress"];
9
- /**
10
- * Provides the directory of current L1 contract addresses
11
- */
10
+ export declare const L1ContractsNames: readonly ["rollupAddress", "registryAddress", "inboxAddress", "outboxAddress", "feeJuiceAddress", "feeJuicePortalAddress", "coinIssuerAddress", "rewardDistributorAddress", "governanceProposerAddress", "governanceAddress"];
11
+ /** Provides the directory of current L1 contract addresses */
12
12
  export type L1ContractAddresses = {
13
- [K in (typeof l1ContractsNames)[number]]: EthAddress;
13
+ [K in (typeof L1ContractsNames)[number]]: EthAddress;
14
14
  };
15
+ export declare const L1ContractAddressesSchema: z.ZodObject<{
16
+ rollupAddress: ZodFor<EthAddress>;
17
+ registryAddress: ZodFor<EthAddress>;
18
+ inboxAddress: ZodFor<EthAddress>;
19
+ outboxAddress: ZodFor<EthAddress>;
20
+ feeJuiceAddress: ZodFor<EthAddress>;
21
+ feeJuicePortalAddress: ZodFor<EthAddress>;
22
+ coinIssuerAddress: ZodFor<EthAddress>;
23
+ rewardDistributorAddress: ZodFor<EthAddress>;
24
+ governanceProposerAddress: ZodFor<EthAddress>;
25
+ governanceAddress: ZodFor<EthAddress>;
26
+ }, "strip", z.ZodTypeAny, {
27
+ rollupAddress: EthAddress;
28
+ registryAddress: EthAddress;
29
+ inboxAddress: EthAddress;
30
+ outboxAddress: EthAddress;
31
+ feeJuiceAddress: EthAddress;
32
+ feeJuicePortalAddress: EthAddress;
33
+ coinIssuerAddress: EthAddress;
34
+ rewardDistributorAddress: EthAddress;
35
+ governanceProposerAddress: EthAddress;
36
+ governanceAddress: EthAddress;
37
+ }, {
38
+ rollupAddress?: any;
39
+ registryAddress?: any;
40
+ inboxAddress?: any;
41
+ outboxAddress?: any;
42
+ feeJuiceAddress?: any;
43
+ feeJuicePortalAddress?: any;
44
+ coinIssuerAddress?: any;
45
+ rewardDistributorAddress?: any;
46
+ governanceProposerAddress?: any;
47
+ governanceAddress?: any;
48
+ }>;
15
49
  export declare const l1ContractAddressesMapping: ConfigMappingsType<L1ContractAddresses>;
16
50
  //# sourceMappingURL=l1_contract_addresses.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"l1_contract_addresses.d.ts","sourceRoot":"","sources":["../src/l1_contract_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,2MAWnB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;KAC/B,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU;CACrD,CAAC;AAIF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,mBAAmB,CAmD9E,CAAC"}
1
+ {"version":3,"file":"l1_contract_addresses.d.ts","sourceRoot":"","sources":["../src/l1_contract_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,+NAWnB,CAAC;AAEX,8DAA8D;AAC9D,MAAM,MAAM,mBAAmB,GAAG;KAC/B,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU;CACrD,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWE,CAAC;AAIzC,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,mBAAmB,CAmD9E,CAAC"}
@@ -1,21 +1,35 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { schemas } from '@aztec/foundation/schemas';
3
+ import { z } from 'zod';
2
4
  /**
3
5
  * The names of the current L1 contract addresses.
4
6
  * NOTE: When changing this list, make sure to update CLI & CI scripts accordingly.
5
7
  * For reference: https://github.com/AztecProtocol/aztec-packages/pull/5553
6
8
  */
7
- export const l1ContractsNames = [
9
+ export const L1ContractsNames = [
8
10
  'rollupAddress',
9
11
  'registryAddress',
10
12
  'inboxAddress',
11
13
  'outboxAddress',
12
14
  'feeJuiceAddress',
13
15
  'feeJuicePortalAddress',
14
- 'nomismatokopioAddress',
15
- 'sysstiaAddress',
16
- 'gerousiaAddress',
17
- 'apellaAddress',
16
+ 'coinIssuerAddress',
17
+ 'rewardDistributorAddress',
18
+ 'governanceProposerAddress',
19
+ 'governanceAddress',
18
20
  ];
21
+ export const L1ContractAddressesSchema = z.object({
22
+ rollupAddress: schemas.EthAddress,
23
+ registryAddress: schemas.EthAddress,
24
+ inboxAddress: schemas.EthAddress,
25
+ outboxAddress: schemas.EthAddress,
26
+ feeJuiceAddress: schemas.EthAddress,
27
+ feeJuicePortalAddress: schemas.EthAddress,
28
+ coinIssuerAddress: schemas.EthAddress,
29
+ rewardDistributorAddress: schemas.EthAddress,
30
+ governanceProposerAddress: schemas.EthAddress,
31
+ governanceAddress: schemas.EthAddress,
32
+ });
19
33
  const parseEnv = (val) => EthAddress.fromString(val);
20
34
  export const l1ContractAddressesMapping = {
21
35
  rollupAddress: {
@@ -48,25 +62,25 @@ export const l1ContractAddressesMapping = {
48
62
  description: 'The deployed L1 Fee Juice portal contract address.',
49
63
  parseEnv,
50
64
  },
51
- nomismatokopioAddress: {
52
- env: 'NOMISMATOKOPIO_CONTRACT_ADDRESS',
53
- description: 'The deployed L1 nomismatokopio contract address',
65
+ coinIssuerAddress: {
66
+ env: 'COIN_ISSUER_CONTRACT_ADDRESS',
67
+ description: 'The deployed L1 coinIssuer contract address',
54
68
  parseEnv,
55
69
  },
56
- sysstiaAddress: {
57
- env: 'SYSSTIA_CONTRACT_ADDRESS',
58
- description: 'The deployed L1 sysstia contract address',
70
+ rewardDistributorAddress: {
71
+ env: 'REWARD_DISTRIBUTOR_CONTRACT_ADDRESS',
72
+ description: 'The deployed L1 rewardDistributor contract address',
59
73
  parseEnv,
60
74
  },
61
- gerousiaAddress: {
62
- env: 'GEROUSIA_CONTRACT_ADDRESS',
63
- description: 'The deployed L1 gerousia contract address',
75
+ governanceProposerAddress: {
76
+ env: 'GOVERNANCE_PROPOSER_CONTRACT_ADDRESS',
77
+ description: 'The deployed L1 governanceProposer contract address',
64
78
  parseEnv,
65
79
  },
66
- apellaAddress: {
67
- env: 'APELLA_CONTRACT_ADDRESS',
68
- description: 'The deployed L1 apella contract address',
80
+ governanceAddress: {
81
+ env: 'GOVERNANCE_CONTRACT_ADDRESS',
82
+ description: 'The deployed L1 governance contract address',
69
83
  parseEnv,
70
84
  },
71
85
  };
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfY29udHJhY3RfYWRkcmVzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX2NvbnRyYWN0X2FkZHJlc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0Q7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsY0FBYztJQUNkLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGVBQWU7Q0FDUCxDQUFDO0FBU1gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQTRDO0lBQ2pGLGFBQWEsRUFBRTtRQUNiLEdBQUcsRUFBRSx5QkFBeUI7UUFDOUIsV0FBVyxFQUFFLDBDQUEwQztRQUN2RCxRQUFRO0tBQ1Q7SUFDRCxlQUFlLEVBQUU7UUFDZixHQUFHLEVBQUUsMkJBQTJCO1FBQ2hDLFdBQVcsRUFBRSw0Q0FBNEM7UUFDekQsUUFBUTtLQUNUO0lBQ0QsWUFBWSxFQUFFO1FBQ1osR0FBRyxFQUFFLHdCQUF3QjtRQUM3QixXQUFXLEVBQUUseUNBQXlDO1FBQ3RELFFBQVE7S0FDVDtJQUNELGFBQWEsRUFBRTtRQUNiLEdBQUcsRUFBRSx5QkFBeUI7UUFDOUIsV0FBVyxFQUFFLDBDQUEwQztRQUN2RCxRQUFRO0tBQ1Q7SUFDRCxlQUFlLEVBQUU7UUFDZixHQUFHLEVBQUUsNEJBQTRCO1FBQ2pDLFdBQVcsRUFBRSw2Q0FBNkM7UUFDMUQsUUFBUTtLQUNUO0lBQ0QscUJBQXFCLEVBQUU7UUFDckIsR0FBRyxFQUFFLG1DQUFtQztRQUN4QyxXQUFXLEVBQUUsb0RBQW9EO1FBQ2pFLFFBQVE7S0FDVDtJQUNELHFCQUFxQixFQUFFO1FBQ3JCLEdBQUcsRUFBRSxpQ0FBaUM7UUFDdEMsV0FBVyxFQUFFLGlEQUFpRDtRQUM5RCxRQUFRO0tBQ1Q7SUFDRCxjQUFjLEVBQUU7UUFDZCxHQUFHLEVBQUUsMEJBQTBCO1FBQy9CLFdBQVcsRUFBRSwwQ0FBMEM7UUFDdkQsUUFBUTtLQUNUO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsR0FBRyxFQUFFLDJCQUEyQjtRQUNoQyxXQUFXLEVBQUUsMkNBQTJDO1FBQ3hELFFBQVE7S0FDVDtJQUNELGFBQWEsRUFBRTtRQUNiLEdBQUcsRUFBRSx5QkFBeUI7UUFDOUIsV0FBVyxFQUFFLHlDQUF5QztRQUN0RCxRQUFRO0tBQ1Q7Q0FDRixDQUFDIn0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfY29udHJhY3RfYWRkcmVzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX2NvbnRyYWN0X2FkZHJlc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFlLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEI7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsY0FBYztJQUNkLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQiwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLG1CQUFtQjtDQUNYLENBQUM7QUFPWCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2hELGFBQWEsRUFBRSxPQUFPLENBQUMsVUFBVTtJQUNqQyxlQUFlLEVBQUUsT0FBTyxDQUFDLFVBQVU7SUFDbkMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0lBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsVUFBVTtJQUNqQyxlQUFlLEVBQUUsT0FBTyxDQUFDLFVBQVU7SUFDbkMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLFVBQVU7SUFDekMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFVBQVU7SUFDckMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLFVBQVU7SUFDNUMseUJBQXlCLEVBQUUsT0FBTyxDQUFDLFVBQVU7SUFDN0MsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFVBQVU7Q0FDdEMsQ0FBdUMsQ0FBQztBQUV6QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBNEM7SUFDakYsYUFBYSxFQUFFO1FBQ2IsR0FBRyxFQUFFLHlCQUF5QjtRQUM5QixXQUFXLEVBQUUsMENBQTBDO1FBQ3ZELFFBQVE7S0FDVDtJQUNELGVBQWUsRUFBRTtRQUNmLEdBQUcsRUFBRSwyQkFBMkI7UUFDaEMsV0FBVyxFQUFFLDRDQUE0QztRQUN6RCxRQUFRO0tBQ1Q7SUFDRCxZQUFZLEVBQUU7UUFDWixHQUFHLEVBQUUsd0JBQXdCO1FBQzdCLFdBQVcsRUFBRSx5Q0FBeUM7UUFDdEQsUUFBUTtLQUNUO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsR0FBRyxFQUFFLHlCQUF5QjtRQUM5QixXQUFXLEVBQUUsMENBQTBDO1FBQ3ZELFFBQVE7S0FDVDtJQUNELGVBQWUsRUFBRTtRQUNmLEdBQUcsRUFBRSw0QkFBNEI7UUFDakMsV0FBVyxFQUFFLDZDQUE2QztRQUMxRCxRQUFRO0tBQ1Q7SUFDRCxxQkFBcUIsRUFBRTtRQUNyQixHQUFHLEVBQUUsbUNBQW1DO1FBQ3hDLFdBQVcsRUFBRSxvREFBb0Q7UUFDakUsUUFBUTtLQUNUO0lBQ0QsaUJBQWlCLEVBQUU7UUFDakIsR0FBRyxFQUFFLDhCQUE4QjtRQUNuQyxXQUFXLEVBQUUsNkNBQTZDO1FBQzFELFFBQVE7S0FDVDtJQUNELHdCQUF3QixFQUFFO1FBQ3hCLEdBQUcsRUFBRSxxQ0FBcUM7UUFDMUMsV0FBVyxFQUFFLG9EQUFvRDtRQUNqRSxRQUFRO0tBQ1Q7SUFDRCx5QkFBeUIsRUFBRTtRQUN6QixHQUFHLEVBQUUsc0NBQXNDO1FBQzNDLFdBQVcsRUFBRSxxREFBcUQ7UUFDbEUsUUFBUTtLQUNUO0lBQ0QsaUJBQWlCLEVBQUU7UUFDakIsR0FBRyxFQUFFLDZCQUE2QjtRQUNsQyxXQUFXLEVBQUUsNkNBQTZDO1FBQzFELFFBQVE7S0FDVDtDQUNGLENBQUMifQ==
@@ -1,24 +1,14 @@
1
1
  import { type ConfigMappingsType } from '@aztec/foundation/config';
2
2
  import { type L1ContractAddresses } from './l1_contract_addresses.js';
3
- /**
4
- * Configuration of the L1GlobalReader.
5
- */
3
+ /** Configuration of the L1GlobalReader. */
6
4
  export interface L1ReaderConfig {
7
- /**
8
- * The RPC Url of the ethereum host.
9
- */
5
+ /** The RPC Url of the ethereum host. */
10
6
  l1RpcUrl: string;
11
- /**
12
- * The chain ID of the ethereum host.
13
- */
7
+ /** The chain ID of the ethereum host. */
14
8
  l1ChainId: number;
15
- /**
16
- * The deployed l1 contract addresses
17
- */
9
+ /** The deployed l1 contract addresses */
18
10
  l1Contracts: L1ContractAddresses;
19
- /**
20
- * The polling interval viem uses in ms
21
- */
11
+ /** The polling interval viem uses in ms */
22
12
  viemPollingIntervalMS: number;
23
13
  }
24
14
  export declare const l1ReaderConfigMappings: ConfigMappingsType<L1ReaderConfig>;
@@ -1 +1 @@
1
- {"version":3,"file":"l1_reader.d.ts","sourceRoot":"","sources":["../src/l1_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAEvF,OAAO,EAAE,KAAK,mBAAmB,EAA8B,MAAM,4BAA4B,CAAC;AAElG;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,EAAE,mBAAmB,CAAC;IACjC;;OAEG;IACH,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,cAAc,CAqBrE,CAAC"}
1
+ {"version":3,"file":"l1_reader.d.ts","sourceRoot":"","sources":["../src/l1_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAEvF,OAAO,EAAE,KAAK,mBAAmB,EAA8B,MAAM,4BAA4B,CAAC;AAElG,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,2CAA2C;IAC3C,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,cAAc,CAqBrE,CAAC"}
package/dest/l1_reader.js CHANGED
@@ -22,4 +22,4 @@ export const l1ReaderConfigMappings = {
22
22
  ...numberConfigHelper(1000),
23
23
  },
24
24
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfcmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJCLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkYsT0FBTyxFQUE0QiwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBeUJsRyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBdUM7SUFDeEUsUUFBUSxFQUFFO1FBQ1IsR0FBRyxFQUFFLGVBQWU7UUFDcEIsV0FBVyxFQUFFLG1DQUFtQztLQUNqRDtJQUNELFNBQVMsRUFBRTtRQUNULEdBQUcsRUFBRSxhQUFhO1FBQ2xCLFFBQVEsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHO1FBQy9CLFlBQVksRUFBRSxLQUFLO1FBQ25CLFdBQVcsRUFBRSxvQ0FBb0M7S0FDbEQ7SUFDRCxxQ0FBcUM7SUFDckMsV0FBVyxFQUFFO1FBQ1gsV0FBVyxFQUFFLG9DQUFvQztRQUNqRCxZQUFZLEVBQUUsMEJBQTBCO0tBQ3pDO0lBQ0QscUJBQXFCLEVBQUU7UUFDckIsR0FBRyxFQUFFLG9DQUFvQztRQUN6QyxXQUFXLEVBQUUsc0NBQXNDO1FBQ25ELEdBQUcsa0JBQWtCLENBQUMsSUFBSyxDQUFDO0tBQzdCO0NBQ0YsQ0FBQyJ9
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfcmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJCLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkYsT0FBTyxFQUE0QiwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBY2xHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUF1QztJQUN4RSxRQUFRLEVBQUU7UUFDUixHQUFHLEVBQUUsZUFBZTtRQUNwQixXQUFXLEVBQUUsbUNBQW1DO0tBQ2pEO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsR0FBRyxFQUFFLGFBQWE7UUFDbEIsUUFBUSxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUc7UUFDL0IsWUFBWSxFQUFFLEtBQUs7UUFDbkIsV0FBVyxFQUFFLG9DQUFvQztLQUNsRDtJQUNELHFDQUFxQztJQUNyQyxXQUFXLEVBQUU7UUFDWCxXQUFXLEVBQUUsb0NBQW9DO1FBQ2pELFlBQVksRUFBRSwwQkFBMEI7S0FDekM7SUFDRCxxQkFBcUIsRUFBRTtRQUNyQixHQUFHLEVBQUUsb0NBQW9DO1FBQ3pDLFdBQVcsRUFBRSxzQ0FBc0M7UUFDbkQsR0FBRyxrQkFBa0IsQ0FBQyxJQUFLLENBQUM7S0FDN0I7Q0FDRixDQUFDIn0=
@@ -0,0 +1,11 @@
1
+ import { type Fr } from '@aztec/foundation/fields';
2
+ import { type DebugLogger } from '@aztec/foundation/log';
3
+ import { type Abi, type ContractEventName, type DecodeEventLogReturnType, type Hex, type Log } from 'viem';
4
+ export interface L2Claim {
5
+ claimSecret: Fr;
6
+ claimAmount: Fr;
7
+ messageHash: Hex;
8
+ messageLeafIndex: bigint;
9
+ }
10
+ export declare function extractEvent<const TAbi extends Abi | readonly unknown[], TEventName extends ContractEventName<TAbi>, TEventType = DecodeEventLogReturnType<TAbi, TEventName, Hex[], undefined, true>>(logs: Log[], address: Hex, abi: TAbi, eventName: TEventName, filter?: (log: TEventType) => boolean, logger?: DebugLogger): TEventType;
11
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EACL,KAAK,GAAG,EACR,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,GAAG,EACR,KAAK,GAAG,EAET,MAAM,MAAM,CAAC;AAEd,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,EAAE,CAAC;IAChB,WAAW,EAAE,EAAE,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAC1B,KAAK,CAAC,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EAC3C,UAAU,SAAS,iBAAiB,CAAC,IAAI,CAAC,EAC1C,UAAU,GAAG,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAE/E,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,GAAG,EACZ,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,UAAU,EACrB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,EACrC,MAAM,CAAC,EAAE,WAAW,GACnB,UAAU,CAMZ"}
package/dest/utils.js ADDED
@@ -0,0 +1,27 @@
1
+ import { decodeEventLog, } from 'viem';
2
+ export function extractEvent(logs, address, abi, eventName, filter, logger) {
3
+ const event = tryExtractEvent(logs, address, abi, eventName, filter, logger);
4
+ if (!event) {
5
+ throw new Error(`Failed to find matching event ${eventName} for contract ${address}`);
6
+ }
7
+ return event;
8
+ }
9
+ function tryExtractEvent(logs, address, abi, eventName, filter, logger) {
10
+ for (const log of logs) {
11
+ if (log.address === address) {
12
+ try {
13
+ const decodedEvent = decodeEventLog({ abi, ...log });
14
+ if (decodedEvent.eventName === eventName) {
15
+ const matchingEvent = decodedEvent;
16
+ if (!filter || filter(matchingEvent)) {
17
+ return matchingEvent;
18
+ }
19
+ }
20
+ }
21
+ catch (err) {
22
+ logger?.warn(`Failed to decode event log for contract ${address}: ${err}`);
23
+ }
24
+ }
25
+ }
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQU1MLGNBQWMsR0FDZixNQUFNLE1BQU0sQ0FBQztBQVNkLE1BQU0sVUFBVSxZQUFZLENBSzFCLElBQVcsRUFDWCxPQUFZLEVBQ1osR0FBUyxFQUNULFNBQXFCLEVBQ3JCLE1BQXFDLEVBQ3JDLE1BQW9CO0lBRXBCLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLFNBQVMsaUJBQWlCLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUt0QixJQUFXLEVBQ1gsT0FBWSxFQUNaLEdBQVMsRUFDVCxTQUFxQixFQUNyQixNQUFxQyxFQUNyQyxNQUFvQjtJQUVwQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDckQsSUFBSSxZQUFZLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN6QyxNQUFNLGFBQWEsR0FBRyxZQUEwQixDQUFDO29CQUNqRCxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO3dCQUNyQyxPQUFPLGFBQWEsQ0FBQztvQkFDdkIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQywyQ0FBMkMsT0FBTyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/ethereum",
3
- "version": "0.61.0",
3
+ "version": "0.63.0",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -24,11 +24,12 @@
24
24
  "../package.common.json"
25
25
  ],
26
26
  "dependencies": {
27
- "@aztec/foundation": "0.61.0",
28
- "@aztec/l1-artifacts": "0.61.0",
27
+ "@aztec/foundation": "0.63.0",
28
+ "@aztec/l1-artifacts": "0.63.0",
29
29
  "dotenv": "^16.0.3",
30
30
  "tslib": "^2.4.0",
31
- "viem": "^2.7.15"
31
+ "viem": "^2.7.15",
32
+ "zod": "^3.23.8"
32
33
  },
33
34
  "devDependencies": {
34
35
  "@jest/globals": "^29.5.0",
package/src/config.ts ADDED
@@ -0,0 +1,54 @@
1
+ import { type ConfigMappingsType, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
2
+
3
+ export type L1ContractsConfig = {
4
+ /** How many seconds an L1 slot lasts. */
5
+ ethereumSlotDuration: number;
6
+ /** How many seconds an L2 slots lasts (must be multiple of ethereum slot duration). */
7
+ aztecSlotDuration: number;
8
+ /** How many L2 slots an epoch lasts. */
9
+ aztecEpochDuration: number;
10
+ /** The target validator committee size. */
11
+ aztecTargetCommitteeSize: number;
12
+ /** The number of L2 slots that we can wait for a proof of an epoch to be produced. */
13
+ aztecEpochProofClaimWindowInL2Slots: number;
14
+ };
15
+
16
+ export const DefaultL1ContractsConfig: L1ContractsConfig = {
17
+ ethereumSlotDuration: 12,
18
+ aztecSlotDuration: 24,
19
+ aztecEpochDuration: 16,
20
+ aztecTargetCommitteeSize: 48,
21
+ aztecEpochProofClaimWindowInL2Slots: 13,
22
+ };
23
+
24
+ export const l1ContractsConfigMappings: ConfigMappingsType<L1ContractsConfig> = {
25
+ ethereumSlotDuration: {
26
+ env: 'ETHEREUM_SLOT_DURATION',
27
+ description: 'How many seconds an L1 slot lasts.',
28
+ ...numberConfigHelper(DefaultL1ContractsConfig.ethereumSlotDuration),
29
+ },
30
+ aztecSlotDuration: {
31
+ env: 'AZTEC_SLOT_DURATION',
32
+ description: 'How many seconds an L2 slots lasts (must be multiple of ethereum slot duration).',
33
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecSlotDuration),
34
+ },
35
+ aztecEpochDuration: {
36
+ env: 'AZTEC_EPOCH_DURATION',
37
+ description: `How many L2 slots an epoch lasts (maximum AZTEC_MAX_EPOCH_DURATION).`,
38
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecEpochDuration),
39
+ },
40
+ aztecTargetCommitteeSize: {
41
+ env: 'AZTEC_TARGET_COMMITTEE_SIZE',
42
+ description: 'The target validator committee size.',
43
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecTargetCommitteeSize),
44
+ },
45
+ aztecEpochProofClaimWindowInL2Slots: {
46
+ env: 'AZTEC_EPOCH_PROOF_CLAIM_WINDOW_IN_L2_SLOTS',
47
+ description: 'The number of L2 slots that we can wait for a proof of an epoch to be produced.',
48
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecEpochProofClaimWindowInL2Slots),
49
+ },
50
+ };
51
+
52
+ export function getL1ContractsConfigEnvVars(): L1ContractsConfig {
53
+ return getConfigFromMappings(l1ContractsConfigMappings);
54
+ }
@@ -3,25 +3,25 @@ import { EthAddress } from '@aztec/foundation/eth-address';
3
3
  import { type Fr } from '@aztec/foundation/fields';
4
4
  import { type DebugLogger } from '@aztec/foundation/log';
5
5
  import {
6
- ApellaAbi,
7
- ApellaBytecode,
6
+ CoinIssuerAbi,
7
+ CoinIssuerBytecode,
8
8
  FeeJuicePortalAbi,
9
9
  FeeJuicePortalBytecode,
10
- GerousiaAbi,
11
- GerousiaBytecode,
10
+ GovernanceAbi,
11
+ GovernanceBytecode,
12
+ GovernanceProposerAbi,
13
+ GovernanceProposerBytecode,
12
14
  InboxAbi,
13
15
  InboxBytecode,
14
- NomismatokopioAbi,
15
- NomismatokopioBytecode,
16
16
  OutboxAbi,
17
17
  OutboxBytecode,
18
18
  RegistryAbi,
19
19
  RegistryBytecode,
20
+ RewardDistributorAbi,
21
+ RewardDistributorBytecode,
20
22
  RollupAbi,
21
23
  RollupBytecode,
22
24
  RollupLinkReferences,
23
- SysstiaAbi,
24
- SysstiaBytecode,
25
25
  TestERC20Abi,
26
26
  TestERC20Bytecode,
27
27
  TxsDecoderAbi,
@@ -50,6 +50,7 @@ import {
50
50
  import { type HDAccount, type PrivateKeyAccount, mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
51
51
  import { foundry } from 'viem/chains';
52
52
 
53
+ import { type L1ContractsConfig } from './config.js';
53
54
  import { isAnvilTestChain } from './ethereum_chain.js';
54
55
  import { type L1ContractAddresses } from './l1_contract_addresses.js';
55
56
 
@@ -132,21 +133,21 @@ export interface L1ContractArtifactsForDeployment {
132
133
  */
133
134
  feeJuicePortal: ContractArtifacts;
134
135
  /**
135
- * Nomismatokopio contract artifacts.
136
+ * CoinIssuer contract artifacts.
136
137
  */
137
- nomismatokopio: ContractArtifacts;
138
+ coinIssuer: ContractArtifacts;
138
139
  /**
139
- * Sysstia contract artifacts.
140
+ * RewardDistributor contract artifacts.
140
141
  */
141
- sysstia: ContractArtifacts;
142
+ rewardDistributor: ContractArtifacts;
142
143
  /**
143
- * Gerousia contract artifacts.
144
+ * GovernanceProposer contract artifacts.
144
145
  */
145
- gerousia: ContractArtifacts;
146
+ governanceProposer: ContractArtifacts;
146
147
  /**
147
- * Apella contract artifacts.
148
+ * Governance contract artifacts.
148
149
  */
149
- apella: ContractArtifacts;
150
+ governance: ContractArtifacts;
150
151
  }
151
152
 
152
153
  export const l1Artifacts: L1ContractArtifactsForDeployment = {
@@ -183,48 +184,36 @@ export const l1Artifacts: L1ContractArtifactsForDeployment = {
183
184
  contractAbi: FeeJuicePortalAbi,
184
185
  contractBytecode: FeeJuicePortalBytecode,
185
186
  },
186
- sysstia: {
187
- contractAbi: SysstiaAbi,
188
- contractBytecode: SysstiaBytecode,
187
+ rewardDistributor: {
188
+ contractAbi: RewardDistributorAbi,
189
+ contractBytecode: RewardDistributorBytecode,
189
190
  },
190
- nomismatokopio: {
191
- contractAbi: NomismatokopioAbi,
192
- contractBytecode: NomismatokopioBytecode,
191
+ coinIssuer: {
192
+ contractAbi: CoinIssuerAbi,
193
+ contractBytecode: CoinIssuerBytecode,
193
194
  },
194
- gerousia: {
195
- contractAbi: GerousiaAbi,
196
- contractBytecode: GerousiaBytecode,
195
+ governanceProposer: {
196
+ contractAbi: GovernanceProposerAbi,
197
+ contractBytecode: GovernanceProposerBytecode,
197
198
  },
198
- apella: {
199
- contractAbi: ApellaAbi,
200
- contractBytecode: ApellaBytecode,
199
+ governance: {
200
+ contractAbi: GovernanceAbi,
201
+ contractBytecode: GovernanceBytecode,
201
202
  },
202
203
  };
203
204
 
204
- export interface DeployL1ContractsArgs {
205
- /**
206
- * The address of the L2 Fee Juice contract.
207
- */
205
+ export interface DeployL1ContractsArgs extends L1ContractsConfig {
206
+ /** The address of the L2 Fee Juice contract. */
208
207
  l2FeeJuiceAddress: AztecAddress;
209
- /**
210
- * The vk tree root.
211
- */
208
+ /** The vk tree root. */
212
209
  vkTreeRoot: Fr;
213
- /**
214
- * The protocol contract tree root.
215
- */
210
+ /** The protocol contract tree root. */
216
211
  protocolContractTreeRoot: Fr;
217
- /**
218
- * The block number to assume proven through.
219
- */
212
+ /** The block number to assume proven through. */
220
213
  assumeProvenThrough?: number;
221
- /**
222
- * The salt for CREATE2 deployment.
223
- */
214
+ /** The salt for CREATE2 deployment. */
224
215
  salt: number | undefined;
225
- /**
226
- * The initial validators for the rollup contract.
227
- */
216
+ /** The initial validators for the rollup contract. */
228
217
  initialValidators?: EthAddress[];
229
218
  }
230
219
 
@@ -294,12 +283,11 @@ export const deployL1Contracts = async (
294
283
  return await (await fetch(rpcUrl, content)).json();
295
284
  };
296
285
  if (isAnvilTestChain(chain.id)) {
297
- const interval = 12; // @todo #8084
298
- const res = await rpcCall('anvil_setBlockTimestampInterval', [interval]);
286
+ const res = await rpcCall('anvil_setBlockTimestampInterval', [args.ethereumSlotDuration]);
299
287
  if (res.error) {
300
288
  throw new Error(`Error setting block interval: ${res.error.message}`);
301
289
  }
302
- logger.info(`Set block interval to ${interval}`);
290
+ logger.info(`Set block interval to ${args.ethereumSlotDuration}`);
303
291
  }
304
292
 
305
293
  logger.info(`Deploying contracts from ${account.address.toString()}...`);
@@ -319,32 +307,32 @@ export const deployL1Contracts = async (
319
307
  // @note These numbers are just chosen to make testing simple.
320
308
  const quorumSize = 6n;
321
309
  const roundSize = 10n;
322
- const gerousiaAddress = await govDeployer.deploy(l1Artifacts.gerousia, [
310
+ const governanceProposerAddress = await govDeployer.deploy(l1Artifacts.governanceProposer, [
323
311
  registryAddress.toString(),
324
312
  quorumSize,
325
313
  roundSize,
326
314
  ]);
327
- logger.info(`Deployed Gerousia at ${gerousiaAddress}`);
315
+ logger.info(`Deployed GovernanceProposer at ${governanceProposerAddress}`);
328
316
 
329
- const apellaAddress = await govDeployer.deploy(l1Artifacts.apella, [
317
+ const governanceAddress = await govDeployer.deploy(l1Artifacts.governance, [
330
318
  feeJuiceAddress.toString(),
331
- gerousiaAddress.toString(),
319
+ governanceProposerAddress.toString(),
332
320
  ]);
333
- logger.info(`Deployed Apella at ${apellaAddress}`);
321
+ logger.info(`Deployed Governance at ${governanceAddress}`);
334
322
 
335
- const nomismatokopioAddress = await govDeployer.deploy(l1Artifacts.nomismatokopio, [
323
+ const coinIssuerAddress = await govDeployer.deploy(l1Artifacts.coinIssuer, [
336
324
  feeJuiceAddress.toString(),
337
325
  1n * 10n ** 18n, // @todo #8084
338
- apellaAddress.toString(),
326
+ governanceAddress.toString(),
339
327
  ]);
340
- logger.info(`Deployed Nomismatokopio at ${nomismatokopioAddress}`);
328
+ logger.info(`Deployed CoinIssuer at ${coinIssuerAddress}`);
341
329
 
342
- const sysstiaAddress = await govDeployer.deploy(l1Artifacts.sysstia, [
330
+ const rewardDistributorAddress = await govDeployer.deploy(l1Artifacts.rewardDistributor, [
343
331
  feeJuiceAddress.toString(),
344
332
  registryAddress.toString(),
345
- apellaAddress.toString(),
333
+ governanceAddress.toString(),
346
334
  ]);
347
- logger.info(`Deployed Sysstia at ${sysstiaAddress}`);
335
+ logger.info(`Deployed RewardDistributor at ${rewardDistributorAddress}`);
348
336
 
349
337
  await govDeployer.waitForDeployments();
350
338
  logger.info(`All governance contracts deployed`);
@@ -358,15 +346,22 @@ export const deployL1Contracts = async (
358
346
  ]);
359
347
  logger.info(`Deployed Fee Juice Portal at ${feeJuicePortalAddress}`);
360
348
 
349
+ const rollupArgs = {
350
+ aztecSlotDuration: args.aztecSlotDuration,
351
+ aztecEpochDuration: args.aztecEpochDuration,
352
+ targetCommitteeSize: args.aztecTargetCommitteeSize,
353
+ aztecEpochProofClaimWindowInL2Slots: args.aztecEpochProofClaimWindowInL2Slots,
354
+ };
361
355
  const rollupAddress = await deployer.deploy(l1Artifacts.rollup, [
362
356
  feeJuicePortalAddress.toString(),
363
- sysstiaAddress.toString(),
357
+ rewardDistributorAddress.toString(),
364
358
  args.vkTreeRoot.toString(),
365
359
  args.protocolContractTreeRoot.toString(),
366
360
  account.address.toString(),
367
361
  args.initialValidators?.map(v => v.toString()) ?? [],
362
+ rollupArgs,
368
363
  ]);
369
- logger.info(`Deployed Rollup at ${rollupAddress}`);
364
+ logger.info(`Deployed Rollup at ${rollupAddress}`, rollupArgs);
370
365
 
371
366
  await deployer.waitForDeployments();
372
367
  logger.info(`All core contracts deployed`);
@@ -396,7 +391,7 @@ export const deployL1Contracts = async (
396
391
  // because there is circular dependency hell. This is a temporary solution. #3342
397
392
  // @todo #8084
398
393
  // fund the portal contract with Fee Juice
399
- const FEE_JUICE_INITIAL_MINT = 20000000000;
394
+ const FEE_JUICE_INITIAL_MINT = 200000000000000;
400
395
  const mintTxHash = await feeJuice.write.mint([feeJuicePortalAddress.toString(), FEE_JUICE_INITIAL_MINT], {} as any);
401
396
 
402
397
  // @note This is used to ensure we fully wait for the transaction when running against a real chain
@@ -468,16 +463,16 @@ export const deployL1Contracts = async (
468
463
  logger.verbose(`Registry ${registryAddress} has already registered rollup ${rollupAddress}`);
469
464
  }
470
465
 
471
- // If the owner is not the Apella contract, transfer ownership to the Apella contract
472
- if ((await registryContract.read.owner([])) !== getAddress(apellaAddress.toString())) {
466
+ // If the owner is not the Governance contract, transfer ownership to the Governance contract
467
+ if ((await registryContract.read.owner([])) !== getAddress(governanceAddress.toString())) {
473
468
  const transferOwnershipTxHash = await registryContract.write.transferOwnership(
474
- [getAddress(apellaAddress.toString())],
469
+ [getAddress(governanceAddress.toString())],
475
470
  {
476
471
  account,
477
472
  },
478
473
  );
479
474
  logger.verbose(
480
- `Transferring the ownership of the registry contract at ${registryAddress} to the Apella ${apellaAddress} in tx ${transferOwnershipTxHash}`,
475
+ `Transferring the ownership of the registry contract at ${registryAddress} to the Governance ${governanceAddress} in tx ${transferOwnershipTxHash}`,
481
476
  );
482
477
  txHashes.push(transferOwnershipTxHash);
483
478
  }
@@ -493,10 +488,10 @@ export const deployL1Contracts = async (
493
488
  outboxAddress,
494
489
  feeJuiceAddress,
495
490
  feeJuicePortalAddress,
496
- nomismatokopioAddress,
497
- sysstiaAddress,
498
- gerousiaAddress,
499
- apellaAddress,
491
+ coinIssuerAddress,
492
+ rewardDistributorAddress,
493
+ governanceProposerAddress,
494
+ governanceAddress,
500
495
  };
501
496
 
502
497
  return {
package/src/index.ts CHANGED
@@ -3,3 +3,5 @@ export * from './deploy_l1_contracts.js';
3
3
  export * from './l1_contract_addresses.js';
4
4
  export * from './l1_reader.js';
5
5
  export * from './ethereum_chain.js';
6
+ export * from './utils.js';
7
+ export * from './config.js';
@@ -1,31 +1,45 @@
1
1
  import { type ConfigMappingsType } from '@aztec/foundation/config';
2
2
  import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import { type ZodFor, schemas } from '@aztec/foundation/schemas';
4
+
5
+ import { z } from 'zod';
3
6
 
4
7
  /**
5
8
  * The names of the current L1 contract addresses.
6
9
  * NOTE: When changing this list, make sure to update CLI & CI scripts accordingly.
7
10
  * For reference: https://github.com/AztecProtocol/aztec-packages/pull/5553
8
11
  */
9
- export const l1ContractsNames = [
12
+ export const L1ContractsNames = [
10
13
  'rollupAddress',
11
14
  'registryAddress',
12
15
  'inboxAddress',
13
16
  'outboxAddress',
14
17
  'feeJuiceAddress',
15
18
  'feeJuicePortalAddress',
16
- 'nomismatokopioAddress',
17
- 'sysstiaAddress',
18
- 'gerousiaAddress',
19
- 'apellaAddress',
19
+ 'coinIssuerAddress',
20
+ 'rewardDistributorAddress',
21
+ 'governanceProposerAddress',
22
+ 'governanceAddress',
20
23
  ] as const;
21
24
 
22
- /**
23
- * Provides the directory of current L1 contract addresses
24
- */
25
+ /** Provides the directory of current L1 contract addresses */
25
26
  export type L1ContractAddresses = {
26
- [K in (typeof l1ContractsNames)[number]]: EthAddress;
27
+ [K in (typeof L1ContractsNames)[number]]: EthAddress;
27
28
  };
28
29
 
30
+ export const L1ContractAddressesSchema = z.object({
31
+ rollupAddress: schemas.EthAddress,
32
+ registryAddress: schemas.EthAddress,
33
+ inboxAddress: schemas.EthAddress,
34
+ outboxAddress: schemas.EthAddress,
35
+ feeJuiceAddress: schemas.EthAddress,
36
+ feeJuicePortalAddress: schemas.EthAddress,
37
+ coinIssuerAddress: schemas.EthAddress,
38
+ rewardDistributorAddress: schemas.EthAddress,
39
+ governanceProposerAddress: schemas.EthAddress,
40
+ governanceAddress: schemas.EthAddress,
41
+ }) satisfies ZodFor<L1ContractAddresses>;
42
+
29
43
  const parseEnv = (val: string) => EthAddress.fromString(val);
30
44
 
31
45
  export const l1ContractAddressesMapping: ConfigMappingsType<L1ContractAddresses> = {
@@ -59,24 +73,24 @@ export const l1ContractAddressesMapping: ConfigMappingsType<L1ContractAddresses>
59
73
  description: 'The deployed L1 Fee Juice portal contract address.',
60
74
  parseEnv,
61
75
  },
62
- nomismatokopioAddress: {
63
- env: 'NOMISMATOKOPIO_CONTRACT_ADDRESS',
64
- description: 'The deployed L1 nomismatokopio contract address',
76
+ coinIssuerAddress: {
77
+ env: 'COIN_ISSUER_CONTRACT_ADDRESS',
78
+ description: 'The deployed L1 coinIssuer contract address',
65
79
  parseEnv,
66
80
  },
67
- sysstiaAddress: {
68
- env: 'SYSSTIA_CONTRACT_ADDRESS',
69
- description: 'The deployed L1 sysstia contract address',
81
+ rewardDistributorAddress: {
82
+ env: 'REWARD_DISTRIBUTOR_CONTRACT_ADDRESS',
83
+ description: 'The deployed L1 rewardDistributor contract address',
70
84
  parseEnv,
71
85
  },
72
- gerousiaAddress: {
73
- env: 'GEROUSIA_CONTRACT_ADDRESS',
74
- description: 'The deployed L1 gerousia contract address',
86
+ governanceProposerAddress: {
87
+ env: 'GOVERNANCE_PROPOSER_CONTRACT_ADDRESS',
88
+ description: 'The deployed L1 governanceProposer contract address',
75
89
  parseEnv,
76
90
  },
77
- apellaAddress: {
78
- env: 'APELLA_CONTRACT_ADDRESS',
79
- description: 'The deployed L1 apella contract address',
91
+ governanceAddress: {
92
+ env: 'GOVERNANCE_CONTRACT_ADDRESS',
93
+ description: 'The deployed L1 governance contract address',
80
94
  parseEnv,
81
95
  },
82
96
  };
package/src/l1_reader.ts CHANGED
@@ -2,26 +2,15 @@ import { type ConfigMappingsType, numberConfigHelper } from '@aztec/foundation/c
2
2
 
3
3
  import { type L1ContractAddresses, l1ContractAddressesMapping } from './l1_contract_addresses.js';
4
4
 
5
- /**
6
- * Configuration of the L1GlobalReader.
7
- */
5
+ /** Configuration of the L1GlobalReader. */
8
6
  export interface L1ReaderConfig {
9
- /**
10
- * The RPC Url of the ethereum host.
11
- */
7
+ /** The RPC Url of the ethereum host. */
12
8
  l1RpcUrl: string;
13
- /**
14
- * The chain ID of the ethereum host.
15
- */
9
+ /** The chain ID of the ethereum host. */
16
10
  l1ChainId: number;
17
-
18
- /**
19
- * The deployed l1 contract addresses
20
- */
11
+ /** The deployed l1 contract addresses */
21
12
  l1Contracts: L1ContractAddresses;
22
- /**
23
- * The polling interval viem uses in ms
24
- */
13
+ /** The polling interval viem uses in ms */
25
14
  viemPollingIntervalMS: number;
26
15
  }
27
16
 
package/src/utils.ts ADDED
@@ -0,0 +1,66 @@
1
+ import { type Fr } from '@aztec/foundation/fields';
2
+ import { type DebugLogger } from '@aztec/foundation/log';
3
+
4
+ import {
5
+ type Abi,
6
+ type ContractEventName,
7
+ type DecodeEventLogReturnType,
8
+ type Hex,
9
+ type Log,
10
+ decodeEventLog,
11
+ } from 'viem';
12
+
13
+ export interface L2Claim {
14
+ claimSecret: Fr;
15
+ claimAmount: Fr;
16
+ messageHash: Hex;
17
+ messageLeafIndex: bigint;
18
+ }
19
+
20
+ export function extractEvent<
21
+ const TAbi extends Abi | readonly unknown[],
22
+ TEventName extends ContractEventName<TAbi>,
23
+ TEventType = DecodeEventLogReturnType<TAbi, TEventName, Hex[], undefined, true>,
24
+ >(
25
+ logs: Log[],
26
+ address: Hex,
27
+ abi: TAbi,
28
+ eventName: TEventName,
29
+ filter?: (log: TEventType) => boolean,
30
+ logger?: DebugLogger,
31
+ ): TEventType {
32
+ const event = tryExtractEvent(logs, address, abi, eventName, filter, logger);
33
+ if (!event) {
34
+ throw new Error(`Failed to find matching event ${eventName} for contract ${address}`);
35
+ }
36
+ return event;
37
+ }
38
+
39
+ function tryExtractEvent<
40
+ const TAbi extends Abi | readonly unknown[],
41
+ TEventName extends ContractEventName<TAbi>,
42
+ TEventType = DecodeEventLogReturnType<TAbi, TEventName, Hex[], undefined, true>,
43
+ >(
44
+ logs: Log[],
45
+ address: Hex,
46
+ abi: TAbi,
47
+ eventName: TEventName,
48
+ filter?: (log: TEventType) => boolean,
49
+ logger?: DebugLogger,
50
+ ): TEventType | undefined {
51
+ for (const log of logs) {
52
+ if (log.address === address) {
53
+ try {
54
+ const decodedEvent = decodeEventLog({ abi, ...log });
55
+ if (decodedEvent.eventName === eventName) {
56
+ const matchingEvent = decodedEvent as TEventType;
57
+ if (!filter || filter(matchingEvent)) {
58
+ return matchingEvent;
59
+ }
60
+ }
61
+ } catch (err) {
62
+ logger?.warn(`Failed to decode event log for contract ${address}: ${err}`);
63
+ }
64
+ }
65
+ }
66
+ }