@aztec/ethereum 0.59.0 → 0.61.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.
- package/dest/deploy_l1_contracts.d.ts +35 -3
- package/dest/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_l1_contracts.js +137 -20
- package/dest/l1_contract_addresses.d.ts +1 -4
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +25 -30
- package/package.json +3 -2
- package/src/deploy_l1_contracts.ts +223 -21
- package/src/l1_contract_addresses.ts +25 -35
|
@@ -23,6 +23,18 @@ export type DeployL1Contracts = {
|
|
|
23
23
|
*/
|
|
24
24
|
l1ContractAddresses: L1ContractAddresses;
|
|
25
25
|
};
|
|
26
|
+
export interface LinkReferences {
|
|
27
|
+
[fileName: string]: {
|
|
28
|
+
[contractName: string]: ReadonlyArray<{
|
|
29
|
+
start: number;
|
|
30
|
+
length: number;
|
|
31
|
+
}>;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export interface Libraries {
|
|
35
|
+
linkReferences: LinkReferences;
|
|
36
|
+
libraryCode: Record<string, ContractArtifacts>;
|
|
37
|
+
}
|
|
26
38
|
/**
|
|
27
39
|
* Contract artifacts
|
|
28
40
|
*/
|
|
@@ -35,6 +47,10 @@ export interface ContractArtifacts {
|
|
|
35
47
|
* The contract bytecode
|
|
36
48
|
*/
|
|
37
49
|
contractBytecode: Hex;
|
|
50
|
+
/**
|
|
51
|
+
* The contract libraries
|
|
52
|
+
*/
|
|
53
|
+
libraries?: Libraries;
|
|
38
54
|
}
|
|
39
55
|
/**
|
|
40
56
|
* All L1 Contract Artifacts for deployment
|
|
@@ -64,7 +80,24 @@ export interface L1ContractArtifactsForDeployment {
|
|
|
64
80
|
* Fee juice portal contract artifacts. Optional for now as gas is not strictly enforced
|
|
65
81
|
*/
|
|
66
82
|
feeJuicePortal: ContractArtifacts;
|
|
83
|
+
/**
|
|
84
|
+
* Nomismatokopio contract artifacts.
|
|
85
|
+
*/
|
|
86
|
+
nomismatokopio: ContractArtifacts;
|
|
87
|
+
/**
|
|
88
|
+
* Sysstia contract artifacts.
|
|
89
|
+
*/
|
|
90
|
+
sysstia: ContractArtifacts;
|
|
91
|
+
/**
|
|
92
|
+
* Gerousia contract artifacts.
|
|
93
|
+
*/
|
|
94
|
+
gerousia: ContractArtifacts;
|
|
95
|
+
/**
|
|
96
|
+
* Apella contract artifacts.
|
|
97
|
+
*/
|
|
98
|
+
apella: ContractArtifacts;
|
|
67
99
|
}
|
|
100
|
+
export declare const l1Artifacts: L1ContractArtifactsForDeployment;
|
|
68
101
|
export interface DeployL1ContractsArgs {
|
|
69
102
|
/**
|
|
70
103
|
* The address of the L2 Fee Juice contract.
|
|
@@ -109,11 +142,10 @@ export declare function createL1Clients(rpcUrl: string, mnemonicOrPrivateKeyOrHd
|
|
|
109
142
|
* @param account - Private Key or HD Account that will deploy the contracts.
|
|
110
143
|
* @param chain - The chain instance to deploy to.
|
|
111
144
|
* @param logger - A logger object.
|
|
112
|
-
* @param contractsToDeploy - The set of L1 artifacts to be deployed
|
|
113
145
|
* @param args - Arguments for initialization of L1 contracts
|
|
114
146
|
* @returns A list of ETH addresses of the deployed contracts.
|
|
115
147
|
*/
|
|
116
|
-
export declare const deployL1Contracts: (rpcUrl: string, account: HDAccount | PrivateKeyAccount, chain: Chain, logger: DebugLogger,
|
|
148
|
+
export declare const deployL1Contracts: (rpcUrl: string, account: HDAccount | PrivateKeyAccount, chain: Chain, logger: DebugLogger, args: DeployL1ContractsArgs) => Promise<DeployL1Contracts>;
|
|
117
149
|
/**
|
|
118
150
|
* Compiles a contract source code using the provided solc compiler.
|
|
119
151
|
* @param fileName - Contract file name (eg UltraHonkVerifier.sol)
|
|
@@ -138,7 +170,7 @@ export declare function compileContract(fileName: string, contractName: string,
|
|
|
138
170
|
* @param maybeSalt - Optional salt for CREATE2 deployment (does not wait for deployment tx to be mined if set, does not send tx if contract already exists).
|
|
139
171
|
* @returns The ETH address the contract was deployed to.
|
|
140
172
|
*/
|
|
141
|
-
export declare function deployL1Contract(walletClient: WalletClient<HttpTransport, Chain, Account>, publicClient: PublicClient<HttpTransport, Chain>, abi: Narrow<Abi | readonly unknown[]>, bytecode: Hex, args?: readonly unknown[], maybeSalt?: Hex, logger?: DebugLogger): Promise<{
|
|
173
|
+
export declare function deployL1Contract(walletClient: WalletClient<HttpTransport, Chain, Account>, publicClient: PublicClient<HttpTransport, Chain>, abi: Narrow<Abi | readonly unknown[]>, bytecode: Hex, args?: readonly unknown[], maybeSalt?: Hex, libraries?: Libraries, logger?: DebugLogger): Promise<{
|
|
142
174
|
address: EthAddress;
|
|
143
175
|
txHash: Hex | undefined;
|
|
144
176
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_l1_contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_l1_contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,60 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
-
import {
|
|
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';
|
|
3
|
+
import { concatHex, createPublicClient, createWalletClient, encodeDeployData, getAddress, getContract, getContractAddress, http, numberToHex, padHex, } from 'viem';
|
|
3
4
|
import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
|
|
4
5
|
import { foundry } from 'viem/chains';
|
|
5
6
|
import { isAnvilTestChain } from './ethereum_chain.js';
|
|
7
|
+
export const l1Artifacts = {
|
|
8
|
+
registry: {
|
|
9
|
+
contractAbi: RegistryAbi,
|
|
10
|
+
contractBytecode: RegistryBytecode,
|
|
11
|
+
},
|
|
12
|
+
inbox: {
|
|
13
|
+
contractAbi: InboxAbi,
|
|
14
|
+
contractBytecode: InboxBytecode,
|
|
15
|
+
},
|
|
16
|
+
outbox: {
|
|
17
|
+
contractAbi: OutboxAbi,
|
|
18
|
+
contractBytecode: OutboxBytecode,
|
|
19
|
+
},
|
|
20
|
+
rollup: {
|
|
21
|
+
contractAbi: RollupAbi,
|
|
22
|
+
contractBytecode: RollupBytecode,
|
|
23
|
+
libraries: {
|
|
24
|
+
linkReferences: RollupLinkReferences,
|
|
25
|
+
libraryCode: {
|
|
26
|
+
TxsDecoder: {
|
|
27
|
+
contractAbi: TxsDecoderAbi,
|
|
28
|
+
contractBytecode: TxsDecoderBytecode,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
feeJuice: {
|
|
34
|
+
contractAbi: TestERC20Abi,
|
|
35
|
+
contractBytecode: TestERC20Bytecode,
|
|
36
|
+
},
|
|
37
|
+
feeJuicePortal: {
|
|
38
|
+
contractAbi: FeeJuicePortalAbi,
|
|
39
|
+
contractBytecode: FeeJuicePortalBytecode,
|
|
40
|
+
},
|
|
41
|
+
sysstia: {
|
|
42
|
+
contractAbi: SysstiaAbi,
|
|
43
|
+
contractBytecode: SysstiaBytecode,
|
|
44
|
+
},
|
|
45
|
+
nomismatokopio: {
|
|
46
|
+
contractAbi: NomismatokopioAbi,
|
|
47
|
+
contractBytecode: NomismatokopioBytecode,
|
|
48
|
+
},
|
|
49
|
+
gerousia: {
|
|
50
|
+
contractAbi: GerousiaAbi,
|
|
51
|
+
contractBytecode: GerousiaBytecode,
|
|
52
|
+
},
|
|
53
|
+
apella: {
|
|
54
|
+
contractAbi: ApellaAbi,
|
|
55
|
+
contractBytecode: ApellaBytecode,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
6
58
|
/**
|
|
7
59
|
* Creates a wallet and a public viem client for interacting with L1.
|
|
8
60
|
* @param rpcUrl - RPC URL to connect to L1.
|
|
@@ -33,11 +85,10 @@ export function createL1Clients(rpcUrl, mnemonicOrPrivateKeyOrHdAccount, chain =
|
|
|
33
85
|
* @param account - Private Key or HD Account that will deploy the contracts.
|
|
34
86
|
* @param chain - The chain instance to deploy to.
|
|
35
87
|
* @param logger - A logger object.
|
|
36
|
-
* @param contractsToDeploy - The set of L1 artifacts to be deployed
|
|
37
88
|
* @param args - Arguments for initialization of L1 contracts
|
|
38
89
|
* @returns A list of ETH addresses of the deployed contracts.
|
|
39
90
|
*/
|
|
40
|
-
export const deployL1Contracts = async (rpcUrl, account, chain, logger,
|
|
91
|
+
export const deployL1Contracts = async (rpcUrl, account, chain, logger, args) => {
|
|
41
92
|
// We are assuming that you are running this on a local anvil node which have 1s block times
|
|
42
93
|
// To align better with actual deployment, we update the block interval to 12s
|
|
43
94
|
// The code is same as `setBlockInterval` in `cheat_codes.ts`
|
|
@@ -51,7 +102,7 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
|
|
|
51
102
|
return await (await fetch(rpcUrl, content)).json();
|
|
52
103
|
};
|
|
53
104
|
if (isAnvilTestChain(chain.id)) {
|
|
54
|
-
const interval = 12;
|
|
105
|
+
const interval = 12; // @todo #8084
|
|
55
106
|
const res = await rpcCall('anvil_setBlockTimestampInterval', [interval]);
|
|
56
107
|
if (res.error) {
|
|
57
108
|
throw new Error(`Error setting block interval: ${res.error.message}`);
|
|
@@ -61,20 +112,51 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
|
|
|
61
112
|
logger.info(`Deploying contracts from ${account.address.toString()}...`);
|
|
62
113
|
const walletClient = createWalletClient({ account, chain, transport: http(rpcUrl) });
|
|
63
114
|
const publicClient = createPublicClient({ chain, transport: http(rpcUrl) });
|
|
64
|
-
|
|
65
|
-
const
|
|
115
|
+
// Governance stuff
|
|
116
|
+
const govDeployer = new L1Deployer(walletClient, publicClient, args.salt, logger);
|
|
117
|
+
const registryAddress = await govDeployer.deploy(l1Artifacts.registry, [account.address.toString()]);
|
|
66
118
|
logger.info(`Deployed Registry at ${registryAddress}`);
|
|
67
|
-
const feeJuiceAddress = await
|
|
119
|
+
const feeJuiceAddress = await govDeployer.deploy(l1Artifacts.feeJuice);
|
|
68
120
|
logger.info(`Deployed Fee Juice at ${feeJuiceAddress}`);
|
|
69
|
-
|
|
70
|
-
|
|
121
|
+
// @todo #8084
|
|
122
|
+
// @note These numbers are just chosen to make testing simple.
|
|
123
|
+
const quorumSize = 6n;
|
|
124
|
+
const roundSize = 10n;
|
|
125
|
+
const gerousiaAddress = await govDeployer.deploy(l1Artifacts.gerousia, [
|
|
126
|
+
registryAddress.toString(),
|
|
127
|
+
quorumSize,
|
|
128
|
+
roundSize,
|
|
129
|
+
]);
|
|
130
|
+
logger.info(`Deployed Gerousia at ${gerousiaAddress}`);
|
|
131
|
+
const apellaAddress = await govDeployer.deploy(l1Artifacts.apella, [
|
|
132
|
+
feeJuiceAddress.toString(),
|
|
133
|
+
gerousiaAddress.toString(),
|
|
134
|
+
]);
|
|
135
|
+
logger.info(`Deployed Apella at ${apellaAddress}`);
|
|
136
|
+
const nomismatokopioAddress = await govDeployer.deploy(l1Artifacts.nomismatokopio, [
|
|
137
|
+
feeJuiceAddress.toString(),
|
|
138
|
+
1n * 10n ** 18n, // @todo #8084
|
|
139
|
+
apellaAddress.toString(),
|
|
140
|
+
]);
|
|
141
|
+
logger.info(`Deployed Nomismatokopio at ${nomismatokopioAddress}`);
|
|
142
|
+
const sysstiaAddress = await govDeployer.deploy(l1Artifacts.sysstia, [
|
|
143
|
+
feeJuiceAddress.toString(),
|
|
144
|
+
registryAddress.toString(),
|
|
145
|
+
apellaAddress.toString(),
|
|
146
|
+
]);
|
|
147
|
+
logger.info(`Deployed Sysstia at ${sysstiaAddress}`);
|
|
148
|
+
await govDeployer.waitForDeployments();
|
|
149
|
+
logger.info(`All governance contracts deployed`);
|
|
150
|
+
const deployer = new L1Deployer(walletClient, publicClient, args.salt, logger);
|
|
151
|
+
const feeJuicePortalAddress = await deployer.deploy(l1Artifacts.feeJuicePortal, [
|
|
71
152
|
registryAddress.toString(),
|
|
72
153
|
feeJuiceAddress.toString(),
|
|
73
154
|
args.l2FeeJuiceAddress.toString(),
|
|
74
155
|
]);
|
|
75
156
|
logger.info(`Deployed Fee Juice Portal at ${feeJuicePortalAddress}`);
|
|
76
|
-
const rollupAddress = await deployer.deploy(
|
|
157
|
+
const rollupAddress = await deployer.deploy(l1Artifacts.rollup, [
|
|
77
158
|
feeJuicePortalAddress.toString(),
|
|
159
|
+
sysstiaAddress.toString(),
|
|
78
160
|
args.vkTreeRoot.toString(),
|
|
79
161
|
args.protocolContractTreeRoot.toString(),
|
|
80
162
|
account.address.toString(),
|
|
@@ -82,20 +164,20 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
|
|
|
82
164
|
]);
|
|
83
165
|
logger.info(`Deployed Rollup at ${rollupAddress}`);
|
|
84
166
|
await deployer.waitForDeployments();
|
|
85
|
-
logger.info(`All contracts deployed`);
|
|
167
|
+
logger.info(`All core contracts deployed`);
|
|
86
168
|
const feeJuicePortal = getContract({
|
|
87
169
|
address: feeJuicePortalAddress.toString(),
|
|
88
|
-
abi:
|
|
170
|
+
abi: l1Artifacts.feeJuicePortal.contractAbi,
|
|
89
171
|
client: walletClient,
|
|
90
172
|
});
|
|
91
173
|
const feeJuice = getContract({
|
|
92
174
|
address: feeJuiceAddress.toString(),
|
|
93
|
-
abi:
|
|
175
|
+
abi: l1Artifacts.feeJuice.contractAbi,
|
|
94
176
|
client: walletClient,
|
|
95
177
|
});
|
|
96
178
|
const rollup = getContract({
|
|
97
179
|
address: getAddress(rollupAddress.toString()),
|
|
98
|
-
abi:
|
|
180
|
+
abi: l1Artifacts.rollup.contractAbi,
|
|
99
181
|
client: walletClient,
|
|
100
182
|
});
|
|
101
183
|
// Transaction hashes to await
|
|
@@ -110,7 +192,7 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
|
|
|
110
192
|
// otherwise we execute subsequent transactions too soon
|
|
111
193
|
await publicClient.waitForTransactionReceipt({ hash: mintTxHash });
|
|
112
194
|
logger.info(`Funding fee juice portal contract with fee juice in ${mintTxHash}`);
|
|
113
|
-
if ((await feeJuicePortal.read.
|
|
195
|
+
if (!(await feeJuicePortal.read.initialized([]))) {
|
|
114
196
|
const initPortalTxHash = await feeJuicePortal.write.initialize([]);
|
|
115
197
|
txHashes.push(initPortalTxHash);
|
|
116
198
|
logger.verbose(`Fee juice portal initializing in tx ${initPortalTxHash}`);
|
|
@@ -153,7 +235,7 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
|
|
|
153
235
|
// We need to call a function on the registry to set the various contract addresses.
|
|
154
236
|
const registryContract = getContract({
|
|
155
237
|
address: getAddress(registryAddress.toString()),
|
|
156
|
-
abi:
|
|
238
|
+
abi: l1Artifacts.registry.contractAbi,
|
|
157
239
|
client: walletClient,
|
|
158
240
|
});
|
|
159
241
|
if (!(await registryContract.read.isRollupRegistered([getAddress(rollupAddress.toString())]))) {
|
|
@@ -164,6 +246,14 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
|
|
|
164
246
|
else {
|
|
165
247
|
logger.verbose(`Registry ${registryAddress} has already registered rollup ${rollupAddress}`);
|
|
166
248
|
}
|
|
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())], {
|
|
252
|
+
account,
|
|
253
|
+
});
|
|
254
|
+
logger.verbose(`Transferring the ownership of the registry contract at ${registryAddress} to the Apella ${apellaAddress} in tx ${transferOwnershipTxHash}`);
|
|
255
|
+
txHashes.push(transferOwnershipTxHash);
|
|
256
|
+
}
|
|
167
257
|
// Wait for all actions to be mined
|
|
168
258
|
await Promise.all(txHashes.map(txHash => publicClient.waitForTransactionReceipt({ hash: txHash })));
|
|
169
259
|
logger.verbose(`All transactions for L1 deployment have been mined`);
|
|
@@ -174,6 +264,10 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
|
|
|
174
264
|
outboxAddress,
|
|
175
265
|
feeJuiceAddress,
|
|
176
266
|
feeJuicePortalAddress,
|
|
267
|
+
nomismatokopioAddress,
|
|
268
|
+
sysstiaAddress,
|
|
269
|
+
gerousiaAddress,
|
|
270
|
+
apellaAddress,
|
|
177
271
|
};
|
|
178
272
|
return {
|
|
179
273
|
walletClient,
|
|
@@ -190,7 +284,7 @@ class L1Deployer {
|
|
|
190
284
|
this.salt = maybeSalt ? padHex(numberToHex(maybeSalt), { size: 32 }) : undefined;
|
|
191
285
|
}
|
|
192
286
|
async deploy(params, args = []) {
|
|
193
|
-
const { txHash, address } = await deployL1Contract(this.walletClient, this.publicClient, params.contractAbi, params.contractBytecode, args, this.salt, this.logger);
|
|
287
|
+
const { txHash, address } = await deployL1Contract(this.walletClient, this.publicClient, params.contractAbi, params.contractBytecode, args, this.salt, params.libraries, this.logger);
|
|
194
288
|
if (txHash) {
|
|
195
289
|
this.txHashes.push(txHash);
|
|
196
290
|
}
|
|
@@ -222,7 +316,7 @@ export function compileContract(fileName, contractName, source, solc) {
|
|
|
222
316
|
enabled: true,
|
|
223
317
|
runs: 200,
|
|
224
318
|
},
|
|
225
|
-
evmVersion: '
|
|
319
|
+
evmVersion: 'cancun',
|
|
226
320
|
outputSelection: {
|
|
227
321
|
'*': {
|
|
228
322
|
'*': ['evm.bytecode.object', 'abi'],
|
|
@@ -246,9 +340,32 @@ export function compileContract(fileName, contractName, source, solc) {
|
|
|
246
340
|
* @param maybeSalt - Optional salt for CREATE2 deployment (does not wait for deployment tx to be mined if set, does not send tx if contract already exists).
|
|
247
341
|
* @returns The ETH address the contract was deployed to.
|
|
248
342
|
*/
|
|
249
|
-
export async function deployL1Contract(walletClient, publicClient, abi, bytecode, args = [], maybeSalt, logger) {
|
|
343
|
+
export async function deployL1Contract(walletClient, publicClient, abi, bytecode, args = [], maybeSalt, libraries, logger) {
|
|
250
344
|
let txHash = undefined;
|
|
251
345
|
let address = undefined;
|
|
346
|
+
if (libraries) {
|
|
347
|
+
// @note Assumes that we wont have nested external libraries.
|
|
348
|
+
const replacements = {};
|
|
349
|
+
for (const libraryName in libraries?.libraryCode) {
|
|
350
|
+
const lib = libraries.libraryCode[libraryName];
|
|
351
|
+
const { address } = await deployL1Contract(walletClient, publicClient, lib.contractAbi, lib.contractBytecode, [], maybeSalt, undefined, logger);
|
|
352
|
+
for (const linkRef in libraries.linkReferences) {
|
|
353
|
+
for (const c in libraries.linkReferences[linkRef]) {
|
|
354
|
+
const start = 2 + 2 * libraries.linkReferences[linkRef][c][0].start;
|
|
355
|
+
const length = 2 * libraries.linkReferences[linkRef][c][0].length;
|
|
356
|
+
const toReplace = bytecode.slice(start, start + length);
|
|
357
|
+
replacements[toReplace] = address;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
const escapeRegExp = (s) => {
|
|
362
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Escape special characters
|
|
363
|
+
};
|
|
364
|
+
for (const toReplace in replacements) {
|
|
365
|
+
const replacement = replacements[toReplace].toString().slice(2);
|
|
366
|
+
bytecode = bytecode.replace(new RegExp(escapeRegExp(toReplace), 'g'), replacement);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
252
369
|
if (maybeSalt) {
|
|
253
370
|
const salt = padHex(maybeSalt, { size: 32 });
|
|
254
371
|
const deployer = '0x4e59b44847b379578588920cA78FbF26c0B4956C';
|
|
@@ -275,4 +392,4 @@ export async function deployL1Contract(walletClient, publicClient, abi, bytecode
|
|
|
275
392
|
return { address: EthAddress.fromString(address), txHash };
|
|
276
393
|
}
|
|
277
394
|
// docs:end:deployL1Contract
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXBsb3lfbDFfY29udHJhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUszRCxPQUFPLEVBT0wsU0FBUyxFQUNULGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLElBQUksRUFDSixXQUFXLEVBQ1gsTUFBTSxFQUNOLFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBMEMsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWlHdkQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsTUFBYyxFQUNkLCtCQUF1RixFQUN2RixRQUFlLE9BQU87SUFFdEIsTUFBTSxTQUFTLEdBQ2IsT0FBTywrQkFBK0IsS0FBSyxRQUFRO1FBQ2pELENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ2hELENBQUMsQ0FBQyxtQkFBbUIsQ0FBQywrQkFBZ0QsQ0FBQztZQUN2RSxDQUFDLENBQUMsaUJBQWlCLENBQUMsK0JBQStCLENBQUM7UUFDdEQsQ0FBQyxDQUFDLCtCQUErQixDQUFDO0lBRXRDLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ3RDLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLEtBQUs7UUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN4QixDQUFDLENBQUM7SUFDSCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN0QyxLQUFLO1FB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
|
|
395
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXBsb3lfbDFfY29udHJhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEVBQ0wsU0FBUyxFQUNULGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxjQUFjLEVBQ2QsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsZUFBZSxFQUNmLFlBQVksRUFDWixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBRzdCLE9BQU8sRUFPTCxTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLEdBQ1AsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQTBDLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFtR3ZELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBcUM7SUFDM0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLFdBQVc7UUFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0tBQ25DO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsV0FBVyxFQUFFLFFBQVE7UUFDckIsZ0JBQWdCLEVBQUUsYUFB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
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
2
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
-
import type { DebugLogger } from '@aztec/foundation/log';
|
|
4
3
|
/**
|
|
5
4
|
* The names of the current L1 contract addresses.
|
|
6
5
|
* NOTE: When changing this list, make sure to update CLI & CI scripts accordingly.
|
|
7
6
|
* For reference: https://github.com/AztecProtocol/aztec-packages/pull/5553
|
|
8
7
|
*/
|
|
9
|
-
export declare const l1ContractsNames: readonly ["rollupAddress", "registryAddress", "inboxAddress", "outboxAddress", "feeJuiceAddress", "feeJuicePortalAddress"];
|
|
8
|
+
export declare const l1ContractsNames: readonly ["rollupAddress", "registryAddress", "inboxAddress", "outboxAddress", "feeJuiceAddress", "feeJuicePortalAddress", "nomismatokopioAddress", "sysstiaAddress", "gerousiaAddress", "apellaAddress"];
|
|
10
9
|
/**
|
|
11
10
|
* Provides the directory of current L1 contract addresses
|
|
12
11
|
*/
|
|
@@ -14,6 +13,4 @@ export type L1ContractAddresses = {
|
|
|
14
13
|
[K in (typeof l1ContractsNames)[number]]: EthAddress;
|
|
15
14
|
};
|
|
16
15
|
export declare const l1ContractAddressesMapping: ConfigMappingsType<L1ContractAddresses>;
|
|
17
|
-
export declare function getL1ContractAddressesFromEnv(): L1ContractAddresses;
|
|
18
|
-
export declare function getL1ContractAddressesFromUrl(url: string, log: DebugLogger): Promise<L1ContractAddresses>;
|
|
19
16
|
//# 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,
|
|
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,4 +1,3 @@
|
|
|
1
|
-
import { getConfigFromMappings } from '@aztec/foundation/config';
|
|
2
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
2
|
/**
|
|
4
3
|
* The names of the current L1 contract addresses.
|
|
@@ -12,6 +11,10 @@ export const l1ContractsNames = [
|
|
|
12
11
|
'outboxAddress',
|
|
13
12
|
'feeJuiceAddress',
|
|
14
13
|
'feeJuicePortalAddress',
|
|
14
|
+
'nomismatokopioAddress',
|
|
15
|
+
'sysstiaAddress',
|
|
16
|
+
'gerousiaAddress',
|
|
17
|
+
'apellaAddress',
|
|
15
18
|
];
|
|
16
19
|
const parseEnv = (val) => EthAddress.fromString(val);
|
|
17
20
|
export const l1ContractAddressesMapping = {
|
|
@@ -45,33 +48,25 @@ export const l1ContractAddressesMapping = {
|
|
|
45
48
|
description: 'The deployed L1 Fee Juice portal contract address.',
|
|
46
49
|
parseEnv,
|
|
47
50
|
},
|
|
51
|
+
nomismatokopioAddress: {
|
|
52
|
+
env: 'NOMISMATOKOPIO_CONTRACT_ADDRESS',
|
|
53
|
+
description: 'The deployed L1 nomismatokopio contract address',
|
|
54
|
+
parseEnv,
|
|
55
|
+
},
|
|
56
|
+
sysstiaAddress: {
|
|
57
|
+
env: 'SYSSTIA_CONTRACT_ADDRESS',
|
|
58
|
+
description: 'The deployed L1 sysstia contract address',
|
|
59
|
+
parseEnv,
|
|
60
|
+
},
|
|
61
|
+
gerousiaAddress: {
|
|
62
|
+
env: 'GEROUSIA_CONTRACT_ADDRESS',
|
|
63
|
+
description: 'The deployed L1 gerousia contract address',
|
|
64
|
+
parseEnv,
|
|
65
|
+
},
|
|
66
|
+
apellaAddress: {
|
|
67
|
+
env: 'APELLA_CONTRACT_ADDRESS',
|
|
68
|
+
description: 'The deployed L1 apella contract address',
|
|
69
|
+
parseEnv,
|
|
70
|
+
},
|
|
48
71
|
};
|
|
49
|
-
|
|
50
|
-
return getConfigFromMappings(l1ContractAddressesMapping);
|
|
51
|
-
}
|
|
52
|
-
function convertToL1ContractAddresses(obj) {
|
|
53
|
-
if (typeof obj !== 'object' || obj === null) {
|
|
54
|
-
throw new Error('Object is not valid');
|
|
55
|
-
}
|
|
56
|
-
const result = {};
|
|
57
|
-
for (const key of l1ContractsNames) {
|
|
58
|
-
const value = obj[key];
|
|
59
|
-
result[key] = EthAddress.fromString(value);
|
|
60
|
-
}
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
export async function getL1ContractAddressesFromUrl(url, log) {
|
|
64
|
-
try {
|
|
65
|
-
const response = await fetch(url);
|
|
66
|
-
if (!response.ok) {
|
|
67
|
-
throw new Error(`HTTP error when fetching L1 contracts from ${url}. Status: ${response.status}`);
|
|
68
|
-
}
|
|
69
|
-
const data = await response.json();
|
|
70
|
-
return convertToL1ContractAddresses(data);
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
log.error(`Error fetching JSON from ${url}:`, error);
|
|
74
|
-
throw error;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfY29udHJhY3RfYWRkcmVzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX2NvbnRyYWN0X2FkZHJlc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJCLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLHVCQUF1QjtDQUNmLENBQUM7QUFTWCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBNEM7SUFDakYsYUFBYSxFQUFFO1FBQ2IsR0FBRyxFQUFFLHlCQUF5QjtRQUM5QixXQUFXLEVBQUUsMENBQTBDO1FBQ3ZELFFBQVE7S0FDVDtJQUNELGVBQWUsRUFBRTtRQUNmLEdBQUcsRUFBRSwyQkFBMkI7UUFDaEMsV0FBVyxFQUFFLDRDQUE0QztRQUN6RCxRQUFRO0tBQ1Q7SUFDRCxZQUFZLEVBQUU7UUFDWixHQUFHLEVBQUUsd0JBQXdCO1FBQzdCLFdBQVcsRUFBRSx5Q0FBeUM7UUFDdEQsUUFBUTtLQUNUO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsR0FBRyxFQUFFLHlCQUF5QjtRQUM5QixXQUFXLEVBQUUsMENBQTBDO1FBQ3ZELFFBQVE7S0FDVDtJQUNELGVBQWUsRUFBRTtRQUNmLEdBQUcsRUFBRSw0QkFBNEI7UUFDakMsV0FBVyxFQUFFLDZDQUE2QztRQUMxRCxRQUFRO0tBQ1Q7SUFDRCxxQkFBcUIsRUFBRTtRQUNyQixHQUFHLEVBQUUsbUNBQW1DO1FBQ3hDLFdBQVcsRUFBRSxvREFBb0Q7UUFDakUsUUFBUTtLQUNUO0NBQ0YsQ0FBQztBQUVGLE1BQU0sVUFBVSw2QkFBNkI7SUFDM0MsT0FBTyxxQkFBcUIsQ0FBc0IsMEJBQTBCLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxHQUFRO0lBQzVDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFpQyxFQUFFLENBQUM7SUFFaEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsT0FBTyxNQUE2QixDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLDZCQUE2QixDQUFDLEdBQVcsRUFBRSxHQUFnQjtJQUMvRSxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLEdBQUcsYUFBYSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNuRyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsT0FBTyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JELE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMifQ==
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfY29udHJhY3RfYWRkcmVzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX2NvbnRyYWN0X2FkZHJlc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0Q7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsY0FBYztJQUNkLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGVBQWU7Q0FDUCxDQUFDO0FBU1gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQTRDO0lBQ2pGLGFBQWEsRUFBRTtRQUNiLEdBQUcsRUFBRSx5QkFBeUI7UUFDOUIsV0FBVyxFQUFFLDBDQUEwQztRQUN2RCxRQUFRO0tBQ1Q7SUFDRCxlQUFlLEVBQUU7UUFDZixHQUFHLEVBQUUsMkJBQTJCO1FBQ2hDLFdBQVcsRUFBRSw0Q0FBNEM7UUFDekQsUUFBUTtLQUNUO0lBQ0QsWUFBWSxFQUFFO1FBQ1osR0FBRyxFQUFFLHdCQUF3QjtRQUM3QixXQUFXLEVBQUUseUNBQXlDO1FBQ3RELFFBQVE7S0FDVDtJQUNELGFBQWEsRUFBRTtRQUNiLEdBQUcsRUFBRSx5QkFBeUI7UUFDOUIsV0FBVyxFQUFFLDBDQUEwQztRQUN2RCxRQUFRO0tBQ1Q7SUFDRCxlQUFlLEVBQUU7UUFDZixHQUFHLEVBQUUsNEJBQTRCO1FBQ2pDLFdBQVcsRUFBRSw2Q0FBNkM7UUFDMUQsUUFBUTtLQUNUO0lBQ0QscUJBQXFCLEVBQUU7UUFDckIsR0FBRyxFQUFFLG1DQUFtQztRQUN4QyxXQUFXLEVBQUUsb0RBQW9EO1FBQ2pFLFFBQVE7S0FDVDtJQUNELHFCQUFxQixFQUFFO1FBQ3JCLEdBQUcsRUFBRSxpQ0FBaUM7UUFDdEMsV0FBVyxFQUFFLGlEQUFpRDtRQUM5RCxRQUFRO0tBQ1Q7SUFDRCxjQUFjLEVBQUU7UUFDZCxHQUFHLEVBQUUsMEJBQTBCO1FBQy9CLFdBQVcsRUFBRSwwQ0FBMEM7UUFDdkQsUUFBUTtLQUNUO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsR0FBRyxFQUFFLDJCQUEyQjtRQUNoQyxXQUFXLEVBQUUsMkNBQTJDO1FBQ3hELFFBQVE7S0FDVDtJQUNELGFBQWEsRUFBRTtRQUNiLEdBQUcsRUFBRSx5QkFBeUI7UUFDOUIsV0FBVyxFQUFFLHlDQUF5QztRQUN0RCxRQUFRO0tBQ1Q7Q0FDRixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/ethereum",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.61.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
"../package.common.json"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@aztec/foundation": "0.
|
|
27
|
+
"@aztec/foundation": "0.61.0",
|
|
28
|
+
"@aztec/l1-artifacts": "0.61.0",
|
|
28
29
|
"dotenv": "^16.0.3",
|
|
29
30
|
"tslib": "^2.4.0",
|
|
30
31
|
"viem": "^2.7.15"
|
|
@@ -2,6 +2,31 @@ import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
|
2
2
|
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
|
+
import {
|
|
6
|
+
ApellaAbi,
|
|
7
|
+
ApellaBytecode,
|
|
8
|
+
FeeJuicePortalAbi,
|
|
9
|
+
FeeJuicePortalBytecode,
|
|
10
|
+
GerousiaAbi,
|
|
11
|
+
GerousiaBytecode,
|
|
12
|
+
InboxAbi,
|
|
13
|
+
InboxBytecode,
|
|
14
|
+
NomismatokopioAbi,
|
|
15
|
+
NomismatokopioBytecode,
|
|
16
|
+
OutboxAbi,
|
|
17
|
+
OutboxBytecode,
|
|
18
|
+
RegistryAbi,
|
|
19
|
+
RegistryBytecode,
|
|
20
|
+
RollupAbi,
|
|
21
|
+
RollupBytecode,
|
|
22
|
+
RollupLinkReferences,
|
|
23
|
+
SysstiaAbi,
|
|
24
|
+
SysstiaBytecode,
|
|
25
|
+
TestERC20Abi,
|
|
26
|
+
TestERC20Bytecode,
|
|
27
|
+
TxsDecoderAbi,
|
|
28
|
+
TxsDecoderBytecode,
|
|
29
|
+
} from '@aztec/l1-artifacts';
|
|
5
30
|
|
|
6
31
|
import type { Abi, Narrow } from 'abitype';
|
|
7
32
|
import {
|
|
@@ -21,7 +46,6 @@ import {
|
|
|
21
46
|
http,
|
|
22
47
|
numberToHex,
|
|
23
48
|
padHex,
|
|
24
|
-
zeroAddress,
|
|
25
49
|
} from 'viem';
|
|
26
50
|
import { type HDAccount, type PrivateKeyAccount, mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
|
|
27
51
|
import { foundry } from 'viem/chains';
|
|
@@ -47,6 +71,20 @@ export type DeployL1Contracts = {
|
|
|
47
71
|
l1ContractAddresses: L1ContractAddresses;
|
|
48
72
|
};
|
|
49
73
|
|
|
74
|
+
export interface LinkReferences {
|
|
75
|
+
[fileName: string]: {
|
|
76
|
+
[contractName: string]: ReadonlyArray<{
|
|
77
|
+
start: number;
|
|
78
|
+
length: number;
|
|
79
|
+
}>;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface Libraries {
|
|
84
|
+
linkReferences: LinkReferences;
|
|
85
|
+
libraryCode: Record<string, ContractArtifacts>;
|
|
86
|
+
}
|
|
87
|
+
|
|
50
88
|
/**
|
|
51
89
|
* Contract artifacts
|
|
52
90
|
*/
|
|
@@ -59,6 +97,10 @@ export interface ContractArtifacts {
|
|
|
59
97
|
* The contract bytecode
|
|
60
98
|
*/
|
|
61
99
|
contractBytecode: Hex;
|
|
100
|
+
/**
|
|
101
|
+
* The contract libraries
|
|
102
|
+
*/
|
|
103
|
+
libraries?: Libraries;
|
|
62
104
|
}
|
|
63
105
|
|
|
64
106
|
/**
|
|
@@ -89,8 +131,76 @@ export interface L1ContractArtifactsForDeployment {
|
|
|
89
131
|
* Fee juice portal contract artifacts. Optional for now as gas is not strictly enforced
|
|
90
132
|
*/
|
|
91
133
|
feeJuicePortal: ContractArtifacts;
|
|
134
|
+
/**
|
|
135
|
+
* Nomismatokopio contract artifacts.
|
|
136
|
+
*/
|
|
137
|
+
nomismatokopio: ContractArtifacts;
|
|
138
|
+
/**
|
|
139
|
+
* Sysstia contract artifacts.
|
|
140
|
+
*/
|
|
141
|
+
sysstia: ContractArtifacts;
|
|
142
|
+
/**
|
|
143
|
+
* Gerousia contract artifacts.
|
|
144
|
+
*/
|
|
145
|
+
gerousia: ContractArtifacts;
|
|
146
|
+
/**
|
|
147
|
+
* Apella contract artifacts.
|
|
148
|
+
*/
|
|
149
|
+
apella: ContractArtifacts;
|
|
92
150
|
}
|
|
93
151
|
|
|
152
|
+
export const l1Artifacts: L1ContractArtifactsForDeployment = {
|
|
153
|
+
registry: {
|
|
154
|
+
contractAbi: RegistryAbi,
|
|
155
|
+
contractBytecode: RegistryBytecode,
|
|
156
|
+
},
|
|
157
|
+
inbox: {
|
|
158
|
+
contractAbi: InboxAbi,
|
|
159
|
+
contractBytecode: InboxBytecode,
|
|
160
|
+
},
|
|
161
|
+
outbox: {
|
|
162
|
+
contractAbi: OutboxAbi,
|
|
163
|
+
contractBytecode: OutboxBytecode,
|
|
164
|
+
},
|
|
165
|
+
rollup: {
|
|
166
|
+
contractAbi: RollupAbi,
|
|
167
|
+
contractBytecode: RollupBytecode,
|
|
168
|
+
libraries: {
|
|
169
|
+
linkReferences: RollupLinkReferences,
|
|
170
|
+
libraryCode: {
|
|
171
|
+
TxsDecoder: {
|
|
172
|
+
contractAbi: TxsDecoderAbi,
|
|
173
|
+
contractBytecode: TxsDecoderBytecode,
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
feeJuice: {
|
|
179
|
+
contractAbi: TestERC20Abi,
|
|
180
|
+
contractBytecode: TestERC20Bytecode,
|
|
181
|
+
},
|
|
182
|
+
feeJuicePortal: {
|
|
183
|
+
contractAbi: FeeJuicePortalAbi,
|
|
184
|
+
contractBytecode: FeeJuicePortalBytecode,
|
|
185
|
+
},
|
|
186
|
+
sysstia: {
|
|
187
|
+
contractAbi: SysstiaAbi,
|
|
188
|
+
contractBytecode: SysstiaBytecode,
|
|
189
|
+
},
|
|
190
|
+
nomismatokopio: {
|
|
191
|
+
contractAbi: NomismatokopioAbi,
|
|
192
|
+
contractBytecode: NomismatokopioBytecode,
|
|
193
|
+
},
|
|
194
|
+
gerousia: {
|
|
195
|
+
contractAbi: GerousiaAbi,
|
|
196
|
+
contractBytecode: GerousiaBytecode,
|
|
197
|
+
},
|
|
198
|
+
apella: {
|
|
199
|
+
contractAbi: ApellaAbi,
|
|
200
|
+
contractBytecode: ApellaBytecode,
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
|
|
94
204
|
export interface DeployL1ContractsArgs {
|
|
95
205
|
/**
|
|
96
206
|
* The address of the L2 Fee Juice contract.
|
|
@@ -161,7 +271,6 @@ export function createL1Clients(
|
|
|
161
271
|
* @param account - Private Key or HD Account that will deploy the contracts.
|
|
162
272
|
* @param chain - The chain instance to deploy to.
|
|
163
273
|
* @param logger - A logger object.
|
|
164
|
-
* @param contractsToDeploy - The set of L1 artifacts to be deployed
|
|
165
274
|
* @param args - Arguments for initialization of L1 contracts
|
|
166
275
|
* @returns A list of ETH addresses of the deployed contracts.
|
|
167
276
|
*/
|
|
@@ -170,7 +279,6 @@ export const deployL1Contracts = async (
|
|
|
170
279
|
account: HDAccount | PrivateKeyAccount,
|
|
171
280
|
chain: Chain,
|
|
172
281
|
logger: DebugLogger,
|
|
173
|
-
contractsToDeploy: L1ContractArtifactsForDeployment,
|
|
174
282
|
args: DeployL1ContractsArgs,
|
|
175
283
|
): Promise<DeployL1Contracts> => {
|
|
176
284
|
// We are assuming that you are running this on a local anvil node which have 1s block times
|
|
@@ -186,7 +294,7 @@ export const deployL1Contracts = async (
|
|
|
186
294
|
return await (await fetch(rpcUrl, content)).json();
|
|
187
295
|
};
|
|
188
296
|
if (isAnvilTestChain(chain.id)) {
|
|
189
|
-
const interval = 12;
|
|
297
|
+
const interval = 12; // @todo #8084
|
|
190
298
|
const res = await rpcCall('anvil_setBlockTimestampInterval', [interval]);
|
|
191
299
|
if (res.error) {
|
|
192
300
|
throw new Error(`Error setting block interval: ${res.error.message}`);
|
|
@@ -198,24 +306,61 @@ export const deployL1Contracts = async (
|
|
|
198
306
|
|
|
199
307
|
const walletClient = createWalletClient({ account, chain, transport: http(rpcUrl) });
|
|
200
308
|
const publicClient = createPublicClient({ chain, transport: http(rpcUrl) });
|
|
201
|
-
|
|
309
|
+
// Governance stuff
|
|
310
|
+
const govDeployer = new L1Deployer(walletClient, publicClient, args.salt, logger);
|
|
202
311
|
|
|
203
|
-
const registryAddress = await
|
|
312
|
+
const registryAddress = await govDeployer.deploy(l1Artifacts.registry, [account.address.toString()]);
|
|
204
313
|
logger.info(`Deployed Registry at ${registryAddress}`);
|
|
205
314
|
|
|
206
|
-
const feeJuiceAddress = await
|
|
315
|
+
const feeJuiceAddress = await govDeployer.deploy(l1Artifacts.feeJuice);
|
|
207
316
|
logger.info(`Deployed Fee Juice at ${feeJuiceAddress}`);
|
|
208
317
|
|
|
209
|
-
|
|
210
|
-
|
|
318
|
+
// @todo #8084
|
|
319
|
+
// @note These numbers are just chosen to make testing simple.
|
|
320
|
+
const quorumSize = 6n;
|
|
321
|
+
const roundSize = 10n;
|
|
322
|
+
const gerousiaAddress = await govDeployer.deploy(l1Artifacts.gerousia, [
|
|
323
|
+
registryAddress.toString(),
|
|
324
|
+
quorumSize,
|
|
325
|
+
roundSize,
|
|
326
|
+
]);
|
|
327
|
+
logger.info(`Deployed Gerousia at ${gerousiaAddress}`);
|
|
328
|
+
|
|
329
|
+
const apellaAddress = await govDeployer.deploy(l1Artifacts.apella, [
|
|
330
|
+
feeJuiceAddress.toString(),
|
|
331
|
+
gerousiaAddress.toString(),
|
|
332
|
+
]);
|
|
333
|
+
logger.info(`Deployed Apella at ${apellaAddress}`);
|
|
334
|
+
|
|
335
|
+
const nomismatokopioAddress = await govDeployer.deploy(l1Artifacts.nomismatokopio, [
|
|
336
|
+
feeJuiceAddress.toString(),
|
|
337
|
+
1n * 10n ** 18n, // @todo #8084
|
|
338
|
+
apellaAddress.toString(),
|
|
339
|
+
]);
|
|
340
|
+
logger.info(`Deployed Nomismatokopio at ${nomismatokopioAddress}`);
|
|
341
|
+
|
|
342
|
+
const sysstiaAddress = await govDeployer.deploy(l1Artifacts.sysstia, [
|
|
343
|
+
feeJuiceAddress.toString(),
|
|
344
|
+
registryAddress.toString(),
|
|
345
|
+
apellaAddress.toString(),
|
|
346
|
+
]);
|
|
347
|
+
logger.info(`Deployed Sysstia at ${sysstiaAddress}`);
|
|
348
|
+
|
|
349
|
+
await govDeployer.waitForDeployments();
|
|
350
|
+
logger.info(`All governance contracts deployed`);
|
|
351
|
+
|
|
352
|
+
const deployer = new L1Deployer(walletClient, publicClient, args.salt, logger);
|
|
353
|
+
|
|
354
|
+
const feeJuicePortalAddress = await deployer.deploy(l1Artifacts.feeJuicePortal, [
|
|
211
355
|
registryAddress.toString(),
|
|
212
356
|
feeJuiceAddress.toString(),
|
|
213
357
|
args.l2FeeJuiceAddress.toString(),
|
|
214
358
|
]);
|
|
215
359
|
logger.info(`Deployed Fee Juice Portal at ${feeJuicePortalAddress}`);
|
|
216
360
|
|
|
217
|
-
const rollupAddress = await deployer.deploy(
|
|
361
|
+
const rollupAddress = await deployer.deploy(l1Artifacts.rollup, [
|
|
218
362
|
feeJuicePortalAddress.toString(),
|
|
363
|
+
sysstiaAddress.toString(),
|
|
219
364
|
args.vkTreeRoot.toString(),
|
|
220
365
|
args.protocolContractTreeRoot.toString(),
|
|
221
366
|
account.address.toString(),
|
|
@@ -224,23 +369,23 @@ export const deployL1Contracts = async (
|
|
|
224
369
|
logger.info(`Deployed Rollup at ${rollupAddress}`);
|
|
225
370
|
|
|
226
371
|
await deployer.waitForDeployments();
|
|
227
|
-
logger.info(`All contracts deployed`);
|
|
372
|
+
logger.info(`All core contracts deployed`);
|
|
228
373
|
|
|
229
374
|
const feeJuicePortal = getContract({
|
|
230
375
|
address: feeJuicePortalAddress.toString(),
|
|
231
|
-
abi:
|
|
376
|
+
abi: l1Artifacts.feeJuicePortal.contractAbi,
|
|
232
377
|
client: walletClient,
|
|
233
378
|
});
|
|
234
379
|
|
|
235
380
|
const feeJuice = getContract({
|
|
236
381
|
address: feeJuiceAddress.toString(),
|
|
237
|
-
abi:
|
|
382
|
+
abi: l1Artifacts.feeJuice.contractAbi,
|
|
238
383
|
client: walletClient,
|
|
239
384
|
});
|
|
240
385
|
|
|
241
386
|
const rollup = getContract({
|
|
242
387
|
address: getAddress(rollupAddress.toString()),
|
|
243
|
-
abi:
|
|
388
|
+
abi: l1Artifacts.rollup.contractAbi,
|
|
244
389
|
client: walletClient,
|
|
245
390
|
});
|
|
246
391
|
|
|
@@ -259,7 +404,7 @@ export const deployL1Contracts = async (
|
|
|
259
404
|
await publicClient.waitForTransactionReceipt({ hash: mintTxHash });
|
|
260
405
|
logger.info(`Funding fee juice portal contract with fee juice in ${mintTxHash}`);
|
|
261
406
|
|
|
262
|
-
if ((await feeJuicePortal.read.
|
|
407
|
+
if (!(await feeJuicePortal.read.initialized([]))) {
|
|
263
408
|
const initPortalTxHash = await feeJuicePortal.write.initialize([]);
|
|
264
409
|
txHashes.push(initPortalTxHash);
|
|
265
410
|
logger.verbose(`Fee juice portal initializing in tx ${initPortalTxHash}`);
|
|
@@ -310,7 +455,7 @@ export const deployL1Contracts = async (
|
|
|
310
455
|
// We need to call a function on the registry to set the various contract addresses.
|
|
311
456
|
const registryContract = getContract({
|
|
312
457
|
address: getAddress(registryAddress.toString()),
|
|
313
|
-
abi:
|
|
458
|
+
abi: l1Artifacts.registry.contractAbi,
|
|
314
459
|
client: walletClient,
|
|
315
460
|
});
|
|
316
461
|
if (!(await registryContract.read.isRollupRegistered([getAddress(rollupAddress.toString())]))) {
|
|
@@ -323,6 +468,20 @@ export const deployL1Contracts = async (
|
|
|
323
468
|
logger.verbose(`Registry ${registryAddress} has already registered rollup ${rollupAddress}`);
|
|
324
469
|
}
|
|
325
470
|
|
|
471
|
+
// If the owner is not the Apella contract, transfer ownership to the Apella contract
|
|
472
|
+
if ((await registryContract.read.owner([])) !== getAddress(apellaAddress.toString())) {
|
|
473
|
+
const transferOwnershipTxHash = await registryContract.write.transferOwnership(
|
|
474
|
+
[getAddress(apellaAddress.toString())],
|
|
475
|
+
{
|
|
476
|
+
account,
|
|
477
|
+
},
|
|
478
|
+
);
|
|
479
|
+
logger.verbose(
|
|
480
|
+
`Transferring the ownership of the registry contract at ${registryAddress} to the Apella ${apellaAddress} in tx ${transferOwnershipTxHash}`,
|
|
481
|
+
);
|
|
482
|
+
txHashes.push(transferOwnershipTxHash);
|
|
483
|
+
}
|
|
484
|
+
|
|
326
485
|
// Wait for all actions to be mined
|
|
327
486
|
await Promise.all(txHashes.map(txHash => publicClient.waitForTransactionReceipt({ hash: txHash })));
|
|
328
487
|
logger.verbose(`All transactions for L1 deployment have been mined`);
|
|
@@ -334,6 +493,10 @@ export const deployL1Contracts = async (
|
|
|
334
493
|
outboxAddress,
|
|
335
494
|
feeJuiceAddress,
|
|
336
495
|
feeJuicePortalAddress,
|
|
496
|
+
nomismatokopioAddress,
|
|
497
|
+
sysstiaAddress,
|
|
498
|
+
gerousiaAddress,
|
|
499
|
+
apellaAddress,
|
|
337
500
|
};
|
|
338
501
|
|
|
339
502
|
return {
|
|
@@ -355,10 +518,7 @@ class L1Deployer {
|
|
|
355
518
|
this.salt = maybeSalt ? padHex(numberToHex(maybeSalt), { size: 32 }) : undefined;
|
|
356
519
|
}
|
|
357
520
|
|
|
358
|
-
async deploy(
|
|
359
|
-
params: { contractAbi: Narrow<Abi | readonly unknown[]>; contractBytecode: Hex },
|
|
360
|
-
args: readonly unknown[] = [],
|
|
361
|
-
): Promise<EthAddress> {
|
|
521
|
+
async deploy(params: ContractArtifacts, args: readonly unknown[] = []): Promise<EthAddress> {
|
|
362
522
|
const { txHash, address } = await deployL1Contract(
|
|
363
523
|
this.walletClient,
|
|
364
524
|
this.publicClient,
|
|
@@ -366,6 +526,7 @@ class L1Deployer {
|
|
|
366
526
|
params.contractBytecode,
|
|
367
527
|
args,
|
|
368
528
|
this.salt,
|
|
529
|
+
params.libraries,
|
|
369
530
|
this.logger,
|
|
370
531
|
);
|
|
371
532
|
if (txHash) {
|
|
@@ -406,7 +567,7 @@ export function compileContract(
|
|
|
406
567
|
enabled: true,
|
|
407
568
|
runs: 200,
|
|
408
569
|
},
|
|
409
|
-
evmVersion: '
|
|
570
|
+
evmVersion: 'cancun',
|
|
410
571
|
outputSelection: {
|
|
411
572
|
'*': {
|
|
412
573
|
'*': ['evm.bytecode.object', 'abi'],
|
|
@@ -441,11 +602,52 @@ export async function deployL1Contract(
|
|
|
441
602
|
bytecode: Hex,
|
|
442
603
|
args: readonly unknown[] = [],
|
|
443
604
|
maybeSalt?: Hex,
|
|
605
|
+
libraries?: Libraries,
|
|
444
606
|
logger?: DebugLogger,
|
|
445
607
|
): Promise<{ address: EthAddress; txHash: Hex | undefined }> {
|
|
446
608
|
let txHash: Hex | undefined = undefined;
|
|
447
609
|
let address: Hex | null | undefined = undefined;
|
|
448
610
|
|
|
611
|
+
if (libraries) {
|
|
612
|
+
// @note Assumes that we wont have nested external libraries.
|
|
613
|
+
|
|
614
|
+
const replacements: Record<string, EthAddress> = {};
|
|
615
|
+
|
|
616
|
+
for (const libraryName in libraries?.libraryCode) {
|
|
617
|
+
const lib = libraries.libraryCode[libraryName];
|
|
618
|
+
|
|
619
|
+
const { address } = await deployL1Contract(
|
|
620
|
+
walletClient,
|
|
621
|
+
publicClient,
|
|
622
|
+
lib.contractAbi,
|
|
623
|
+
lib.contractBytecode,
|
|
624
|
+
[],
|
|
625
|
+
maybeSalt,
|
|
626
|
+
undefined,
|
|
627
|
+
logger,
|
|
628
|
+
);
|
|
629
|
+
|
|
630
|
+
for (const linkRef in libraries.linkReferences) {
|
|
631
|
+
for (const c in libraries.linkReferences[linkRef]) {
|
|
632
|
+
const start = 2 + 2 * libraries.linkReferences[linkRef][c][0].start;
|
|
633
|
+
const length = 2 * libraries.linkReferences[linkRef][c][0].length;
|
|
634
|
+
|
|
635
|
+
const toReplace = bytecode.slice(start, start + length);
|
|
636
|
+
replacements[toReplace] = address;
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
const escapeRegExp = (s: string) => {
|
|
642
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Escape special characters
|
|
643
|
+
};
|
|
644
|
+
|
|
645
|
+
for (const toReplace in replacements) {
|
|
646
|
+
const replacement = replacements[toReplace].toString().slice(2);
|
|
647
|
+
bytecode = bytecode.replace(new RegExp(escapeRegExp(toReplace), 'g'), replacement) as Hex;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
449
651
|
if (maybeSalt) {
|
|
450
652
|
const salt = padHex(maybeSalt, { size: 32 });
|
|
451
653
|
const deployer: Hex = '0x4e59b44847b379578588920cA78FbF26c0B4956C';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { type ConfigMappingsType
|
|
1
|
+
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
2
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
-
import type { DebugLogger } from '@aztec/foundation/log';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* The names of the current L1 contract addresses.
|
|
@@ -14,6 +13,10 @@ export const l1ContractsNames = [
|
|
|
14
13
|
'outboxAddress',
|
|
15
14
|
'feeJuiceAddress',
|
|
16
15
|
'feeJuicePortalAddress',
|
|
16
|
+
'nomismatokopioAddress',
|
|
17
|
+
'sysstiaAddress',
|
|
18
|
+
'gerousiaAddress',
|
|
19
|
+
'apellaAddress',
|
|
17
20
|
] as const;
|
|
18
21
|
|
|
19
22
|
/**
|
|
@@ -56,37 +59,24 @@ export const l1ContractAddressesMapping: ConfigMappingsType<L1ContractAddresses>
|
|
|
56
59
|
description: 'The deployed L1 Fee Juice portal contract address.',
|
|
57
60
|
parseEnv,
|
|
58
61
|
},
|
|
62
|
+
nomismatokopioAddress: {
|
|
63
|
+
env: 'NOMISMATOKOPIO_CONTRACT_ADDRESS',
|
|
64
|
+
description: 'The deployed L1 nomismatokopio contract address',
|
|
65
|
+
parseEnv,
|
|
66
|
+
},
|
|
67
|
+
sysstiaAddress: {
|
|
68
|
+
env: 'SYSSTIA_CONTRACT_ADDRESS',
|
|
69
|
+
description: 'The deployed L1 sysstia contract address',
|
|
70
|
+
parseEnv,
|
|
71
|
+
},
|
|
72
|
+
gerousiaAddress: {
|
|
73
|
+
env: 'GEROUSIA_CONTRACT_ADDRESS',
|
|
74
|
+
description: 'The deployed L1 gerousia contract address',
|
|
75
|
+
parseEnv,
|
|
76
|
+
},
|
|
77
|
+
apellaAddress: {
|
|
78
|
+
env: 'APELLA_CONTRACT_ADDRESS',
|
|
79
|
+
description: 'The deployed L1 apella contract address',
|
|
80
|
+
parseEnv,
|
|
81
|
+
},
|
|
59
82
|
};
|
|
60
|
-
|
|
61
|
-
export function getL1ContractAddressesFromEnv() {
|
|
62
|
-
return getConfigFromMappings<L1ContractAddresses>(l1ContractAddressesMapping);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function convertToL1ContractAddresses(obj: any): L1ContractAddresses {
|
|
66
|
-
if (typeof obj !== 'object' || obj === null) {
|
|
67
|
-
throw new Error('Object is not valid');
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const result: Partial<L1ContractAddresses> = {};
|
|
71
|
-
|
|
72
|
-
for (const key of l1ContractsNames) {
|
|
73
|
-
const value = obj[key];
|
|
74
|
-
result[key] = EthAddress.fromString(value);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return result as L1ContractAddresses;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export async function getL1ContractAddressesFromUrl(url: string, log: DebugLogger): Promise<L1ContractAddresses> {
|
|
81
|
-
try {
|
|
82
|
-
const response = await fetch(url);
|
|
83
|
-
if (!response.ok) {
|
|
84
|
-
throw new Error(`HTTP error when fetching L1 contracts from ${url}. Status: ${response.status}`);
|
|
85
|
-
}
|
|
86
|
-
const data = await response.json();
|
|
87
|
-
return convertToL1ContractAddresses(data);
|
|
88
|
-
} catch (error) {
|
|
89
|
-
log.error(`Error fetching JSON from ${url}:`, error);
|
|
90
|
-
throw error;
|
|
91
|
-
}
|
|
92
|
-
}
|