@aztec/ethereum 0.28.1 → 0.30.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.
@@ -58,6 +58,14 @@ export interface L1ContractArtifactsForDeployment {
58
58
  * Rollup contract artifacts
59
59
  */
60
60
  rollup: ContractArtifacts;
61
+ /**
62
+ * The token to pay for gas. This will be bridged to L2 via the gasPortal below
63
+ */
64
+ gasToken: ContractArtifacts;
65
+ /**
66
+ * Gas portal contract artifacts. Optional for now as gas is not strictly enforced
67
+ */
68
+ gasPortal: ContractArtifacts;
61
69
  }
62
70
  /**
63
71
  * Deploys the aztec L1 contracts; Rollup, Contract Deployment Emitter & (optionally) Decoder Helper.
@@ -1 +1 @@
1
- {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_l1_contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,KAAK,EACL,GAAG,EACH,aAAa,EACb,YAAY,EACZ,YAAY,EAMb,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1D;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAEjD;;OAEG;IACH,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG,SAAS,OAAO,EAAE,CAAC,CAAC;IAC9C;;OAEG;IACH,gBAAgB,EAAE,GAAG,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;OAEG;IACH,KAAK,EAAE,iBAAiB,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAC1B;;OAEG;IACH,kBAAkB,EAAE,iBAAiB,CAAC;IACtC;;OAEG;IACH,QAAQ,EAAE,iBAAiB,CAAC;IAC5B;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,WACpB,MAAM,WACL,SAAS,GAAG,iBAAiB,SAC/B,KAAK,UACJ,WAAW,qBACA,gCAAgC,KAClD,QAAQ,iBAAiB,CAgF3B,CAAC;AAGF;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,EACzD,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,EAChD,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,SAAS,OAAO,EAAE,CAAC,EACrC,QAAQ,EAAE,GAAG,EACb,IAAI,GAAE,SAAS,OAAO,EAAO,GAC5B,OAAO,CAAC,UAAU,CAAC,CAcrB"}
1
+ {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_l1_contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,KAAK,EACL,GAAG,EACH,aAAa,EACb,YAAY,EACZ,YAAY,EAMb,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1D;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAEjD;;OAEG;IACH,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG,SAAS,OAAO,EAAE,CAAC,CAAC;IAC9C;;OAEG;IACH,gBAAgB,EAAE,GAAG,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;OAEG;IACH,KAAK,EAAE,iBAAiB,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAC1B;;OAEG;IACH,kBAAkB,EAAE,iBAAiB,CAAC;IACtC;;OAEG;IACH,QAAQ,EAAE,iBAAiB,CAAC;IAC5B;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,iBAAiB,CAAC;IAC5B;;OAEG;IACH,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,WACpB,MAAM,WACL,SAAS,GAAG,iBAAiB,SAC/B,KAAK,UACJ,WAAW,qBACA,gCAAgC,KAClD,QAAQ,iBAAiB,CAwG3B,CAAC;AAGF;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,EACzD,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,EAChD,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,SAAS,OAAO,EAAE,CAAC,EACrC,QAAQ,EAAE,GAAG,EACb,IAAI,GAAE,SAAS,OAAO,EAAO,GAC5B,OAAO,CAAC,UAAU,CAAC,CAcrB"}
@@ -22,14 +22,22 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
22
22
  });
23
23
  const registryAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.registry.contractAbi, contractsToDeploy.registry.contractBytecode);
24
24
  logger(`Deployed Registry at ${registryAddress}`);
25
- const inboxAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.inbox.contractAbi, contractsToDeploy.inbox.contractBytecode, [getAddress(registryAddress.toString())]);
26
- logger(`Deployed Inbox at ${inboxAddress}`);
27
25
  const outboxAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.outbox.contractAbi, contractsToDeploy.outbox.contractBytecode, [getAddress(registryAddress.toString())]);
28
26
  logger(`Deployed Outbox at ${outboxAddress}`);
29
27
  const availabilityOracleAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.availabilityOracle.contractAbi, contractsToDeploy.availabilityOracle.contractBytecode);
30
28
  logger(`Deployed AvailabilityOracle at ${availabilityOracleAddress}`);
31
29
  const rollupAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.rollup.contractAbi, contractsToDeploy.rollup.contractBytecode, [getAddress(registryAddress.toString()), getAddress(availabilityOracleAddress.toString())]);
32
30
  logger(`Deployed Rollup at ${rollupAddress}`);
31
+ // Inbox is immutable and is deployed from Rollup's constructor so we just fetch it from the contract.
32
+ let inboxAddress;
33
+ {
34
+ const rollup = getContract({
35
+ address: getAddress(rollupAddress.toString()),
36
+ abi: contractsToDeploy.rollup.contractAbi,
37
+ client: publicClient,
38
+ });
39
+ inboxAddress = EthAddress.fromString((await rollup.read.INBOX([])));
40
+ }
33
41
  // We need to call a function on the registry to set the various contract addresses.
34
42
  const registryContract = getContract({
35
43
  address: getAddress(registryAddress.toString()),
@@ -37,12 +45,20 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
37
45
  client: walletClient,
38
46
  });
39
47
  await registryContract.write.upgrade([getAddress(rollupAddress.toString()), getAddress(inboxAddress.toString()), getAddress(outboxAddress.toString())], { account });
48
+ // this contract remains uninitialized because at this point we don't know the address of the gas token on L2
49
+ const gasTokenAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.gasToken.contractAbi, contractsToDeploy.gasToken.contractBytecode);
50
+ logger(`Deployed Gas Token at ${gasTokenAddress}`);
51
+ // this contract remains uninitialized because at this point we don't know the address of the gas token on L2
52
+ const gasPortalAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.gasPortal.contractAbi, contractsToDeploy.gasPortal.contractBytecode);
53
+ logger(`Deployed Gas Portal at ${gasPortalAddress}`);
40
54
  const l1Contracts = {
41
55
  availabilityOracleAddress,
42
56
  rollupAddress,
43
57
  registryAddress,
44
58
  inboxAddress,
45
59
  outboxAddress,
60
+ gasTokenAddress,
61
+ gasPortalAddress,
46
62
  };
47
63
  return {
48
64
  walletClient,
@@ -74,4 +90,4 @@ export async function deployL1Contract(walletClient, publicClient, abi, bytecode
74
90
  return EthAddress.fromString(receipt.contractAddress);
75
91
  }
76
92
  // docs:end:deployL1Contract
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXBsb3lfbDFfY29udHJhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUkzRCxPQUFPLEVBT0wsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsV0FBVyxFQUNYLElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQWdFZDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFDcEMsTUFBYyxFQUNkLE9BQXNDLEVBQ3RDLEtBQVksRUFDWixNQUFtQixFQUNuQixpQkFBbUQsRUFDdkIsRUFBRTtJQUM5QixNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUVqQyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN0QyxPQUFPO1FBQ1AsS0FBSztRQUNMLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ3hCLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ3RDLEtBQUs7UUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN4QixDQUFDLENBQUM7SUFFSCxNQUFNLGVBQWUsR0FBRyxNQUFNLGdCQUFnQixDQUM1QyxZQUFZLEVBQ1osWUFBWSxFQUNaLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQ3RDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDNUMsQ0FBQztJQUNGLE1BQU0sQ0FBQyx3QkFBd0IsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUVsRCxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUN6QyxZQUFZLEVBQ1osWUFBWSxFQUNaLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQ25DLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxn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
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXBsb3lfbDFfY29udHJhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUkzRCxPQUFPLEVBT0wsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsV0FBVyxFQUNYLElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQXdFZDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFDcEMsTUFBYyxFQUNkLE9BQXNDLEVBQ3RDLEtBQVksRUFDWixNQUFtQixFQUNuQixpQkFBbUQsRUFDdkIsRUFBRTtJQUM5QixNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUVqQyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN0QyxPQUFPO1FBQ1AsS0FBSztRQUNMLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ3hCLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ3RDLEtBQUs7UUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN4QixDQUFDLENBQUM7SUFFSCxNQUFNLGVBQWUsR0FBRyxNQUFNLGdCQUFnQixDQUM1QyxZQUFZLEVBQ1osWUFBWSxFQUNaLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQ3RDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDNUMsQ0FBQztJQUNGLE1BQU0sQ0FBQyx3QkFBd0IsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUVsRCxNQUFNLGFBQWEsR0FBRyxNQUFNLGdCQUFnQixDQUMxQyxZQUFZLEVBQ1osWUFBWSxFQUNaLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQ3BDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxn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
@@ -1,5 +1,5 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
- export declare const l1ContractsNames: readonly ["availabilityOracleAddress", "rollupAddress", "registryAddress", "inboxAddress", "outboxAddress"];
2
+ export declare const l1ContractsNames: readonly ["availabilityOracleAddress", "rollupAddress", "registryAddress", "inboxAddress", "outboxAddress", "gasTokenAddress", "gasPortalAddress"];
3
3
  /**
4
4
  * Provides the directory of current L1 contract addresses
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"l1_contract_addresses.d.ts","sourceRoot":"","sources":["../src/l1_contract_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,eAAO,MAAM,gBAAgB,6GAMnB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;KAC/B,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU;CACrD,CAAC"}
1
+ {"version":3,"file":"l1_contract_addresses.d.ts","sourceRoot":"","sources":["../src/l1_contract_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,eAAO,MAAM,gBAAgB,oJAQnB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;KAC/B,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU;CACrD,CAAC"}
@@ -4,5 +4,7 @@ export const l1ContractsNames = [
4
4
  'registryAddress',
5
5
  'inboxAddress',
6
6
  'outboxAddress',
7
+ 'gasTokenAddress',
8
+ 'gasPortalAddress',
7
9
  ];
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfY29udHJhY3RfYWRkcmVzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX2NvbnRyYWN0X2FkZHJlc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QiwyQkFBMkI7SUFDM0IsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2QsZUFBZTtDQUNQLENBQUMifQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfY29udHJhY3RfYWRkcmVzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX2NvbnRyYWN0X2FkZHJlc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QiwyQkFBMkI7SUFDM0IsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2QsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixrQkFBa0I7Q0FDVixDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/ethereum",
3
- "version": "0.28.1",
3
+ "version": "0.30.0",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -24,7 +24,7 @@
24
24
  "../package.common.json"
25
25
  ],
26
26
  "dependencies": {
27
- "@aztec/foundation": "0.28.1",
27
+ "@aztec/foundation": "0.30.0",
28
28
  "dotenv": "^16.0.3",
29
29
  "tslib": "^2.4.0",
30
30
  "viem": "^2.7.15"
@@ -76,6 +76,14 @@ export interface L1ContractArtifactsForDeployment {
76
76
  * Rollup contract artifacts
77
77
  */
78
78
  rollup: ContractArtifacts;
79
+ /**
80
+ * The token to pay for gas. This will be bridged to L2 via the gasPortal below
81
+ */
82
+ gasToken: ContractArtifacts;
83
+ /**
84
+ * Gas portal contract artifacts. Optional for now as gas is not strictly enforced
85
+ */
86
+ gasPortal: ContractArtifacts;
79
87
  }
80
88
 
81
89
  /**
@@ -114,15 +122,6 @@ export const deployL1Contracts = async (
114
122
  );
115
123
  logger(`Deployed Registry at ${registryAddress}`);
116
124
 
117
- const inboxAddress = await deployL1Contract(
118
- walletClient,
119
- publicClient,
120
- contractsToDeploy.inbox.contractAbi,
121
- contractsToDeploy.inbox.contractBytecode,
122
- [getAddress(registryAddress.toString())],
123
- );
124
- logger(`Deployed Inbox at ${inboxAddress}`);
125
-
126
125
  const outboxAddress = await deployL1Contract(
127
126
  walletClient,
128
127
  publicClient,
@@ -149,6 +148,17 @@ export const deployL1Contracts = async (
149
148
  );
150
149
  logger(`Deployed Rollup at ${rollupAddress}`);
151
150
 
151
+ // Inbox is immutable and is deployed from Rollup's constructor so we just fetch it from the contract.
152
+ let inboxAddress!: EthAddress;
153
+ {
154
+ const rollup = getContract({
155
+ address: getAddress(rollupAddress.toString()),
156
+ abi: contractsToDeploy.rollup.contractAbi,
157
+ client: publicClient,
158
+ });
159
+ inboxAddress = EthAddress.fromString((await rollup.read.INBOX([])) as any);
160
+ }
161
+
152
162
  // We need to call a function on the registry to set the various contract addresses.
153
163
  const registryContract = getContract({
154
164
  address: getAddress(registryAddress.toString()),
@@ -160,12 +170,34 @@ export const deployL1Contracts = async (
160
170
  { account },
161
171
  );
162
172
 
173
+ // this contract remains uninitialized because at this point we don't know the address of the gas token on L2
174
+ const gasTokenAddress = await deployL1Contract(
175
+ walletClient,
176
+ publicClient,
177
+ contractsToDeploy.gasToken.contractAbi,
178
+ contractsToDeploy.gasToken.contractBytecode,
179
+ );
180
+
181
+ logger(`Deployed Gas Token at ${gasTokenAddress}`);
182
+
183
+ // this contract remains uninitialized because at this point we don't know the address of the gas token on L2
184
+ const gasPortalAddress = await deployL1Contract(
185
+ walletClient,
186
+ publicClient,
187
+ contractsToDeploy.gasPortal.contractAbi,
188
+ contractsToDeploy.gasPortal.contractBytecode,
189
+ );
190
+
191
+ logger(`Deployed Gas Portal at ${gasPortalAddress}`);
192
+
163
193
  const l1Contracts: L1ContractAddresses = {
164
194
  availabilityOracleAddress,
165
195
  rollupAddress,
166
196
  registryAddress,
167
197
  inboxAddress,
168
198
  outboxAddress,
199
+ gasTokenAddress,
200
+ gasPortalAddress,
169
201
  };
170
202
 
171
203
  return {
@@ -6,6 +6,8 @@ export const l1ContractsNames = [
6
6
  'registryAddress',
7
7
  'inboxAddress',
8
8
  'outboxAddress',
9
+ 'gasTokenAddress',
10
+ 'gasPortalAddress',
9
11
  ] as const;
10
12
 
11
13
  /**