@aztec/ethereum 0.47.0 → 0.48.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 +5 -4
- package/dest/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_l1_contracts.js +50 -22
- package/dest/index.d.ts +1 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -1
- package/dest/l1_contract_addresses.d.ts +6 -10
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +68 -17
- package/dest/l1_reader.d.ts +21 -0
- package/dest/l1_reader.d.ts.map +1 -0
- package/dest/l1_reader.js +19 -0
- package/package.json +2 -2
- package/src/deploy_l1_contracts.ts +59 -29
- package/src/index.ts +1 -0
- package/src/l1_contract_addresses.ts +74 -25
- package/src/l1_reader.ts +40 -0
|
@@ -61,13 +61,13 @@ export interface L1ContractArtifactsForDeployment {
|
|
|
61
61
|
*/
|
|
62
62
|
rollup: ContractArtifacts;
|
|
63
63
|
/**
|
|
64
|
-
* The token to pay for gas. This will be bridged to L2 via the
|
|
64
|
+
* The token to pay for gas. This will be bridged to L2 via the feeJuicePortal below
|
|
65
65
|
*/
|
|
66
|
-
|
|
66
|
+
feeJuice: ContractArtifacts;
|
|
67
67
|
/**
|
|
68
68
|
* Gas portal contract artifacts. Optional for now as gas is not strictly enforced
|
|
69
69
|
*/
|
|
70
|
-
|
|
70
|
+
feeJuicePortal: ContractArtifacts;
|
|
71
71
|
}
|
|
72
72
|
export type L1Clients = {
|
|
73
73
|
publicClient: PublicClient<HttpTransport, Chain>;
|
|
@@ -92,8 +92,9 @@ export declare function createL1Clients(rpcUrl: string, mnemonicOrPrivateKeyOrHd
|
|
|
92
92
|
* @returns A list of ETH addresses of the deployed contracts.
|
|
93
93
|
*/
|
|
94
94
|
export declare const deployL1Contracts: (rpcUrl: string, account: HDAccount | PrivateKeyAccount, chain: Chain, logger: DebugLogger, contractsToDeploy: L1ContractArtifactsForDeployment, args: {
|
|
95
|
-
|
|
95
|
+
l2FeeJuiceAddress: AztecAddress;
|
|
96
96
|
vkTreeRoot: Fr;
|
|
97
|
+
assumeProvenUntil?: number;
|
|
97
98
|
}) => Promise<DeployL1Contracts>;
|
|
98
99
|
/**
|
|
99
100
|
* Helper function to deploy ETH contracts.
|
|
@@ -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;AAEzD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,GAAG,EACR,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EAMlB,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAA0C,MAAM,eAAe,CAAC;AAG/G,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;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;IACjD;;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,
|
|
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;AAEzD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,GAAG,EACR,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EAMlB,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAA0C,MAAM,eAAe,CAAC;AAG/G,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;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;IACjD;;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,cAAc,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACjD,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;CAC3D,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,+BAA+B,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,GAAG,SAAS,GAAG,iBAAiB,EACvF,KAAK,GAAE,KAAe,GACrB,SAAS,CAmBX;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,WACpB,MAAM,WACL,SAAS,GAAG,iBAAiB,SAC/B,KAAK,UACJ,WAAW,qBACA,gCAAgC,QAC7C;IAAE,iBAAiB,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,KACpF,QAAQ,iBAAiB,CAyK3B,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,CAkBrB"}
|
|
@@ -37,6 +37,24 @@ export function createL1Clients(rpcUrl, mnemonicOrPrivateKeyOrHdAccount, chain =
|
|
|
37
37
|
* @returns A list of ETH addresses of the deployed contracts.
|
|
38
38
|
*/
|
|
39
39
|
export const deployL1Contracts = async (rpcUrl, account, chain, logger, contractsToDeploy, args) => {
|
|
40
|
+
// We are assuming that you are running this on a local anvil node which have 1s block times
|
|
41
|
+
// To align better with actual deployment, we update the block interval to 12s
|
|
42
|
+
// The code is same as `setBlockInterval` in `cheat_codes.ts`
|
|
43
|
+
const rpcCall = async (rpcUrl, method, params) => {
|
|
44
|
+
const paramsString = JSON.stringify(params);
|
|
45
|
+
const content = {
|
|
46
|
+
body: `{"jsonrpc":"2.0", "method": "${method}", "params": ${paramsString}, "id": 1}`,
|
|
47
|
+
method: 'POST',
|
|
48
|
+
headers: { 'Content-Type': 'application/json' },
|
|
49
|
+
};
|
|
50
|
+
return await (await fetch(rpcUrl, content)).json();
|
|
51
|
+
};
|
|
52
|
+
const interval = 12;
|
|
53
|
+
const res = await rpcCall(rpcUrl, 'anvil_setBlockTimestampInterval', [interval]);
|
|
54
|
+
if (res.error) {
|
|
55
|
+
throw new Error(`Error setting block interval: ${res.error.message}`);
|
|
56
|
+
}
|
|
57
|
+
logger.info(`Set block interval to ${interval}`);
|
|
40
58
|
logger.debug('Deploying contracts...');
|
|
41
59
|
const walletClient = createWalletClient({
|
|
42
60
|
account,
|
|
@@ -51,15 +69,25 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
|
|
|
51
69
|
logger.info(`Deployed Registry at ${registryAddress}`);
|
|
52
70
|
const availabilityOracleAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.availabilityOracle.contractAbi, contractsToDeploy.availabilityOracle.contractBytecode);
|
|
53
71
|
logger.info(`Deployed AvailabilityOracle at ${availabilityOracleAddress}`);
|
|
54
|
-
const
|
|
55
|
-
logger.info(`Deployed
|
|
72
|
+
const feeJuiceAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.feeJuice.contractAbi, contractsToDeploy.feeJuice.contractBytecode);
|
|
73
|
+
logger.info(`Deployed Fee Juice at ${feeJuiceAddress}`);
|
|
56
74
|
const rollupAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.rollup.contractAbi, contractsToDeploy.rollup.contractBytecode, [
|
|
57
75
|
getAddress(registryAddress.toString()),
|
|
58
76
|
getAddress(availabilityOracleAddress.toString()),
|
|
59
|
-
getAddress(
|
|
77
|
+
getAddress(feeJuiceAddress.toString()),
|
|
60
78
|
args.vkTreeRoot.toString(),
|
|
61
79
|
]);
|
|
62
80
|
logger.info(`Deployed Rollup at ${rollupAddress}`);
|
|
81
|
+
// Set initial blocks as proven if requested
|
|
82
|
+
if (args.assumeProvenUntil && args.assumeProvenUntil > 0) {
|
|
83
|
+
const rollup = getContract({
|
|
84
|
+
address: getAddress(rollupAddress.toString()),
|
|
85
|
+
abi: contractsToDeploy.rollup.contractAbi,
|
|
86
|
+
client: walletClient,
|
|
87
|
+
});
|
|
88
|
+
await rollup.write.setAssumeProvenUntilBlockNumber([BigInt(args.assumeProvenUntil)], { account });
|
|
89
|
+
logger.info(`Set Rollup assumedProvenUntil to ${args.assumeProvenUntil}`);
|
|
90
|
+
}
|
|
63
91
|
// Inbox and Outbox are immutable and are deployed from Rollup's constructor so we just fetch them from the contract.
|
|
64
92
|
let inboxAddress;
|
|
65
93
|
{
|
|
@@ -88,39 +116,39 @@ export const deployL1Contracts = async (rpcUrl, account, chain, logger, contract
|
|
|
88
116
|
client: walletClient,
|
|
89
117
|
});
|
|
90
118
|
await registryContract.write.upgrade([getAddress(rollupAddress.toString()), getAddress(inboxAddress.toString()), getAddress(outboxAddress.toString())], { account });
|
|
91
|
-
// this contract remains uninitialized because at this point we don't know the address of the
|
|
92
|
-
const
|
|
93
|
-
logger.info(`Deployed Gas Portal at ${
|
|
94
|
-
const
|
|
95
|
-
address:
|
|
96
|
-
abi: contractsToDeploy.
|
|
119
|
+
// this contract remains uninitialized because at this point we don't know the address of the Fee Juice on L2
|
|
120
|
+
const feeJuicePortalAddress = await deployL1Contract(walletClient, publicClient, contractsToDeploy.feeJuicePortal.contractAbi, contractsToDeploy.feeJuicePortal.contractBytecode);
|
|
121
|
+
logger.info(`Deployed Gas Portal at ${feeJuicePortalAddress}`);
|
|
122
|
+
const feeJuicePortal = getContract({
|
|
123
|
+
address: feeJuicePortalAddress.toString(),
|
|
124
|
+
abi: contractsToDeploy.feeJuicePortal.contractAbi,
|
|
97
125
|
client: walletClient,
|
|
98
126
|
});
|
|
99
127
|
await publicClient.waitForTransactionReceipt({
|
|
100
|
-
hash: await
|
|
128
|
+
hash: await feeJuicePortal.write.initialize([
|
|
101
129
|
registryAddress.toString(),
|
|
102
|
-
|
|
103
|
-
args.
|
|
130
|
+
feeJuiceAddress.toString(),
|
|
131
|
+
args.l2FeeJuiceAddress.toString(),
|
|
104
132
|
]),
|
|
105
133
|
});
|
|
106
|
-
logger.info(`Initialized Gas Portal at ${
|
|
107
|
-
// fund the rollup contract with
|
|
108
|
-
const
|
|
109
|
-
address:
|
|
110
|
-
abi: contractsToDeploy.
|
|
134
|
+
logger.info(`Initialized Gas Portal at ${feeJuicePortalAddress} to bridge between L1 ${feeJuiceAddress} to L2 ${args.l2FeeJuiceAddress}`);
|
|
135
|
+
// fund the rollup contract with Fee Juice
|
|
136
|
+
const feeJuice = getContract({
|
|
137
|
+
address: feeJuiceAddress.toString(),
|
|
138
|
+
abi: contractsToDeploy.feeJuice.contractAbi,
|
|
111
139
|
client: walletClient,
|
|
112
140
|
});
|
|
113
|
-
const receipt = await
|
|
141
|
+
const receipt = await feeJuice.write.mint([rollupAddress.toString(), 100000000000000000000n], {});
|
|
114
142
|
await publicClient.waitForTransactionReceipt({ hash: receipt });
|
|
115
|
-
logger.info(`Funded rollup contract with
|
|
143
|
+
logger.info(`Funded rollup contract with Fee Juice`);
|
|
116
144
|
const l1Contracts = {
|
|
117
145
|
availabilityOracleAddress,
|
|
118
146
|
rollupAddress,
|
|
119
147
|
registryAddress,
|
|
120
148
|
inboxAddress,
|
|
121
149
|
outboxAddress,
|
|
122
|
-
|
|
123
|
-
|
|
150
|
+
feeJuiceAddress,
|
|
151
|
+
feeJuicePortalAddress,
|
|
124
152
|
};
|
|
125
153
|
return {
|
|
126
154
|
walletClient,
|
|
@@ -152,4 +180,4 @@ export async function deployL1Contract(walletClient, publicClient, abi, bytecode
|
|
|
152
180
|
return EthAddress.fromString(receipt.contractAddress);
|
|
153
181
|
}
|
|
154
182
|
// docs:end:deployL1Contract
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXBsb3lfbDFfY29udHJhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUszRCxPQUFPLEVBT0wsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsV0FBVyxFQUNYLElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBMEMsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQTJFdEM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsTUFBYyxFQUNkLCtCQUF1RixFQUN2RixRQUFlLE9BQU87SUFFdEIsTUFBTSxTQUFTLEdBQ2IsT0FBTywrQkFBK0IsS0FBSyxRQUFRO1FBQ2pELENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ2hELENBQUMsQ0FBQyxtQkFBbUIsQ0FBQywrQkFBZ0QsQ0FBQztZQUN2RSxDQUFDLENBQUMsaUJBQWlCLENBQUMsK0JBQStCLENBQUM7UUFDdEQsQ0FBQyxDQUFDLCtCQUErQixDQUFDO0lBRXRDLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ3RDLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLEtBQUs7UUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN4QixDQUFDLENBQUM7SUFDSCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN0QyxLQUFLO1FBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDeEIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7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
|
package/dest/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type EthereumChain } from './ethereum_chain.js';
|
|
|
2
2
|
export * from './deploy_l1_contracts.js';
|
|
3
3
|
export * from './l1_contract_addresses.js';
|
|
4
4
|
export * from './constants.js';
|
|
5
|
+
export * from './l1_reader.js';
|
|
5
6
|
/**
|
|
6
7
|
* Helper function to create an instance of Aztec Chain from an rpc url and api key.
|
|
7
8
|
* @param rpcUrl - The rpc url of the chain or a chain identifier (e.g. 'testnet')
|
package/dest/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAE/B;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CA+B5F"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAE/B;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CA+B5F"}
|
package/dest/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import { foundry } from 'viem/chains';
|
|
|
2
2
|
export * from './deploy_l1_contracts.js';
|
|
3
3
|
export * from './l1_contract_addresses.js';
|
|
4
4
|
export * from './constants.js';
|
|
5
|
+
export * from './l1_reader.js';
|
|
5
6
|
/**
|
|
6
7
|
* Helper function to create an instance of Aztec Chain from an rpc url and api key.
|
|
7
8
|
* @param rpcUrl - The rpc url of the chain or a chain identifier (e.g. 'testnet')
|
|
@@ -41,4 +42,4 @@ export function createEthereumChain(rpcUrl, _chainId) {
|
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGdCQUFnQixDQUFDO0FBRS9COzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBYyxFQUFFLFFBQXlCO0lBQzNFLElBQUksT0FBZSxDQUFDO0lBQ3BCLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ3RCLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxHQUFHLFFBQVEsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE9BQU87WUFDTCxTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxFQUFFLE9BQU87Z0JBQ1gsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE9BQU8sRUFBRTtvQkFDUCxPQUFPLEVBQUU7d0JBQ1AsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDO3FCQUNmO2lCQUNGO2dCQUNELGNBQWMsRUFBRTtvQkFDZCxRQUFRLEVBQUUsRUFBRTtvQkFDWixJQUFJLEVBQUUsT0FBTztvQkFDYixNQUFNLEVBQUUsS0FBSztpQkFDZDthQUNGO1lBQ0QsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU87WUFDTCxTQUFTLEVBQUUsT0FBTztZQUNsQixNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -1,23 +1,19 @@
|
|
|
1
|
+
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
1
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import type { DebugLogger } from '@aztec/foundation/log';
|
|
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 declare const l1ContractsNames: readonly ["availabilityOracleAddress", "rollupAddress", "registryAddress", "inboxAddress", "outboxAddress", "
|
|
9
|
+
export declare const l1ContractsNames: readonly ["availabilityOracleAddress", "rollupAddress", "registryAddress", "inboxAddress", "outboxAddress", "feeJuiceAddress", "feeJuicePortalAddress"];
|
|
8
10
|
/**
|
|
9
11
|
* Provides the directory of current L1 contract addresses
|
|
10
12
|
*/
|
|
11
13
|
export type L1ContractAddresses = {
|
|
12
14
|
[K in (typeof l1ContractsNames)[number]]: EthAddress;
|
|
13
15
|
};
|
|
14
|
-
export declare
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
registryAddress: EthAddress;
|
|
18
|
-
inboxAddress: EthAddress;
|
|
19
|
-
outboxAddress: EthAddress;
|
|
20
|
-
gasTokenAddress: EthAddress;
|
|
21
|
-
gasPortalAddress: EthAddress;
|
|
22
|
-
};
|
|
16
|
+
export declare const l1ContractAddressesMapping: ConfigMappingsType<L1ContractAddresses>;
|
|
17
|
+
export declare function getL1ContractAddressesFromEnv(): L1ContractAddresses;
|
|
18
|
+
export declare function getL1ContractAddressesFromUrl(url: string, log: DebugLogger): Promise<L1ContractAddresses>;
|
|
23
19
|
//# 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,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"l1_contract_addresses.d.ts","sourceRoot":"","sources":["../src/l1_contract_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAyB,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,yJAQnB,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,CAoC9E,CAAC;AAEF,wBAAgB,6BAA6B,wBAE5C;AAiBD,wBAAsB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAY/G"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getConfigFromMappings } from '@aztec/foundation/config';
|
|
1
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
3
|
/**
|
|
3
4
|
* The names of the current L1 contract addresses.
|
|
@@ -10,23 +11,73 @@ export const l1ContractsNames = [
|
|
|
10
11
|
'registryAddress',
|
|
11
12
|
'inboxAddress',
|
|
12
13
|
'outboxAddress',
|
|
13
|
-
'
|
|
14
|
-
'
|
|
14
|
+
'feeJuiceAddress',
|
|
15
|
+
'feeJuicePortalAddress',
|
|
15
16
|
];
|
|
17
|
+
const parseEnv = (val) => EthAddress.fromString(val);
|
|
18
|
+
export const l1ContractAddressesMapping = {
|
|
19
|
+
availabilityOracleAddress: {
|
|
20
|
+
env: 'AVAILABILITY_ORACLE_CONTRACT_ADDRESS',
|
|
21
|
+
description: 'The deployed L1 availability oracle contract address.',
|
|
22
|
+
parseEnv,
|
|
23
|
+
},
|
|
24
|
+
rollupAddress: {
|
|
25
|
+
env: 'ROLLUP_CONTRACT_ADDRESS',
|
|
26
|
+
description: 'The deployed L1 rollup contract address.',
|
|
27
|
+
parseEnv,
|
|
28
|
+
},
|
|
29
|
+
registryAddress: {
|
|
30
|
+
env: 'REGISTRY_CONTRACT_ADDRESS',
|
|
31
|
+
description: 'The deployed L1 registry contract address.',
|
|
32
|
+
parseEnv,
|
|
33
|
+
},
|
|
34
|
+
inboxAddress: {
|
|
35
|
+
env: 'INBOX_CONTRACT_ADDRESS',
|
|
36
|
+
description: 'The deployed L1 inbox contract address.',
|
|
37
|
+
parseEnv,
|
|
38
|
+
},
|
|
39
|
+
outboxAddress: {
|
|
40
|
+
env: 'OUTBOX_CONTRACT_ADDRESS',
|
|
41
|
+
description: 'The deployed L1 outbox contract address.',
|
|
42
|
+
parseEnv,
|
|
43
|
+
},
|
|
44
|
+
feeJuiceAddress: {
|
|
45
|
+
env: 'FEE_JUICE_CONTRACT_ADDRESS',
|
|
46
|
+
description: 'The deployed L1 Fee Juice contract address.',
|
|
47
|
+
parseEnv,
|
|
48
|
+
},
|
|
49
|
+
feeJuicePortalAddress: {
|
|
50
|
+
env: 'FEE_JUICE_PORTAL_CONTRACT_ADDRESS',
|
|
51
|
+
description: 'The deployed L1 Fee Juice portal contract address.',
|
|
52
|
+
parseEnv,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
16
55
|
export function getL1ContractAddressesFromEnv() {
|
|
17
|
-
|
|
18
|
-
return {
|
|
19
|
-
availabilityOracleAddress: AVAILABILITY_ORACLE_CONTRACT_ADDRESS
|
|
20
|
-
? EthAddress.fromString(AVAILABILITY_ORACLE_CONTRACT_ADDRESS)
|
|
21
|
-
: EthAddress.ZERO,
|
|
22
|
-
rollupAddress: ROLLUP_CONTRACT_ADDRESS ? EthAddress.fromString(ROLLUP_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
23
|
-
registryAddress: REGISTRY_CONTRACT_ADDRESS ? EthAddress.fromString(REGISTRY_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
24
|
-
inboxAddress: INBOX_CONTRACT_ADDRESS ? EthAddress.fromString(INBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
25
|
-
outboxAddress: OUTBOX_CONTRACT_ADDRESS ? EthAddress.fromString(OUTBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
26
|
-
gasTokenAddress: GAS_TOKEN_CONTRACT_ADDRESS ? EthAddress.fromString(GAS_TOKEN_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
27
|
-
gasPortalAddress: GAS_PORTAL_CONTRACT_ADDRESS
|
|
28
|
-
? EthAddress.fromString(GAS_PORTAL_CONTRACT_ADDRESS)
|
|
29
|
-
: EthAddress.ZERO,
|
|
30
|
-
};
|
|
56
|
+
return getConfigFromMappings(l1ContractAddressesMapping);
|
|
31
57
|
}
|
|
32
|
-
|
|
58
|
+
function convertToL1ContractAddresses(obj) {
|
|
59
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
60
|
+
throw new Error('Object is not valid');
|
|
61
|
+
}
|
|
62
|
+
const result = {};
|
|
63
|
+
for (const key of l1ContractsNames) {
|
|
64
|
+
const value = obj[key];
|
|
65
|
+
result[key] = EthAddress.fromString(value);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
export async function getL1ContractAddressesFromUrl(url, log) {
|
|
70
|
+
try {
|
|
71
|
+
const response = await fetch(url);
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
throw new Error(`HTTP error when fetching L1 contracts from ${url}. Status: ${response.status}`);
|
|
74
|
+
}
|
|
75
|
+
const data = await response.json();
|
|
76
|
+
return convertToL1ContractAddresses(data);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
log.error(`Error fetching JSON from ${url}:`, error);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfY29udHJhY3RfYWRkcmVzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX2NvbnRyYWN0X2FkZHJlc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJCLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QiwyQkFBMkI7SUFDM0IsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2QsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQix1QkFBdUI7Q0FDZixDQUFDO0FBU1gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQTRDO0lBQ2pGLHlCQUF5QixFQUFFO1FBQ3pCLEdBQUcsRUFBRSxzQ0FBc0M7UUFDM0MsV0FBVyxFQUFFLHVEQUF1RDtRQUNwRSxRQUFRO0tBQ1Q7SUFDRCxhQUFhLEVBQUU7UUFDYixHQUFHLEVBQUUseUJBQXlCO1FBQzlCLFdBQVcsRUFBRSwwQ0FBMEM7UUFDdkQsUUFBUTtLQUNUO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsR0FBRyxFQUFFLDJCQUEyQjtRQUNoQyxXQUFXLEVBQUUsNENBQTRDO1FBQ3pELFFBQVE7S0FDVDtJQUNELFlBQVksRUFBRTtRQUNaLEdBQUcsRUFBRSx3QkFBd0I7UUFDN0IsV0FBVyxFQUFFLHlDQUF5QztRQUN0RCxRQUFRO0tBQ1Q7SUFDRCxhQUFhLEVBQUU7UUFDYixHQUFHLEVBQUUseUJBQXlCO1FBQzlCLFdBQVcsRUFBRSwwQ0FBMEM7UUFDdkQsUUFBUTtLQUNUO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsR0FBRyxFQUFFLDRCQUE0QjtRQUNqQyxXQUFXLEVBQUUsNkNBQTZDO1FBQzFELFFBQVE7S0FDVDtJQUNELHFCQUFxQixFQUFFO1FBQ3JCLEdBQUcsRUFBRSxtQ0FBbUM7UUFDeEMsV0FBVyxFQUFFLG9EQUFvRDtRQUNqRSxRQUFRO0tBQ1Q7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLDZCQUE2QjtJQUMzQyxPQUFPLHFCQUFxQixDQUFzQiwwQkFBMEIsQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFFRCxTQUFTLDRCQUE0QixDQUFDLEdBQVE7SUFDNUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQWlDLEVBQUUsQ0FBQztJQUVoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxPQUFPLE1BQTZCLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsNkJBQTZCLENBQUMsR0FBVyxFQUFFLEdBQWdCO0lBQy9FLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsR0FBRyxhQUFhLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQyxPQUFPLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckQsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
2
|
+
import { type L1ContractAddresses } from './l1_contract_addresses.js';
|
|
3
|
+
/**
|
|
4
|
+
* Configuration of the L1GlobalReader.
|
|
5
|
+
*/
|
|
6
|
+
export interface L1ReaderConfig {
|
|
7
|
+
/**
|
|
8
|
+
* The RPC Url of the ethereum host.
|
|
9
|
+
*/
|
|
10
|
+
l1RpcUrl: string;
|
|
11
|
+
/**
|
|
12
|
+
* The chain ID of the ethereum host.
|
|
13
|
+
*/
|
|
14
|
+
l1ChainId: number;
|
|
15
|
+
/**
|
|
16
|
+
* The deployed l1 contract addresses
|
|
17
|
+
*/
|
|
18
|
+
l1Contracts: L1ContractAddresses;
|
|
19
|
+
}
|
|
20
|
+
export declare const l1ReaderConfigMappings: ConfigMappingsType<L1ReaderConfig>;
|
|
21
|
+
//# sourceMappingURL=l1_reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"l1_reader.d.ts","sourceRoot":"","sources":["../src/l1_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,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;CAClC;AAED,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,cAAc,CAgBrE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { l1ContractAddressesMapping } from './l1_contract_addresses.js';
|
|
2
|
+
export const l1ReaderConfigMappings = {
|
|
3
|
+
l1RpcUrl: {
|
|
4
|
+
env: 'ETHEREUM_HOST',
|
|
5
|
+
description: 'The RPC Url of the ethereum host.',
|
|
6
|
+
},
|
|
7
|
+
l1ChainId: {
|
|
8
|
+
env: 'L1_CHAIN_ID',
|
|
9
|
+
parseEnv: (val) => +val,
|
|
10
|
+
defaultValue: 31337,
|
|
11
|
+
description: 'The chain ID of the ethereum host.',
|
|
12
|
+
},
|
|
13
|
+
// NOTE: Special case for l1Contracts
|
|
14
|
+
l1Contracts: {
|
|
15
|
+
description: 'The deployed L1 contract addresses',
|
|
16
|
+
defaultValue: l1ContractAddressesMapping,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfcmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2wxX3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQTRCLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFxQmxHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUF1QztJQUN4RSxRQUFRLEVBQUU7UUFDUixHQUFHLEVBQUUsZUFBZTtRQUNwQixXQUFXLEVBQUUsbUNBQW1DO0tBQ2pEO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsR0FBRyxFQUFFLGFBQWE7UUFDbEIsUUFBUSxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUc7UUFDL0IsWUFBWSxFQUFFLEtBQUs7UUFDbkIsV0FBVyxFQUFFLG9DQUFvQztLQUNsRDtJQUNELHFDQUFxQztJQUNyQyxXQUFXLEVBQUU7UUFDWCxXQUFXLEVBQUUsb0NBQW9DO1FBQ2pELFlBQVksRUFBRSwwQkFBMEI7S0FDekM7Q0FDRixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/ethereum",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.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.
|
|
27
|
+
"@aztec/foundation": "0.48.0",
|
|
28
28
|
"dotenv": "^16.0.3",
|
|
29
29
|
"tslib": "^2.4.0",
|
|
30
30
|
"viem": "^2.7.15"
|
|
@@ -79,13 +79,13 @@ export interface L1ContractArtifactsForDeployment {
|
|
|
79
79
|
*/
|
|
80
80
|
rollup: ContractArtifacts;
|
|
81
81
|
/**
|
|
82
|
-
* The token to pay for gas. This will be bridged to L2 via the
|
|
82
|
+
* The token to pay for gas. This will be bridged to L2 via the feeJuicePortal below
|
|
83
83
|
*/
|
|
84
|
-
|
|
84
|
+
feeJuice: ContractArtifacts;
|
|
85
85
|
/**
|
|
86
86
|
* Gas portal contract artifacts. Optional for now as gas is not strictly enforced
|
|
87
87
|
*/
|
|
88
|
-
|
|
88
|
+
feeJuicePortal: ContractArtifacts;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
export type L1Clients = {
|
|
@@ -141,8 +141,27 @@ export const deployL1Contracts = async (
|
|
|
141
141
|
chain: Chain,
|
|
142
142
|
logger: DebugLogger,
|
|
143
143
|
contractsToDeploy: L1ContractArtifactsForDeployment,
|
|
144
|
-
args: {
|
|
144
|
+
args: { l2FeeJuiceAddress: AztecAddress; vkTreeRoot: Fr; assumeProvenUntil?: number },
|
|
145
145
|
): Promise<DeployL1Contracts> => {
|
|
146
|
+
// We are assuming that you are running this on a local anvil node which have 1s block times
|
|
147
|
+
// To align better with actual deployment, we update the block interval to 12s
|
|
148
|
+
// The code is same as `setBlockInterval` in `cheat_codes.ts`
|
|
149
|
+
const rpcCall = async (rpcUrl: string, method: string, params: any[]) => {
|
|
150
|
+
const paramsString = JSON.stringify(params);
|
|
151
|
+
const content = {
|
|
152
|
+
body: `{"jsonrpc":"2.0", "method": "${method}", "params": ${paramsString}, "id": 1}`,
|
|
153
|
+
method: 'POST',
|
|
154
|
+
headers: { 'Content-Type': 'application/json' },
|
|
155
|
+
};
|
|
156
|
+
return await (await fetch(rpcUrl, content)).json();
|
|
157
|
+
};
|
|
158
|
+
const interval = 12;
|
|
159
|
+
const res = await rpcCall(rpcUrl, 'anvil_setBlockTimestampInterval', [interval]);
|
|
160
|
+
if (res.error) {
|
|
161
|
+
throw new Error(`Error setting block interval: ${res.error.message}`);
|
|
162
|
+
}
|
|
163
|
+
logger.info(`Set block interval to ${interval}`);
|
|
164
|
+
|
|
146
165
|
logger.debug('Deploying contracts...');
|
|
147
166
|
|
|
148
167
|
const walletClient = createWalletClient({
|
|
@@ -171,14 +190,14 @@ export const deployL1Contracts = async (
|
|
|
171
190
|
);
|
|
172
191
|
logger.info(`Deployed AvailabilityOracle at ${availabilityOracleAddress}`);
|
|
173
192
|
|
|
174
|
-
const
|
|
193
|
+
const feeJuiceAddress = await deployL1Contract(
|
|
175
194
|
walletClient,
|
|
176
195
|
publicClient,
|
|
177
|
-
contractsToDeploy.
|
|
178
|
-
contractsToDeploy.
|
|
196
|
+
contractsToDeploy.feeJuice.contractAbi,
|
|
197
|
+
contractsToDeploy.feeJuice.contractBytecode,
|
|
179
198
|
);
|
|
180
199
|
|
|
181
|
-
logger.info(`Deployed
|
|
200
|
+
logger.info(`Deployed Fee Juice at ${feeJuiceAddress}`);
|
|
182
201
|
|
|
183
202
|
const rollupAddress = await deployL1Contract(
|
|
184
203
|
walletClient,
|
|
@@ -188,12 +207,23 @@ export const deployL1Contracts = async (
|
|
|
188
207
|
[
|
|
189
208
|
getAddress(registryAddress.toString()),
|
|
190
209
|
getAddress(availabilityOracleAddress.toString()),
|
|
191
|
-
getAddress(
|
|
210
|
+
getAddress(feeJuiceAddress.toString()),
|
|
192
211
|
args.vkTreeRoot.toString(),
|
|
193
212
|
],
|
|
194
213
|
);
|
|
195
214
|
logger.info(`Deployed Rollup at ${rollupAddress}`);
|
|
196
215
|
|
|
216
|
+
// Set initial blocks as proven if requested
|
|
217
|
+
if (args.assumeProvenUntil && args.assumeProvenUntil > 0) {
|
|
218
|
+
const rollup = getContract({
|
|
219
|
+
address: getAddress(rollupAddress.toString()),
|
|
220
|
+
abi: contractsToDeploy.rollup.contractAbi,
|
|
221
|
+
client: walletClient,
|
|
222
|
+
});
|
|
223
|
+
await rollup.write.setAssumeProvenUntilBlockNumber([BigInt(args.assumeProvenUntil)], { account });
|
|
224
|
+
logger.info(`Set Rollup assumedProvenUntil to ${args.assumeProvenUntil}`);
|
|
225
|
+
}
|
|
226
|
+
|
|
197
227
|
// Inbox and Outbox are immutable and are deployed from Rollup's constructor so we just fetch them from the contract.
|
|
198
228
|
let inboxAddress!: EthAddress;
|
|
199
229
|
{
|
|
@@ -228,43 +258,43 @@ export const deployL1Contracts = async (
|
|
|
228
258
|
{ account },
|
|
229
259
|
);
|
|
230
260
|
|
|
231
|
-
// this contract remains uninitialized because at this point we don't know the address of the
|
|
232
|
-
const
|
|
261
|
+
// this contract remains uninitialized because at this point we don't know the address of the Fee Juice on L2
|
|
262
|
+
const feeJuicePortalAddress = await deployL1Contract(
|
|
233
263
|
walletClient,
|
|
234
264
|
publicClient,
|
|
235
|
-
contractsToDeploy.
|
|
236
|
-
contractsToDeploy.
|
|
265
|
+
contractsToDeploy.feeJuicePortal.contractAbi,
|
|
266
|
+
contractsToDeploy.feeJuicePortal.contractBytecode,
|
|
237
267
|
);
|
|
238
268
|
|
|
239
|
-
logger.info(`Deployed Gas Portal at ${
|
|
269
|
+
logger.info(`Deployed Gas Portal at ${feeJuicePortalAddress}`);
|
|
240
270
|
|
|
241
|
-
const
|
|
242
|
-
address:
|
|
243
|
-
abi: contractsToDeploy.
|
|
271
|
+
const feeJuicePortal = getContract({
|
|
272
|
+
address: feeJuicePortalAddress.toString(),
|
|
273
|
+
abi: contractsToDeploy.feeJuicePortal.contractAbi,
|
|
244
274
|
client: walletClient,
|
|
245
275
|
});
|
|
246
276
|
|
|
247
277
|
await publicClient.waitForTransactionReceipt({
|
|
248
|
-
hash: await
|
|
278
|
+
hash: await feeJuicePortal.write.initialize([
|
|
249
279
|
registryAddress.toString(),
|
|
250
|
-
|
|
251
|
-
args.
|
|
280
|
+
feeJuiceAddress.toString(),
|
|
281
|
+
args.l2FeeJuiceAddress.toString(),
|
|
252
282
|
]),
|
|
253
283
|
});
|
|
254
284
|
|
|
255
285
|
logger.info(
|
|
256
|
-
`Initialized Gas Portal at ${
|
|
286
|
+
`Initialized Gas Portal at ${feeJuicePortalAddress} to bridge between L1 ${feeJuiceAddress} to L2 ${args.l2FeeJuiceAddress}`,
|
|
257
287
|
);
|
|
258
288
|
|
|
259
|
-
// fund the rollup contract with
|
|
260
|
-
const
|
|
261
|
-
address:
|
|
262
|
-
abi: contractsToDeploy.
|
|
289
|
+
// fund the rollup contract with Fee Juice
|
|
290
|
+
const feeJuice = getContract({
|
|
291
|
+
address: feeJuiceAddress.toString(),
|
|
292
|
+
abi: contractsToDeploy.feeJuice.contractAbi,
|
|
263
293
|
client: walletClient,
|
|
264
294
|
});
|
|
265
|
-
const receipt = await
|
|
295
|
+
const receipt = await feeJuice.write.mint([rollupAddress.toString(), 100000000000000000000n], {} as any);
|
|
266
296
|
await publicClient.waitForTransactionReceipt({ hash: receipt });
|
|
267
|
-
logger.info(`Funded rollup contract with
|
|
297
|
+
logger.info(`Funded rollup contract with Fee Juice`);
|
|
268
298
|
|
|
269
299
|
const l1Contracts: L1ContractAddresses = {
|
|
270
300
|
availabilityOracleAddress,
|
|
@@ -272,8 +302,8 @@ export const deployL1Contracts = async (
|
|
|
272
302
|
registryAddress,
|
|
273
303
|
inboxAddress,
|
|
274
304
|
outboxAddress,
|
|
275
|
-
|
|
276
|
-
|
|
305
|
+
feeJuiceAddress,
|
|
306
|
+
feeJuicePortalAddress,
|
|
277
307
|
};
|
|
278
308
|
|
|
279
309
|
return {
|
package/src/index.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { type EthereumChain } from './ethereum_chain.js';
|
|
|
5
5
|
export * from './deploy_l1_contracts.js';
|
|
6
6
|
export * from './l1_contract_addresses.js';
|
|
7
7
|
export * from './constants.js';
|
|
8
|
+
export * from './l1_reader.js';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Helper function to create an instance of Aztec Chain from an rpc url and api key.
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { type ConfigMappingsType, getConfigFromMappings } from '@aztec/foundation/config';
|
|
1
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import type { DebugLogger } from '@aztec/foundation/log';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* The names of the current L1 contract addresses.
|
|
@@ -11,8 +13,8 @@ export const l1ContractsNames = [
|
|
|
11
13
|
'registryAddress',
|
|
12
14
|
'inboxAddress',
|
|
13
15
|
'outboxAddress',
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
+
'feeJuiceAddress',
|
|
17
|
+
'feeJuicePortalAddress',
|
|
16
18
|
] as const;
|
|
17
19
|
|
|
18
20
|
/**
|
|
@@ -22,28 +24,75 @@ export type L1ContractAddresses = {
|
|
|
22
24
|
[K in (typeof l1ContractsNames)[number]]: EthAddress;
|
|
23
25
|
};
|
|
24
26
|
|
|
27
|
+
const parseEnv = (val: string) => EthAddress.fromString(val);
|
|
28
|
+
|
|
29
|
+
export const l1ContractAddressesMapping: ConfigMappingsType<L1ContractAddresses> = {
|
|
30
|
+
availabilityOracleAddress: {
|
|
31
|
+
env: 'AVAILABILITY_ORACLE_CONTRACT_ADDRESS',
|
|
32
|
+
description: 'The deployed L1 availability oracle contract address.',
|
|
33
|
+
parseEnv,
|
|
34
|
+
},
|
|
35
|
+
rollupAddress: {
|
|
36
|
+
env: 'ROLLUP_CONTRACT_ADDRESS',
|
|
37
|
+
description: 'The deployed L1 rollup contract address.',
|
|
38
|
+
parseEnv,
|
|
39
|
+
},
|
|
40
|
+
registryAddress: {
|
|
41
|
+
env: 'REGISTRY_CONTRACT_ADDRESS',
|
|
42
|
+
description: 'The deployed L1 registry contract address.',
|
|
43
|
+
parseEnv,
|
|
44
|
+
},
|
|
45
|
+
inboxAddress: {
|
|
46
|
+
env: 'INBOX_CONTRACT_ADDRESS',
|
|
47
|
+
description: 'The deployed L1 inbox contract address.',
|
|
48
|
+
parseEnv,
|
|
49
|
+
},
|
|
50
|
+
outboxAddress: {
|
|
51
|
+
env: 'OUTBOX_CONTRACT_ADDRESS',
|
|
52
|
+
description: 'The deployed L1 outbox contract address.',
|
|
53
|
+
parseEnv,
|
|
54
|
+
},
|
|
55
|
+
feeJuiceAddress: {
|
|
56
|
+
env: 'FEE_JUICE_CONTRACT_ADDRESS',
|
|
57
|
+
description: 'The deployed L1 Fee Juice contract address.',
|
|
58
|
+
parseEnv,
|
|
59
|
+
},
|
|
60
|
+
feeJuicePortalAddress: {
|
|
61
|
+
env: 'FEE_JUICE_PORTAL_CONTRACT_ADDRESS',
|
|
62
|
+
description: 'The deployed L1 Fee Juice portal contract address.',
|
|
63
|
+
parseEnv,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
|
|
25
67
|
export function getL1ContractAddressesFromEnv() {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
68
|
+
return getConfigFromMappings<L1ContractAddresses>(l1ContractAddressesMapping);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function convertToL1ContractAddresses(obj: any): L1ContractAddresses {
|
|
72
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
73
|
+
throw new Error('Object is not valid');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const result: Partial<L1ContractAddresses> = {};
|
|
77
|
+
|
|
78
|
+
for (const key of l1ContractsNames) {
|
|
79
|
+
const value = obj[key];
|
|
80
|
+
result[key] = EthAddress.fromString(value);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return result as L1ContractAddresses;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export async function getL1ContractAddressesFromUrl(url: string, log: DebugLogger): Promise<L1ContractAddresses> {
|
|
87
|
+
try {
|
|
88
|
+
const response = await fetch(url);
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
throw new Error(`HTTP error when fetching L1 contracts from ${url}. Status: ${response.status}`);
|
|
91
|
+
}
|
|
92
|
+
const data = await response.json();
|
|
93
|
+
return convertToL1ContractAddresses(data);
|
|
94
|
+
} catch (error) {
|
|
95
|
+
log.error(`Error fetching JSON from ${url}:`, error);
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
49
98
|
}
|
package/src/l1_reader.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
2
|
+
|
|
3
|
+
import { type L1ContractAddresses, l1ContractAddressesMapping } from './l1_contract_addresses.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Configuration of the L1GlobalReader.
|
|
7
|
+
*/
|
|
8
|
+
export interface L1ReaderConfig {
|
|
9
|
+
/**
|
|
10
|
+
* The RPC Url of the ethereum host.
|
|
11
|
+
*/
|
|
12
|
+
l1RpcUrl: string;
|
|
13
|
+
/**
|
|
14
|
+
* The chain ID of the ethereum host.
|
|
15
|
+
*/
|
|
16
|
+
l1ChainId: number;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The deployed l1 contract addresses
|
|
20
|
+
*/
|
|
21
|
+
l1Contracts: L1ContractAddresses;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const l1ReaderConfigMappings: ConfigMappingsType<L1ReaderConfig> = {
|
|
25
|
+
l1RpcUrl: {
|
|
26
|
+
env: 'ETHEREUM_HOST',
|
|
27
|
+
description: 'The RPC Url of the ethereum host.',
|
|
28
|
+
},
|
|
29
|
+
l1ChainId: {
|
|
30
|
+
env: 'L1_CHAIN_ID',
|
|
31
|
+
parseEnv: (val: string) => +val,
|
|
32
|
+
defaultValue: 31337,
|
|
33
|
+
description: 'The chain ID of the ethereum host.',
|
|
34
|
+
},
|
|
35
|
+
// NOTE: Special case for l1Contracts
|
|
36
|
+
l1Contracts: {
|
|
37
|
+
description: 'The deployed L1 contract addresses',
|
|
38
|
+
defaultValue: l1ContractAddressesMapping,
|
|
39
|
+
},
|
|
40
|
+
};
|