@aztec/prover-client 0.0.1-fake-c83136db25 → 0.0.1-fake-ceab37513c
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/bin/get-proof-inputs.d.ts +2 -0
- package/dest/bin/get-proof-inputs.d.ts.map +1 -0
- package/dest/bin/get-proof-inputs.js +51 -0
- package/dest/block-factory/light.d.ts +3 -5
- package/dest/block-factory/light.d.ts.map +1 -1
- package/dest/block-factory/light.js +9 -16
- package/dest/config.js +1 -1
- package/dest/mocks/fixtures.d.ts +1 -4
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +3 -31
- package/dest/mocks/test_context.d.ts +9 -32
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +22 -78
- package/dest/orchestrator/block-building-helpers.d.ts +31 -33
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +137 -126
- package/dest/orchestrator/block-proving-state.d.ts +53 -60
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +187 -214
- package/dest/orchestrator/epoch-proving-state.d.ts +28 -34
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +84 -128
- package/dest/orchestrator/orchestrator.d.ts +30 -31
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +236 -368
- package/dest/orchestrator/tx-proving-state.d.ts +9 -11
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +23 -26
- package/dest/prover-client/server-epoch-prover.d.ts +8 -9
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +9 -9
- package/dest/proving_broker/broker_prover_facade.d.ts +15 -20
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +21 -36
- package/dest/proving_broker/fixtures.js +1 -1
- package/dest/proving_broker/proof_store/index.d.ts +0 -1
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.js +0 -1
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +18 -29
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +18 -38
- package/dest/test/mock_prover.d.ts +17 -22
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +20 -35
- package/package.json +17 -16
- package/src/bin/get-proof-inputs.ts +59 -0
- package/src/block-factory/light.ts +9 -35
- package/src/config.ts +1 -1
- package/src/mocks/fixtures.ts +11 -39
- package/src/mocks/test_context.ts +31 -137
- package/src/orchestrator/block-building-helpers.ts +211 -211
- package/src/orchestrator/block-proving-state.ts +245 -235
- package/src/orchestrator/epoch-proving-state.ts +127 -172
- package/src/orchestrator/orchestrator.ts +303 -545
- package/src/orchestrator/tx-proving-state.ts +43 -49
- package/src/prover-client/server-epoch-prover.ts +18 -28
- package/src/proving_broker/broker_prover_facade.ts +86 -157
- package/src/proving_broker/fixtures.ts +1 -1
- package/src/proving_broker/proof_store/index.ts +0 -1
- package/src/proving_broker/proving_broker.ts +18 -36
- package/src/proving_broker/proving_job_controller.ts +18 -38
- package/src/test/mock_prover.ts +60 -142
- package/dest/orchestrator/checkpoint-proving-state.d.ts +0 -63
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +0 -1
- package/dest/orchestrator/checkpoint-proving-state.js +0 -211
- package/src/orchestrator/checkpoint-proving-state.ts +0 -299
|
@@ -1,44 +1,35 @@
|
|
|
1
1
|
import type { BBProverConfig } from '@aztec/bb-prover';
|
|
2
|
-
import { TestCircuitProver } from '@aztec/bb-prover';
|
|
3
|
-
import { SpongeBlob } from '@aztec/blob-lib';
|
|
4
2
|
import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
|
|
5
3
|
import { padArrayEnd, times, timesParallel } from '@aztec/foundation/collection';
|
|
6
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
7
5
|
import type { Logger } from '@aztec/foundation/log';
|
|
8
6
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
9
|
-
import type { FieldsOf } from '@aztec/foundation/types';
|
|
10
7
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
11
|
-
import {
|
|
8
|
+
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
12
9
|
import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
13
10
|
import { SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
|
|
14
11
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
15
12
|
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
16
13
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
17
|
-
import { EthAddress } from '@aztec/stdlib/block';
|
|
18
|
-
import { getCheckpointBlobFields } from '@aztec/stdlib/checkpoint';
|
|
14
|
+
import { EthAddress, type L2Block } from '@aztec/stdlib/block';
|
|
19
15
|
import type { ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
20
|
-
import type { CheckpointConstantData } from '@aztec/stdlib/rollup';
|
|
21
16
|
import { makeBloatedProcessedTx } from '@aztec/stdlib/testing';
|
|
22
|
-
import { MerkleTreeId, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
17
|
+
import { type AppendOnlyTreeSnapshot, MerkleTreeId, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
23
18
|
import { type BlockHeader, type GlobalVariables, type ProcessedTx, TreeSnapshots, type Tx } from '@aztec/stdlib/tx';
|
|
24
19
|
import type { MerkleTreeAdminDatabase } from '@aztec/world-state';
|
|
25
20
|
import { NativeWorldStateService } from '@aztec/world-state/native';
|
|
26
21
|
|
|
27
22
|
import { promises as fs } from 'fs';
|
|
28
23
|
|
|
24
|
+
// TODO(#12613) This means of sharing test code is not ideal.
|
|
25
|
+
// eslint-disable-next-line import/no-relative-packages
|
|
26
|
+
import { TestCircuitProver } from '../../../bb-prover/src/test/test_circuit_prover.js';
|
|
29
27
|
import { buildBlockWithCleanDB } from '../block-factory/light.js';
|
|
30
28
|
import { getTreeSnapshot } from '../orchestrator/block-building-helpers.js';
|
|
31
|
-
import type { BlockProvingState } from '../orchestrator/block-proving-state.js';
|
|
32
29
|
import { ProvingOrchestrator } from '../orchestrator/index.js';
|
|
33
30
|
import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
|
|
34
31
|
import { TestBroker } from '../test/mock_prover.js';
|
|
35
|
-
import {
|
|
36
|
-
getEnvironmentConfig,
|
|
37
|
-
getSimulator,
|
|
38
|
-
makeCheckpointConstants,
|
|
39
|
-
makeGlobals,
|
|
40
|
-
updateExpectedTreesFromTxs,
|
|
41
|
-
} from './fixtures.js';
|
|
32
|
+
import { getEnvironmentConfig, getSimulator, makeGlobals, updateExpectedTreesFromTxs } from './fixtures.js';
|
|
42
33
|
|
|
43
34
|
export class TestContext {
|
|
44
35
|
private headers: Map<number, BlockHeader> = new Map();
|
|
@@ -46,7 +37,6 @@ export class TestContext {
|
|
|
46
37
|
|
|
47
38
|
constructor(
|
|
48
39
|
public worldState: MerkleTreeAdminDatabase,
|
|
49
|
-
public firstCheckpointNumber: Fr,
|
|
50
40
|
public globalVariables: GlobalVariables,
|
|
51
41
|
public prover: ServerCircuitProver,
|
|
52
42
|
public broker: TestBroker,
|
|
@@ -65,27 +55,20 @@ export class TestContext {
|
|
|
65
55
|
return this.orchestrator;
|
|
66
56
|
}
|
|
67
57
|
|
|
68
|
-
public getCheckpointConstants(checkpointIndex = 0): CheckpointConstantData {
|
|
69
|
-
return makeCheckpointConstants(this.firstCheckpointNumber.toNumber() + checkpointIndex);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
58
|
static async new(
|
|
73
59
|
logger: Logger,
|
|
74
60
|
{
|
|
75
61
|
proverCount = 4,
|
|
76
62
|
createProver = async (bbConfig: BBProverConfig) => new TestCircuitProver(await getSimulator(bbConfig, logger)),
|
|
77
|
-
slotNumber = 1,
|
|
78
63
|
blockNumber = 1,
|
|
79
64
|
}: {
|
|
80
65
|
proverCount?: number;
|
|
81
66
|
createProver?: (bbConfig: BBProverConfig) => Promise<ServerCircuitProver>;
|
|
82
|
-
slotNumber?: number;
|
|
83
67
|
blockNumber?: number;
|
|
84
68
|
} = {},
|
|
85
69
|
) {
|
|
86
70
|
const directoriesToCleanup: string[] = [];
|
|
87
|
-
const
|
|
88
|
-
const globalVariables = makeGlobals(blockNumber, slotNumber);
|
|
71
|
+
const globalVariables = makeGlobals(blockNumber);
|
|
89
72
|
|
|
90
73
|
const feePayer = AztecAddress.fromNumber(42222);
|
|
91
74
|
const initialFeePayerBalance = new Fr(10n ** 20n);
|
|
@@ -129,7 +112,6 @@ export class TestContext {
|
|
|
129
112
|
|
|
130
113
|
return new this(
|
|
131
114
|
ws,
|
|
132
|
-
firstCheckpointNumber,
|
|
133
115
|
globalVariables,
|
|
134
116
|
localProver,
|
|
135
117
|
broker,
|
|
@@ -149,10 +131,14 @@ export class TestContext {
|
|
|
149
131
|
|
|
150
132
|
public getBlockHeader(blockNumber: 0): BlockHeader;
|
|
151
133
|
public getBlockHeader(blockNumber: number): BlockHeader | undefined;
|
|
152
|
-
public getBlockHeader(blockNumber = 0)
|
|
134
|
+
public getBlockHeader(blockNumber = 0) {
|
|
153
135
|
return blockNumber === 0 ? this.worldState.getCommitted().getInitialHeader() : this.headers.get(blockNumber);
|
|
154
136
|
}
|
|
155
137
|
|
|
138
|
+
public setBlockHeader(header: BlockHeader, blockNumber: number) {
|
|
139
|
+
this.headers.set(blockNumber, header);
|
|
140
|
+
}
|
|
141
|
+
|
|
156
142
|
public getPreviousBlockHeader(currentBlockNumber = this.blockNumber): BlockHeader {
|
|
157
143
|
return this.getBlockHeader(currentBlockNumber - 1)!;
|
|
158
144
|
}
|
|
@@ -169,15 +155,14 @@ export class TestContext {
|
|
|
169
155
|
}
|
|
170
156
|
}
|
|
171
157
|
|
|
172
|
-
async makeProcessedTx(opts?: Parameters<typeof makeBloatedProcessedTx>[0]): Promise<ProcessedTx> {
|
|
173
|
-
const
|
|
174
|
-
const
|
|
175
|
-
const header = opts?.header ?? this.getBlockHeader(blockNumber - 1);
|
|
158
|
+
private async makeProcessedTx(opts?: Parameters<typeof makeBloatedProcessedTx>[0]): Promise<ProcessedTx> {
|
|
159
|
+
const blockNum = (opts?.globalVariables ?? this.globalVariables).blockNumber;
|
|
160
|
+
const header = this.getBlockHeader(blockNum - 1);
|
|
176
161
|
const tx = await makeBloatedProcessedTx({
|
|
177
162
|
header,
|
|
178
163
|
vkTreeRoot: getVKTreeRoot(),
|
|
179
|
-
|
|
180
|
-
globalVariables,
|
|
164
|
+
protocolContractTreeRoot,
|
|
165
|
+
globalVariables: this.globalVariables,
|
|
181
166
|
feePayer: this.feePayer,
|
|
182
167
|
...opts,
|
|
183
168
|
});
|
|
@@ -192,27 +177,18 @@ export class TestContext {
|
|
|
192
177
|
/** Creates a block with the given number of txs and adds it to world-state */
|
|
193
178
|
public async makePendingBlock(
|
|
194
179
|
numTxs: number,
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
blockNumber = this.blockNumber,
|
|
199
|
-
makeProcessedTxOpts = () => ({}),
|
|
200
|
-
}: {
|
|
201
|
-
checkpointIndex?: number;
|
|
202
|
-
numL1ToL2Messages?: number;
|
|
203
|
-
blockNumber?: number;
|
|
204
|
-
makeProcessedTxOpts?: (index: number) => Partial<Parameters<typeof makeBloatedProcessedTx>[0]>;
|
|
205
|
-
} = {},
|
|
180
|
+
numL1ToL2Messages: number = 0,
|
|
181
|
+
blockNumOrGlobals: GlobalVariables | number = this.globalVariables,
|
|
182
|
+
makeProcessedTxOpts: (index: number) => Partial<Parameters<typeof makeBloatedProcessedTx>[0]> = () => ({}),
|
|
206
183
|
) {
|
|
207
|
-
const
|
|
208
|
-
const globalVariables = makeGlobals(blockNumber, slotNumber);
|
|
184
|
+
const globalVariables = typeof blockNumOrGlobals === 'number' ? makeGlobals(blockNumOrGlobals) : blockNumOrGlobals;
|
|
209
185
|
const blockNum = globalVariables.blockNumber;
|
|
210
186
|
const db = await this.worldState.fork();
|
|
211
187
|
const l1ToL2Messages = times(numL1ToL2Messages, i => new Fr(blockNum * 100 + i));
|
|
212
188
|
const merkleTrees = await this.worldState.fork();
|
|
213
189
|
await merkleTrees.appendLeaves(
|
|
214
190
|
MerkleTreeId.L1_TO_L2_MESSAGE_TREE,
|
|
215
|
-
padArrayEnd
|
|
191
|
+
padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP),
|
|
216
192
|
);
|
|
217
193
|
const newL1ToL2Snapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, merkleTrees);
|
|
218
194
|
const txs = await timesParallel(numTxs, i =>
|
|
@@ -226,93 +202,11 @@ export class TestContext {
|
|
|
226
202
|
await this.setTreeRoots(txs);
|
|
227
203
|
|
|
228
204
|
const block = await buildBlockWithCleanDB(txs, globalVariables, l1ToL2Messages, db);
|
|
229
|
-
this.headers.set(blockNum, block.
|
|
205
|
+
this.headers.set(blockNum, block.header);
|
|
230
206
|
await this.worldState.handleL2BlockAndMessages(block, l1ToL2Messages);
|
|
231
207
|
return { block, txs, l1ToL2Messages };
|
|
232
208
|
}
|
|
233
209
|
|
|
234
|
-
public async makePendingBlocksInCheckpoint(
|
|
235
|
-
numBlocks: number,
|
|
236
|
-
{
|
|
237
|
-
checkpointIndex = 0,
|
|
238
|
-
numTxsPerBlock = 1,
|
|
239
|
-
numL1ToL2Messages = 0,
|
|
240
|
-
firstBlockNumber = this.blockNumber + checkpointIndex * numBlocks,
|
|
241
|
-
makeGlobalVariablesOpts = () => ({}),
|
|
242
|
-
makeProcessedTxOpts = () => ({}),
|
|
243
|
-
}: {
|
|
244
|
-
checkpointIndex?: number;
|
|
245
|
-
numTxsPerBlock?: number | number[];
|
|
246
|
-
numL1ToL2Messages?: number;
|
|
247
|
-
firstBlockNumber?: number;
|
|
248
|
-
makeGlobalVariablesOpts?: (
|
|
249
|
-
blockNumber: number,
|
|
250
|
-
checkpointIndex: number,
|
|
251
|
-
) => Partial<FieldsOf<GlobalVariables> & FieldsOf<CheckpointConstantData>>;
|
|
252
|
-
makeProcessedTxOpts?: (
|
|
253
|
-
blockGlobalVariables: GlobalVariables,
|
|
254
|
-
txIndex: number,
|
|
255
|
-
) => Partial<Parameters<typeof makeBloatedProcessedTx>[0]>;
|
|
256
|
-
} = {},
|
|
257
|
-
) {
|
|
258
|
-
const slotNumber = this.firstCheckpointNumber.toNumber() + checkpointIndex;
|
|
259
|
-
const l1ToL2Messages = times(numL1ToL2Messages, i => new Fr(slotNumber * 100 + i));
|
|
260
|
-
const merkleTrees = await this.worldState.fork();
|
|
261
|
-
await merkleTrees.appendLeaves(
|
|
262
|
-
MerkleTreeId.L1_TO_L2_MESSAGE_TREE,
|
|
263
|
-
padArrayEnd<Fr, number>(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP),
|
|
264
|
-
);
|
|
265
|
-
const newL1ToL2Snapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, merkleTrees);
|
|
266
|
-
|
|
267
|
-
const blockGlobalVariables = times(numBlocks, i =>
|
|
268
|
-
makeGlobals(firstBlockNumber + i, slotNumber, makeGlobalVariablesOpts(firstBlockNumber + i, checkpointIndex)),
|
|
269
|
-
);
|
|
270
|
-
let totalTxs = 0;
|
|
271
|
-
const blockTxs = await timesParallel(numBlocks, blockIndex => {
|
|
272
|
-
const txIndexOffset = totalTxs;
|
|
273
|
-
const numTxs = typeof numTxsPerBlock === 'number' ? numTxsPerBlock : numTxsPerBlock[blockIndex];
|
|
274
|
-
totalTxs += numTxs;
|
|
275
|
-
return timesParallel(numTxs, txIndex =>
|
|
276
|
-
this.makeProcessedTx({
|
|
277
|
-
seed: (txIndexOffset + txIndex + 1) * 321 + (checkpointIndex + 1) * 123456,
|
|
278
|
-
globalVariables: blockGlobalVariables[blockIndex],
|
|
279
|
-
header: this.getBlockHeader(firstBlockNumber - 1),
|
|
280
|
-
newL1ToL2Snapshot,
|
|
281
|
-
...makeProcessedTxOpts(blockGlobalVariables[blockIndex], txIndexOffset + txIndex),
|
|
282
|
-
}),
|
|
283
|
-
);
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
const blobFields = getCheckpointBlobFields(blockTxs.map(txs => txs.map(tx => tx.txEffect)));
|
|
287
|
-
const spongeBlobState = await SpongeBlob.init(blobFields.length);
|
|
288
|
-
|
|
289
|
-
const blocks: { header: BlockHeader; txs: ProcessedTx[] }[] = [];
|
|
290
|
-
for (let i = 0; i < numBlocks; i++) {
|
|
291
|
-
const isFirstBlock = i === 0;
|
|
292
|
-
const blockNumber = firstBlockNumber + i;
|
|
293
|
-
const globalVariables = blockGlobalVariables[i];
|
|
294
|
-
const txs = blockTxs[i];
|
|
295
|
-
|
|
296
|
-
await this.setTreeRoots(txs);
|
|
297
|
-
|
|
298
|
-
const fork = await this.worldState.fork();
|
|
299
|
-
const blockMsgs = isFirstBlock ? l1ToL2Messages : [];
|
|
300
|
-
const block = await buildBlockWithCleanDB(txs, globalVariables, blockMsgs, fork, spongeBlobState, isFirstBlock);
|
|
301
|
-
|
|
302
|
-
const header = block.getBlockHeader();
|
|
303
|
-
this.headers.set(blockNumber, header);
|
|
304
|
-
|
|
305
|
-
await this.worldState.handleL2BlockAndMessages(block, blockMsgs, isFirstBlock);
|
|
306
|
-
|
|
307
|
-
const blockBlobFields = block.body.toBlobFields();
|
|
308
|
-
await spongeBlobState.absorb(blockBlobFields);
|
|
309
|
-
|
|
310
|
-
blocks.push({ header, txs });
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
return { blocks, l1ToL2Messages, blobFields };
|
|
314
|
-
}
|
|
315
|
-
|
|
316
210
|
public async processPublicFunctions(
|
|
317
211
|
txs: Tx[],
|
|
318
212
|
{
|
|
@@ -329,17 +223,14 @@ export class TestContext {
|
|
|
329
223
|
const merkleTrees = await this.worldState.fork();
|
|
330
224
|
await merkleTrees.appendLeaves(
|
|
331
225
|
MerkleTreeId.L1_TO_L2_MESSAGE_TREE,
|
|
332
|
-
padArrayEnd
|
|
226
|
+
padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP),
|
|
333
227
|
);
|
|
334
228
|
|
|
335
229
|
const processorFactory = new PublicProcessorFactory(
|
|
336
230
|
contractDataSource ?? new SimpleContractDataSource(),
|
|
337
231
|
new TestDateProvider(),
|
|
338
232
|
);
|
|
339
|
-
const publicProcessor = processorFactory.create(merkleTrees, this.globalVariables,
|
|
340
|
-
skipFeeEnforcement: false,
|
|
341
|
-
clientInitiatedSimulation: false,
|
|
342
|
-
});
|
|
233
|
+
const publicProcessor = processorFactory.create(merkleTrees, this.globalVariables, /*skipFeeEnforcement=*/ false);
|
|
343
234
|
|
|
344
235
|
return await publicProcessor.process(txs, { maxTransactions });
|
|
345
236
|
}
|
|
@@ -374,9 +265,12 @@ class TestProvingOrchestrator extends ProvingOrchestrator {
|
|
|
374
265
|
|
|
375
266
|
// Disable this check by default, since it requires seeding world state with the block being built
|
|
376
267
|
// This is only enabled in some tests with multiple blocks that populate the pending chain via makePendingBlock
|
|
377
|
-
protected override verifyBuiltBlockAgainstSyncedState(
|
|
268
|
+
protected override verifyBuiltBlockAgainstSyncedState(
|
|
269
|
+
l2Block: L2Block,
|
|
270
|
+
newArchive: AppendOnlyTreeSnapshot,
|
|
271
|
+
): Promise<void> {
|
|
378
272
|
if (this.isVerifyBuiltBlockAgainstSyncedStateEnabled) {
|
|
379
|
-
return super.verifyBuiltBlockAgainstSyncedState(
|
|
273
|
+
return super.verifyBuiltBlockAgainstSyncedState(l2Block, newArchive);
|
|
380
274
|
}
|
|
381
275
|
return Promise.resolve();
|
|
382
276
|
}
|