@aztec/simulator 0.61.0 → 0.63.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 +2 -16
- package/dest/acvm/acvm.d.ts.map +1 -1
- package/dest/acvm/acvm.js +2 -70
- package/dest/acvm/oracle/oracle.d.ts +4 -3
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +11 -9
- package/dest/acvm/oracle/typed_oracle.d.ts +5 -4
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +9 -6
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +4 -3
- package/dest/avm/avm_machine_state.d.ts +27 -8
- package/dest/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/avm/avm_machine_state.js +6 -10
- package/dest/avm/avm_memory_types.d.ts +8 -0
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +5 -1
- package/dest/avm/avm_simulator.d.ts +2 -19
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +12 -14
- package/dest/avm/avm_tree.d.ts +249 -0
- package/dest/avm/avm_tree.d.ts.map +1 -0
- package/dest/avm/avm_tree.js +637 -0
- package/dest/avm/errors.d.ts +4 -17
- package/dest/avm/errors.d.ts.map +1 -1
- package/dest/avm/errors.js +21 -50
- package/dest/avm/fixtures/index.d.ts +7 -2
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +12 -12
- package/dest/avm/index.d.ts +1 -0
- package/dest/avm/index.d.ts.map +1 -1
- package/dest/avm/index.js +2 -1
- package/dest/avm/journal/journal.d.ts +43 -24
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +172 -39
- package/dest/avm/journal/nullifiers.d.ts +5 -4
- package/dest/avm/journal/nullifiers.d.ts.map +1 -1
- package/dest/avm/journal/nullifiers.js +2 -3
- package/dest/avm/journal/public_storage.d.ts +6 -5
- package/dest/avm/journal/public_storage.d.ts.map +1 -1
- package/dest/avm/journal/public_storage.js +1 -1
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +4 -10
- package/dest/avm/opcodes/arithmetic.d.ts +4 -1
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +18 -4
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/avm/opcodes/bitwise.js +1 -3
- package/dest/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/avm/opcodes/comparators.js +1 -2
- package/dest/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/avm/opcodes/contract.js +2 -3
- package/dest/avm/opcodes/control_flow.d.ts +4 -0
- package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/avm/opcodes/control_flow.js +26 -11
- package/dest/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/avm/opcodes/conversion.js +1 -2
- package/dest/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/avm/opcodes/ec_add.js +5 -11
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +1 -2
- package/dest/avm/opcodes/external_calls.d.ts +4 -2
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +38 -22
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +1 -4
- package/dest/avm/opcodes/instruction.d.ts +4 -0
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +7 -1
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +1 -7
- package/dest/avm/opcodes/misc.js +3 -3
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
- package/dest/avm/opcodes/multi_scalar_mul.js +6 -5
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +2 -4
- package/dest/avm/serialization/bytecode_serialization.d.ts +1 -6
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +24 -20
- package/dest/avm/serialization/instruction_serialization.d.ts +2 -2
- package/dest/avm/serialization/instruction_serialization.js +2 -2
- package/dest/client/client_execution_context.d.ts +7 -10
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +19 -18
- package/dest/client/db_oracle.d.ts +22 -8
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/db_oracle.js +1 -1
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +5 -4
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +3 -2
- package/dest/client/view_data_oracle.d.ts +6 -12
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +10 -12
- package/dest/common/errors.d.ts +15 -2
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +85 -4
- package/dest/mocks/fixtures.d.ts +9 -28
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +12 -57
- package/dest/public/dual_side_effect_trace.d.ts +34 -26
- package/dest/public/dual_side_effect_trace.d.ts.map +1 -1
- package/dest/public/dual_side_effect_trace.js +48 -36
- package/dest/public/enqueued_call_side_effect_trace.d.ts +96 -33
- package/dest/public/enqueued_call_side_effect_trace.d.ts.map +1 -1
- package/dest/public/enqueued_call_side_effect_trace.js +212 -138
- package/dest/public/execution.d.ts +50 -17
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +1 -29
- package/dest/public/executor.d.ts +28 -11
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +33 -33
- package/dest/public/index.d.ts +4 -5
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -5
- package/dest/public/public_db_sources.d.ts +1 -0
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +21 -19
- package/dest/public/public_processor.d.ts +7 -11
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +60 -42
- package/dest/public/public_processor_metrics.d.ts +3 -3
- package/dest/public/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor_metrics.js +1 -1
- package/dest/public/public_tx_context.d.ts +130 -0
- package/dest/public/public_tx_context.d.ts.map +1 -0
- package/dest/public/public_tx_context.js +293 -0
- package/dest/public/public_tx_simulator.d.ts +36 -0
- package/dest/public/public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator.js +148 -0
- package/dest/public/side_effect_trace.d.ts +30 -15
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +70 -16
- package/dest/public/side_effect_trace_interface.d.ts +43 -12
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/transitional_adapters.d.ts +9 -0
- package/dest/public/transitional_adapters.d.ts.map +1 -0
- package/dest/public/transitional_adapters.js +127 -0
- package/dest/public/utils.d.ts +5 -0
- package/dest/public/utils.d.ts.map +1 -0
- package/dest/public/utils.js +30 -0
- package/dest/test/utils.d.ts +2 -2
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +4 -4
- package/package.json +12 -9
- package/src/acvm/acvm.ts +3 -94
- package/src/acvm/oracle/oracle.ts +14 -12
- package/src/acvm/oracle/typed_oracle.ts +10 -6
- package/src/avm/avm_gas.ts +3 -2
- package/src/avm/avm_machine_state.ts +28 -12
- package/src/avm/avm_memory_types.ts +5 -0
- package/src/avm/avm_simulator.ts +13 -16
- package/src/avm/avm_tree.ts +785 -0
- package/src/avm/errors.ts +25 -48
- package/src/avm/fixtures/index.ts +16 -12
- package/src/avm/index.ts +1 -0
- package/src/avm/journal/journal.ts +291 -52
- package/src/avm/journal/nullifiers.ts +7 -7
- package/src/avm/journal/public_storage.ts +5 -5
- package/src/avm/opcodes/accrued_substate.ts +3 -9
- package/src/avm/opcodes/arithmetic.ts +26 -4
- package/src/avm/opcodes/bitwise.ts +0 -2
- package/src/avm/opcodes/comparators.ts +0 -1
- package/src/avm/opcodes/contract.ts +1 -2
- package/src/avm/opcodes/control_flow.ts +29 -10
- package/src/avm/opcodes/conversion.ts +0 -1
- package/src/avm/opcodes/ec_add.ts +6 -9
- package/src/avm/opcodes/environment_getters.ts +0 -1
- package/src/avm/opcodes/external_calls.ts +39 -21
- package/src/avm/opcodes/hashing.ts +0 -3
- package/src/avm/opcodes/instruction.ts +7 -0
- package/src/avm/opcodes/memory.ts +0 -6
- package/src/avm/opcodes/misc.ts +2 -2
- package/src/avm/opcodes/multi_scalar_mul.ts +5 -4
- package/src/avm/opcodes/storage.ts +1 -3
- package/src/avm/serialization/bytecode_serialization.ts +31 -22
- package/src/avm/serialization/instruction_serialization.ts +2 -2
- package/src/client/client_execution_context.ts +24 -21
- package/src/client/db_oracle.ts +31 -8
- package/src/client/private_execution.ts +5 -4
- package/src/client/unconstrained_execution.ts +2 -1
- package/src/client/view_data_oracle.ts +14 -13
- package/src/common/errors.ts +119 -3
- package/src/mocks/fixtures.ts +15 -106
- package/src/public/dual_side_effect_trace.ts +138 -50
- package/src/public/enqueued_call_side_effect_trace.ts +352 -212
- package/src/public/execution.ts +58 -42
- package/src/public/executor.ts +52 -67
- package/src/public/index.ts +7 -5
- package/src/public/public_db_sources.ts +22 -19
- package/src/public/public_processor.ts +111 -73
- package/src/public/public_processor_metrics.ts +3 -3
- package/src/public/public_tx_context.ts +411 -0
- package/src/public/public_tx_simulator.ts +232 -0
- package/src/public/side_effect_trace.ts +154 -28
- package/src/public/side_effect_trace_interface.ts +92 -14
- package/src/public/transitional_adapters.ts +347 -0
- package/src/public/utils.ts +32 -0
- package/src/test/utils.ts +9 -2
- package/dest/public/enqueued_call_simulator.d.ts +0 -43
- package/dest/public/enqueued_call_simulator.d.ts.map +0 -1
- package/dest/public/enqueued_call_simulator.js +0 -156
- package/dest/public/enqueued_calls_processor.d.ts +0 -43
- package/dest/public/enqueued_calls_processor.d.ts.map +0 -1
- package/dest/public/enqueued_calls_processor.js +0 -209
- package/dest/public/hints_builder.d.ts +0 -29
- package/dest/public/hints_builder.d.ts.map +0 -1
- package/dest/public/hints_builder.js +0 -75
- package/dest/public/public_kernel.d.ts +0 -30
- package/dest/public/public_kernel.d.ts.map +0 -1
- package/dest/public/public_kernel.js +0 -67
- package/dest/public/public_kernel_circuit_simulator.d.ts +0 -25
- package/dest/public/public_kernel_circuit_simulator.d.ts.map +0 -1
- package/dest/public/public_kernel_circuit_simulator.js +0 -2
- package/dest/public/public_kernel_tail_simulator.d.ts +0 -15
- package/dest/public/public_kernel_tail_simulator.d.ts.map +0 -1
- package/dest/public/public_kernel_tail_simulator.js +0 -39
- package/src/public/enqueued_call_simulator.ts +0 -360
- package/src/public/enqueued_calls_processor.ts +0 -372
- package/src/public/hints_builder.ts +0 -168
- package/src/public/public_kernel.ts +0 -100
- package/src/public/public_kernel_circuit_simulator.ts +0 -32
- package/src/public/public_kernel_tail_simulator.ts +0 -97
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { PublicExecutionRequest, UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
|
-
import { AvmContractBytecodeHints, AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint,
|
|
2
|
+
import { AvmAppendTreeHint, AvmContractBytecodeHints, AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, AvmNullifierReadTreeHint, AvmNullifierWriteTreeHint, AvmPublicDataReadTreeHint, AvmPublicDataWriteTreeHint, CallContext, ContractStorageRead, ContractStorageUpdateRequest, EthAddress, Gas, L1_TO_L2_MSG_TREE_HEIGHT, L2ToL1Message, LogHash, MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_UNENCRYPTED_LOGS_PER_TX, NOTE_HASH_TREE_HEIGHT, NULLIFIER_TREE_HEIGHT, NoteHash, Nullifier, NullifierLeafPreimage, PUBLIC_DATA_TREE_HEIGHT, PublicDataTreeLeafPreimage, ReadRequest, SerializableContractInstance, TreeLeafReadRequest, } from '@aztec/circuits.js';
|
|
3
3
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
4
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
5
|
+
import { assert } from 'console';
|
|
5
6
|
import { createSimulationError } from '../common/errors.js';
|
|
6
|
-
import { resultToPublicCallRequest } from './execution.js';
|
|
7
|
+
import { resultToPublicCallRequest, } from './execution.js';
|
|
7
8
|
import { SideEffectLimitReachedError } from './side_effect_errors.js';
|
|
9
|
+
const emptyPublicDataPath = () => new Array(PUBLIC_DATA_TREE_HEIGHT).fill(Fr.zero());
|
|
10
|
+
const emptyNoteHashPath = () => new Array(NOTE_HASH_TREE_HEIGHT).fill(Fr.zero());
|
|
11
|
+
const emptyNullifierPath = () => new Array(NULLIFIER_TREE_HEIGHT).fill(Fr.zero());
|
|
12
|
+
const emptyL1ToL2MessagePath = () => new Array(L1_TO_L2_MSG_TREE_HEIGHT).fill(Fr.zero());
|
|
8
13
|
export class PublicSideEffectTrace {
|
|
9
14
|
constructor(
|
|
10
15
|
/** The counter of this trace's first side effect. */
|
|
@@ -37,43 +42,60 @@ export class PublicSideEffectTrace {
|
|
|
37
42
|
incrementSideEffectCounter() {
|
|
38
43
|
this.sideEffectCounter++;
|
|
39
44
|
}
|
|
40
|
-
tracePublicStorageRead(contractAddress, slot, value,
|
|
41
|
-
|
|
45
|
+
tracePublicStorageRead(contractAddress, slot, value, leafPreimage = PublicDataTreeLeafPreimage.empty(), leafIndex = Fr.zero(), path = emptyPublicDataPath()) {
|
|
46
|
+
if (!leafIndex.equals(Fr.zero())) {
|
|
47
|
+
// if we have real merkle hint content, make sure the value matches the the provided preimage
|
|
48
|
+
assert(leafPreimage.value.equals(value), 'Value mismatch when tracing in public data write');
|
|
49
|
+
}
|
|
42
50
|
if (this.contractStorageReads.length >= MAX_PUBLIC_DATA_READS_PER_TX) {
|
|
43
51
|
throw new SideEffectLimitReachedError('contract storage read', MAX_PUBLIC_DATA_READS_PER_TX);
|
|
44
52
|
}
|
|
45
|
-
this.contractStorageReads.push(new ContractStorageRead(slot, value, this.sideEffectCounter,
|
|
53
|
+
this.contractStorageReads.push(new ContractStorageRead(slot, value, this.sideEffectCounter, contractAddress));
|
|
46
54
|
this.avmCircuitHints.storageValues.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ value));
|
|
55
|
+
// New hinting
|
|
56
|
+
this.avmCircuitHints.storageReadRequest.items.push(new AvmPublicDataReadTreeHint(leafPreimage, leafIndex, path));
|
|
47
57
|
this.log.debug(`SLOAD cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
|
|
48
58
|
this.incrementSideEffectCounter();
|
|
49
59
|
}
|
|
50
|
-
tracePublicStorageWrite(contractAddress, slot, value) {
|
|
60
|
+
tracePublicStorageWrite(contractAddress, slot, value, lowLeafPreimage = PublicDataTreeLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyPublicDataPath(), newLeafPreimage = PublicDataTreeLeafPreimage.empty(), insertionPath = emptyPublicDataPath()) {
|
|
61
|
+
if (!lowLeafIndex.equals(Fr.zero())) {
|
|
62
|
+
// if we have real merkle hint content, make sure the value matches the the provided preimage
|
|
63
|
+
assert(newLeafPreimage.value.equals(value), 'Value mismatch when tracing in public data read');
|
|
64
|
+
}
|
|
51
65
|
if (this.contractStorageUpdateRequests.length >= MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
|
|
52
66
|
throw new SideEffectLimitReachedError('contract storage write', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
53
67
|
}
|
|
54
68
|
this.contractStorageUpdateRequests.push(new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter, contractAddress));
|
|
69
|
+
// New hinting
|
|
70
|
+
const readHint = new AvmPublicDataReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
|
|
71
|
+
this.avmCircuitHints.storageUpdateRequest.items.push(new AvmPublicDataWriteTreeHint(readHint, newLeafPreimage, insertionPath));
|
|
55
72
|
this.log.debug(`SSTORE cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
|
|
56
73
|
this.incrementSideEffectCounter();
|
|
57
74
|
}
|
|
58
75
|
// TODO(8287): _exists can be removed once we have the vm properly handling the equality check
|
|
59
|
-
traceNoteHashCheck(_contractAddress, noteHash, leafIndex, exists) {
|
|
76
|
+
traceNoteHashCheck(_contractAddress, noteHash, leafIndex, exists, path = emptyNoteHashPath()) {
|
|
60
77
|
// NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
61
78
|
if (this.noteHashReadRequests.length >= MAX_NOTE_HASH_READ_REQUESTS_PER_TX) {
|
|
62
79
|
throw new SideEffectLimitReachedError('note hash read request', MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
63
80
|
}
|
|
81
|
+
// Temp for backward compatibility
|
|
64
82
|
this.noteHashReadRequests.push(new TreeLeafReadRequest(noteHash, leafIndex));
|
|
65
83
|
this.avmCircuitHints.noteHashExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(leafIndex), /*value=*/ exists ? Fr.ONE : Fr.ZERO));
|
|
84
|
+
// New Hinting
|
|
85
|
+
this.avmCircuitHints.noteHashReadRequest.items.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
|
|
66
86
|
// NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
|
|
67
87
|
}
|
|
68
|
-
traceNewNoteHash(_contractAddress, noteHash) {
|
|
88
|
+
traceNewNoteHash(_contractAddress, noteHash, leafIndex, path = emptyNoteHashPath()) {
|
|
69
89
|
if (this.noteHashes.length >= MAX_NOTE_HASHES_PER_TX) {
|
|
70
90
|
throw new SideEffectLimitReachedError('note hash', MAX_NOTE_HASHES_PER_TX);
|
|
71
91
|
}
|
|
72
92
|
this.noteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
|
|
73
93
|
this.log.debug(`NEW_NOTE_HASH cnt: ${this.sideEffectCounter}`);
|
|
94
|
+
// New Hinting
|
|
95
|
+
this.avmCircuitHints.noteHashWriteRequest.items.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
|
|
74
96
|
this.incrementSideEffectCounter();
|
|
75
97
|
}
|
|
76
|
-
traceNullifierCheck(_contractAddress, nullifier,
|
|
98
|
+
traceNullifierCheck(_contractAddress, nullifier, exists, lowLeafPreimage = NullifierLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyNullifierPath()) {
|
|
77
99
|
// NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
78
100
|
// NOTE: isPending and leafIndex are unused for now but may be used for optimizations or kernel hints later
|
|
79
101
|
this.enforceLimitOnNullifierChecks();
|
|
@@ -85,26 +107,33 @@ export class PublicSideEffectTrace {
|
|
|
85
107
|
this.nullifierNonExistentReadRequests.push(readRequest);
|
|
86
108
|
}
|
|
87
109
|
this.avmCircuitHints.nullifierExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ new Fr(exists ? 1 : 0)));
|
|
110
|
+
// New Hints
|
|
111
|
+
this.avmCircuitHints.nullifierReadRequest.items.push(new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath));
|
|
88
112
|
this.log.debug(`NULLIFIER_EXISTS cnt: ${this.sideEffectCounter}`);
|
|
89
113
|
this.incrementSideEffectCounter();
|
|
90
114
|
}
|
|
91
|
-
traceNewNullifier(_contractAddress, nullifier) {
|
|
115
|
+
traceNewNullifier(_contractAddress, nullifier, lowLeafPreimage = NullifierLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyNullifierPath(), insertionPath = emptyNullifierPath()) {
|
|
92
116
|
// NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
93
117
|
if (this.nullifiers.length >= MAX_NULLIFIERS_PER_TX) {
|
|
94
118
|
throw new SideEffectLimitReachedError('nullifier', MAX_NULLIFIERS_PER_TX);
|
|
95
119
|
}
|
|
96
120
|
this.nullifiers.push(new Nullifier(nullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
|
|
121
|
+
// New hinting
|
|
122
|
+
const lowLeafReadHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
|
|
123
|
+
this.avmCircuitHints.nullifierWriteHints.items.push(new AvmNullifierWriteTreeHint(lowLeafReadHint, insertionPath));
|
|
97
124
|
this.log.debug(`NEW_NULLIFIER cnt: ${this.sideEffectCounter}`);
|
|
98
125
|
this.incrementSideEffectCounter();
|
|
99
126
|
}
|
|
100
127
|
// TODO(8287): _exists can be removed once we have the vm properly handling the equality check
|
|
101
|
-
traceL1ToL2MessageCheck(_contractAddress, msgHash, msgLeafIndex, exists) {
|
|
128
|
+
traceL1ToL2MessageCheck(_contractAddress, msgHash, msgLeafIndex, exists, path = emptyL1ToL2MessagePath()) {
|
|
102
129
|
// NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
103
130
|
if (this.l1ToL2MsgReadRequests.length >= MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX) {
|
|
104
131
|
throw new SideEffectLimitReachedError('l1 to l2 message read request', MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX);
|
|
105
132
|
}
|
|
106
133
|
this.l1ToL2MsgReadRequests.push(new TreeLeafReadRequest(msgHash, msgLeafIndex));
|
|
107
134
|
this.avmCircuitHints.l1ToL2MessageExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(msgLeafIndex), /*value=*/ exists ? Fr.ONE : Fr.ZERO));
|
|
135
|
+
// New Hinting
|
|
136
|
+
this.avmCircuitHints.l1ToL2MessageReadRequest.items.push(new AvmAppendTreeHint(msgLeafIndex, msgHash, path));
|
|
108
137
|
// NOTE: counter does not increment for l1tol2 message checks (because it doesn't rely on pending messages)
|
|
109
138
|
}
|
|
110
139
|
traceNewL2ToL1Message(_contractAddress, recipient, content) {
|
|
@@ -120,7 +149,7 @@ export class PublicSideEffectTrace {
|
|
|
120
149
|
if (this.unencryptedLogs.length >= MAX_UNENCRYPTED_LOGS_PER_TX) {
|
|
121
150
|
throw new SideEffectLimitReachedError('unencrypted log', MAX_UNENCRYPTED_LOGS_PER_TX);
|
|
122
151
|
}
|
|
123
|
-
const ulog = new UnencryptedL2Log(
|
|
152
|
+
const ulog = new UnencryptedL2Log(contractAddress, Buffer.concat(log.map(f => f.toBuffer())));
|
|
124
153
|
const basicLogHash = Fr.fromBuffer(ulog.hash());
|
|
125
154
|
this.unencryptedLogs.push(ulog);
|
|
126
155
|
this.allUnencryptedLogs.push(ulog);
|
|
@@ -139,6 +168,7 @@ export class PublicSideEffectTrace {
|
|
|
139
168
|
// This tracing function gets called everytime we start simulation/execution.
|
|
140
169
|
// This happens both when starting a new top-level trace and the start of every nested trace
|
|
141
170
|
// We use this to collect the AvmContractBytecodeHints
|
|
171
|
+
// We need to trace teh merkle tree as well here
|
|
142
172
|
traceGetBytecode(contractAddress, exists, bytecode = Buffer.alloc(0), contractInstance = SerializableContractInstance.default(), contractClass = {
|
|
143
173
|
artifactHash: Fr.zero(),
|
|
144
174
|
privateFunctionsRoot: Fr.zero(),
|
|
@@ -173,7 +203,7 @@ export class PublicSideEffectTrace {
|
|
|
173
203
|
// one for max unique contract calls, and another based on max nullifier reads.
|
|
174
204
|
// Since this trace function happens _after_ a nested call, such threshold limits must take
|
|
175
205
|
// place in another trace function that occurs _before_ a nested call.
|
|
176
|
-
const result = nestedCallTrace.
|
|
206
|
+
const result = nestedCallTrace.toPublicFunctionCallResult(nestedEnvironment, startGasLeft, endGasLeft, bytecode, avmCallResults, functionName);
|
|
177
207
|
this.sideEffectCounter = result.endSideEffectCounter.toNumber();
|
|
178
208
|
// when a nested call returns, caller accepts its updated counter
|
|
179
209
|
this.allUnencryptedLogs.push(...result.allUnencryptedLogs.logs);
|
|
@@ -185,10 +215,22 @@ export class PublicSideEffectTrace {
|
|
|
185
215
|
this.avmCircuitHints.externalCalls.items.push(new AvmExternalCallHint(
|
|
186
216
|
/*success=*/ new Fr(result.reverted ? 0 : 1), result.returnValues, gasUsed, result.endSideEffectCounter, nestedEnvironment.address));
|
|
187
217
|
}
|
|
218
|
+
traceEnqueuedCall(
|
|
219
|
+
/** The call request from private that enqueued this call. */
|
|
220
|
+
_publicCallRequest,
|
|
221
|
+
/** The call's calldata */
|
|
222
|
+
_calldata,
|
|
223
|
+
/** Did the call revert? */
|
|
224
|
+
_reverted) {
|
|
225
|
+
throw new Error('Not implemented');
|
|
226
|
+
}
|
|
227
|
+
merge(_nestedTrace, _reverted = false) {
|
|
228
|
+
throw new Error('Not implemented');
|
|
229
|
+
}
|
|
188
230
|
/**
|
|
189
231
|
* Convert this trace to a PublicExecutionResult for use externally to the simulator.
|
|
190
232
|
*/
|
|
191
|
-
|
|
233
|
+
toPublicFunctionCallResult(
|
|
192
234
|
/** The execution environment of the nested call. */
|
|
193
235
|
avmEnvironment,
|
|
194
236
|
/** How much gas was available for this public execution. */
|
|
@@ -212,7 +254,9 @@ export class PublicSideEffectTrace {
|
|
|
212
254
|
calldata: avmEnvironment.calldata,
|
|
213
255
|
returnValues: avmCallResults.output,
|
|
214
256
|
reverted: avmCallResults.reverted,
|
|
215
|
-
revertReason: avmCallResults.revertReason
|
|
257
|
+
revertReason: avmCallResults.revertReason
|
|
258
|
+
? createSimulationError(avmCallResults.revertReason, avmCallResults.output)
|
|
259
|
+
: undefined,
|
|
216
260
|
contractStorageReads: this.contractStorageReads,
|
|
217
261
|
contractStorageUpdateRequests: this.contractStorageUpdateRequests,
|
|
218
262
|
noteHashReadRequests: this.noteHashReadRequests,
|
|
@@ -232,6 +276,13 @@ export class PublicSideEffectTrace {
|
|
|
232
276
|
functionName,
|
|
233
277
|
};
|
|
234
278
|
}
|
|
279
|
+
toPublicEnqueuedCallExecutionResult(
|
|
280
|
+
/** How much gas was left after this public execution. */
|
|
281
|
+
_endGasLeft,
|
|
282
|
+
/** The call's results */
|
|
283
|
+
_avmCallResults) {
|
|
284
|
+
throw new Error('Not implemented');
|
|
285
|
+
}
|
|
235
286
|
enforceLimitOnNullifierChecks(errorMsgOrigin = '') {
|
|
236
287
|
// NOTE: Why error if _either_ limit was reached? If user code emits either an existent or non-existent
|
|
237
288
|
// nullifier read request (NULLIFIEREXISTS, GETCONTRACTINSTANCE, *CALL), and one of the limits has been
|
|
@@ -246,6 +297,9 @@ export class PublicSideEffectTrace {
|
|
|
246
297
|
throw new SideEffectLimitReachedError(`nullifier non-existent read request ${errorMsgOrigin}`, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX);
|
|
247
298
|
}
|
|
248
299
|
}
|
|
300
|
+
getUnencryptedLogs() {
|
|
301
|
+
throw new Error('Not implemented');
|
|
302
|
+
}
|
|
249
303
|
}
|
|
250
304
|
/**
|
|
251
305
|
* Helper function to create a public execution request from an AVM execution environment
|
|
@@ -259,4 +313,4 @@ function createPublicExecutionRequest(avmEnvironment) {
|
|
|
259
313
|
});
|
|
260
314
|
return new PublicExecutionRequest(callContext, avmEnvironment.calldata);
|
|
261
315
|
}
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNHLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBR1gsbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1QixVQUFVLEVBQ1YsR0FBRyxFQUNILGFBQWEsRUFDYixPQUFPLEVBQ1AscUNBQXFDLEVBQ3JDLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsa0NBQWtDLEVBQ2xDLHFCQUFxQixFQUNyQiwrQ0FBK0MsRUFDL0Msa0NBQWtDLEVBQ2xDLDRCQUE0QixFQUM1QixzQ0FBc0MsRUFDdEMsMkJBQTJCLEVBQzNCLFFBQVEsRUFDUixTQUFTLEVBRVQsV0FBVyxFQUNYLDRCQUE0QixFQUM1QixtQkFBbUIsR0FDcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUE4Qix5QkFBeUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS3RFLE1BQU0sT0FBTyxxQkFBcUI7SUE2QmhDO0lBQ0UscURBQXFEO0lBQ3JDLHlCQUFpQyxDQUFDO1FBQWxDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBWTtRQTlCN0MsUUFBRyxHQUFH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
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNHLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFFMUIsV0FBVyxFQUdYLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsVUFBVSxFQUNWLEdBQUcsRUFDSCx3QkFBd0IsRUFDeEIsYUFBYSxFQUNiLE9BQU8sRUFDUCxxQ0FBcUMsRUFDckMsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixrQ0FBa0MsRUFDbEMscUJBQXFCLEVBQ3JCLCtDQUErQyxFQUMvQyxrQ0FBa0MsRUFDbEMsNEJBQTRCLEVBQzVCLHNDQUFzQyxFQUN0QywyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsU0FBUyxFQUNULHFCQUFxQixFQUNyQix1QkFBdUIsRUFFdkIsMEJBQTBCLEVBRTFCLFdBQVcsRUFDWCw0QkFBNEIsRUFDNUIsbUJBQW1CLEdBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFJakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUdMLHlCQUF5QixH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
|
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import { type
|
|
3
|
+
import { type UnencryptedL2Log } from '@aztec/circuit-types';
|
|
4
|
+
import { type ContractClassIdPreimage, type Gas, type NullifierLeafPreimage, type PublicCallRequest, type PublicDataTreeLeafPreimage, type SerializableContractInstance } from '@aztec/circuits.js';
|
|
5
|
+
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
6
|
import { type Fr } from '@aztec/foundation/fields';
|
|
5
7
|
import { type AvmContractCallResult } from '../avm/avm_contract_call_result.js';
|
|
6
8
|
import { type AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
9
|
+
import { type EnqueuedPublicCallExecutionResultWithSideEffects, type PublicFunctionCallResult } from './execution.js';
|
|
7
10
|
export interface PublicSideEffectTraceInterface {
|
|
8
11
|
fork(): PublicSideEffectTraceInterface;
|
|
12
|
+
merge(nestedTrace: PublicSideEffectTraceInterface, reverted?: boolean): void;
|
|
9
13
|
getCounter(): number;
|
|
10
|
-
tracePublicStorageRead(contractAddress:
|
|
11
|
-
tracePublicStorageWrite(contractAddress:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
tracePublicStorageRead(contractAddress: AztecAddress, slot: Fr, value: Fr, leafPreimage?: PublicDataTreeLeafPreimage, leafIndex?: Fr, path?: Fr[]): void;
|
|
15
|
+
tracePublicStorageWrite(contractAddress: AztecAddress, slot: Fr, // This is the storage slot not the computed leaf slot
|
|
16
|
+
value: Fr, lowLeafPreimage?: PublicDataTreeLeafPreimage, lowLeafIndex?: Fr, lowLeafPath?: Fr[], newLeafPreimage?: PublicDataTreeLeafPreimage, insertionPath?: Fr[]): void;
|
|
17
|
+
traceNoteHashCheck(contractAddress: AztecAddress, noteHash: Fr, leafIndex: Fr, exists: boolean, path?: Fr[]): void;
|
|
18
|
+
traceNewNoteHash(contractAddress: AztecAddress, noteHash: Fr, leafIndex?: Fr, path?: Fr[]): void;
|
|
19
|
+
traceNullifierCheck(contractAddress: AztecAddress, nullifier: Fr, exists: boolean, lowLeafPreimage?: NullifierLeafPreimage, lowLeafIndex?: Fr, lowLeafPath?: Fr[]): void;
|
|
20
|
+
traceNewNullifier(contractAddress: AztecAddress, nullifier: Fr, lowLeafPreimage?: NullifierLeafPreimage, lowLeafIndex?: Fr, lowLeafPath?: Fr[], insertionPath?: Fr[]): void;
|
|
21
|
+
traceL1ToL2MessageCheck(contractAddress: AztecAddress, msgHash: Fr, msgLeafIndex: Fr, exists: boolean, path?: Fr[]): void;
|
|
22
|
+
traceNewL2ToL1Message(contractAddress: AztecAddress, recipient: Fr, content: Fr): void;
|
|
23
|
+
traceUnencryptedLog(contractAddress: AztecAddress, log: Fr[]): void;
|
|
24
|
+
traceGetContractInstance(contractAddress: AztecAddress, exists: boolean, instance?: SerializableContractInstance): void;
|
|
25
|
+
traceGetBytecode(contractAddress: AztecAddress, exists: boolean, bytecode?: Buffer, contractInstance?: SerializableContractInstance, contractClass?: ContractClassIdPreimage): void;
|
|
21
26
|
traceNestedCall(
|
|
22
27
|
/** The trace of the nested call. */
|
|
23
28
|
nestedCallTrace: PublicSideEffectTraceInterface,
|
|
@@ -33,5 +38,31 @@ export interface PublicSideEffectTraceInterface {
|
|
|
33
38
|
avmCallResults: AvmContractCallResult,
|
|
34
39
|
/** Function name */
|
|
35
40
|
functionName: string): void;
|
|
41
|
+
traceEnqueuedCall(
|
|
42
|
+
/** The call request from private that enqueued this call. */
|
|
43
|
+
publicCallRequest: PublicCallRequest,
|
|
44
|
+
/** The call's calldata */
|
|
45
|
+
calldata: Fr[],
|
|
46
|
+
/** Did the call revert? */
|
|
47
|
+
reverted: boolean): void;
|
|
48
|
+
toPublicEnqueuedCallExecutionResult(
|
|
49
|
+
/** How much gas was left after this public execution. */
|
|
50
|
+
endGasLeft: Gas,
|
|
51
|
+
/** The call's results */
|
|
52
|
+
avmCallResults: AvmContractCallResult): EnqueuedPublicCallExecutionResultWithSideEffects;
|
|
53
|
+
toPublicFunctionCallResult(
|
|
54
|
+
/** The execution environment of the nested call. */
|
|
55
|
+
avmEnvironment: AvmExecutionEnvironment,
|
|
56
|
+
/** How much gas was available for this public execution. */
|
|
57
|
+
startGasLeft: Gas,
|
|
58
|
+
/** How much gas was left after this public execution. */
|
|
59
|
+
endGasLeft: Gas,
|
|
60
|
+
/** Bytecode used for this execution. */
|
|
61
|
+
bytecode: Buffer,
|
|
62
|
+
/** The call's results */
|
|
63
|
+
avmCallResults: AvmContractCallResult,
|
|
64
|
+
/** Function name for logging */
|
|
65
|
+
functionName: string): PublicFunctionCallResult;
|
|
66
|
+
getUnencryptedLogs(): UnencryptedL2Log[];
|
|
36
67
|
}
|
|
37
68
|
//# sourceMappingURL=side_effect_trace_interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"side_effect_trace_interface.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace_interface.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"side_effect_trace_interface.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace_interface.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,GAAG,EACR,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EAClC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,KAAK,gDAAgD,EAAE,KAAK,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAEtH,MAAM,WAAW,8BAA8B;IAC7C,IAAI,IAAI,8BAA8B,CAAC;IACvC,KAAK,CAAC,WAAW,EAAE,8BAA8B,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7E,UAAU,IAAI,MAAM,CAAC;IAErB,sBAAsB,CACpB,eAAe,EAAE,YAAY,EAC7B,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,EAAE,EACT,YAAY,CAAC,EAAE,0BAA0B,EACzC,SAAS,CAAC,EAAE,EAAE,EACd,IAAI,CAAC,EAAE,EAAE,EAAE,GACV,IAAI,CAAC;IACR,uBAAuB,CACrB,eAAe,EAAE,YAAY,EAC7B,IAAI,EAAE,EAAE,EAAE,sDAAsD;IAChE,KAAK,EAAE,EAAE,EACT,eAAe,CAAC,EAAE,0BAA0B,EAC5C,YAAY,CAAC,EAAE,EAAE,EACjB,WAAW,CAAC,EAAE,EAAE,EAAE,EAClB,eAAe,CAAC,EAAE,0BAA0B,EAC5C,aAAa,CAAC,EAAE,EAAE,EAAE,GACnB,IAAI,CAAC;IACR,kBAAkB,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACnH,gBAAgB,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACjG,mBAAmB,CACjB,eAAe,EAAE,YAAY,EAC7B,SAAS,EAAE,EAAE,EACb,MAAM,EAAE,OAAO,EACf,eAAe,CAAC,EAAE,qBAAqB,EACvC,YAAY,CAAC,EAAE,EAAE,EACjB,WAAW,CAAC,EAAE,EAAE,EAAE,GACjB,IAAI,CAAC;IACR,iBAAiB,CACf,eAAe,EAAE,YAAY,EAC7B,SAAS,EAAE,EAAE,EACb,eAAe,CAAC,EAAE,qBAAqB,EACvC,YAAY,CAAC,EAAE,EAAE,EACjB,WAAW,CAAC,EAAE,EAAE,EAAE,EAClB,aAAa,CAAC,EAAE,EAAE,EAAE,GACnB,IAAI,CAAC;IACR,uBAAuB,CACrB,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,EAAE,EACX,YAAY,EAAE,EAAE,EAChB,MAAM,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,EAAE,EAAE,GACV,IAAI,CAAC;IACR,qBAAqB,CAAC,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;IACvF,mBAAmB,CAAC,eAAe,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACpE,wBAAwB,CACtB,eAAe,EAAE,YAAY,EAC7B,MAAM,EAAE,OAAO,EACf,QAAQ,CAAC,EAAE,4BAA4B,GACtC,IAAI,CAAC;IACR,gBAAgB,CACd,eAAe,EAAE,YAAY,EAC7B,MAAM,EAAE,OAAO,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,4BAA4B,EAC/C,aAAa,CAAC,EAAE,uBAAuB,GACtC,IAAI,CAAC;IACR,eAAe;IACb,oCAAoC;IACpC,eAAe,EAAE,8BAA8B;IAC/C,oDAAoD;IACpD,iBAAiB,EAAE,uBAAuB;IAC1C,4DAA4D;IAC5D,YAAY,EAAE,GAAG;IACjB,yDAAyD;IACzD,UAAU,EAAE,GAAG;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM;IAChB,yBAAyB;IACzB,cAAc,EAAE,qBAAqB;IACrC,oBAAoB;IACpB,YAAY,EAAE,MAAM,GACnB,IAAI,CAAC;IACR,iBAAiB;IACf,6DAA6D;IAC7D,iBAAiB,EAAE,iBAAiB;IACpC,0BAA0B;IAC1B,QAAQ,EAAE,EAAE,EAAE;IACd,2BAA2B;IAC3B,QAAQ,EAAE,OAAO,GAChB,IAAI,CAAC;IACR,mCAAmC;IACjC,yDAAyD;IACzD,UAAU,EAAE,GAAG;IACf,yBAAyB;IACzB,cAAc,EAAE,qBAAqB,GACpC,gDAAgD,CAAC;IACpD,0BAA0B;IACxB,oDAAoD;IACpD,cAAc,EAAE,uBAAuB;IACvC,4DAA4D;IAC5D,YAAY,EAAE,GAAG;IACjB,yDAAyD;IACzD,UAAU,EAAE,GAAG;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM;IAChB,yBAAyB;IACzB,cAAc,EAAE,qBAAqB;IACrC,gCAAgC;IAChC,YAAY,EAAE,MAAM,GACnB,wBAAwB,CAAC;IAC5B,kBAAkB,IAAI,gBAAgB,EAAE,CAAC;CAC1C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type AvmProvingRequest, type PublicExecutionRequest } from '@aztec/circuit-types';
|
|
2
|
+
import { AvmCircuitPublicInputs, Fr, Gas, type GasSettings, type GlobalVariables, type Header, type PrivateToPublicAccumulatedData, PublicCallRequest, RevertCode, type StateReference } from '@aztec/circuits.js';
|
|
3
|
+
import { type AvmPersistableStateManager } from '../avm/journal/journal.js';
|
|
4
|
+
import { type PublicEnqueuedCallSideEffectTrace } from './enqueued_call_side_effect_trace.js';
|
|
5
|
+
import { type EnqueuedPublicCallExecutionResult } from './execution.js';
|
|
6
|
+
import { type WorldStateDB } from './public_db_sources.js';
|
|
7
|
+
export declare function generateAvmCircuitPublicInputs(trace: PublicEnqueuedCallSideEffectTrace, globalVariables: GlobalVariables, startStateReference: StateReference, startGasUsed: Gas, gasSettings: GasSettings, setupCallRequests: PublicCallRequest[], appLogicCallRequests: PublicCallRequest[], teardownCallRequests: PublicCallRequest[], nonRevertibleAccumulatedDataFromPrivate: PrivateToPublicAccumulatedData, revertibleAccumulatedDataFromPrivate: PrivateToPublicAccumulatedData, endStateReference: StateReference, endGasUsed: Gas, transactionFee: Fr, revertCode: RevertCode): AvmCircuitPublicInputs;
|
|
8
|
+
export declare function generateAvmProvingRequest(real: boolean, worldStateDB: WorldStateDB, stateManager: AvmPersistableStateManager, historicalHeader: Header, globalVariables: GlobalVariables, executionRequest: PublicExecutionRequest, result: EnqueuedPublicCallExecutionResult, allocatedGas: Gas, transactionFee: Fr): Promise<AvmProvingRequest>;
|
|
9
|
+
//# sourceMappingURL=transitional_adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transitional_adapters.d.ts","sourceRoot":"","sources":["../../src/public/transitional_adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAsB,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAEL,sBAAsB,EAItB,EAAE,EACF,GAAG,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,MAAM,EAsBX,KAAK,8BAA8B,EACnC,iBAAiB,EAKjB,UAAU,EACV,KAAK,cAAc,EAKpB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,sCAAsC,CAAC;AAC9F,OAAO,EAAE,KAAK,iCAAiC,EAAiC,MAAM,gBAAgB,CAAC;AAEvG,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,iCAAiC,EACxC,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,cAAc,EACnC,YAAY,EAAE,GAAG,EACjB,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EAAE,EACtC,oBAAoB,EAAE,iBAAiB,EAAE,EACzC,oBAAoB,EAAE,iBAAiB,EAAE,EACzC,uCAAuC,EAAE,8BAA8B,EACvE,oCAAoC,EAAE,8BAA8B,EACpE,iBAAiB,EAAE,cAAc,EACjC,UAAU,EAAE,GAAG,EACf,cAAc,EAAE,EAAE,EAClB,UAAU,EAAE,UAAU,GACrB,sBAAsB,CA2HxB;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,0BAA0B,EACxC,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,sBAAsB,EACxC,MAAM,EAAE,iCAAiC,EACzC,YAAY,EAAE,GAAG,EACjB,cAAc,EAAE,EAAE,GACjB,OAAO,CAAC,iBAAiB,CAAC,CA4B5B"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { ProvingRequestType } from '@aztec/circuit-types';
|
|
2
|
+
import { AvmCircuitInputs, AvmCircuitPublicInputs, AztecAddress, ContractStorageRead, ContractStorageUpdateRequest, Fr, Gas, L2ToL1Message, LogHash, MAX_ENQUEUED_CALLS_PER_CALL, MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_CALL, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_UNENCRYPTED_LOGS_PER_CALL, NoteHash, Nullifier, PrivateToAvmAccumulatedData, PrivateToAvmAccumulatedDataArrayLengths, PublicCallRequest, PublicCircuitPublicInputs, PublicDataWrite, PublicInnerCallRequest, ReadRequest, RevertCode, TreeLeafReadRequest, TreeSnapshots, countAccumulatedItems, mergeAccumulatedData, } from '@aztec/circuits.js';
|
|
3
|
+
import { computeNoteHashNonce, computeUniqueNoteHash, computeVarArgsHash, siloNoteHash } from '@aztec/circuits.js/hash';
|
|
4
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
5
|
+
import { assertLength } from '@aztec/foundation/serialize';
|
|
6
|
+
import { AvmContractCallResult } from '../avm/avm_contract_call_result.js';
|
|
7
|
+
import { getPublicFunctionDebugName } from '../common/debug_fn_name.js';
|
|
8
|
+
import { createAvmExecutionEnvironment } from './executor.js';
|
|
9
|
+
export function generateAvmCircuitPublicInputs(trace, globalVariables, startStateReference, startGasUsed, gasSettings, setupCallRequests, appLogicCallRequests, teardownCallRequests, nonRevertibleAccumulatedDataFromPrivate, revertibleAccumulatedDataFromPrivate, endStateReference, endGasUsed, transactionFee, revertCode) {
|
|
10
|
+
const startTreeSnapshots = new TreeSnapshots(startStateReference.l1ToL2MessageTree, startStateReference.partial.noteHashTree, startStateReference.partial.nullifierTree, startStateReference.partial.publicDataTree);
|
|
11
|
+
const endTreeSnapshots = new TreeSnapshots(endStateReference.l1ToL2MessageTree, endStateReference.partial.noteHashTree, endStateReference.partial.nullifierTree, endStateReference.partial.publicDataTree);
|
|
12
|
+
const avmCircuitPublicInputs = trace.toAvmCircuitPublicInputs(globalVariables, startTreeSnapshots, startGasUsed, gasSettings, setupCallRequests, appLogicCallRequests, teardownCallRequests.length ? teardownCallRequests[0] : PublicCallRequest.empty(), endTreeSnapshots, endGasUsed, transactionFee, !revertCode.isOK());
|
|
13
|
+
const getArrayLengths = (from) => new PrivateToAvmAccumulatedDataArrayLengths(countAccumulatedItems(from.noteHashes), countAccumulatedItems(from.nullifiers), countAccumulatedItems(from.l2ToL1Msgs));
|
|
14
|
+
const convertAccumulatedData = (from) => new PrivateToAvmAccumulatedData(from.noteHashes, from.nullifiers, from.l2ToL1Msgs);
|
|
15
|
+
// Temporary overrides as these entries aren't yet populated in trace
|
|
16
|
+
avmCircuitPublicInputs.previousNonRevertibleAccumulatedDataArrayLengths = getArrayLengths(nonRevertibleAccumulatedDataFromPrivate);
|
|
17
|
+
avmCircuitPublicInputs.previousRevertibleAccumulatedDataArrayLengths = getArrayLengths(revertibleAccumulatedDataFromPrivate);
|
|
18
|
+
avmCircuitPublicInputs.previousNonRevertibleAccumulatedData = convertAccumulatedData(nonRevertibleAccumulatedDataFromPrivate);
|
|
19
|
+
avmCircuitPublicInputs.previousRevertibleAccumulatedData = convertAccumulatedData(revertibleAccumulatedDataFromPrivate);
|
|
20
|
+
// merge all revertible & non-revertible side effects into output accumulated data
|
|
21
|
+
const noteHashesFromPrivate = revertCode.isOK()
|
|
22
|
+
? mergeAccumulatedData(avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.noteHashes, avmCircuitPublicInputs.previousRevertibleAccumulatedData.noteHashes)
|
|
23
|
+
: avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.noteHashes;
|
|
24
|
+
avmCircuitPublicInputs.accumulatedData.noteHashes = assertLength(mergeAccumulatedData(noteHashesFromPrivate, avmCircuitPublicInputs.accumulatedData.noteHashes), MAX_NOTE_HASHES_PER_TX);
|
|
25
|
+
const txHash = avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.nullifiers[0];
|
|
26
|
+
const scopedNoteHashesFromPublic = trace.getSideEffects().noteHashes;
|
|
27
|
+
for (let i = 0; i < scopedNoteHashesFromPublic.length; i++) {
|
|
28
|
+
const scopedNoteHash = scopedNoteHashesFromPublic[i];
|
|
29
|
+
const noteHash = scopedNoteHash.value;
|
|
30
|
+
if (!noteHash.isZero()) {
|
|
31
|
+
const noteHashIndexInTx = i + countAccumulatedItems(noteHashesFromPrivate);
|
|
32
|
+
const nonce = computeNoteHashNonce(txHash, noteHashIndexInTx);
|
|
33
|
+
const uniqueNoteHash = computeUniqueNoteHash(nonce, noteHash);
|
|
34
|
+
const siloedNoteHash = siloNoteHash(scopedNoteHash.contractAddress, uniqueNoteHash);
|
|
35
|
+
avmCircuitPublicInputs.accumulatedData.noteHashes[noteHashIndexInTx] = siloedNoteHash;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const nullifiersFromPrivate = revertCode.isOK()
|
|
39
|
+
? mergeAccumulatedData(avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.nullifiers, avmCircuitPublicInputs.previousRevertibleAccumulatedData.nullifiers)
|
|
40
|
+
: avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.nullifiers;
|
|
41
|
+
avmCircuitPublicInputs.accumulatedData.nullifiers = assertLength(mergeAccumulatedData(nullifiersFromPrivate, avmCircuitPublicInputs.accumulatedData.nullifiers), MAX_NULLIFIERS_PER_TX);
|
|
42
|
+
const msgsFromPrivate = revertCode.isOK()
|
|
43
|
+
? mergeAccumulatedData(avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs, avmCircuitPublicInputs.previousRevertibleAccumulatedData.l2ToL1Msgs)
|
|
44
|
+
: avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs;
|
|
45
|
+
avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs = assertLength(mergeAccumulatedData(msgsFromPrivate, avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs), MAX_L2_TO_L1_MSGS_PER_TX);
|
|
46
|
+
const dedupedPublicDataWrites = [];
|
|
47
|
+
const leafSlotOccurences = new Map();
|
|
48
|
+
for (const publicDataWrite of avmCircuitPublicInputs.accumulatedData.publicDataWrites) {
|
|
49
|
+
const slot = publicDataWrite.leafSlot.toBigInt();
|
|
50
|
+
const prevOccurrences = leafSlotOccurences.get(slot) || 0;
|
|
51
|
+
leafSlotOccurences.set(slot, prevOccurrences + 1);
|
|
52
|
+
}
|
|
53
|
+
for (const publicDataWrite of avmCircuitPublicInputs.accumulatedData.publicDataWrites) {
|
|
54
|
+
const slot = publicDataWrite.leafSlot.toBigInt();
|
|
55
|
+
const prevOccurrences = leafSlotOccurences.get(slot) || 0;
|
|
56
|
+
if (prevOccurrences === 1) {
|
|
57
|
+
dedupedPublicDataWrites.push(publicDataWrite);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
leafSlotOccurences.set(slot, prevOccurrences - 1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
avmCircuitPublicInputs.accumulatedData.publicDataWrites = padArrayEnd(dedupedPublicDataWrites, PublicDataWrite.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
64
|
+
//console.log(`AvmCircuitPublicInputs:\n${inspect(avmCircuitPublicInputs)}`);
|
|
65
|
+
return avmCircuitPublicInputs;
|
|
66
|
+
}
|
|
67
|
+
export async function generateAvmProvingRequest(real, worldStateDB, stateManager, historicalHeader, globalVariables, executionRequest, result, allocatedGas, transactionFee) {
|
|
68
|
+
const fnName = await getPublicFunctionDebugName(worldStateDB, executionRequest.callContext.contractAddress, executionRequest.callContext.functionSelector, executionRequest.args);
|
|
69
|
+
const avmExecutionEnv = createAvmExecutionEnvironment(executionRequest, globalVariables, transactionFee);
|
|
70
|
+
const avmCallResult = new AvmContractCallResult(result.reverted, result.returnValues);
|
|
71
|
+
// Generate an AVM proving request
|
|
72
|
+
let avmProvingRequest;
|
|
73
|
+
if (real) {
|
|
74
|
+
const deprecatedFunctionCallResult = stateManager.trace.toPublicFunctionCallResult(avmExecutionEnv,
|
|
75
|
+
/*startGasLeft=*/ allocatedGas,
|
|
76
|
+
/*endGasLeft=*/ Gas.from(result.endGasLeft), Buffer.alloc(0), avmCallResult, fnName);
|
|
77
|
+
const publicInputs = getPublicCircuitPublicInputs(historicalHeader, globalVariables, deprecatedFunctionCallResult);
|
|
78
|
+
avmProvingRequest = makeAvmProvingRequest(publicInputs, deprecatedFunctionCallResult);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
avmProvingRequest = emptyAvmProvingRequest();
|
|
82
|
+
}
|
|
83
|
+
return avmProvingRequest;
|
|
84
|
+
}
|
|
85
|
+
function emptyAvmProvingRequest() {
|
|
86
|
+
return {
|
|
87
|
+
type: ProvingRequestType.PUBLIC_VM,
|
|
88
|
+
inputs: AvmCircuitInputs.empty(),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function makeAvmProvingRequest(inputs, result) {
|
|
92
|
+
return {
|
|
93
|
+
type: ProvingRequestType.PUBLIC_VM,
|
|
94
|
+
inputs: new AvmCircuitInputs(result.functionName, result.calldata, inputs, result.avmCircuitHints, AvmCircuitPublicInputs.empty()),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function getPublicCircuitPublicInputs(historicalHeader, globalVariables, result) {
|
|
98
|
+
const header = historicalHeader.clone(); // don't modify the original
|
|
99
|
+
header.state.partial.publicDataTree.root = Fr.zero(); // AVM doesn't check this yet
|
|
100
|
+
return PublicCircuitPublicInputs.from({
|
|
101
|
+
callContext: result.executionRequest.callContext,
|
|
102
|
+
proverAddress: AztecAddress.ZERO,
|
|
103
|
+
argsHash: computeVarArgsHash(result.executionRequest.args),
|
|
104
|
+
noteHashes: padArrayEnd(result.noteHashes, NoteHash.empty(), MAX_NOTE_HASHES_PER_CALL, `Too many note hashes. Got ${result.noteHashes.length} with max being ${MAX_NOTE_HASHES_PER_CALL}`),
|
|
105
|
+
nullifiers: padArrayEnd(result.nullifiers, Nullifier.empty(), MAX_NULLIFIERS_PER_CALL, `Too many nullifiers. Got ${result.nullifiers.length} with max being ${MAX_NULLIFIERS_PER_CALL}`),
|
|
106
|
+
l2ToL1Msgs: padArrayEnd(result.l2ToL1Messages, L2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_CALL, `Too many L2 to L1 messages. Got ${result.l2ToL1Messages.length} with max being ${MAX_L2_TO_L1_MSGS_PER_CALL}`),
|
|
107
|
+
startSideEffectCounter: result.startSideEffectCounter,
|
|
108
|
+
endSideEffectCounter: result.endSideEffectCounter,
|
|
109
|
+
returnsHash: computeVarArgsHash(result.returnValues),
|
|
110
|
+
noteHashReadRequests: padArrayEnd(result.noteHashReadRequests, TreeLeafReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, `Too many note hash read requests. Got ${result.noteHashReadRequests.length} with max being ${MAX_NOTE_HASH_READ_REQUESTS_PER_CALL}`),
|
|
111
|
+
nullifierReadRequests: padArrayEnd(result.nullifierReadRequests, ReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_CALL, `Too many nullifier read requests. Got ${result.nullifierReadRequests.length} with max being ${MAX_NULLIFIER_READ_REQUESTS_PER_CALL}`),
|
|
112
|
+
nullifierNonExistentReadRequests: padArrayEnd(result.nullifierNonExistentReadRequests, ReadRequest.empty(), MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, `Too many nullifier non-existent read requests. Got ${result.nullifierNonExistentReadRequests.length} with max being ${MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL}`),
|
|
113
|
+
l1ToL2MsgReadRequests: padArrayEnd(result.l1ToL2MsgReadRequests, TreeLeafReadRequest.empty(), MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, `Too many L1 to L2 message read requests. Got ${result.l1ToL2MsgReadRequests.length} with max being ${MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL}`),
|
|
114
|
+
contractStorageReads: padArrayEnd(result.contractStorageReads, ContractStorageRead.empty(), MAX_PUBLIC_DATA_READS_PER_CALL, `Too many public data reads. Got ${result.contractStorageReads.length} with max being ${MAX_PUBLIC_DATA_READS_PER_CALL}`),
|
|
115
|
+
contractStorageUpdateRequests: padArrayEnd(result.contractStorageUpdateRequests, ContractStorageUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, `Too many public data update requests. Got ${result.contractStorageUpdateRequests.length} with max being ${MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL}`),
|
|
116
|
+
publicCallRequests: padArrayEnd(result.publicCallRequests, PublicInnerCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_CALL, `Too many public call requests. Got ${result.publicCallRequests.length} with max being ${MAX_ENQUEUED_CALLS_PER_CALL}`),
|
|
117
|
+
unencryptedLogsHashes: padArrayEnd(result.unencryptedLogsHashes, LogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_CALL, `Too many unencrypted logs. Got ${result.unencryptedLogsHashes.length} with max being ${MAX_UNENCRYPTED_LOGS_PER_CALL}`),
|
|
118
|
+
historicalHeader: header,
|
|
119
|
+
globalVariables: globalVariables,
|
|
120
|
+
startGasLeft: Gas.from(result.startGasLeft),
|
|
121
|
+
endGasLeft: Gas.from(result.endGasLeft),
|
|
122
|
+
transactionFee: result.transactionFee,
|
|
123
|
+
// TODO(@just-mitch): need better mapping from simulator to revert code.
|
|
124
|
+
revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQixrQkFBa0IsRUFBK0IsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1QixFQUFFLEVBQ0YsR0FBRyxFQUlILGFBQWEsRUFDYixPQUFPLEVBQ1AsMkJBQTJCLEVBQzNCLHVDQUF1QyxFQUN2QywwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsb0NBQW9DLEVBQ3BDLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsaURBQWlELEVBQ2pELG9DQUFvQyxFQUNwQyw4QkFBOEIsRUFDOUIsd0NBQXdDLEVBQ3hDLHNDQUFzQyxFQUN0Qyw2QkFBNkIsRUFDN0IsUUFBUSxFQUNSLFNBQVMsRUFDVCwyQkFBMkIsRUFDM0IsdUNBQXVDLEVBRXZDLGlCQUFpQixFQUNqQix5QkFBeUIsRUFDekIsZUFBZSxFQUNmLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsVUFBVSxFQUVWLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTNFLE9B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
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type PublicExecutionRequest, type Tx, TxExecutionPhase } from '@aztec/circuit-types';
|
|
2
|
+
import { type PublicCallRequest } from '@aztec/circuits.js';
|
|
3
|
+
export declare function getExecutionRequestsByPhase(tx: Tx, phase: TxExecutionPhase): PublicExecutionRequest[];
|
|
4
|
+
export declare function getCallRequestsByPhase(tx: Tx, phase: TxExecutionPhase): PublicCallRequest[];
|
|
5
|
+
//# 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,sBAAsB,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,GAAG,sBAAsB,EAAE,CAarG;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,CAa3F"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { TxExecutionPhase } from '@aztec/circuit-types';
|
|
2
|
+
export function getExecutionRequestsByPhase(tx, phase) {
|
|
3
|
+
switch (phase) {
|
|
4
|
+
case TxExecutionPhase.SETUP:
|
|
5
|
+
return tx.getNonRevertiblePublicExecutionRequests();
|
|
6
|
+
case TxExecutionPhase.APP_LOGIC:
|
|
7
|
+
return tx.getRevertiblePublicExecutionRequests();
|
|
8
|
+
case TxExecutionPhase.TEARDOWN: {
|
|
9
|
+
const request = tx.getPublicTeardownExecutionRequest();
|
|
10
|
+
return request ? [request] : [];
|
|
11
|
+
}
|
|
12
|
+
default:
|
|
13
|
+
throw new Error(`Unknown phase: ${phase}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function getCallRequestsByPhase(tx, phase) {
|
|
17
|
+
switch (phase) {
|
|
18
|
+
case TxExecutionPhase.SETUP:
|
|
19
|
+
return tx.data.getNonRevertiblePublicCallRequests();
|
|
20
|
+
case TxExecutionPhase.APP_LOGIC:
|
|
21
|
+
return tx.data.getRevertiblePublicCallRequests();
|
|
22
|
+
case TxExecutionPhase.TEARDOWN: {
|
|
23
|
+
const request = tx.data.getTeardownPublicCallRequest();
|
|
24
|
+
return request ? [request] : [];
|
|
25
|
+
}
|
|
26
|
+
default:
|
|
27
|
+
throw new Error(`Unknown phase: ${phase}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0MsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5RixNQUFNLFVBQVUsMkJBQTJCLENBQUMsRUFBTSxFQUFFLEtBQXVCO0lBQ3pFLFFBQVEsS0FBSyxFQUFFLENBQUM7UUFDZCxLQUFLLGdCQUFnQixDQUFDLEtBQUs7WUFDekIsT0FBTyxFQUFFLENBQUMsdUNBQXVDLEVBQUUsQ0FBQztRQUN0RCxLQUFLLGdCQUFnQixDQUFDLFNBQVM7WUFDN0IsT0FBTyxFQUFFLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztRQUNuRCxLQUFLLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFDdkQsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0Q7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEVBQU0sRUFBRSxLQUF1QjtJQUNwRSxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLO1lBQ3pCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQ3RELEtBQUssZ0JBQWdCLENBQUMsU0FBUztZQUM3QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztRQUNuRCxLQUFLLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNEO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0FBQ0gsQ0FBQyJ9
|
package/dest/test/utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { L1ToL2Message } from '@aztec/circuit-types';
|
|
2
|
-
import { type AztecAddress,
|
|
2
|
+
import { type AztecAddress, Fr } from '@aztec/circuits.js';
|
|
3
3
|
/**
|
|
4
4
|
* Test utility function to craft an L1 to L2 message.
|
|
5
5
|
* @param selector - The cross chain message selector.
|
|
@@ -8,5 +8,5 @@ import { type AztecAddress, type Fr } from '@aztec/circuits.js';
|
|
|
8
8
|
* @param secret - The secret to unlock the message.
|
|
9
9
|
* @returns The L1 to L2 message.
|
|
10
10
|
*/
|
|
11
|
-
export declare const buildL1ToL2Message: (selector: string, contentPreimage: Fr[], targetContract: AztecAddress, secret: Fr) => L1ToL2Message;
|
|
11
|
+
export declare const buildL1ToL2Message: (selector: string, contentPreimage: Fr[], targetContract: AztecAddress, secret: Fr, msgIndex: Fr | number) => L1ToL2Message;
|
|
12
12
|
//# sourceMappingURL=utils.d.ts.map
|