@aztec/sequencer-client 0.30.0 → 0.31.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/client/sequencer-client.d.ts +5 -1
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +5 -34
- package/dest/index.d.ts +0 -7
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -8
- package/dest/publisher/viem-tx-sender.d.ts.map +1 -1
- package/dest/publisher/viem-tx-sender.js +2 -3
- package/dest/sequencer/abstract_phase_manager.d.ts +1 -3
- package/dest/sequencer/abstract_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/abstract_phase_manager.js +13 -17
- package/dest/sequencer/app_logic_phase_manager.d.ts +1 -3
- package/dest/sequencer/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/app_logic_phase_manager.js +3 -4
- package/dest/sequencer/phase_manager_factory.d.ts +2 -3
- package/dest/sequencer/phase_manager_factory.d.ts.map +1 -1
- package/dest/sequencer/phase_manager_factory.js +9 -9
- package/dest/sequencer/public_processor.d.ts +3 -7
- package/dest/sequencer/public_processor.d.ts.map +1 -1
- package/dest/sequencer/public_processor.js +6 -9
- package/dest/sequencer/sequencer.d.ts +4 -5
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +13 -12
- package/dest/sequencer/setup_phase_manager.d.ts +1 -3
- package/dest/sequencer/setup_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/setup_phase_manager.js +3 -4
- package/dest/sequencer/tail_phase_manager.d.ts +1 -3
- package/dest/sequencer/tail_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/tail_phase_manager.js +3 -4
- package/dest/sequencer/teardown_phase_manager.d.ts +1 -3
- package/dest/sequencer/teardown_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/teardown_phase_manager.js +3 -4
- package/dest/sequencer/tx_validator.d.ts +1 -2
- package/dest/sequencer/tx_validator.d.ts.map +1 -1
- package/dest/sequencer/tx_validator.js +15 -2
- package/dest/simulator/index.d.ts +1 -37
- package/dest/simulator/index.d.ts.map +1 -1
- package/dest/simulator/index.js +2 -2
- package/dest/simulator/public_executor.d.ts +1 -1
- package/dest/simulator/public_executor.d.ts.map +1 -1
- package/dest/simulator/public_executor.js +22 -12
- package/dest/simulator/public_kernel.d.ts +1 -1
- package/dest/simulator/public_kernel.d.ts.map +1 -1
- package/dest/simulator/public_kernel.js +2 -2
- package/package.json +13 -13
- package/src/client/sequencer-client.ts +7 -42
- package/src/index.ts +0 -9
- package/src/publisher/viem-tx-sender.ts +1 -2
- package/src/sequencer/abstract_phase_manager.ts +14 -16
- package/src/sequencer/app_logic_phase_manager.ts +1 -3
- package/src/sequencer/phase_manager_factory.ts +0 -9
- package/src/sequencer/public_processor.ts +12 -17
- package/src/sequencer/sequencer.ts +12 -13
- package/src/sequencer/setup_phase_manager.ts +1 -3
- package/src/sequencer/tail_phase_manager.ts +1 -3
- package/src/sequencer/teardown_phase_manager.ts +1 -3
- package/src/sequencer/tx_validator.ts +17 -2
- package/src/simulator/index.ts +0 -45
- package/src/simulator/public_executor.ts +32 -11
- package/src/simulator/public_kernel.ts +2 -2
- package/dest/block_builder/index.d.ts +0 -19
- package/dest/block_builder/index.d.ts.map +0 -1
- package/dest/block_builder/index.js +0 -2
- package/dest/block_builder/solo_block_builder.d.ts +0 -78
- package/dest/block_builder/solo_block_builder.d.ts.map +0 -1
- package/dest/block_builder/solo_block_builder.js +0 -489
- package/dest/block_builder/types.d.ts +0 -10
- package/dest/block_builder/types.d.ts.map +0 -1
- package/dest/block_builder/types.js +0 -2
- package/dest/mocks/verification_keys.d.ts +0 -28
- package/dest/mocks/verification_keys.d.ts.map +0 -1
- package/dest/mocks/verification_keys.js +0 -14
- package/dest/prover/empty.d.ts +0 -53
- package/dest/prover/empty.d.ts.map +0 -1
- package/dest/prover/empty.js +0 -75
- package/dest/prover/index.d.ts +0 -52
- package/dest/prover/index.d.ts.map +0 -1
- package/dest/prover/index.js +0 -2
- package/dest/sequencer/processed_tx.d.ts +0 -81
- package/dest/sequencer/processed_tx.d.ts.map +0 -1
- package/dest/sequencer/processed_tx.js +0 -98
- package/dest/simulator/acvm_native.d.ts +0 -20
- package/dest/simulator/acvm_native.d.ts.map +0 -1
- package/dest/simulator/acvm_native.js +0 -96
- package/dest/simulator/acvm_wasm.d.ts +0 -7
- package/dest/simulator/acvm_wasm.d.ts.map +0 -1
- package/dest/simulator/acvm_wasm.js +0 -23
- package/dest/simulator/rollup.d.ts +0 -43
- package/dest/simulator/rollup.d.ts.map +0 -1
- package/dest/simulator/rollup.js +0 -78
- package/dest/simulator/simulation_provider.d.ts +0 -9
- package/dest/simulator/simulation_provider.d.ts.map +0 -1
- package/dest/simulator/simulation_provider.js +0 -2
- package/src/block_builder/index.ts +0 -20
- package/src/block_builder/solo_block_builder.ts +0 -812
- package/src/block_builder/types.ts +0 -8
- package/src/mocks/verification_keys.ts +0 -36
- package/src/prover/empty.ts +0 -97
- package/src/prover/index.ts +0 -70
- package/src/sequencer/processed_tx.ts +0 -210
- package/src/simulator/acvm_native.ts +0 -112
- package/src/simulator/acvm_wasm.ts +0 -31
- package/src/simulator/rollup.ts +0 -127
- package/src/simulator/simulation_provider.ts +0 -10
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { L1ToL2MessageSource, L2Block, L2BlockSource, MerkleTreeId, Tx } from '@aztec/circuit-types';
|
|
1
|
+
import { L1ToL2MessageSource, L2Block, L2BlockSource, MerkleTreeId, ProcessedTx, Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { BlockProver, PROVING_STATUS } from '@aztec/circuit-types/interfaces';
|
|
2
3
|
import { L2BlockBuiltStats } from '@aztec/circuit-types/stats';
|
|
3
4
|
import { AztecAddress, EthAddress, GlobalVariables } from '@aztec/circuits.js';
|
|
4
|
-
import { times } from '@aztec/foundation/collection';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
6
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
7
7
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
@@ -9,13 +9,10 @@ import { Timer, elapsed } from '@aztec/foundation/timer';
|
|
|
9
9
|
import { P2P } from '@aztec/p2p';
|
|
10
10
|
import { WorldStateStatus, WorldStateSynchronizer } from '@aztec/world-state';
|
|
11
11
|
|
|
12
|
-
import { BlockBuilder } from '../block_builder/index.js';
|
|
13
12
|
import { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js';
|
|
14
13
|
import { L1Publisher } from '../publisher/l1-publisher.js';
|
|
15
14
|
import { WorldStatePublicDB } from '../simulator/public_executor.js';
|
|
16
|
-
import { ceilPowerOfTwo } from '../utils.js';
|
|
17
15
|
import { SequencerConfig } from './config.js';
|
|
18
|
-
import { ProcessedTx } from './processed_tx.js';
|
|
19
16
|
import { PublicProcessorFactory } from './public_processor.js';
|
|
20
17
|
import { TxValidator } from './tx_validator.js';
|
|
21
18
|
|
|
@@ -44,7 +41,7 @@ export class Sequencer {
|
|
|
44
41
|
private globalsBuilder: GlobalVariableBuilder,
|
|
45
42
|
private p2pClient: P2P,
|
|
46
43
|
private worldState: WorldStateSynchronizer,
|
|
47
|
-
private
|
|
44
|
+
private prover: BlockProver,
|
|
48
45
|
private l2BlockSource: L2BlockSource,
|
|
49
46
|
private l1ToL2MessageSource: L1ToL2MessageSource,
|
|
50
47
|
private publicProcessorFactory: PublicProcessorFactory,
|
|
@@ -305,15 +302,17 @@ export class Sequencer {
|
|
|
305
302
|
emptyTx: ProcessedTx,
|
|
306
303
|
globalVariables: GlobalVariables,
|
|
307
304
|
) {
|
|
308
|
-
|
|
309
|
-
const txsTargetSize = Math.max(ceilPowerOfTwo(txs.length), 2);
|
|
310
|
-
const emptyTxCount = txsTargetSize - txs.length;
|
|
305
|
+
const blockTicket = await this.prover.startNewBlock(txs.length, globalVariables, l1ToL2Messages, emptyTx);
|
|
311
306
|
|
|
312
|
-
const
|
|
313
|
-
|
|
307
|
+
for (const tx of txs) {
|
|
308
|
+
await this.prover.addNewTx(tx);
|
|
309
|
+
}
|
|
314
310
|
|
|
315
|
-
const
|
|
316
|
-
|
|
311
|
+
const result = await blockTicket.provingPromise;
|
|
312
|
+
if (result.status === PROVING_STATUS.FAILURE) {
|
|
313
|
+
throw new Error(`Block proving failed, reason: ${result.reason}`);
|
|
314
|
+
}
|
|
315
|
+
return result.block;
|
|
317
316
|
}
|
|
318
317
|
|
|
319
318
|
get coinbase(): EthAddress {
|
|
@@ -3,7 +3,6 @@ import { GlobalVariables, Header, Proof, PublicKernelCircuitPublicInputs } from
|
|
|
3
3
|
import { PublicExecutor, PublicStateDB } from '@aztec/simulator';
|
|
4
4
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
5
5
|
|
|
6
|
-
import { PublicProver } from '../prover/index.js';
|
|
7
6
|
import { PublicKernelCircuitSimulator } from '../simulator/index.js';
|
|
8
7
|
import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js';
|
|
9
8
|
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
@@ -16,14 +15,13 @@ export class SetupPhaseManager extends AbstractPhaseManager {
|
|
|
16
15
|
protected db: MerkleTreeOperations,
|
|
17
16
|
protected publicExecutor: PublicExecutor,
|
|
18
17
|
protected publicKernel: PublicKernelCircuitSimulator,
|
|
19
|
-
protected publicProver: PublicProver,
|
|
20
18
|
protected globalVariables: GlobalVariables,
|
|
21
19
|
protected historicalHeader: Header,
|
|
22
20
|
protected publicContractsDB: ContractsDataSourcePublicDB,
|
|
23
21
|
protected publicStateDB: PublicStateDB,
|
|
24
22
|
public phase: PublicKernelPhase = PublicKernelPhase.SETUP,
|
|
25
23
|
) {
|
|
26
|
-
super(db, publicExecutor, publicKernel,
|
|
24
|
+
super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase);
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
override async handle(
|
|
@@ -3,7 +3,6 @@ import { GlobalVariables, Header, Proof, PublicKernelCircuitPublicInputs } from
|
|
|
3
3
|
import { PublicExecutor, PublicStateDB } from '@aztec/simulator';
|
|
4
4
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
5
5
|
|
|
6
|
-
import { PublicProver } from '../prover/index.js';
|
|
7
6
|
import { PublicKernelCircuitSimulator } from '../simulator/index.js';
|
|
8
7
|
import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js';
|
|
9
8
|
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
@@ -13,14 +12,13 @@ export class TailPhaseManager extends AbstractPhaseManager {
|
|
|
13
12
|
protected db: MerkleTreeOperations,
|
|
14
13
|
protected publicExecutor: PublicExecutor,
|
|
15
14
|
protected publicKernel: PublicKernelCircuitSimulator,
|
|
16
|
-
protected publicProver: PublicProver,
|
|
17
15
|
protected globalVariables: GlobalVariables,
|
|
18
16
|
protected historicalHeader: Header,
|
|
19
17
|
protected publicContractsDB: ContractsDataSourcePublicDB,
|
|
20
18
|
protected publicStateDB: PublicStateDB,
|
|
21
19
|
public readonly phase: PublicKernelPhase = PublicKernelPhase.TAIL,
|
|
22
20
|
) {
|
|
23
|
-
super(db, publicExecutor, publicKernel,
|
|
21
|
+
super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase);
|
|
24
22
|
}
|
|
25
23
|
|
|
26
24
|
async handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof) {
|
|
@@ -3,7 +3,6 @@ import { GlobalVariables, Header, Proof, PublicKernelCircuitPublicInputs } from
|
|
|
3
3
|
import { PublicExecutor, PublicStateDB } from '@aztec/simulator';
|
|
4
4
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
5
5
|
|
|
6
|
-
import { PublicProver } from '../prover/index.js';
|
|
7
6
|
import { PublicKernelCircuitSimulator } from '../simulator/index.js';
|
|
8
7
|
import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js';
|
|
9
8
|
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
@@ -16,14 +15,13 @@ export class TeardownPhaseManager extends AbstractPhaseManager {
|
|
|
16
15
|
protected db: MerkleTreeOperations,
|
|
17
16
|
protected publicExecutor: PublicExecutor,
|
|
18
17
|
protected publicKernel: PublicKernelCircuitSimulator,
|
|
19
|
-
protected publicProver: PublicProver,
|
|
20
18
|
protected globalVariables: GlobalVariables,
|
|
21
19
|
protected historicalHeader: Header,
|
|
22
20
|
protected publicContractsDB: ContractsDataSourcePublicDB,
|
|
23
21
|
protected publicStateDB: PublicStateDB,
|
|
24
22
|
public phase: PublicKernelPhase = PublicKernelPhase.TEARDOWN,
|
|
25
23
|
) {
|
|
26
|
-
super(db, publicExecutor, publicKernel,
|
|
24
|
+
super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase);
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
override async handle(
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { Tx } from '@aztec/circuit-types';
|
|
1
|
+
import { ProcessedTx, Tx } from '@aztec/circuit-types';
|
|
2
2
|
import { AztecAddress, EthAddress, Fr, GlobalVariables } from '@aztec/circuits.js';
|
|
3
3
|
import { pedersenHash } from '@aztec/foundation/crypto';
|
|
4
4
|
import { Logger, createDebugLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token';
|
|
6
6
|
|
|
7
7
|
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
8
|
-
import { ProcessedTx } from './processed_tx.js';
|
|
9
8
|
|
|
10
9
|
/** A source of what nullifiers have been committed to the state trees */
|
|
11
10
|
export interface NullifierSource {
|
|
@@ -77,6 +76,11 @@ export class TxValidator {
|
|
|
77
76
|
continue;
|
|
78
77
|
}
|
|
79
78
|
|
|
79
|
+
if (this.#validateMaxBlockNumber(tx) === INVALID_TX) {
|
|
80
|
+
invalidTxs.push(tx);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
|
|
80
84
|
validTxs.push(tx);
|
|
81
85
|
}
|
|
82
86
|
|
|
@@ -186,4 +190,15 @@ export class TxValidator {
|
|
|
186
190
|
|
|
187
191
|
return VALID_TX;
|
|
188
192
|
}
|
|
193
|
+
|
|
194
|
+
#validateMaxBlockNumber(tx: Tx | ProcessedTx): TxValidationStatus {
|
|
195
|
+
const maxBlockNumber = tx.data.rollupValidationRequests.maxBlockNumber;
|
|
196
|
+
|
|
197
|
+
if (maxBlockNumber.isSome && maxBlockNumber.value < this.#globalVariables.blockNumber) {
|
|
198
|
+
this.#log.warn(`Rejecting tx ${Tx.getHash(tx)} for low max block number`);
|
|
199
|
+
return INVALID_TX;
|
|
200
|
+
} else {
|
|
201
|
+
return VALID_TX;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
189
204
|
}
|
package/src/simulator/index.ts
CHANGED
|
@@ -1,53 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
|
-
BaseOrMergeRollupPublicInputs,
|
|
3
|
-
BaseParityInputs,
|
|
4
|
-
BaseRollupInputs,
|
|
5
|
-
MergeRollupInputs,
|
|
6
|
-
ParityPublicInputs,
|
|
7
2
|
PublicKernelCircuitPrivateInputs,
|
|
8
3
|
PublicKernelCircuitPublicInputs,
|
|
9
4
|
PublicKernelTailCircuitPrivateInputs,
|
|
10
|
-
RootParityInputs,
|
|
11
|
-
RootRollupInputs,
|
|
12
|
-
RootRollupPublicInputs,
|
|
13
5
|
} from '@aztec/circuits.js';
|
|
14
6
|
|
|
15
|
-
/**
|
|
16
|
-
* Circuit simulator for the rollup circuits.
|
|
17
|
-
*/
|
|
18
|
-
export interface RollupSimulator {
|
|
19
|
-
/**
|
|
20
|
-
* Simulates the base parity circuit from its inputs.
|
|
21
|
-
* @param inputs - Inputs to the circuit.
|
|
22
|
-
* @returns The public inputs of the parity circuit.
|
|
23
|
-
*/
|
|
24
|
-
baseParityCircuit(inputs: BaseParityInputs): Promise<ParityPublicInputs>;
|
|
25
|
-
/**
|
|
26
|
-
* Simulates the root parity circuit from its inputs.
|
|
27
|
-
* @param inputs - Inputs to the circuit.
|
|
28
|
-
* @returns The public inputs of the parity circuit.
|
|
29
|
-
*/
|
|
30
|
-
rootParityCircuit(inputs: RootParityInputs): Promise<ParityPublicInputs>;
|
|
31
|
-
/**
|
|
32
|
-
* Simulates the base rollup circuit from its inputs.
|
|
33
|
-
* @param input - Inputs to the circuit.
|
|
34
|
-
* @returns The public inputs as outputs of the simulation.
|
|
35
|
-
*/
|
|
36
|
-
baseRollupCircuit(input: BaseRollupInputs): Promise<BaseOrMergeRollupPublicInputs>;
|
|
37
|
-
/**
|
|
38
|
-
* Simulates the merge rollup circuit from its inputs.
|
|
39
|
-
* @param input - Inputs to the circuit.
|
|
40
|
-
* @returns The public inputs as outputs of the simulation.
|
|
41
|
-
*/
|
|
42
|
-
mergeRollupCircuit(input: MergeRollupInputs): Promise<BaseOrMergeRollupPublicInputs>;
|
|
43
|
-
/**
|
|
44
|
-
* Simulates the root rollup circuit from its inputs.
|
|
45
|
-
* @param input - Inputs to the circuit.
|
|
46
|
-
* @returns The public inputs as outputs of the simulation.
|
|
47
|
-
*/
|
|
48
|
-
rootRollupCircuit(input: RootRollupInputs): Promise<RootRollupPublicInputs>;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
7
|
/**
|
|
52
8
|
* Circuit simulator for the public kernel circuits.
|
|
53
9
|
*/
|
|
@@ -77,4 +33,3 @@ export interface PublicKernelCircuitSimulator {
|
|
|
77
33
|
*/
|
|
78
34
|
publicKernelCircuitTail(inputs: PublicKernelTailCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
|
|
79
35
|
}
|
|
80
|
-
export * from './acvm_wasm.js';
|
|
@@ -17,9 +17,9 @@ import {
|
|
|
17
17
|
NullifierLeafPreimage,
|
|
18
18
|
PublicDataTreeLeafPreimage,
|
|
19
19
|
} from '@aztec/circuits.js';
|
|
20
|
-
import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
|
|
20
|
+
import { computeL1ToL2MessageNullifier, computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
|
|
21
21
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
22
|
-
import {
|
|
22
|
+
import { getCanonicalClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer';
|
|
23
23
|
import { CommitmentsDB, MessageLoadOracleInputs, PublicContractsDB, PublicStateDB } from '@aztec/simulator';
|
|
24
24
|
import { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/types/contracts';
|
|
25
25
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
@@ -43,7 +43,7 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
43
43
|
public addNewContracts(tx: Tx): Promise<void> {
|
|
44
44
|
// Extract contract class and instance data from logs and add to cache for this block
|
|
45
45
|
const logs = tx.unencryptedLogs.unrollLogs().map(UnencryptedL2Log.fromBuffer);
|
|
46
|
-
ContractClassRegisteredEvent.fromLogs(logs,
|
|
46
|
+
ContractClassRegisteredEvent.fromLogs(logs, getCanonicalClassRegistererAddress()).forEach(e => {
|
|
47
47
|
this.log(`Adding class ${e.contractClassId.toString()} to public execution contract cache`);
|
|
48
48
|
this.classCache.set(e.contractClassId.toString(), e.toContractClassPublic());
|
|
49
49
|
});
|
|
@@ -66,7 +66,7 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
66
66
|
// Let's say we have two txs adding the same contract on the same block. If the 2nd one reverts,
|
|
67
67
|
// wouldn't that accidentally remove the contract added on the first one?
|
|
68
68
|
const logs = tx.unencryptedLogs.unrollLogs().map(UnencryptedL2Log.fromBuffer);
|
|
69
|
-
ContractClassRegisteredEvent.fromLogs(logs,
|
|
69
|
+
ContractClassRegisteredEvent.fromLogs(logs, getCanonicalClassRegistererAddress()).forEach(e =>
|
|
70
70
|
this.classCache.delete(e.contractClassId.toString()),
|
|
71
71
|
);
|
|
72
72
|
ContractInstanceDeployedEvent.fromLogs(logs).forEach(e => this.instanceCache.delete(e.address.toString()));
|
|
@@ -224,17 +224,38 @@ export class WorldStateDB implements CommitmentsDB {
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
public async getL1ToL2MembershipWitness(
|
|
227
|
-
|
|
227
|
+
contractAddress: AztecAddress,
|
|
228
|
+
messageHash: Fr,
|
|
229
|
+
secret: Fr,
|
|
228
230
|
): Promise<MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>> {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
231
|
+
let nullifierIndex: bigint | undefined;
|
|
232
|
+
let messageIndex: bigint | undefined;
|
|
233
|
+
let startIndex = 0n;
|
|
234
|
+
|
|
235
|
+
// We iterate over messages until we find one whose nullifier is not in the nullifier tree --> we need to check
|
|
236
|
+
// for nullifiers because messages can have duplicates.
|
|
237
|
+
do {
|
|
238
|
+
messageIndex = (await this.db.findLeafIndexAfter(
|
|
239
|
+
MerkleTreeId.L1_TO_L2_MESSAGE_TREE,
|
|
240
|
+
messageHash.toBuffer(),
|
|
241
|
+
startIndex,
|
|
242
|
+
))!;
|
|
243
|
+
if (messageIndex === undefined) {
|
|
244
|
+
throw new Error(`No non-nullified L1 to L2 message found for message hash ${messageHash.toString()}`);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const messageNullifier = computeL1ToL2MessageNullifier(contractAddress, messageHash, secret, messageIndex);
|
|
248
|
+
nullifierIndex = await this.getNullifierIndex(messageNullifier);
|
|
249
|
+
|
|
250
|
+
startIndex = messageIndex + 1n;
|
|
251
|
+
} while (nullifierIndex !== undefined);
|
|
252
|
+
|
|
233
253
|
const siblingPath = await this.db.getSiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>(
|
|
234
254
|
MerkleTreeId.L1_TO_L2_MESSAGE_TREE,
|
|
235
|
-
|
|
255
|
+
messageIndex,
|
|
236
256
|
);
|
|
237
|
-
|
|
257
|
+
|
|
258
|
+
return new MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>(messageIndex, siblingPath);
|
|
238
259
|
}
|
|
239
260
|
|
|
240
261
|
public async getCommitmentIndex(commitment: Fr): Promise<bigint | undefined> {
|
|
@@ -20,9 +20,9 @@ import {
|
|
|
20
20
|
convertPublicTeardownRollupInputsToWitnessMap,
|
|
21
21
|
convertPublicTeardownRollupOutputFromWitnessMap,
|
|
22
22
|
} from '@aztec/noir-protocol-circuits-types';
|
|
23
|
+
import { SimulationProvider, WASMSimulator } from '@aztec/simulator';
|
|
23
24
|
|
|
24
|
-
import { PublicKernelCircuitSimulator
|
|
25
|
-
import { SimulationProvider } from './simulation_provider.js';
|
|
25
|
+
import { PublicKernelCircuitSimulator } from './index.js';
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* Implements the PublicKernelCircuitSimulator.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { L2Block } from '@aztec/circuit-types';
|
|
2
|
-
import { GlobalVariables, Proof } from '@aztec/circuits.js';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
-
import { ProcessedTx } from '../sequencer/processed_tx.js';
|
|
5
|
-
/**
|
|
6
|
-
* Assembles an L2Block from a set of processed transactions.
|
|
7
|
-
*/
|
|
8
|
-
export interface BlockBuilder {
|
|
9
|
-
/**
|
|
10
|
-
* Creates a new L2Block with the given number, containing the set of processed txs.
|
|
11
|
-
* Note that the number of txs need to be a power of two.
|
|
12
|
-
* @param globalVariables - Global variables to include in the block.
|
|
13
|
-
* @param txs - Processed txs to include.
|
|
14
|
-
* @param l1ToL2Messages - L1 to L2 messages to be part of the block.
|
|
15
|
-
* @returns The new L2 block along with its proof from the root circuit.
|
|
16
|
-
*/
|
|
17
|
-
buildL2Block(globalVariables: GlobalVariables, txs: ProcessedTx[], l1ToL2Messages: Fr[]): Promise<[L2Block, Proof]>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/block_builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;OAOG;IACH,YAAY,CAAC,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;CACrH"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { L2Block, MerkleTreeId } from '@aztec/circuit-types';
|
|
2
|
-
import { AppendOnlyTreeSnapshot, BaseOrMergeRollupPublicInputs, BaseParityInputs, BaseRollupInputs, ConstantRollupData, GlobalVariables, MembershipWitness, MergeRollupInputs, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NullifierLeafPreimage, PartialStateReference, PreviousRollupData, Proof, PublicDataTreeLeaf, PublicDataTreeLeafPreimage, RollupKernelData, RollupTypes, RootParityInput, RootParityInputs, RootRollupInputs, RootRollupPublicInputs, StateReference, VerificationKey } from '@aztec/circuits.js';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
-
import { Tuple } from '@aztec/foundation/serialize';
|
|
5
|
-
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
6
|
-
import { VerificationKeys } from '../mocks/verification_keys.js';
|
|
7
|
-
import { RollupProver } from '../prover/index.js';
|
|
8
|
-
import { ProcessedTx } from '../sequencer/processed_tx.js';
|
|
9
|
-
import { RollupSimulator } from '../simulator/index.js';
|
|
10
|
-
import { BlockBuilder } from './index.js';
|
|
11
|
-
import { TreeNames } from './types.js';
|
|
12
|
-
/**
|
|
13
|
-
* Builds an L2 block out of a set of ProcessedTx's,
|
|
14
|
-
* using the base, merge, and root rollup circuits.
|
|
15
|
-
*/
|
|
16
|
-
export declare class SoloBlockBuilder implements BlockBuilder {
|
|
17
|
-
protected db: MerkleTreeOperations;
|
|
18
|
-
protected vks: VerificationKeys;
|
|
19
|
-
protected simulator: RollupSimulator;
|
|
20
|
-
protected prover: RollupProver;
|
|
21
|
-
protected debug: import("@aztec/foundation/log").DebugLogger;
|
|
22
|
-
constructor(db: MerkleTreeOperations, vks: VerificationKeys, simulator: RollupSimulator, prover: RollupProver, debug?: import("@aztec/foundation/log").DebugLogger);
|
|
23
|
-
/**
|
|
24
|
-
* Builds an L2 block with the given number containing the given txs, updating state trees.
|
|
25
|
-
* @param globalVariables - Global variables to be used in the block.
|
|
26
|
-
* @param txs - Processed transactions to include in the block.
|
|
27
|
-
* @param l1ToL2Messages - L1 to L2 messages to be part of the block.
|
|
28
|
-
* @param timestamp - Timestamp of the block.
|
|
29
|
-
* @returns The new L2 block and a correctness proof as returned by the root rollup circuit.
|
|
30
|
-
*/
|
|
31
|
-
buildL2Block(globalVariables: GlobalVariables, txs: ProcessedTx[], l1ToL2Messages: Fr[]): Promise<[L2Block, Proof]>;
|
|
32
|
-
protected validateTxs(txs: ProcessedTx[]): void;
|
|
33
|
-
protected getTreeSnapshot(id: MerkleTreeId): Promise<AppendOnlyTreeSnapshot>;
|
|
34
|
-
protected runCircuits(globalVariables: GlobalVariables, txs: ProcessedTx[], l1ToL2Messages: Tuple<Fr, typeof NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP>): Promise<[RootRollupPublicInputs, Proof]>;
|
|
35
|
-
protected baseParityCircuit(inputs: BaseParityInputs): Promise<RootParityInput>;
|
|
36
|
-
protected rootParityCircuit(inputs: RootParityInputs): Promise<RootParityInput>;
|
|
37
|
-
protected baseRollupCircuit(tx: ProcessedTx, inputs: BaseRollupInputs, treeSnapshots: Map<MerkleTreeId, AppendOnlyTreeSnapshot>): Promise<[BaseOrMergeRollupPublicInputs, Proof]>;
|
|
38
|
-
protected createMergeRollupInputs(left: [BaseOrMergeRollupPublicInputs, Proof], right: [BaseOrMergeRollupPublicInputs, Proof]): MergeRollupInputs;
|
|
39
|
-
protected mergeRollupCircuit(mergeInputs: MergeRollupInputs): Promise<[BaseOrMergeRollupPublicInputs, Proof]>;
|
|
40
|
-
protected getVerificationKey(type: RollupTypes): VerificationKey;
|
|
41
|
-
protected rootRollupCircuit(left: [BaseOrMergeRollupPublicInputs, Proof], right: [BaseOrMergeRollupPublicInputs, Proof], l1ToL2Roots: RootParityInput, l1ToL2Messages: Tuple<Fr, typeof NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP>): Promise<[RootRollupPublicInputs, Proof]>;
|
|
42
|
-
protected validatePartialState(partialState: PartialStateReference, treeSnapshots: Map<MerkleTreeId, AppendOnlyTreeSnapshot>): void;
|
|
43
|
-
protected validateState(state: StateReference): Promise<void>;
|
|
44
|
-
protected validateRootOutput(rootOutput: RootRollupPublicInputs): Promise<void>;
|
|
45
|
-
protected validateSimulatedTree(localTree: AppendOnlyTreeSnapshot, simulatedTree: AppendOnlyTreeSnapshot, name: TreeNames, label?: string): void;
|
|
46
|
-
protected getRootRollupInput(rollupOutputLeft: BaseOrMergeRollupPublicInputs, rollupProofLeft: Proof, rollupOutputRight: BaseOrMergeRollupPublicInputs, rollupProofRight: Proof, l1ToL2Roots: RootParityInput, newL1ToL2Messages: Tuple<Fr, typeof NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP>): Promise<RootRollupInputs>;
|
|
47
|
-
protected getPreviousRollupDataFromPublicInputs(rollupOutput: BaseOrMergeRollupPublicInputs, rollupProof: Proof, vk: VerificationKey): PreviousRollupData;
|
|
48
|
-
protected getKernelDataFor(tx: ProcessedTx): RollupKernelData;
|
|
49
|
-
protected getMembershipWitnessFor<N extends number>(value: Fr, treeId: MerkleTreeId, height: N): Promise<MembershipWitness<N>>;
|
|
50
|
-
protected getConstantRollupData(globalVariables: GlobalVariables): Promise<ConstantRollupData>;
|
|
51
|
-
protected getLowNullifierInfo(nullifier: Fr): Promise<{
|
|
52
|
-
index: number;
|
|
53
|
-
leafPreimage: NullifierLeafPreimage;
|
|
54
|
-
witness: MembershipWitness<20>;
|
|
55
|
-
} | {
|
|
56
|
-
index: {
|
|
57
|
-
index: bigint;
|
|
58
|
-
alreadyPresent: boolean;
|
|
59
|
-
};
|
|
60
|
-
leafPreimage: import("@aztec/foundation/trees").IndexedTreeLeafPreimage;
|
|
61
|
-
witness: MembershipWitness<20>;
|
|
62
|
-
}>;
|
|
63
|
-
protected getSubtreeSiblingPath(treeId: MerkleTreeId, subtreeHeight: number): Promise<Fr[]>;
|
|
64
|
-
protected processPublicDataUpdateRequests(tx: ProcessedTx): Promise<{
|
|
65
|
-
lowPublicDataWritesPreimages: [PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage];
|
|
66
|
-
lowPublicDataWritesMembershipWitnesses: [MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>];
|
|
67
|
-
newPublicDataSubtreeSiblingPath: [Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr];
|
|
68
|
-
sortedPublicDataWrites: [PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf];
|
|
69
|
-
sortedPublicDataWritesIndexes: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
|
|
70
|
-
}>;
|
|
71
|
-
protected getPublicDataReadsInfo(tx: ProcessedTx): Promise<{
|
|
72
|
-
newPublicDataReadsWitnesses: [MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>];
|
|
73
|
-
newPublicDataReadsPreimages: [PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage];
|
|
74
|
-
}>;
|
|
75
|
-
protected buildBaseRollupInput(tx: ProcessedTx, globalVariables: GlobalVariables): Promise<BaseRollupInputs>;
|
|
76
|
-
protected makeEmptyMembershipWitness<N extends number>(height: N): MembershipWitness<N>;
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=solo_block_builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"solo_block_builder.d.ts","sourceRoot":"","sources":["../../src/block_builder/solo_block_builder.ts"],"names":[],"mappings":"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"}
|