@aztec/simulator 0.43.0 → 0.44.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/oracle/oracle.d.ts +2 -0
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +10 -4
- package/dest/acvm/oracle/typed_oracle.d.ts +5 -3
- 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 +2 -0
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +9 -4
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +2 -3
- package/dest/avm/fixtures/index.d.ts +10 -6
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +8 -15
- package/dest/avm/journal/journal.d.ts +56 -65
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +76 -115
- package/dest/avm/journal/nullifiers.d.ts +21 -8
- package/dest/avm/journal/nullifiers.d.ts.map +1 -1
- package/dest/avm/journal/nullifiers.js +26 -8
- package/dest/avm/journal/public_storage.d.ts +4 -0
- package/dest/avm/journal/public_storage.d.ts.map +1 -1
- package/dest/avm/journal/public_storage.js +10 -1
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +4 -4
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +12 -27
- package/dest/avm/test_utils.d.ts +14 -0
- package/dest/avm/test_utils.d.ts.map +1 -0
- package/dest/avm/test_utils.js +36 -0
- package/dest/client/client_execution_context.d.ts +3 -3
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +3 -3
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +1 -1
- package/dest/client/execution_result.d.ts +2 -1
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +1 -1
- package/dest/client/index.d.ts +2 -0
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +3 -1
- package/dest/client/simulator.d.ts +3 -3
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +1 -1
- package/dest/client/view_data_oracle.d.ts +2 -0
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +7 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +3 -2
- package/dest/public/abstract_phase_manager.d.ts +1 -0
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +11 -8
- package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/public/app_logic_phase_manager.js +2 -1
- package/dest/public/execution.d.ts +27 -25
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +1 -1
- package/dest/public/executor.d.ts +9 -4
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +29 -25
- package/dest/public/public_processor.d.ts +5 -2
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +142 -123
- package/dest/public/side_effect_trace.d.ts +86 -0
- package/dest/public/side_effect_trace.d.ts.map +1 -0
- package/dest/public/side_effect_trace.js +222 -0
- package/dest/public/side_effect_trace_interface.d.ts +36 -0
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -0
- package/dest/public/side_effect_trace_interface.js +2 -0
- package/dest/public/teardown_phase_manager.d.ts.map +1 -1
- package/dest/public/teardown_phase_manager.js +2 -1
- package/dest/public/transitional_adaptors.d.ts +2 -6
- package/dest/public/transitional_adaptors.d.ts.map +1 -1
- package/dest/public/transitional_adaptors.js +1 -49
- package/package.json +18 -9
- package/src/acvm/oracle/oracle.ts +11 -3
- package/src/acvm/oracle/typed_oracle.ts +17 -3
- package/src/avm/avm_execution_environment.ts +10 -3
- package/src/avm/avm_simulator.ts +2 -3
- package/src/avm/fixtures/index.ts +18 -17
- package/src/avm/journal/journal.ts +114 -223
- package/src/avm/journal/nullifiers.ts +30 -13
- package/src/avm/journal/public_storage.ts +10 -0
- package/src/avm/opcodes/accrued_substate.ts +7 -3
- package/src/avm/opcodes/external_calls.ts +12 -34
- package/src/avm/test_utils.ts +53 -0
- package/src/client/client_execution_context.ts +10 -4
- package/src/client/execution_note_cache.ts +0 -1
- package/src/client/execution_result.ts +2 -1
- package/src/client/index.ts +2 -0
- package/src/client/simulator.ts +8 -2
- package/src/client/view_data_oracle.ts +8 -0
- package/src/mocks/fixtures.ts +2 -1
- package/src/public/abstract_phase_manager.ts +22 -11
- package/src/public/app_logic_phase_manager.ts +1 -0
- package/src/public/execution.ts +35 -25
- package/src/public/executor.ts +44 -37
- package/src/public/public_processor.ts +11 -2
- package/src/public/side_effect_trace.ts +323 -0
- package/src/public/side_effect_trace_interface.ts +41 -0
- package/src/public/teardown_phase_manager.ts +1 -0
- package/src/public/transitional_adaptors.ts +2 -100
- package/dest/avm/journal/trace.d.ts +0 -33
- package/dest/avm/journal/trace.d.ts.map +0 -1
- package/dest/avm/journal/trace.js +0 -152
- package/dest/avm/journal/trace_types.d.ts +0 -55
- package/dest/avm/journal/trace_types.d.ts.map +0 -1
- package/dest/avm/journal/trace_types.js +0 -2
- package/src/avm/journal/trace.ts +0 -181
- package/src/avm/journal/trace_types.ts +0 -91
|
@@ -1,71 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
-
import { type
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { AztecAddress, type FunctionSelector, type Gas } from '@aztec/circuits.js';
|
|
3
|
+
import { type Fr } from '@aztec/foundation/fields';
|
|
4
|
+
import { type TracedContractInstance } from '../../public/side_effect_trace.js';
|
|
5
|
+
import { type PublicSideEffectTraceInterface } from '../../public/side_effect_trace_interface.js';
|
|
6
|
+
import { type AvmExecutionEnvironment } from '../avm_execution_environment.js';
|
|
7
|
+
import { type AvmContractCallResults } from '../avm_message_call_result.js';
|
|
5
8
|
import { type HostStorage } from './host_storage.js';
|
|
6
|
-
import {
|
|
9
|
+
import { NullifierManager } from './nullifiers.js';
|
|
7
10
|
import { PublicStorage } from './public_storage.js';
|
|
8
|
-
import { WorldStateAccessTrace } from './trace.js';
|
|
9
|
-
import { type TracedContractInstance, type TracedL1toL2MessageCheck, type TracedNoteHash, type TracedNoteHashCheck, type TracedNullifier, type TracedNullifierCheck, type TracedPublicStorageRead, type TracedPublicStorageWrite, type TracedUnencryptedL2Log } from './trace_types.js';
|
|
10
|
-
/**
|
|
11
|
-
* Data held within the journal
|
|
12
|
-
*/
|
|
13
|
-
export type JournalData = {
|
|
14
|
-
storageWrites: TracedPublicStorageWrite[];
|
|
15
|
-
storageReads: TracedPublicStorageRead[];
|
|
16
|
-
noteHashChecks: TracedNoteHashCheck[];
|
|
17
|
-
newNoteHashes: TracedNoteHash[];
|
|
18
|
-
nullifierChecks: TracedNullifierCheck[];
|
|
19
|
-
newNullifiers: TracedNullifier[];
|
|
20
|
-
l1ToL2MessageChecks: TracedL1toL2MessageCheck[];
|
|
21
|
-
newL1Messages: L2ToL1Message[];
|
|
22
|
-
newLogs: UnencryptedL2Log[];
|
|
23
|
-
newLogsHashes: TracedUnencryptedL2Log[];
|
|
24
|
-
/** contract address -\> key -\> value */
|
|
25
|
-
currentStorageValue: Map<bigint, Map<bigint, Fr>>;
|
|
26
|
-
sideEffectCounter: number;
|
|
27
|
-
};
|
|
28
|
-
export type PartialPublicExecutionResult = {
|
|
29
|
-
noteHashReadRequests: ReadRequest[];
|
|
30
|
-
nullifierReadRequests: ReadRequest[];
|
|
31
|
-
nullifierNonExistentReadRequests: ReadRequest[];
|
|
32
|
-
l1ToL2MsgReadRequests: ReadRequest[];
|
|
33
|
-
newNoteHashes: NoteHash[];
|
|
34
|
-
newL2ToL1Messages: L2ToL1Message[];
|
|
35
|
-
startSideEffectCounter: number;
|
|
36
|
-
newNullifiers: Nullifier[];
|
|
37
|
-
contractStorageReads: ContractStorageRead[];
|
|
38
|
-
contractStorageUpdateRequests: ContractStorageUpdateRequest[];
|
|
39
|
-
unencryptedLogsHashes: LogHash[];
|
|
40
|
-
unencryptedLogs: UnencryptedL2Log[];
|
|
41
|
-
allUnencryptedLogs: UnencryptedL2Log[];
|
|
42
|
-
nestedExecutions: PublicExecutionResult[];
|
|
43
|
-
};
|
|
44
11
|
/**
|
|
45
12
|
* A class to manage persistable AVM state for contract calls.
|
|
46
13
|
* Maintains a cache of the current world state,
|
|
47
|
-
* a trace of all
|
|
14
|
+
* a trace of all side effects.
|
|
48
15
|
*
|
|
49
|
-
* The simulator should make any world state
|
|
16
|
+
* The simulator should make any world state / tree queries through this object.
|
|
50
17
|
*
|
|
51
18
|
* Manages merging of successful/reverted child state into current state.
|
|
52
19
|
*/
|
|
53
20
|
export declare class AvmPersistableStateManager {
|
|
21
|
+
/** Reference to node storage */
|
|
22
|
+
private hostStorage;
|
|
23
|
+
/** Side effect trace */
|
|
24
|
+
private trace;
|
|
25
|
+
/** Public storage, including cached writes */
|
|
26
|
+
readonly publicStorage: PublicStorage;
|
|
27
|
+
/** Nullifier set, including cached/recently-emitted nullifiers */
|
|
28
|
+
private readonly nullifiers;
|
|
54
29
|
private readonly log;
|
|
30
|
+
constructor(
|
|
55
31
|
/** Reference to node storage */
|
|
56
|
-
|
|
57
|
-
/**
|
|
32
|
+
hostStorage: HostStorage,
|
|
33
|
+
/** Side effect trace */
|
|
34
|
+
trace: PublicSideEffectTraceInterface,
|
|
58
35
|
/** Public storage, including cached writes */
|
|
59
|
-
publicStorage: PublicStorage
|
|
36
|
+
publicStorage: PublicStorage,
|
|
60
37
|
/** Nullifier set, including cached/recently-emitted nullifiers */
|
|
61
|
-
nullifiers:
|
|
62
|
-
/**
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
newLogs: UnencryptedL2Log[];
|
|
67
|
-
transitionalExecutionResult: PartialPublicExecutionResult;
|
|
68
|
-
constructor(hostStorage: HostStorage, parent?: AvmPersistableStateManager);
|
|
38
|
+
nullifiers: NullifierManager);
|
|
39
|
+
/**
|
|
40
|
+
* Create a new state manager with some preloaded pending siloed nullifiers
|
|
41
|
+
*/
|
|
42
|
+
static newWithPendingSiloedNullifiers(hostStorage: HostStorage, trace: PublicSideEffectTraceInterface, pendingSiloedNullifiers: Fr[]): AvmPersistableStateManager;
|
|
69
43
|
/**
|
|
70
44
|
* Create a new state manager forked from this one
|
|
71
45
|
*/
|
|
@@ -86,6 +60,14 @@ export declare class AvmPersistableStateManager {
|
|
|
86
60
|
* @returns the latest value written to slot, or 0 if never written to before
|
|
87
61
|
*/
|
|
88
62
|
readStorage(storageAddress: Fr, slot: Fr): Promise<Fr>;
|
|
63
|
+
/**
|
|
64
|
+
* Read from public storage, don't trace the read.
|
|
65
|
+
*
|
|
66
|
+
* @param storageAddress - the address of the contract whose storage is being read from
|
|
67
|
+
* @param slot - the slot in the contract's storage being read from
|
|
68
|
+
* @returns the latest value written to slot, or 0 if never written to before
|
|
69
|
+
*/
|
|
70
|
+
peekStorage(storageAddress: Fr, slot: Fr): Promise<Fr>;
|
|
89
71
|
/**
|
|
90
72
|
* Check if a note hash exists at the given leaf index, trace the check.
|
|
91
73
|
*
|
|
@@ -119,28 +101,37 @@ export declare class AvmPersistableStateManager {
|
|
|
119
101
|
* @param msgLeafIndex - the message leaf index to use in the check
|
|
120
102
|
* @returns exists - whether the message exists in the L1 to L2 Messages tree
|
|
121
103
|
*/
|
|
122
|
-
checkL1ToL2MessageExists(msgHash: Fr, msgLeafIndex: Fr): Promise<boolean>;
|
|
104
|
+
checkL1ToL2MessageExists(contractAddress: Fr, msgHash: Fr, msgLeafIndex: Fr): Promise<boolean>;
|
|
123
105
|
/**
|
|
124
106
|
* Write an L2 to L1 message.
|
|
125
107
|
* @param recipient - L1 contract address to send the message to.
|
|
126
108
|
* @param content - Message content.
|
|
127
109
|
*/
|
|
128
|
-
|
|
129
|
-
|
|
110
|
+
writeL2ToL1Message(recipient: Fr, content: Fr): void;
|
|
111
|
+
/**
|
|
112
|
+
* Write an unencrypted log
|
|
113
|
+
* @param contractAddress - address of the contract that emitted the log
|
|
114
|
+
* @param event - log event selector
|
|
115
|
+
* @param log - log contents
|
|
116
|
+
*/
|
|
117
|
+
writeUnencryptedLog(contractAddress: Fr, event: Fr, log: Fr[]): void;
|
|
118
|
+
/**
|
|
119
|
+
* Get a contract instance.
|
|
120
|
+
* @param contractAddress - address of the contract instance to retrieve.
|
|
121
|
+
* @returns the contract instance with an "exists" flag
|
|
122
|
+
*/
|
|
130
123
|
getContractInstance(contractAddress: Fr): Promise<TracedContractInstance>;
|
|
131
124
|
/**
|
|
132
|
-
* Accept nested world state modifications
|
|
125
|
+
* Accept nested world state modifications
|
|
133
126
|
*/
|
|
134
|
-
acceptNestedCallState(
|
|
127
|
+
acceptNestedCallState(nestedState: AvmPersistableStateManager): void;
|
|
135
128
|
/**
|
|
136
|
-
*
|
|
129
|
+
* Get a contract's bytecode from the contracts DB
|
|
137
130
|
*/
|
|
138
|
-
|
|
131
|
+
getBytecode(contractAddress: AztecAddress, selector: FunctionSelector): Promise<Buffer | undefined>;
|
|
139
132
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* @returns a JournalData object
|
|
133
|
+
* Accept the nested call's state and trace the nested call
|
|
143
134
|
*/
|
|
144
|
-
|
|
135
|
+
processNestedCall(nestedState: AvmPersistableStateManager, success: boolean, nestedEnvironment: AvmExecutionEnvironment, startGasLeft: Gas, endGasLeft: Gas, bytecode: Buffer, avmCallResults: AvmContractCallResults): Promise<void>;
|
|
145
136
|
}
|
|
146
137
|
//# sourceMappingURL=journal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/journal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/journal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,54 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
import { UnencryptedL2Log } from '@aztec/circuit-types';
|
|
3
|
-
import { AztecAddress, ContractStorageRead, ContractStorageUpdateRequest, EthAddress, L2ToL1Message, LogHash, NoteHash, Nullifier, ReadRequest, } from '@aztec/circuits.js';
|
|
4
|
-
import { EventSelector } from '@aztec/foundation/abi';
|
|
5
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
1
|
+
import { AztecAddress } from '@aztec/circuits.js';
|
|
6
2
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
7
3
|
import { SerializableContractInstance } from '@aztec/types/contracts';
|
|
8
|
-
import {
|
|
4
|
+
import { NullifierManager } from './nullifiers.js';
|
|
9
5
|
import { PublicStorage } from './public_storage.js';
|
|
10
|
-
import { WorldStateAccessTrace } from './trace.js';
|
|
11
6
|
/**
|
|
12
7
|
* A class to manage persistable AVM state for contract calls.
|
|
13
8
|
* Maintains a cache of the current world state,
|
|
14
|
-
* a trace of all
|
|
9
|
+
* a trace of all side effects.
|
|
15
10
|
*
|
|
16
|
-
* The simulator should make any world state
|
|
11
|
+
* The simulator should make any world state / tree queries through this object.
|
|
17
12
|
*
|
|
18
13
|
* Manages merging of successful/reverted child state into current state.
|
|
19
14
|
*/
|
|
20
15
|
export class AvmPersistableStateManager {
|
|
21
|
-
constructor(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
16
|
+
constructor(
|
|
17
|
+
/** Reference to node storage */
|
|
18
|
+
hostStorage,
|
|
19
|
+
/** Side effect trace */
|
|
20
|
+
trace,
|
|
21
|
+
/** Public storage, including cached writes */
|
|
22
|
+
publicStorage,
|
|
23
|
+
/** Nullifier set, including cached/recently-emitted nullifiers */
|
|
24
|
+
nullifiers) {
|
|
26
25
|
this.hostStorage = hostStorage;
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
contractStorageUpdateRequests: [],
|
|
41
|
-
unencryptedLogsHashes: [],
|
|
42
|
-
unencryptedLogs: [],
|
|
43
|
-
allUnencryptedLogs: [],
|
|
44
|
-
nestedExecutions: [],
|
|
45
|
-
};
|
|
26
|
+
this.trace = trace;
|
|
27
|
+
this.publicStorage = publicStorage;
|
|
28
|
+
this.nullifiers = nullifiers;
|
|
29
|
+
this.log = createDebugLogger('aztec:avm_simulator:state_manager');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a new state manager with some preloaded pending siloed nullifiers
|
|
33
|
+
*/
|
|
34
|
+
static newWithPendingSiloedNullifiers(hostStorage, trace, pendingSiloedNullifiers) {
|
|
35
|
+
const parentNullifiers = NullifierManager.newWithPendingSiloedNullifiers(hostStorage.commitmentsDb, pendingSiloedNullifiers);
|
|
36
|
+
return new AvmPersistableStateManager(hostStorage, trace,
|
|
37
|
+
/*publicStorage=*/ new PublicStorage(hostStorage.publicStateDb),
|
|
38
|
+
/*nullifiers=*/ parentNullifiers.fork());
|
|
46
39
|
}
|
|
47
40
|
/**
|
|
48
41
|
* Create a new state manager forked from this one
|
|
49
42
|
*/
|
|
50
43
|
fork() {
|
|
51
|
-
return new AvmPersistableStateManager(this.hostStorage, this);
|
|
44
|
+
return new AvmPersistableStateManager(this.hostStorage, this.trace.fork(), this.publicStorage.fork(), this.nullifiers.fork());
|
|
52
45
|
}
|
|
53
46
|
/**
|
|
54
47
|
* Write to public storage, journal/trace the write.
|
|
@@ -61,9 +54,6 @@ export class AvmPersistableStateManager {
|
|
|
61
54
|
this.log.debug(`Storage write (address=${storageAddress}, slot=${slot}): value=${value}`);
|
|
62
55
|
// Cache storage writes for later reference/reads
|
|
63
56
|
this.publicStorage.write(storageAddress, slot, value);
|
|
64
|
-
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
65
|
-
this.transitionalExecutionResult.contractStorageUpdateRequests.push(new ContractStorageUpdateRequest(slot, value, this.trace.accessCounter, storageAddress));
|
|
66
|
-
// Trace all storage writes (even reverted ones)
|
|
67
57
|
this.trace.tracePublicStorageWrite(storageAddress, slot, value);
|
|
68
58
|
}
|
|
69
59
|
/**
|
|
@@ -76,12 +66,21 @@ export class AvmPersistableStateManager {
|
|
|
76
66
|
async readStorage(storageAddress, slot) {
|
|
77
67
|
const { value, exists, cached } = await this.publicStorage.read(storageAddress, slot);
|
|
78
68
|
this.log.debug(`Storage read (address=${storageAddress}, slot=${slot}): value=${value}, exists=${exists}, cached=${cached}`);
|
|
79
|
-
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
80
|
-
this.transitionalExecutionResult.contractStorageReads.push(new ContractStorageRead(slot, value, this.trace.accessCounter, storageAddress));
|
|
81
|
-
// We want to keep track of all performed reads (even reverted ones)
|
|
82
69
|
this.trace.tracePublicStorageRead(storageAddress, slot, value, exists, cached);
|
|
83
70
|
return Promise.resolve(value);
|
|
84
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Read from public storage, don't trace the read.
|
|
74
|
+
*
|
|
75
|
+
* @param storageAddress - the address of the contract whose storage is being read from
|
|
76
|
+
* @param slot - the slot in the contract's storage being read from
|
|
77
|
+
* @returns the latest value written to slot, or 0 if never written to before
|
|
78
|
+
*/
|
|
79
|
+
async peekStorage(storageAddress, slot) {
|
|
80
|
+
const { value, exists, cached } = await this.publicStorage.read(storageAddress, slot);
|
|
81
|
+
this.log.debug(`Storage peek (address=${storageAddress}, slot=${slot}): value=${value}, exists=${exists}, cached=${cached}`);
|
|
82
|
+
return Promise.resolve(value);
|
|
83
|
+
}
|
|
85
84
|
// TODO(4886): We currently don't silo note hashes.
|
|
86
85
|
/**
|
|
87
86
|
* Check if a note hash exists at the given leaf index, trace the check.
|
|
@@ -95,9 +94,7 @@ export class AvmPersistableStateManager {
|
|
|
95
94
|
const gotLeafIndex = await this.hostStorage.commitmentsDb.getCommitmentIndex(noteHash);
|
|
96
95
|
const exists = gotLeafIndex === leafIndex.toBigInt();
|
|
97
96
|
this.log.debug(`noteHashes(${storageAddress})@${noteHash} ?? leafIndex: ${leafIndex}, exists: ${exists}.`);
|
|
98
|
-
|
|
99
|
-
this.transitionalExecutionResult.noteHashReadRequests.push(new ReadRequest(noteHash, this.trace.accessCounter));
|
|
100
|
-
this.trace.traceNoteHashCheck(storageAddress, noteHash, exists, leafIndex);
|
|
97
|
+
this.trace.traceNoteHashCheck(storageAddress, noteHash, leafIndex, exists);
|
|
101
98
|
return Promise.resolve(exists);
|
|
102
99
|
}
|
|
103
100
|
/**
|
|
@@ -105,8 +102,6 @@ export class AvmPersistableStateManager {
|
|
|
105
102
|
* @param noteHash - the unsiloed note hash to write
|
|
106
103
|
*/
|
|
107
104
|
writeNoteHash(storageAddress, noteHash) {
|
|
108
|
-
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
109
|
-
this.transitionalExecutionResult.newNoteHashes.push(new NoteHash(noteHash, this.trace.accessCounter));
|
|
110
105
|
this.log.debug(`noteHashes(${storageAddress}) += @${noteHash}.`);
|
|
111
106
|
this.trace.traceNewNoteHash(storageAddress, noteHash);
|
|
112
107
|
}
|
|
@@ -118,15 +113,8 @@ export class AvmPersistableStateManager {
|
|
|
118
113
|
*/
|
|
119
114
|
async checkNullifierExists(storageAddress, nullifier) {
|
|
120
115
|
const [exists, isPending, leafIndex] = await this.nullifiers.checkExists(storageAddress, nullifier);
|
|
121
|
-
this.log.debug(`nullifiers(${storageAddress})@${nullifier} ?? leafIndex: ${leafIndex},
|
|
122
|
-
|
|
123
|
-
if (exists) {
|
|
124
|
-
this.transitionalExecutionResult.nullifierReadRequests.push(new ReadRequest(nullifier, this.trace.accessCounter));
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
this.transitionalExecutionResult.nullifierNonExistentReadRequests.push(new ReadRequest(nullifier, this.trace.accessCounter));
|
|
128
|
-
}
|
|
129
|
-
this.trace.traceNullifierCheck(storageAddress, nullifier, exists, isPending, leafIndex);
|
|
116
|
+
this.log.debug(`nullifiers(${storageAddress})@${nullifier} ?? leafIndex: ${leafIndex}, exists: ${exists}, pending: ${isPending}.`);
|
|
117
|
+
this.trace.traceNullifierCheck(storageAddress, nullifier, leafIndex, exists, isPending);
|
|
130
118
|
return Promise.resolve(exists);
|
|
131
119
|
}
|
|
132
120
|
/**
|
|
@@ -135,8 +123,6 @@ export class AvmPersistableStateManager {
|
|
|
135
123
|
* @param nullifier - the unsiloed nullifier to write
|
|
136
124
|
*/
|
|
137
125
|
async writeNullifier(storageAddress, nullifier) {
|
|
138
|
-
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
139
|
-
this.transitionalExecutionResult.newNullifiers.push(new Nullifier(nullifier, this.trace.accessCounter, /*noteHash=*/ Fr.ZERO));
|
|
140
126
|
this.log.debug(`nullifiers(${storageAddress}) += ${nullifier}.`);
|
|
141
127
|
// Cache pending nullifiers for later access
|
|
142
128
|
await this.nullifiers.append(storageAddress, nullifier);
|
|
@@ -149,12 +135,11 @@ export class AvmPersistableStateManager {
|
|
|
149
135
|
* @param msgLeafIndex - the message leaf index to use in the check
|
|
150
136
|
* @returns exists - whether the message exists in the L1 to L2 Messages tree
|
|
151
137
|
*/
|
|
152
|
-
async checkL1ToL2MessageExists(msgHash, msgLeafIndex) {
|
|
138
|
+
async checkL1ToL2MessageExists(contractAddress, msgHash, msgLeafIndex) {
|
|
153
139
|
const valueAtIndex = await this.hostStorage.commitmentsDb.getL1ToL2LeafValue(msgLeafIndex.toBigInt());
|
|
154
140
|
const exists = valueAtIndex?.equals(msgHash) ?? false;
|
|
155
141
|
this.log.debug(`l1ToL2Messages(@${msgLeafIndex}) ?? exists: ${exists}, expected: ${msgHash}, found: ${valueAtIndex}.`);
|
|
156
|
-
this.
|
|
157
|
-
this.trace.traceL1ToL2MessageCheck(msgHash, msgLeafIndex, exists);
|
|
142
|
+
this.trace.traceL1ToL2MessageCheck(contractAddress, msgHash, msgLeafIndex, exists);
|
|
158
143
|
return Promise.resolve(exists);
|
|
159
144
|
}
|
|
160
145
|
/**
|
|
@@ -162,30 +147,25 @@ export class AvmPersistableStateManager {
|
|
|
162
147
|
* @param recipient - L1 contract address to send the message to.
|
|
163
148
|
* @param content - Message content.
|
|
164
149
|
*/
|
|
165
|
-
|
|
150
|
+
writeL2ToL1Message(recipient, content) {
|
|
166
151
|
this.log.debug(`L1Messages(${recipient}) += ${content}.`);
|
|
167
|
-
|
|
168
|
-
const message = new L2ToL1Message(recipientAddress, content, 0);
|
|
169
|
-
this.newL1Messages.push(message);
|
|
170
|
-
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
171
|
-
this.transitionalExecutionResult.newL2ToL1Messages.push(message);
|
|
152
|
+
this.trace.traceNewL2ToL1Message(recipient, content);
|
|
172
153
|
}
|
|
173
|
-
|
|
154
|
+
/**
|
|
155
|
+
* Write an unencrypted log
|
|
156
|
+
* @param contractAddress - address of the contract that emitted the log
|
|
157
|
+
* @param event - log event selector
|
|
158
|
+
* @param log - log contents
|
|
159
|
+
*/
|
|
160
|
+
writeUnencryptedLog(contractAddress, event, log) {
|
|
174
161
|
this.log.debug(`UnencryptedL2Log(${contractAddress}) += event ${event} with ${log.length} fields.`);
|
|
175
|
-
|
|
176
|
-
const logHash = Fr.fromBuffer(ulog.hash());
|
|
177
|
-
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
178
|
-
this.transitionalExecutionResult.unencryptedLogs.push(ulog);
|
|
179
|
-
this.transitionalExecutionResult.allUnencryptedLogs.push(ulog);
|
|
180
|
-
// this duplicates exactly what happens in the trace just for the purpose of transitional integration with the kernel
|
|
181
|
-
this.transitionalExecutionResult.unencryptedLogsHashes.push(
|
|
182
|
-
// TODO(6578): explain magic number 4 here
|
|
183
|
-
new LogHash(logHash, this.trace.accessCounter, new Fr(ulog.length + 4)));
|
|
184
|
-
// TODO(6206): likely need to track this here and not just in the transitional logic.
|
|
185
|
-
// TODO(6205): why are logs pushed here but logs hashes are traced?
|
|
186
|
-
this.newLogs.push(ulog);
|
|
187
|
-
this.trace.traceNewLog(logHash);
|
|
162
|
+
this.trace.traceUnencryptedLog(contractAddress, event, log);
|
|
188
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Get a contract instance.
|
|
166
|
+
* @param contractAddress - address of the contract instance to retrieve.
|
|
167
|
+
* @returns the contract instance with an "exists" flag
|
|
168
|
+
*/
|
|
189
169
|
async getContractInstance(contractAddress) {
|
|
190
170
|
let exists = true;
|
|
191
171
|
const aztecAddress = AztecAddress.fromField(contractAddress);
|
|
@@ -194,52 +174,33 @@ export class AvmPersistableStateManager {
|
|
|
194
174
|
instance = SerializableContractInstance.empty().withAddress(aztecAddress);
|
|
195
175
|
exists = false;
|
|
196
176
|
}
|
|
177
|
+
this.log.debug(`Get Contract instance (address=${contractAddress}): exists=${exists}, instance=${JSON.stringify(instance)}`);
|
|
197
178
|
const tracedInstance = { ...instance, exists };
|
|
198
179
|
this.trace.traceGetContractInstance(tracedInstance);
|
|
199
180
|
return Promise.resolve(tracedInstance);
|
|
200
181
|
}
|
|
201
182
|
/**
|
|
202
|
-
* Accept nested world state modifications
|
|
183
|
+
* Accept nested world state modifications
|
|
203
184
|
*/
|
|
204
|
-
acceptNestedCallState(
|
|
205
|
-
|
|
206
|
-
this.
|
|
207
|
-
// Merge World State Access Trace
|
|
208
|
-
this.trace.acceptAndMerge(nestedJournal.trace);
|
|
209
|
-
// Accrued Substate
|
|
210
|
-
this.newL1Messages.push(...nestedJournal.newL1Messages);
|
|
211
|
-
this.newLogs.push(...nestedJournal.newLogs);
|
|
212
|
-
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
213
|
-
this.transitionalExecutionResult.allUnencryptedLogs.push(...nestedJournal.transitionalExecutionResult.allUnencryptedLogs);
|
|
185
|
+
acceptNestedCallState(nestedState) {
|
|
186
|
+
this.publicStorage.acceptAndMerge(nestedState.publicStorage);
|
|
187
|
+
this.nullifiers.acceptAndMerge(nestedState.nullifiers);
|
|
214
188
|
}
|
|
215
189
|
/**
|
|
216
|
-
*
|
|
190
|
+
* Get a contract's bytecode from the contracts DB
|
|
217
191
|
*/
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
this.trace.acceptAndMerge(nestedJournal.trace);
|
|
192
|
+
async getBytecode(contractAddress, selector) {
|
|
193
|
+
return await this.hostStorage.contractsDb.getBytecode(contractAddress, selector);
|
|
221
194
|
}
|
|
222
|
-
// TODO:(5818): do we need this type anymore?
|
|
223
195
|
/**
|
|
224
|
-
*
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
nullifierChecks: this.trace.nullifierChecks,
|
|
233
|
-
newNullifiers: this.trace.newNullifiers,
|
|
234
|
-
l1ToL2MessageChecks: this.trace.l1ToL2MessageChecks,
|
|
235
|
-
newL1Messages: this.newL1Messages,
|
|
236
|
-
newLogs: this.newLogs,
|
|
237
|
-
newLogsHashes: this.trace.newLogsHashes,
|
|
238
|
-
currentStorageValue: this.publicStorage.getCache().cachePerContract,
|
|
239
|
-
storageReads: this.trace.publicStorageReads,
|
|
240
|
-
storageWrites: this.trace.publicStorageWrites,
|
|
241
|
-
sideEffectCounter: this.trace.accessCounter,
|
|
242
|
-
};
|
|
196
|
+
* Accept the nested call's state and trace the nested call
|
|
197
|
+
*/
|
|
198
|
+
async processNestedCall(nestedState, success, nestedEnvironment, startGasLeft, endGasLeft, bytecode, avmCallResults) {
|
|
199
|
+
if (success) {
|
|
200
|
+
this.acceptNestedCallState(nestedState);
|
|
201
|
+
}
|
|
202
|
+
const functionName = (await nestedState.hostStorage.contractsDb.getDebugFunctionName(nestedEnvironment.address, nestedEnvironment.temporaryFunctionSelector)) ?? `${nestedEnvironment.address}:${nestedEnvironment.temporaryFunctionSelector}`;
|
|
203
|
+
this.trace.traceNestedCall(nestedState.trace, nestedEnvironment, startGasLeft, endGasLeft, bytecode, avmCallResults, functionName);
|
|
243
204
|
}
|
|
244
205
|
}
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam91cm5hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vam91cm5hbC9qb3VybmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9EQUFvRDtBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsVUFBVSxFQUNWLGFBQWEsRUFDYixPQUFPLEVBQ1AsUUFBUSxFQUNSLFNBQVMsRUFDVCxXQUFXLEdBQ1osTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQXNEbkQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sMEJBQTBCO0lBc0JyQyxZQUFZLFdBQXdCLEVBQUUsTUFBbUM7UUFyQnhELFFBQUcsR0FBZ0IsaUJBQWlCLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQWMzRix3QkFBd0I7UUFDakIsa0JBQWEsR0FBb0IsRUFBRSxDQUFDO1FBQ3BDLFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBTXRDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFN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
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam91cm5hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vam91cm5hbC9qb3VybmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQW1DLE1BQU0sb0JBQW9CLENBQUM7QUFFbkYsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBT3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTywwQkFBMEI7SUFHckM7SUFDRSxnQ0FBZ0M7SUFDeEIsV0FBd0I7SUFDaEMsd0JBQXdCO0lBQ2hCLEtBQXFDO0lBQzdDLDhDQUE4QztJQUM5QixhQUE0QjtJQUM1QyxrRUFBa0U7SUFDakQsVUFBNEI7UUFOckMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFFeEIsVUFBSyxHQUFMLEtBQUssQ0FBZ0M7UUFFN0Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFFM0IsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFWOUIsUUFBRyxHQUFnQixpQkFBaUIsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBV3hGLENBQUM7SUFFSjs7T0FFRztJQUNJLE1BQU0sQ0FBQyw4QkFBOEIsQ0FDMUMsV0FBd0IsRUFDeEIsS0FBcUMsRUFDckMsdUJBQTZCO1FBRTdCLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsOEJBQThCLENBQ3RFLFdBQVcsQ0FBQyxhQUFhLEVBQ3pCLHVCQUF1QixDQUN4QixDQUFDO1FBQ0YsT0FBTyxJQUFJLDBCQUEwQixDQUNuQyxXQUFXLEVBQ1gsS0FBSztRQUNMLGtCQUFrQixDQUFDLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxhQUFh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
|
|
@@ -5,18 +5,28 @@ import type { CommitmentsDB } from '../../index.js';
|
|
|
5
5
|
* Maintains a nullifier cache, and ensures that existence checks fall back to the correct source.
|
|
6
6
|
* When a contract call completes, its cached nullifier set can be merged into its parent's.
|
|
7
7
|
*/
|
|
8
|
-
export declare class
|
|
8
|
+
export declare class NullifierManager {
|
|
9
9
|
/** Reference to node storage. Checked on parent cache-miss. */
|
|
10
10
|
private readonly hostNullifiers;
|
|
11
|
-
/** Parent's nullifiers. Checked on this' cache-miss. */
|
|
12
|
-
private readonly parent?;
|
|
13
11
|
/** Cached nullifiers. */
|
|
14
|
-
cache
|
|
12
|
+
private readonly cache;
|
|
13
|
+
/** Parent nullifier manager to fall back on */
|
|
14
|
+
private readonly parent?;
|
|
15
15
|
constructor(
|
|
16
16
|
/** Reference to node storage. Checked on parent cache-miss. */
|
|
17
17
|
hostNullifiers: CommitmentsDB,
|
|
18
|
-
/**
|
|
19
|
-
|
|
18
|
+
/** Cached nullifiers. */
|
|
19
|
+
cache?: NullifierCache,
|
|
20
|
+
/** Parent nullifier manager to fall back on */
|
|
21
|
+
parent?: NullifierManager | undefined);
|
|
22
|
+
/**
|
|
23
|
+
* Create a new nullifiers manager with some preloaded pending siloed nullifiers
|
|
24
|
+
*/
|
|
25
|
+
static newWithPendingSiloedNullifiers(hostNullifiers: CommitmentsDB, pendingSiloedNullifiers: Fr[]): NullifierManager;
|
|
26
|
+
/**
|
|
27
|
+
* Create a new nullifiers manager forked from this one
|
|
28
|
+
*/
|
|
29
|
+
fork(): NullifierManager;
|
|
20
30
|
/**
|
|
21
31
|
* Get a nullifier's existence in this' cache or parent's (recursively).
|
|
22
32
|
* DOES NOT CHECK HOST STORAGE!
|
|
@@ -51,7 +61,7 @@ export declare class Nullifiers {
|
|
|
51
61
|
*
|
|
52
62
|
* @param incomingNullifiers - the incoming cached nullifiers to merge into this instance's
|
|
53
63
|
*/
|
|
54
|
-
acceptAndMerge(incomingNullifiers:
|
|
64
|
+
acceptAndMerge(incomingNullifiers: NullifierManager): void;
|
|
55
65
|
}
|
|
56
66
|
/**
|
|
57
67
|
* A class to cache nullifiers created during a contract call's AVM simulation.
|
|
@@ -66,6 +76,10 @@ export declare class NullifierCache {
|
|
|
66
76
|
*/
|
|
67
77
|
private cachePerContract;
|
|
68
78
|
private siloedNullifiers;
|
|
79
|
+
/**
|
|
80
|
+
* @parem siloedNullifierFrs: optional list of pending siloed nullifiers to initialize this cache with
|
|
81
|
+
*/
|
|
82
|
+
constructor(siloedNullifierFrs?: Fr[]);
|
|
69
83
|
/**
|
|
70
84
|
* Check whether a nullifier exists in the cache.
|
|
71
85
|
*
|
|
@@ -81,7 +95,6 @@ export declare class NullifierCache {
|
|
|
81
95
|
* @param nullifier - the nullifier to stage
|
|
82
96
|
*/
|
|
83
97
|
append(storageAddress: Fr, nullifier: Fr): void;
|
|
84
|
-
appendSiloed(siloedNullifier: Fr): void;
|
|
85
98
|
/**
|
|
86
99
|
* Merge another cache's nullifiers into this instance's.
|
|
87
100
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nullifiers.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/nullifiers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,
|
|
1
|
+
{"version":3,"file":"nullifiers.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/nullifiers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,gBAAgB;IAEzB,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;;IALxB,+DAA+D;IAC9C,cAAc,EAAE,aAAa;IAC9C,yBAAyB;IACR,KAAK,GAAE,cAAqC;IAC7D,+CAA+C;IAC9B,MAAM,CAAC,8BAAkB;IAG5C;;OAEG;WACW,8BAA8B,CAAC,cAAc,EAAE,aAAa,EAAE,uBAAuB,EAAE,EAAE,EAAE;IAKzG;;OAEG;IACI,IAAI;IAIX;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;;;;;;;;;;;OAYG;IACU,WAAW,CACtB,cAAc,EAAE,EAAE,EAClB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;IAe5E;;;;;OAKG;IACU,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;IAUrD;;;;OAIG;IACI,cAAc,CAAC,kBAAkB,EAAE,gBAAgB;CAG3D;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,gBAAgB,CAA0B;IAElD;;OAEG;gBACS,kBAAkB,CAAC,EAAE,EAAE,EAAE;IAMrC;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO;IAOzD;;;;;OAKG;IACI,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;IAgB/C;;;;;;;;OAQG;IACI,cAAc,CAAC,kBAAkB,EAAE,cAAc;CAwBzD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAI5C"}
|