@aztec/simulator 0.34.0 → 0.35.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/acvm/acvm.d.ts +4 -1
- package/dest/acvm/acvm.d.ts.map +1 -1
- package/dest/acvm/acvm.js +5 -5
- package/dest/acvm/deserialize.d.ts +3 -5
- package/dest/acvm/deserialize.d.ts.map +1 -1
- package/dest/acvm/deserialize.js +6 -9
- package/dest/acvm/oracle/oracle.d.ts +2 -0
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +12 -4
- package/dest/acvm/oracle/typed_oracle.d.ts +2 -0
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +7 -1
- package/dest/avm/avm_execution_environment.d.ts +4 -2
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +7 -5
- package/dest/avm/avm_gas.js +2 -2
- package/dest/avm/avm_machine_state.d.ts +2 -0
- package/dest/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/avm/avm_machine_state.js +24 -6
- package/dest/avm/avm_memory_types.js +2 -2
- package/dest/avm/avm_simulator.js +2 -2
- package/dest/avm/fixtures/index.d.ts +3 -0
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +11 -4
- package/dest/avm/journal/journal.d.ts +1 -0
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +12 -1
- package/dest/avm/opcodes/accrued_substate.d.ts +2 -1
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +13 -5
- package/dest/avm/opcodes/context_getters.js +2 -2
- package/dest/avm/opcodes/external_calls.d.ts +2 -2
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +7 -6
- package/dest/avm/opcodes/hashing.d.ts +8 -8
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +35 -43
- package/dest/avm/serialization/instruction_serialization.d.ts +1 -1
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +2 -2
- package/dest/client/client_execution_context.d.ts +13 -3
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +23 -8
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +8 -6
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +6 -5
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +5 -4
- package/dest/common/index.d.ts +1 -1
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +2 -2
- package/dest/common/packed_values_cache.d.ts +28 -0
- package/dest/common/packed_values_cache.d.ts.map +1 -0
- package/dest/common/packed_values_cache.js +50 -0
- package/dest/index.d.ts +1 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -1
- package/dest/mocks/fixtures.d.ts +42 -0
- package/dest/mocks/fixtures.d.ts.map +1 -0
- package/dest/mocks/fixtures.js +84 -0
- package/dest/mocks/index.d.ts +2 -0
- package/dest/mocks/index.d.ts.map +1 -0
- package/dest/mocks/index.js +2 -0
- package/dest/public/abstract_phase_manager.d.ts +82 -0
- package/dest/public/abstract_phase_manager.d.ts.map +1 -0
- package/dest/public/abstract_phase_manager.js +320 -0
- package/dest/public/app_logic_phase_manager.d.ts +29 -0
- package/dest/public/app_logic_phase_manager.d.ts.map +1 -0
- package/dest/public/app_logic_phase_manager.js +50 -0
- package/dest/public/execution.d.ts +3 -0
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +1 -1
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +17 -13
- package/dest/public/hints_builder.d.ts +23 -0
- package/dest/public/hints_builder.d.ts.map +1 -0
- package/dest/public/hints_builder.js +62 -0
- package/dest/public/index.d.ts +5 -0
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +6 -1
- package/dest/public/phase_manager_factory.d.ts +18 -0
- package/dest/public/phase_manager_factory.d.ts.map +1 -0
- package/dest/public/phase_manager_factory.js +56 -0
- package/dest/public/public_execution_context.d.ts +15 -5
- package/dest/public/public_execution_context.d.ts.map +1 -1
- package/dest/public/public_execution_context.js +28 -12
- package/dest/public/public_executor.d.ts +79 -0
- package/dest/public/public_executor.d.ts.map +1 -0
- package/dest/public/public_executor.js +198 -0
- package/dest/public/public_kernel.d.ts +37 -0
- package/dest/public/public_kernel.d.ts.map +1 -0
- package/dest/public/public_kernel.js +97 -0
- package/dest/public/public_kernel_circuit_simulator.d.ts +31 -0
- package/dest/public/public_kernel_circuit_simulator.d.ts.map +1 -0
- package/dest/public/public_kernel_circuit_simulator.js +2 -0
- package/dest/public/public_processor.d.ts +53 -0
- package/dest/public/public_processor.d.ts.map +1 -0
- package/dest/public/public_processor.js +144 -0
- package/dest/public/setup_phase_manager.d.ts +30 -0
- package/dest/public/setup_phase_manager.d.ts.map +1 -0
- package/dest/public/setup_phase_manager.js +46 -0
- package/dest/public/tail_phase_manager.d.ts +30 -0
- package/dest/public/tail_phase_manager.d.ts.map +1 -0
- package/dest/public/tail_phase_manager.js +60 -0
- package/dest/public/teardown_phase_manager.d.ts +30 -0
- package/dest/public/teardown_phase_manager.d.ts.map +1 -0
- package/dest/public/teardown_phase_manager.js +46 -0
- package/dest/public/transitional_adaptors.d.ts +2 -1
- package/dest/public/transitional_adaptors.d.ts.map +1 -1
- package/dest/public/transitional_adaptors.js +11 -10
- package/dest/public/utils.d.ts +8 -0
- package/dest/public/utils.d.ts.map +1 -0
- package/dest/public/utils.js +29 -0
- package/dest/simulator/acvm_native.d.ts +19 -3
- package/dest/simulator/acvm_native.d.ts.map +1 -1
- package/dest/simulator/acvm_native.js +75 -48
- package/dest/simulator/acvm_wasm.d.ts.map +1 -1
- package/dest/simulator/acvm_wasm.js +3 -4
- package/package.json +8 -5
- package/src/acvm/acvm.ts +8 -5
- package/src/acvm/deserialize.ts +5 -9
- package/src/acvm/oracle/oracle.ts +13 -3
- package/src/acvm/oracle/typed_oracle.ts +8 -0
- package/src/avm/avm_execution_environment.ts +9 -1
- package/src/avm/avm_gas.ts +1 -1
- package/src/avm/avm_machine_state.ts +26 -5
- package/src/avm/avm_memory_types.ts +1 -1
- package/src/avm/avm_simulator.ts +1 -1
- package/src/avm/fixtures/index.ts +13 -1
- package/src/avm/journal/journal.ts +13 -0
- package/src/avm/opcodes/accrued_substate.ts +16 -4
- package/src/avm/opcodes/context_getters.ts +1 -1
- package/src/avm/opcodes/external_calls.ts +8 -5
- package/src/avm/opcodes/hashing.ts +38 -54
- package/src/avm/serialization/instruction_serialization.ts +1 -1
- package/src/client/client_execution_context.ts +25 -6
- package/src/client/private_execution.ts +7 -6
- package/src/client/simulator.ts +7 -3
- package/src/client/unconstrained_execution.ts +4 -3
- package/src/common/index.ts +1 -1
- package/src/common/packed_values_cache.ts +55 -0
- package/src/index.ts +1 -0
- package/src/mocks/fixtures.ts +169 -0
- package/src/mocks/index.ts +1 -0
- package/src/public/abstract_phase_manager.ts +571 -0
- package/src/public/app_logic_phase_manager.ts +76 -0
- package/src/public/execution.ts +4 -0
- package/src/public/executor.ts +18 -13
- package/src/public/hints_builder.ts +119 -0
- package/src/public/index.ts +5 -0
- package/src/public/phase_manager_factory.ts +126 -0
- package/src/public/public_execution_context.ts +29 -18
- package/src/public/public_executor.ts +267 -0
- package/src/public/public_kernel.ts +139 -0
- package/src/public/public_kernel_circuit_simulator.ts +36 -0
- package/src/public/public_processor.ts +212 -0
- package/src/public/setup_phase_manager.ts +66 -0
- package/src/public/tail_phase_manager.ts +120 -0
- package/src/public/teardown_phase_manager.ts +66 -0
- package/src/public/transitional_adaptors.ts +14 -5
- package/src/public/utils.ts +31 -0
- package/src/simulator/acvm_native.ts +94 -47
- package/src/simulator/acvm_wasm.ts +7 -3
- package/dest/common/packed_args_cache.d.ts +0 -28
- package/dest/common/packed_args_cache.d.ts.map +0 -1
- package/dest/common/packed_args_cache.js +0 -50
- package/src/common/packed_args_cache.ts +0 -55
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Tx, makeEmptyProcessedTx, makeProcessedTx, toTxEffect, validateProcessedTx, } from '@aztec/circuit-types';
|
|
2
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
+
import { PublicExecutor } from '@aztec/simulator';
|
|
5
|
+
import { PublicKernelPhase } from './abstract_phase_manager.js';
|
|
6
|
+
import { PhaseManagerFactory } from './phase_manager_factory.js';
|
|
7
|
+
import { ContractsDataSourcePublicDB, WorldStateDB, WorldStatePublicDB } from './public_executor.js';
|
|
8
|
+
import { RealPublicKernelCircuitSimulator } from './public_kernel.js';
|
|
9
|
+
/**
|
|
10
|
+
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
11
|
+
*/
|
|
12
|
+
export class PublicProcessorFactory {
|
|
13
|
+
constructor(merkleTree, contractDataSource, simulator) {
|
|
14
|
+
this.merkleTree = merkleTree;
|
|
15
|
+
this.contractDataSource = contractDataSource;
|
|
16
|
+
this.simulator = simulator;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new instance of a PublicProcessor.
|
|
20
|
+
* @param historicalHeader - The header of a block previous to the one in which the tx is included.
|
|
21
|
+
* @param globalVariables - The global variables for the block being processed.
|
|
22
|
+
* @param newContracts - Provides access to contract bytecode for public executions.
|
|
23
|
+
* @returns A new instance of a PublicProcessor.
|
|
24
|
+
*/
|
|
25
|
+
async create(historicalHeader, globalVariables) {
|
|
26
|
+
historicalHeader = historicalHeader ?? (await this.merkleTree.buildInitialHeader());
|
|
27
|
+
const publicContractsDB = new ContractsDataSourcePublicDB(this.contractDataSource);
|
|
28
|
+
const worldStatePublicDB = new WorldStatePublicDB(this.merkleTree);
|
|
29
|
+
const worldStateDB = new WorldStateDB(this.merkleTree);
|
|
30
|
+
const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB, historicalHeader);
|
|
31
|
+
return new PublicProcessor(this.merkleTree, publicExecutor, new RealPublicKernelCircuitSimulator(this.simulator), globalVariables, historicalHeader, publicContractsDB, worldStatePublicDB);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Converts Txs lifted from the P2P module into ProcessedTx objects by executing
|
|
36
|
+
* any public function calls in them. Txs with private calls only are unaffected.
|
|
37
|
+
*/
|
|
38
|
+
export class PublicProcessor {
|
|
39
|
+
constructor(db, publicExecutor, publicKernel, globalVariables, historicalHeader, publicContractsDB, publicStateDB, log = createDebugLogger('aztec:sequencer:public-processor')) {
|
|
40
|
+
this.db = db;
|
|
41
|
+
this.publicExecutor = publicExecutor;
|
|
42
|
+
this.publicKernel = publicKernel;
|
|
43
|
+
this.globalVariables = globalVariables;
|
|
44
|
+
this.historicalHeader = historicalHeader;
|
|
45
|
+
this.publicContractsDB = publicContractsDB;
|
|
46
|
+
this.publicStateDB = publicStateDB;
|
|
47
|
+
this.log = log;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Run each tx through the public circuit and the public kernel circuit if needed.
|
|
51
|
+
* @param txs - Txs to process.
|
|
52
|
+
* @returns The list of processed txs with their circuit simulation outputs.
|
|
53
|
+
*/
|
|
54
|
+
async process(txs, maxTransactions = txs.length, blockProver, txValidator) {
|
|
55
|
+
// The processor modifies the tx objects in place, so we need to clone them.
|
|
56
|
+
txs = txs.map(tx => Tx.clone(tx));
|
|
57
|
+
const result = [];
|
|
58
|
+
const failed = [];
|
|
59
|
+
const returns = [];
|
|
60
|
+
for (const tx of txs) {
|
|
61
|
+
// only process up to the limit of the block
|
|
62
|
+
if (result.length >= maxTransactions) {
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const [processedTx, returnValues] = !tx.hasPublicCalls()
|
|
67
|
+
? [makeProcessedTx(tx, tx.data.toKernelCircuitPublicInputs(), tx.proof, [])]
|
|
68
|
+
: await this.processTxWithPublicCalls(tx);
|
|
69
|
+
validateProcessedTx(processedTx);
|
|
70
|
+
// Re-validate the transaction
|
|
71
|
+
if (txValidator) {
|
|
72
|
+
// Only accept processed transactions that are not double-spends,
|
|
73
|
+
// public functions emitting nullifiers would pass earlier check but fail here.
|
|
74
|
+
// Note that we're checking all nullifiers generated in the private execution twice,
|
|
75
|
+
// we could store the ones already checked and skip them here as an optimization.
|
|
76
|
+
const [_, invalid] = await txValidator.validateTxs([processedTx]);
|
|
77
|
+
if (invalid.length) {
|
|
78
|
+
throw new Error(`Transaction ${invalid[0].hash} invalid after processing public functions`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// if we were given a prover then send the transaction to it for proving
|
|
82
|
+
if (blockProver) {
|
|
83
|
+
await blockProver.addNewTx(processedTx);
|
|
84
|
+
}
|
|
85
|
+
result.push(processedTx);
|
|
86
|
+
returns.push(returnValues);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
90
|
+
this.log.warn(`Failed to process tx ${tx.getTxHash()}: ${errorMessage}`);
|
|
91
|
+
failed.push({
|
|
92
|
+
tx,
|
|
93
|
+
error: err instanceof Error ? err : new Error(errorMessage),
|
|
94
|
+
});
|
|
95
|
+
returns.push([]);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return [result, failed, returns];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Makes an empty processed tx. Useful for padding a block to a power of two number of txs.
|
|
102
|
+
* @returns A processed tx with empty data.
|
|
103
|
+
*/
|
|
104
|
+
makeEmptyProcessedTx() {
|
|
105
|
+
const { chainId, version } = this.globalVariables;
|
|
106
|
+
return makeEmptyProcessedTx(this.historicalHeader.clone(), chainId, version);
|
|
107
|
+
}
|
|
108
|
+
async processTxWithPublicCalls(tx) {
|
|
109
|
+
let returnValues = undefined;
|
|
110
|
+
const publicRequests = [];
|
|
111
|
+
let phase = PhaseManagerFactory.phaseFromTx(tx, this.db, this.publicExecutor, this.publicKernel, this.globalVariables, this.historicalHeader, this.publicContractsDB, this.publicStateDB);
|
|
112
|
+
this.log.debug(`Beginning processing in phase ${phase?.phase} for tx ${tx.getTxHash()}`);
|
|
113
|
+
let proof = tx.proof;
|
|
114
|
+
let publicKernelPublicInput = tx.data.toPublicKernelCircuitPublicInputs();
|
|
115
|
+
let finalKernelOutput;
|
|
116
|
+
let revertReason;
|
|
117
|
+
const timer = new Timer();
|
|
118
|
+
while (phase) {
|
|
119
|
+
const output = await phase.handle(tx, publicKernelPublicInput, proof);
|
|
120
|
+
if (phase.phase === PublicKernelPhase.APP_LOGIC) {
|
|
121
|
+
returnValues = output.returnValues;
|
|
122
|
+
}
|
|
123
|
+
publicRequests.push(...output.kernelRequests);
|
|
124
|
+
publicKernelPublicInput = output.publicKernelOutput;
|
|
125
|
+
finalKernelOutput = output.finalKernelOutput;
|
|
126
|
+
proof = output.publicKernelProof;
|
|
127
|
+
revertReason ?? (revertReason = output.revertReason);
|
|
128
|
+
phase = PhaseManagerFactory.phaseFromOutput(publicKernelPublicInput, phase, this.db, this.publicExecutor, this.publicKernel, this.globalVariables, this.historicalHeader, this.publicContractsDB, this.publicStateDB);
|
|
129
|
+
}
|
|
130
|
+
if (!finalKernelOutput) {
|
|
131
|
+
throw new Error('Final public kernel was not executed.');
|
|
132
|
+
}
|
|
133
|
+
const processedTx = makeProcessedTx(tx, finalKernelOutput, proof, publicRequests, revertReason);
|
|
134
|
+
this.log.debug(`Processed public part of ${tx.getTxHash()}`, {
|
|
135
|
+
eventName: 'tx-sequencer-processing',
|
|
136
|
+
duration: timer.ms(),
|
|
137
|
+
effectsSize: toTxEffect(processedTx).toBuffer().length,
|
|
138
|
+
publicDataUpdateRequests: processedTx.data.end.publicDataUpdateRequests.filter(x => !x.leafSlot.isZero()).length ?? 0,
|
|
139
|
+
...tx.getStats(),
|
|
140
|
+
});
|
|
141
|
+
return [processedTx, returnValues];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBTUwsRUFBRSxFQUVGLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsVUFBVSxFQUNWLG1CQUFtQixHQUNwQixNQUFNLHNCQUFzQixDQUFDO0FBSTlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUErQyxNQUFNLGtCQUFrQixDQUFDO0FBSS9GLE9BQU8sRUFBNkIsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHdEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1UsVUFBZ0MsRUFDaEMsa0JBQXNDLEVBQ3RDLFNBQTZCO1FBRjdCLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsY0FBUyxHQUFULFNBQVMsQ0FBb0I7SUFDcEMsQ0FBQztJQUVKOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxNQUFNLENBQ2pCLGdCQUFvQyxFQUNwQyxlQUFnQztRQUVoQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFFcEYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLDJC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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { type GlobalVariables, type Header, type Proof, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
|
|
3
|
+
import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator';
|
|
4
|
+
import { type MerkleTreeOperations } from '@aztec/world-state';
|
|
5
|
+
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
6
|
+
import { type ContractsDataSourcePublicDB } from './public_executor.js';
|
|
7
|
+
import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js';
|
|
8
|
+
/**
|
|
9
|
+
* The phase manager responsible for performing the fee preparation phase.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SetupPhaseManager extends AbstractPhaseManager {
|
|
12
|
+
protected db: MerkleTreeOperations;
|
|
13
|
+
protected publicExecutor: PublicExecutor;
|
|
14
|
+
protected publicKernel: PublicKernelCircuitSimulator;
|
|
15
|
+
protected globalVariables: GlobalVariables;
|
|
16
|
+
protected historicalHeader: Header;
|
|
17
|
+
protected publicContractsDB: ContractsDataSourcePublicDB;
|
|
18
|
+
protected publicStateDB: PublicStateDB;
|
|
19
|
+
phase: PublicKernelPhase;
|
|
20
|
+
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?: PublicKernelPhase);
|
|
21
|
+
handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<{
|
|
22
|
+
kernelRequests: import("@aztec/circuit-types").PublicKernelNonTailRequest[];
|
|
23
|
+
kernelInputs: import("@aztec/circuits.js").PublicKernelCircuitPrivateInputs[];
|
|
24
|
+
publicKernelOutput: PublicKernelCircuitPublicInputs;
|
|
25
|
+
publicKernelProof: Proof;
|
|
26
|
+
revertReason: import("@aztec/circuit-types").SimulationError | undefined;
|
|
27
|
+
returnValues: undefined;
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=setup_phase_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/setup_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,+BAA+B,EACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEzF;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,oBAAoB;IAEvD,SAAS,CAAC,EAAE,EAAE,oBAAoB;IAClC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,YAAY,EAAE,4BAA4B;IACpD,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,gBAAgB,EAAE,MAAM;IAClC,SAAS,CAAC,iBAAiB,EAAE,2BAA2B;IACxD,SAAS,CAAC,aAAa,EAAE,aAAa;IAC/B,KAAK,EAAE,iBAAiB;gBAPrB,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EAC/B,KAAK,GAAE,iBAA2C;IAK5C,MAAM,CACnB,EAAE,EAAE,EAAE,EACN,0BAA0B,EAAE,+BAA+B,EAC3D,yBAAyB,EAAE,KAAK;;;;;;;;CA+BnC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { PublicKernelType } from '@aztec/circuit-types';
|
|
2
|
+
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* The phase manager responsible for performing the fee preparation phase.
|
|
5
|
+
*/
|
|
6
|
+
export class SetupPhaseManager extends AbstractPhaseManager {
|
|
7
|
+
constructor(db, publicExecutor, publicKernel, globalVariables, historicalHeader, publicContractsDB, publicStateDB, phase = PublicKernelPhase.SETUP) {
|
|
8
|
+
super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase);
|
|
9
|
+
this.db = db;
|
|
10
|
+
this.publicExecutor = publicExecutor;
|
|
11
|
+
this.publicKernel = publicKernel;
|
|
12
|
+
this.globalVariables = globalVariables;
|
|
13
|
+
this.historicalHeader = historicalHeader;
|
|
14
|
+
this.publicContractsDB = publicContractsDB;
|
|
15
|
+
this.publicStateDB = publicStateDB;
|
|
16
|
+
this.phase = phase;
|
|
17
|
+
}
|
|
18
|
+
async handle(tx, previousPublicKernelOutput, previousPublicKernelProof) {
|
|
19
|
+
this.log.verbose(`Processing tx ${tx.getTxHash()}`);
|
|
20
|
+
const [kernelInputs, publicKernelOutput, publicKernelProof, newUnencryptedFunctionLogs, revertReason] = await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof).catch(
|
|
21
|
+
// the abstract phase manager throws if simulation gives error in a non-revertible phase
|
|
22
|
+
async (err) => {
|
|
23
|
+
await this.publicStateDB.rollbackToCommit();
|
|
24
|
+
throw err;
|
|
25
|
+
});
|
|
26
|
+
tx.unencryptedLogs.addFunctionLogs(newUnencryptedFunctionLogs);
|
|
27
|
+
await this.publicStateDB.checkpoint();
|
|
28
|
+
// Return a list of setup proving requests
|
|
29
|
+
const kernelRequests = kernelInputs.map(input => {
|
|
30
|
+
const request = {
|
|
31
|
+
type: PublicKernelType.SETUP,
|
|
32
|
+
inputs: input,
|
|
33
|
+
};
|
|
34
|
+
return request;
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
kernelRequests,
|
|
38
|
+
kernelInputs,
|
|
39
|
+
publicKernelOutput,
|
|
40
|
+
publicKernelProof,
|
|
41
|
+
revertReason,
|
|
42
|
+
returnValues: undefined,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvc2V0dXBfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLGdCQUFnQixFQUFXLE1BQU0sc0JBQXNCLENBQUM7QUFVM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJdEY7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsb0JBQW9CO0lBQ3pELFlBQ1ksRUFBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBMEMsRUFDMUMsZUFBZ0MsRUFDaEMsZ0JBQXdCLEVBQ3hCLGlCQUE4QyxFQUM5QyxhQUE0QixFQUMvQixRQUEyQixpQkFBaUIsQ0FBQyxLQUFLO1FBRXpELEtBQUssQ0FBQyxFQUFFLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFUeEUsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUE4QjtRQUMxQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFDOUMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDL0IsVUFBSyxHQUFMLEtBQUssQ0FBNkM7SUFHM0QsQ0FBQztJQUVRLEtBQUssQ0FBQyxNQUFNLENBQ25CLEVBQU0sRUFDTiwwQkFBMkQsRUFDM0QseUJBQWdDO1FBRWhDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsWUFBWSxDQUFDLEdBQ25HLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLEtBQUs7UUFDcEcsd0ZBQXdGO1FBQ3hGLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUNGLENBQUM7UUFDSixFQUFFLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV0QywwQ0FBMEM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBd0I7Z0JBQ25DLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO2dCQUM1QixNQUFNLEVBQUUsS0FBSzthQUNkLENBQUM7WUFDRixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU87WUFDTCxjQUFjO1lBQ2QsWUFBWTtZQUNaLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsWUFBWTtZQUNaLFlBQVksRUFBRSxTQUFTO1NBQ3hCLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { type GlobalVariables, type Header, type KernelCircuitPublicInputs, type Proof, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
|
|
3
|
+
import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator';
|
|
4
|
+
import { type MerkleTreeOperations } from '@aztec/world-state';
|
|
5
|
+
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
6
|
+
import { type ContractsDataSourcePublicDB } from './public_executor.js';
|
|
7
|
+
import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js';
|
|
8
|
+
export declare class TailPhaseManager extends AbstractPhaseManager {
|
|
9
|
+
protected db: MerkleTreeOperations;
|
|
10
|
+
protected publicExecutor: PublicExecutor;
|
|
11
|
+
protected publicKernel: PublicKernelCircuitSimulator;
|
|
12
|
+
protected globalVariables: GlobalVariables;
|
|
13
|
+
protected historicalHeader: Header;
|
|
14
|
+
protected publicContractsDB: ContractsDataSourcePublicDB;
|
|
15
|
+
protected publicStateDB: PublicStateDB;
|
|
16
|
+
readonly phase: PublicKernelPhase;
|
|
17
|
+
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?: PublicKernelPhase);
|
|
18
|
+
handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<{
|
|
19
|
+
kernelRequests: import("@aztec/circuit-types").PublicKernelTailRequest[];
|
|
20
|
+
publicKernelOutput: PublicKernelCircuitPublicInputs;
|
|
21
|
+
finalKernelOutput: KernelCircuitPublicInputs;
|
|
22
|
+
publicKernelProof: Proof;
|
|
23
|
+
revertReason: undefined;
|
|
24
|
+
returnValues: undefined;
|
|
25
|
+
}>;
|
|
26
|
+
private runTailKernelCircuit;
|
|
27
|
+
private simulate;
|
|
28
|
+
private sortNoteHashes;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=tail_phase_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/tail_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,yBAAyB,EAE9B,KAAK,KAAK,EACV,KAAK,+BAA+B,EAMrC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEzF,qBAAa,gBAAiB,SAAQ,oBAAoB;IAEtD,SAAS,CAAC,EAAE,EAAE,oBAAoB;IAClC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,YAAY,EAAE,4BAA4B;IACpD,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,gBAAgB,EAAE,MAAM;IAClC,SAAS,CAAC,iBAAiB,EAAE,2BAA2B;IACxD,SAAS,CAAC,aAAa,EAAE,aAAa;aACtB,KAAK,EAAE,iBAAiB;gBAP9B,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EACtB,KAAK,GAAE,iBAA0C;IAK7D,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,yBAAyB,EAAE,KAAK;;;;;;;;YAgCpG,oBAAoB;YAiBpB,QAAQ;IA2BtB,OAAO,CAAC,cAAc;CAMvB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { PublicKernelType } from '@aztec/circuit-types';
|
|
2
|
+
import { MAX_NEW_NOTE_HASHES_PER_TX, PublicKernelTailCircuitPrivateInputs, makeEmptyProof, mergeAccumulatedData, sortByCounter, } from '@aztec/circuits.js';
|
|
3
|
+
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
4
|
+
export class TailPhaseManager extends AbstractPhaseManager {
|
|
5
|
+
constructor(db, publicExecutor, publicKernel, globalVariables, historicalHeader, publicContractsDB, publicStateDB, phase = PublicKernelPhase.TAIL) {
|
|
6
|
+
super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase);
|
|
7
|
+
this.db = db;
|
|
8
|
+
this.publicExecutor = publicExecutor;
|
|
9
|
+
this.publicKernel = publicKernel;
|
|
10
|
+
this.globalVariables = globalVariables;
|
|
11
|
+
this.historicalHeader = historicalHeader;
|
|
12
|
+
this.publicContractsDB = publicContractsDB;
|
|
13
|
+
this.publicStateDB = publicStateDB;
|
|
14
|
+
this.phase = phase;
|
|
15
|
+
}
|
|
16
|
+
async handle(tx, previousPublicKernelOutput, previousPublicKernelProof) {
|
|
17
|
+
this.log.verbose(`Processing tx ${tx.getTxHash()}`);
|
|
18
|
+
const [inputs, finalKernelOutput] = await this.runTailKernelCircuit(previousPublicKernelOutput, previousPublicKernelProof).catch(
|
|
19
|
+
// the abstract phase manager throws if simulation gives error in non-revertible phase
|
|
20
|
+
async (err) => {
|
|
21
|
+
await this.publicStateDB.rollbackToCommit();
|
|
22
|
+
throw err;
|
|
23
|
+
});
|
|
24
|
+
// commit the state updates from this transaction
|
|
25
|
+
await this.publicStateDB.commit();
|
|
26
|
+
// Return a tail proving request
|
|
27
|
+
const request = {
|
|
28
|
+
type: PublicKernelType.TAIL,
|
|
29
|
+
inputs: inputs,
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
kernelRequests: [request],
|
|
33
|
+
publicKernelOutput: previousPublicKernelOutput,
|
|
34
|
+
finalKernelOutput,
|
|
35
|
+
publicKernelProof: makeEmptyProof(),
|
|
36
|
+
revertReason: undefined,
|
|
37
|
+
returnValues: undefined,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async runTailKernelCircuit(previousOutput, previousProof) {
|
|
41
|
+
const [inputs, output] = await this.simulate(previousOutput, previousProof);
|
|
42
|
+
// Temporary hack. Should sort them in the tail circuit.
|
|
43
|
+
const noteHashes = mergeAccumulatedData(MAX_NEW_NOTE_HASHES_PER_TX, previousOutput.endNonRevertibleData.newNoteHashes, previousOutput.end.newNoteHashes);
|
|
44
|
+
output.end.newNoteHashes = this.sortNoteHashes(noteHashes);
|
|
45
|
+
return [inputs, output];
|
|
46
|
+
}
|
|
47
|
+
async simulate(previousOutput, previousProof) {
|
|
48
|
+
const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
|
|
49
|
+
const { validationRequests, endNonRevertibleData, end } = previousOutput;
|
|
50
|
+
const nullifierReadRequestHints = await this.hintsBuilder.getNullifierReadRequestHints(validationRequests.nullifierReadRequests, endNonRevertibleData.newNullifiers, end.newNullifiers);
|
|
51
|
+
const nullifierNonExistentReadRequestHints = await this.hintsBuilder.getNullifierNonExistentReadRequestHints(validationRequests.nullifierNonExistentReadRequests, endNonRevertibleData.newNullifiers, end.newNullifiers);
|
|
52
|
+
// We take a deep copy (clone) of these to pass to the prover
|
|
53
|
+
const inputs = new PublicKernelTailCircuitPrivateInputs(previousKernel, nullifierReadRequestHints, nullifierNonExistentReadRequestHints);
|
|
54
|
+
return [inputs.clone(), await this.publicKernel.publicKernelCircuitTail(inputs)];
|
|
55
|
+
}
|
|
56
|
+
sortNoteHashes(noteHashes) {
|
|
57
|
+
return sortByCounter(noteHashes.map(n => ({ ...n, counter: n.counter.toNumber() }))).map(n => n.value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpbF9waGFzZV9tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90YWlsX3BoYXNlX21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixnQkFBZ0IsRUFBVyxNQUFNLHNCQUFzQixDQUFDO0FBQzNGLE9BQU8sRUFLTCwwQkFBMEIsRUFHMUIsb0NBQW9DLEVBRXBDLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsYUFBYSxHQUNkLE1BQU0sb0JBQW9CLENBQUM7QUFLNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJdEYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLG9CQUFvQjtJQUN4RCxZQUNZLEVBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLFlBQTBDLEVBQzFDLGVBQWdDLEVBQ2hDLGdCQUF3QixFQUN4QixpQkFBOEMsRUFDOUMsYUFBNEIsRUFDdEIsUUFBMkIsaUJBQWlCLENBQUMsSUFBSTtRQUVqRSxLQUFLLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBVHhFLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBOEI7UUFDMUMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTZCO1FBQzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ3RCLFVBQUssR0FBTCxLQUFLLENBQTRDO0lBR25FLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQU0sRUFBRSwwQkFBMkQsRUFBRSx5QkFBZ0M7UUFDaEgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJB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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { type GlobalVariables, type Header, type Proof, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
|
|
3
|
+
import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator';
|
|
4
|
+
import { type MerkleTreeOperations } from '@aztec/world-state';
|
|
5
|
+
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
6
|
+
import { type ContractsDataSourcePublicDB } from './public_executor.js';
|
|
7
|
+
import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js';
|
|
8
|
+
/**
|
|
9
|
+
* The phase manager responsible for performing the fee preparation phase.
|
|
10
|
+
*/
|
|
11
|
+
export declare class TeardownPhaseManager extends AbstractPhaseManager {
|
|
12
|
+
protected db: MerkleTreeOperations;
|
|
13
|
+
protected publicExecutor: PublicExecutor;
|
|
14
|
+
protected publicKernel: PublicKernelCircuitSimulator;
|
|
15
|
+
protected globalVariables: GlobalVariables;
|
|
16
|
+
protected historicalHeader: Header;
|
|
17
|
+
protected publicContractsDB: ContractsDataSourcePublicDB;
|
|
18
|
+
protected publicStateDB: PublicStateDB;
|
|
19
|
+
phase: PublicKernelPhase;
|
|
20
|
+
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?: PublicKernelPhase);
|
|
21
|
+
handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<{
|
|
22
|
+
kernelRequests: import("@aztec/circuit-types").PublicKernelNonTailRequest[];
|
|
23
|
+
kernelInputs: import("@aztec/circuits.js").PublicKernelCircuitPrivateInputs[];
|
|
24
|
+
publicKernelOutput: PublicKernelCircuitPublicInputs;
|
|
25
|
+
publicKernelProof: Proof;
|
|
26
|
+
revertReason: import("@aztec/circuit-types").SimulationError | undefined;
|
|
27
|
+
returnValues: undefined;
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=teardown_phase_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teardown_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/teardown_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,+BAA+B,EACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEzF;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,oBAAoB;IAE1D,SAAS,CAAC,EAAE,EAAE,oBAAoB;IAClC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,YAAY,EAAE,4BAA4B;IACpD,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,gBAAgB,EAAE,MAAM;IAClC,SAAS,CAAC,iBAAiB,EAAE,2BAA2B;IACxD,SAAS,CAAC,aAAa,EAAE,aAAa;IAC/B,KAAK,EAAE,iBAAiB;gBAPrB,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EAC/B,KAAK,GAAE,iBAA8C;IAK/C,MAAM,CACnB,EAAE,EAAE,EAAE,EACN,0BAA0B,EAAE,+BAA+B,EAC3D,yBAAyB,EAAE,KAAK;;;;;;;;CA+BnC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { PublicKernelType } from '@aztec/circuit-types';
|
|
2
|
+
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* The phase manager responsible for performing the fee preparation phase.
|
|
5
|
+
*/
|
|
6
|
+
export class TeardownPhaseManager extends AbstractPhaseManager {
|
|
7
|
+
constructor(db, publicExecutor, publicKernel, globalVariables, historicalHeader, publicContractsDB, publicStateDB, phase = PublicKernelPhase.TEARDOWN) {
|
|
8
|
+
super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase);
|
|
9
|
+
this.db = db;
|
|
10
|
+
this.publicExecutor = publicExecutor;
|
|
11
|
+
this.publicKernel = publicKernel;
|
|
12
|
+
this.globalVariables = globalVariables;
|
|
13
|
+
this.historicalHeader = historicalHeader;
|
|
14
|
+
this.publicContractsDB = publicContractsDB;
|
|
15
|
+
this.publicStateDB = publicStateDB;
|
|
16
|
+
this.phase = phase;
|
|
17
|
+
}
|
|
18
|
+
async handle(tx, previousPublicKernelOutput, previousPublicKernelProof) {
|
|
19
|
+
this.log.verbose(`Processing tx ${tx.getTxHash()}`);
|
|
20
|
+
const [kernelInputs, publicKernelOutput, publicKernelProof, newUnencryptedFunctionLogs, revertReason] = await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof).catch(
|
|
21
|
+
// the abstract phase manager throws if simulation gives error in a non-revertible phase
|
|
22
|
+
async (err) => {
|
|
23
|
+
await this.publicStateDB.rollbackToCommit();
|
|
24
|
+
throw err;
|
|
25
|
+
});
|
|
26
|
+
tx.unencryptedLogs.addFunctionLogs(newUnencryptedFunctionLogs);
|
|
27
|
+
await this.publicStateDB.checkpoint();
|
|
28
|
+
// Return a list of teardown proving requests
|
|
29
|
+
const kernelRequests = kernelInputs.map(input => {
|
|
30
|
+
const request = {
|
|
31
|
+
type: PublicKernelType.TEARDOWN,
|
|
32
|
+
inputs: input,
|
|
33
|
+
};
|
|
34
|
+
return request;
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
kernelRequests,
|
|
38
|
+
kernelInputs,
|
|
39
|
+
publicKernelOutput,
|
|
40
|
+
publicKernelProof,
|
|
41
|
+
revertReason,
|
|
42
|
+
returnValues: undefined,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhcmRvd25fcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvdGVhcmRvd25fcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLGdCQUFnQixFQUFXLE1BQU0sc0JBQXNCLENBQUM7QUFVM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJdEY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsb0JBQW9CO0lBQzVELFlBQ1ksRUFBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBMEMsRUFDMUMsZUFBZ0MsRUFDaEMsZ0JBQXdCLEVBQ3hCLGlCQUE4QyxFQUM5QyxhQUE0QixFQUMvQixRQUEyQixpQkFBaUIsQ0FBQyxRQUFRO1FBRTVELEtBQUssQ0FBQyxFQUFFLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFUeEUsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUE4QjtRQUMxQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFDOUMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDL0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0Q7SUFHOUQsQ0FBQztJQUVRLEtBQUssQ0FBQyxNQUFNLENBQ25CLEVBQU0sRUFDTiwwQkFBMkQsRUFDM0QseUJBQWdDO1FBRWhDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsWUFBWSxDQUFDLEdBQ25HLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLEtBQUs7UUFDcEcsd0ZBQXdGO1FBQ3hGLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUNGLENBQUM7UUFDSixFQUFFLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV0Qyw2Q0FBNkM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBd0I7Z0JBQ25DLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO2dCQUMvQixNQUFNLEVBQUUsS0FBSzthQUNkLENBQUM7WUFDRixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU87WUFDTCxjQUFjO1lBQ2QsWUFBWTtZQUNaLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsWUFBWTtZQUNaLFlBQVksRUFBRSxTQUFTO1NBQ3hCLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==
|
|
@@ -3,6 +3,7 @@ import { type GlobalVariables, type Header } from '@aztec/circuits.js';
|
|
|
3
3
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
4
|
import { type AvmContext } from '../avm/avm_context.js';
|
|
5
5
|
import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
6
|
+
import { type AvmMachineState } from '../avm/avm_machine_state.js';
|
|
6
7
|
import { AvmContractCallResults } from '../avm/avm_message_call_result.js';
|
|
7
8
|
import { type JournalData } from '../avm/journal/journal.js';
|
|
8
9
|
import { type PublicExecution, type PublicExecutionResult } from './execution.js';
|
|
@@ -24,7 +25,7 @@ export declare function createPublicExecutionContext(avmContext: AvmContext, cal
|
|
|
24
25
|
* @param result
|
|
25
26
|
* @returns
|
|
26
27
|
*/
|
|
27
|
-
export declare function convertAvmResults(executionContext: PublicExecutionContext, newWorldState: JournalData, result: AvmContractCallResults): Promise<PublicExecutionResult>;
|
|
28
|
+
export declare function convertAvmResults(executionContext: PublicExecutionContext, newWorldState: JournalData, result: AvmContractCallResults, endMachineState: AvmMachineState): Promise<PublicExecutionResult>;
|
|
28
29
|
export declare function convertPublicExecutionResult(res: PublicExecutionResult): AvmContractCallResults;
|
|
29
30
|
export declare function updateAvmContextFromPublicExecutionResult(ctx: AvmContext, result: PublicExecutionResult): void;
|
|
30
31
|
export declare function markBytecodeAsAvm(bytecode: Buffer): Buffer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transitional_adaptors.d.ts","sourceRoot":"","sources":["../../src/public/transitional_adaptors.ts"],"names":[],"mappings":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"transitional_adaptors.d.ts","sourceRoot":"","sources":["../../src/public/transitional_adaptors.ts"],"names":[],"mappings":";AAEA,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,MAAM,EAKZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAI7D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,GAC/B,uBAAuB,CAoBzB;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,sBAAsB,CAmC3G;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,sBAAsB,EACxC,aAAa,EAAE,WAAW,EAC1B,MAAM,EAAE,sBAAsB,EAC9B,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CA+DhC;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,qBAAqB,GAAG,sBAAsB,CAE/F;AAED,wBAAgB,yCAAyC,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAoD9G;AASD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// All code in this file needs to die once the public executor is phased out in favor of the AVM.
|
|
2
2
|
import { UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
3
|
-
import { CallContext, ContractStorageRead, ContractStorageUpdateRequest, FunctionData, L2ToL1Message, ReadRequest, SideEffect, SideEffectLinkedToNoteHash, } from '@aztec/circuits.js';
|
|
3
|
+
import { CallContext, ContractStorageRead, ContractStorageUpdateRequest, FunctionData, Gas, L2ToL1Message, ReadRequest, SideEffect, SideEffectLinkedToNoteHash, } from '@aztec/circuits.js';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
6
6
|
import { AvmContractCallResults } from '../avm/avm_message_call_result.js';
|
|
7
7
|
import { Mov } from '../avm/opcodes/memory.js';
|
|
8
8
|
import { createSimulationError } from '../common/errors.js';
|
|
9
|
-
import {
|
|
9
|
+
import { PackedValuesCache, SideEffectCounter } from '../index.js';
|
|
10
10
|
import { PublicExecutionContext } from './public_execution_context.js';
|
|
11
11
|
/**
|
|
12
12
|
* Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
|
|
@@ -17,11 +17,8 @@ import { PublicExecutionContext } from './public_execution_context.js';
|
|
|
17
17
|
*/
|
|
18
18
|
export function createAvmExecutionEnvironment(current, header, globalVariables) {
|
|
19
19
|
return new AvmExecutionEnvironment(current.contractAddress, current.callContext.storageContractAddress, current.callContext.msgSender, // TODO: origin is not available
|
|
20
|
-
current.callContext.msgSender, current.callContext.portalContractAddress,
|
|
21
|
-
/*
|
|
22
|
-
/*feePerL2Gas=*/ Fr.zero(),
|
|
23
|
-
/*feePerDaGas=*/ Fr.zero(),
|
|
24
|
-
/*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, current.functionData.selector);
|
|
20
|
+
current.callContext.msgSender, current.callContext.portalContractAddress, globalVariables.gasFees.feePerL1Gas, globalVariables.gasFees.feePerL2Gas, globalVariables.gasFees.feePerDaGas,
|
|
21
|
+
/*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, current.callContext.gasSettings, current.callContext.transactionFee, current.functionData.selector);
|
|
25
22
|
}
|
|
26
23
|
export function createPublicExecutionContext(avmContext, calldata) {
|
|
27
24
|
const sideEffectCounter = avmContext.persistableState.trace.accessCounter;
|
|
@@ -30,9 +27,12 @@ export function createPublicExecutionContext(avmContext, calldata) {
|
|
|
30
27
|
storageContractAddress: avmContext.environment.storageAddress,
|
|
31
28
|
portalContractAddress: avmContext.environment.portal,
|
|
32
29
|
functionSelector: avmContext.environment.temporaryFunctionSelector,
|
|
30
|
+
gasLeft: Gas.from(avmContext.machineState.gasLeft),
|
|
33
31
|
isDelegateCall: avmContext.environment.isDelegateCall,
|
|
34
32
|
isStaticCall: avmContext.environment.isStaticCall,
|
|
35
33
|
sideEffectCounter: sideEffectCounter,
|
|
34
|
+
gasSettings: avmContext.environment.gasSettings,
|
|
35
|
+
transactionFee: avmContext.environment.transactionFee,
|
|
36
36
|
});
|
|
37
37
|
const functionData = new FunctionData(avmContext.environment.temporaryFunctionSelector, /*isPrivate=*/ false);
|
|
38
38
|
const execution = {
|
|
@@ -41,7 +41,7 @@ export function createPublicExecutionContext(avmContext, calldata) {
|
|
|
41
41
|
args: calldata,
|
|
42
42
|
functionData,
|
|
43
43
|
};
|
|
44
|
-
const packedArgs =
|
|
44
|
+
const packedArgs = PackedValuesCache.create([]);
|
|
45
45
|
const context = new PublicExecutionContext(execution, avmContext.environment.header, avmContext.environment.globals, packedArgs, new SideEffectCounter(sideEffectCounter), avmContext.persistableState.hostStorage.publicStateDb, avmContext.persistableState.hostStorage.contractsDb, avmContext.persistableState.hostStorage.commitmentsDb);
|
|
46
46
|
return context;
|
|
47
47
|
}
|
|
@@ -53,7 +53,7 @@ export function createPublicExecutionContext(avmContext, calldata) {
|
|
|
53
53
|
* @param result
|
|
54
54
|
* @returns
|
|
55
55
|
*/
|
|
56
|
-
export async function convertAvmResults(executionContext, newWorldState, result) {
|
|
56
|
+
export async function convertAvmResults(executionContext, newWorldState, result, endMachineState) {
|
|
57
57
|
const execution = executionContext.execution;
|
|
58
58
|
const contractStorageReads = newWorldState.storageReads.map(read => new ContractStorageRead(read.slot, read.value, read.counter.toNumber()));
|
|
59
59
|
const contractStorageUpdateRequests = newWorldState.storageWrites.map(write => new ContractStorageUpdateRequest(write.slot, write.value, write.counter.toNumber()));
|
|
@@ -97,6 +97,7 @@ export async function convertAvmResults(executionContext, newWorldState, result)
|
|
|
97
97
|
unencryptedLogs,
|
|
98
98
|
reverted: result.reverted,
|
|
99
99
|
revertReason: result.revertReason ? createSimulationError(result.revertReason) : undefined,
|
|
100
|
+
gasLeft: endMachineState.gasLeft,
|
|
100
101
|
};
|
|
101
102
|
}
|
|
102
103
|
export function convertPublicExecutionResult(res) {
|
|
@@ -158,4 +159,4 @@ export function isAvmBytecode(bytecode) {
|
|
|
158
159
|
const magicSize = AVM_MAGIC_SUFFIX.length;
|
|
159
160
|
return bytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
|
|
160
161
|
}
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUdBQWlHO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1QixZQUFZLEVBQ1osR0FBRyxFQUdILGFBQWEsRUFDYixXQUFXLEVBQ1gsVUFBVSxFQUNWLDBCQUEwQixHQUMzQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUc5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZFOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsT0FBd0IsRUFDeEIsTUFBYyxFQUNkLGVBQWdDO0lBRWhDLE9BQU8sSUFBSSx1QkFBdUIsQ0FDaEMsT0FBTyxDQUFDLGVBQWUsRUFDdkIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFDMUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsZ0NBQWdDO0lBQy9ELE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUM3QixPQUFPLENB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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Tx } from '@aztec/circuit-types';
|
|
2
|
+
/**
|
|
3
|
+
* Looks at the side effects of a transaction and returns the highest counter
|
|
4
|
+
* @param tx - A transaction
|
|
5
|
+
* @returns The highest side effect counter in the transaction so far
|
|
6
|
+
*/
|
|
7
|
+
export declare function lastSideEffectCounter(tx: Tx): number;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/public/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAG/C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAsBpD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CallRequest } from '@aztec/circuits.js';
|
|
2
|
+
/**
|
|
3
|
+
* Looks at the side effects of a transaction and returns the highest counter
|
|
4
|
+
* @param tx - A transaction
|
|
5
|
+
* @returns The highest side effect counter in the transaction so far
|
|
6
|
+
*/
|
|
7
|
+
export function lastSideEffectCounter(tx) {
|
|
8
|
+
const data = tx.data.forPublic;
|
|
9
|
+
const sideEffectCounters = [
|
|
10
|
+
...data.endNonRevertibleData.newNoteHashes,
|
|
11
|
+
...data.endNonRevertibleData.newNullifiers,
|
|
12
|
+
...data.endNonRevertibleData.publicCallStack,
|
|
13
|
+
...data.end.newNoteHashes,
|
|
14
|
+
...data.end.newNullifiers,
|
|
15
|
+
...data.end.publicCallStack,
|
|
16
|
+
];
|
|
17
|
+
let max = 0;
|
|
18
|
+
for (const sideEffect of sideEffectCounters) {
|
|
19
|
+
if (sideEffect instanceof CallRequest) {
|
|
20
|
+
// look at both start and end counters because for enqueued public calls start > 0 while end === 0
|
|
21
|
+
max = Math.max(max, sideEffect.startSideEffectCounter.toNumber(), sideEffect.endSideEffectCounter.toNumber());
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
max = Math.max(max, sideEffect.counter.toNumber());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return max;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEVBQU07SUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFVLENBQUM7SUFDaEMsTUFBTSxrQkFBa0IsR0FBRztRQUN6QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhO1FBQzFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWE7UUFDMUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZTtRQUM1QyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtRQUN6QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtRQUN6QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZTtLQUM1QixDQUFDO0lBRUYsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLElBQUksVUFBVSxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGtHQUFrRztZQUNsRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyJ9
|