Skip to content

Commit 9eef247

Browse files
authored
feat: Only one tx per base rollup (AztecProtocol#3742)
This PR makes the base rollup process only one TX at a time, lowering the min TX per rollup from 4 to 2.
1 parent c3d8b5d commit 9eef247

File tree

16 files changed

+394
-793
lines changed

16 files changed

+394
-793
lines changed

l1-contracts/src/core/libraries/ConstantsGen.sol

+14-18
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@ library Constants {
3939
uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1;
4040
uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1;
4141
uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16;
42-
uint256 internal constant KERNELS_PER_BASE_ROLLUP = 2;
43-
uint256 internal constant MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP = 128;
44-
uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP = 32;
45-
uint256 internal constant MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP = 32;
4642
uint256 internal constant VK_TREE_HEIGHT = 3;
4743
uint256 internal constant FUNCTION_TREE_HEIGHT = 5;
4844
uint256 internal constant CONTRACT_TREE_HEIGHT = 16;
@@ -51,14 +47,14 @@ library Constants {
5147
uint256 internal constant NULLIFIER_TREE_HEIGHT = 20;
5248
uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16;
5349
uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8;
54-
uint256 internal constant CONTRACT_SUBTREE_HEIGHT = 1;
55-
uint256 internal constant CONTRACT_SUBTREE_SIBLING_PATH_LENGTH = 15;
56-
uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 7;
57-
uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 25;
58-
uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 7;
50+
uint256 internal constant CONTRACT_SUBTREE_HEIGHT = 0;
51+
uint256 internal constant CONTRACT_SUBTREE_SIBLING_PATH_LENGTH = 16;
52+
uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6;
53+
uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26;
54+
uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6;
5955
uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 4;
6056
uint256 internal constant ARCHIVE_HEIGHT = 16;
61-
uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 13;
57+
uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14;
6258
uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 36;
6359
uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4;
6460
uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12;
@@ -86,12 +82,12 @@ library Constants {
8682
uint256 internal constant CALL_PRIVATE_FUNCTION_RETURN_SIZE = 161;
8783
uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 87;
8884
uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 144;
89-
uint256 internal constant COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP = 4096;
90-
uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 4096;
91-
uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048;
92-
uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 64;
93-
uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 128;
94-
uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 104;
95-
uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 128;
96-
uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 128;
85+
uint256 internal constant COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP = 2048;
86+
uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048;
87+
uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 1024;
88+
uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32;
89+
uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64;
90+
uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52;
91+
uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64;
92+
uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64;
9793
}

l1-contracts/src/core/libraries/Decoder.sol

+17-40
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,8 @@ library Decoder {
8787
bytes32[] baseLeaves;
8888
bytes32[] l2ToL1Msgs;
8989
bytes baseLeaf;
90-
bytes32 encryptedLogsHashKernel1;
91-
bytes32 encryptedLogsHashKernel2;
92-
bytes32 unencryptedLogsHashKernel1;
93-
bytes32 unencryptedLogsHashKernel2;
90+
bytes32 encryptedLogsHash;
91+
bytes32 unencryptedLogsHash;
9492
uint256 l1Tol2MsgsCount;
9593
}
9694

@@ -210,7 +208,7 @@ library Decoder {
210208

211209
// Commitments
212210
uint256 count = read4(_l2Block, offset);
213-
vars.baseLeaves = new bytes32[](count / (Constants.MAX_NEW_COMMITMENTS_PER_TX * 2));
211+
vars.baseLeaves = new bytes32[](count / Constants.MAX_NEW_COMMITMENTS_PER_TX);
214212
offsets.commitment = BLOCK_HEADER_OFFSET + 0x4;
215213
offset += 0x4 + count * 0x20;
216214
offsets.nullifier = offset + 0x4; // + 0x4 to offset by next read4
@@ -261,24 +259,15 @@ library Decoder {
261259
/*
262260
* Compute the leaf to insert.
263261
* Leaf_i = (
264-
* newCommitmentsKernel1,
265-
* newCommitmentsKernel2,
266-
* newNullifiersKernel1,
267-
* newNullifiersKernel2,
268-
* newPublicDataWritesKernel1,
269-
* newPublicDataWritesKernel2,
270-
* newL2ToL1MsgsKernel1,
271-
* newL2ToL1MsgsKernel2,
272-
* newContractLeafKernel1,
273-
* newContractLeafKernel2,
274-
* newContractDataKernel1.aztecAddress,
275-
* newContractDataKernel1.ethAddress (padded to 32 bytes),
276-
* newContractDataKernel2.aztecAddress,
277-
* newContractDataKernel2.ethAddress (padded to 32 bytes), ____
278-
* encryptedLogsHashKernel1, |
279-
* encryptedLogsHashKernel2, |=> Computed below from logs' preimages.
280-
* unencryptedLogsHashKernel1, |
281-
* unencryptedLogsHashKernel2 ____|
262+
* newCommitmentsKernel,
263+
* newNullifiersKernel,
264+
* newPublicDataWritesKernel,
265+
* newL2ToL1MsgsKernel,
266+
* newContractLeafKernel,
267+
* newContractDataKernel.aztecAddress,
268+
* newContractDataKernel.ethAddress (padded to 32 bytes),
269+
* encryptedLogsHash, |
270+
* unencryptedLogsHash, ____|=> Computed below from logs' preimages.
282271
* );
283272
* Note that we always read data, the l2Block (atm) must therefore include dummy or zero-notes for
284273
* Zero values.
@@ -288,14 +277,10 @@ library Decoder {
288277
* Compute encrypted and unencrypted logs hashes corresponding to the current leaf.
289278
* Note: will advance offsets by the number of bytes processed.
290279
*/
291-
(vars.encryptedLogsHashKernel1, offsets.encryptedLogs) =
292-
computeKernelLogsHash(offsets.encryptedLogs, _l2Block);
293-
(vars.encryptedLogsHashKernel2, offsets.encryptedLogs) =
280+
(vars.encryptedLogsHash, offsets.encryptedLogs) =
294281
computeKernelLogsHash(offsets.encryptedLogs, _l2Block);
295282

296-
(vars.unencryptedLogsHashKernel1, offsets.unencryptedLogs) =
297-
computeKernelLogsHash(offsets.unencryptedLogs, _l2Block);
298-
(vars.unencryptedLogsHashKernel2, offsets.unencryptedLogs) =
283+
(vars.unencryptedLogsHash, offsets.unencryptedLogs) =
299284
computeKernelLogsHash(offsets.unencryptedLogs, _l2Block);
300285

301286
// Insertions are split into multiple `bytes.concat` to work around stack too deep.
@@ -310,19 +295,11 @@ library Decoder {
310295
slice(_l2Block, offsets.contracts, Constants.CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP)
311296
),
312297
bytes.concat(
313-
slice(_l2Block, offsets.contractData, 0x20), // newContractDataKernel1.aztecAddress
298+
slice(_l2Block, offsets.contractData, 0x20), // newContractDataKernel.aztecAddress
314299
bytes12(0),
315-
slice(_l2Block, offsets.contractData + 0x20, 0x14), // newContractDataKernel1.ethAddress
316-
slice(_l2Block, offsets.contractData + 0x34, 0x20), // newContractDataKernel2.aztecAddress
317-
bytes12(0),
318-
slice(_l2Block, offsets.contractData + 0x54, 0x14) // newContractDataKernel2.ethAddress
300+
slice(_l2Block, offsets.contractData + 0x20, 0x14) // newContractDataKernel.ethAddress
319301
),
320-
bytes.concat(
321-
vars.encryptedLogsHashKernel1,
322-
vars.encryptedLogsHashKernel2,
323-
vars.unencryptedLogsHashKernel1,
324-
vars.unencryptedLogsHashKernel2
325-
)
302+
bytes.concat(vars.encryptedLogsHash, vars.unencryptedLogsHash)
326303
);
327304

328305
offsets.commitment += Constants.COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP;

yarn-project/circuits.js/src/constants.gen.ts

+14-18
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,6 @@ export const MAX_PENDING_READ_REQUESTS_PER_TX = 128;
2525
export const NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1;
2626
export const NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1;
2727
export const NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16;
28-
export const KERNELS_PER_BASE_ROLLUP = 2;
29-
export const MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP = 128;
30-
export const MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP = 32;
31-
export const MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP = 32;
3228
export const VK_TREE_HEIGHT = 3;
3329
export const FUNCTION_TREE_HEIGHT = 5;
3430
export const CONTRACT_TREE_HEIGHT = 16;
@@ -37,14 +33,14 @@ export const PUBLIC_DATA_TREE_HEIGHT = 40;
3733
export const NULLIFIER_TREE_HEIGHT = 20;
3834
export const L1_TO_L2_MSG_TREE_HEIGHT = 16;
3935
export const ROLLUP_VK_TREE_HEIGHT = 8;
40-
export const CONTRACT_SUBTREE_HEIGHT = 1;
41-
export const CONTRACT_SUBTREE_SIBLING_PATH_LENGTH = 15;
42-
export const NOTE_HASH_SUBTREE_HEIGHT = 7;
43-
export const NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 25;
44-
export const NULLIFIER_SUBTREE_HEIGHT = 7;
36+
export const CONTRACT_SUBTREE_HEIGHT = 0;
37+
export const CONTRACT_SUBTREE_SIBLING_PATH_LENGTH = 16;
38+
export const NOTE_HASH_SUBTREE_HEIGHT = 6;
39+
export const NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26;
40+
export const NULLIFIER_SUBTREE_HEIGHT = 6;
4541
export const PUBLIC_DATA_SUBTREE_HEIGHT = 4;
4642
export const ARCHIVE_HEIGHT = 16;
47-
export const NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 13;
43+
export const NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14;
4844
export const PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 36;
4945
export const L1_TO_L2_MSG_SUBTREE_HEIGHT = 4;
5046
export const L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12;
@@ -72,14 +68,14 @@ export const EMPTY_NULLIFIED_COMMITMENT = 1000000;
7268
export const CALL_PRIVATE_FUNCTION_RETURN_SIZE = 161;
7369
export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 87;
7470
export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 144;
75-
export const COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP = 4096;
76-
export const NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 4096;
77-
export const PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048;
78-
export const CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 64;
79-
export const CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 128;
80-
export const CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 104;
81-
export const L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 128;
82-
export const LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 128;
71+
export const COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP = 2048;
72+
export const NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048;
73+
export const PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 1024;
74+
export const CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32;
75+
export const CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64;
76+
export const CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52;
77+
export const L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64;
78+
export const LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64;
8379
export enum GeneratorIndex {
8480
COMMITMENT = 1,
8581
COMMITMENT_NONCE = 2,

yarn-project/circuits.js/src/structs/rollup/base_rollup.ts

+20-35
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import { BufferReader, Tuple } from '@aztec/foundation/serialize';
44
import {
55
ARCHIVE_HEIGHT,
66
CONTRACT_SUBTREE_SIBLING_PATH_LENGTH,
7-
KERNELS_PER_BASE_ROLLUP,
8-
MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP,
7+
MAX_NEW_NULLIFIERS_PER_TX,
98
MAX_PUBLIC_DATA_READS_PER_TX,
109
MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
1110
NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH,
@@ -98,7 +97,7 @@ export class BaseRollupInputs {
9897
/**
9998
* Data of the 2 kernels that preceded this base rollup circuit.
10099
*/
101-
public kernelData: Tuple<PreviousKernelData, typeof KERNELS_PER_BASE_ROLLUP>,
100+
public kernelData: PreviousKernelData,
102101
/**
103102
* Snapshot of the note hash tree at the start of the base rollup circuit.
104103
*/
@@ -123,23 +122,23 @@ export class BaseRollupInputs {
123122
/**
124123
* The nullifiers to be inserted in the tree, sorted high to low.
125124
*/
126-
public sortedNewNullifiers: Tuple<Fr, typeof MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP>,
125+
public sortedNewNullifiers: Tuple<Fr, typeof MAX_NEW_NULLIFIERS_PER_TX>,
127126
/**
128127
* The indexes of the sorted nullifiers to the original ones.
129128
*/
130-
public sortednewNullifiersIndexes: Tuple<UInt32, typeof MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP>,
129+
public sortednewNullifiersIndexes: Tuple<UInt32, typeof MAX_NEW_NULLIFIERS_PER_TX>,
131130
/**
132131
* The nullifiers which need to be updated to perform the batch insertion of the new nullifiers.
133132
* See `StandardIndexedTree.batchInsert` function for more details.
134133
*/
135-
public lowNullifierLeafPreimages: Tuple<NullifierLeafPreimage, typeof MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP>,
134+
public lowNullifierLeafPreimages: Tuple<NullifierLeafPreimage, typeof MAX_NEW_NULLIFIERS_PER_TX>,
136135
/**
137136
* Membership witnesses for the nullifiers which need to be updated to perform the batch insertion of the new
138137
* nullifiers.
139138
*/
140139
public lowNullifierMembershipWitness: Tuple<
141140
MembershipWitness<typeof NULLIFIER_TREE_HEIGHT>,
142-
typeof MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP
141+
typeof MAX_NEW_NULLIFIERS_PER_TX
143142
>,
144143

145144
/**
@@ -157,65 +156,51 @@ export class BaseRollupInputs {
157156
/**
158157
* The public data writes to be inserted in the tree, sorted high slot to low slot.
159158
*/
160-
public sortedPublicDataWrites: Tuple<
161-
Tuple<PublicDataTreeLeaf, typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX>,
162-
typeof KERNELS_PER_BASE_ROLLUP
163-
>,
159+
public sortedPublicDataWrites: Tuple<PublicDataTreeLeaf, typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX>,
160+
164161
/**
165162
* The indexes of the sorted public data writes to the original ones.
166163
*/
167-
public sortedPublicDataWritesIndexes: Tuple<
168-
Tuple<UInt32, typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX>,
169-
typeof KERNELS_PER_BASE_ROLLUP
170-
>,
164+
public sortedPublicDataWritesIndexes: Tuple<UInt32, typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX>,
171165
/**
172166
* The public data writes which need to be updated to perform the batch insertion of the new public data writes.
173167
* See `StandardIndexedTree.batchInsert` function for more details.
174168
*/
175169
public lowPublicDataWritesPreimages: Tuple<
176-
Tuple<PublicDataTreeLeafPreimage, typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX>,
177-
typeof KERNELS_PER_BASE_ROLLUP
170+
PublicDataTreeLeafPreimage,
171+
typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
178172
>,
179173
/**
180174
* Membership witnesses for the nullifiers which need to be updated to perform the batch insertion of the new
181175
* nullifiers.
182176
*/
183177
public lowPublicDataWritesMembershipWitnesses: Tuple<
184-
Tuple<MembershipWitness<typeof PUBLIC_DATA_TREE_HEIGHT>, typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX>,
185-
typeof KERNELS_PER_BASE_ROLLUP
178+
MembershipWitness<typeof PUBLIC_DATA_TREE_HEIGHT>,
179+
typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
186180
>,
187181

188182
/**
189183
* Sibling path "pointing to" where the new public data subtree should be inserted into the public data tree.
190184
*/
191-
public publicDataWritesSubtreeSiblingPaths: Tuple<
192-
Tuple<Fr, typeof PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH>,
193-
typeof KERNELS_PER_BASE_ROLLUP
194-
>,
185+
public publicDataWritesSubtreeSiblingPath: Tuple<Fr, typeof PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH>,
195186

196187
/**
197188
* Preimages of leaves which are to be read by the public data reads.
198189
*/
199-
public publicDataReadsPreimages: Tuple<
200-
Tuple<PublicDataTreeLeafPreimage, typeof MAX_PUBLIC_DATA_READS_PER_TX>,
201-
typeof KERNELS_PER_BASE_ROLLUP
202-
>,
190+
public publicDataReadsPreimages: Tuple<PublicDataTreeLeafPreimage, typeof MAX_PUBLIC_DATA_READS_PER_TX>,
203191
/**
204192
* Sibling paths of leaves which are to be read by the public data reads.
205193
* Each item in the array is the sibling path that corresponds to a read request.
206194
*/
207195
public publicDataReadsMembershipWitnesses: Tuple<
208-
Tuple<MembershipWitness<typeof PUBLIC_DATA_TREE_HEIGHT>, typeof MAX_PUBLIC_DATA_READS_PER_TX>,
209-
typeof KERNELS_PER_BASE_ROLLUP
196+
MembershipWitness<typeof PUBLIC_DATA_TREE_HEIGHT>,
197+
typeof MAX_PUBLIC_DATA_READS_PER_TX
210198
>,
211199

212200
/**
213201
* Membership witnesses of blocks referred by each of the 2 kernels.
214202
*/
215-
public archiveRootMembershipWitnesses: Tuple<
216-
MembershipWitness<typeof ARCHIVE_HEIGHT>,
217-
typeof KERNELS_PER_BASE_ROLLUP
218-
>,
203+
public archiveRootMembershipWitness: MembershipWitness<typeof ARCHIVE_HEIGHT>,
219204
/**
220205
* Data which is not modified by the base rollup circuit.
221206
*/
@@ -245,10 +230,10 @@ export class BaseRollupInputs {
245230
fields.sortedPublicDataWritesIndexes,
246231
fields.lowPublicDataWritesPreimages,
247232
fields.lowPublicDataWritesMembershipWitnesses,
248-
fields.publicDataWritesSubtreeSiblingPaths,
233+
fields.publicDataWritesSubtreeSiblingPath,
249234
fields.publicDataReadsPreimages,
250235
fields.publicDataReadsMembershipWitnesses,
251-
fields.archiveRootMembershipWitnesses,
236+
fields.archiveRootMembershipWitness,
252237
fields.constants,
253238
] as const;
254239
}

0 commit comments

Comments
 (0)