@aztec/simulator 0.44.0 → 0.45.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 +1 -1
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +3 -3
- package/dest/acvm/oracle/typed_oracle.d.ts +1 -1
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +2 -2
- package/dest/avm/avm_context.d.ts +1 -1
- package/dest/avm/avm_context.d.ts.map +1 -1
- package/dest/avm/avm_context.js +3 -3
- package/dest/avm/{avm_message_call_result.d.ts → avm_contract_call_result.d.ts} +2 -2
- package/dest/avm/avm_contract_call_result.d.ts.map +1 -0
- package/dest/avm/avm_contract_call_result.js +18 -0
- package/dest/avm/avm_execution_environment.d.ts +7 -11
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +11 -20
- package/dest/avm/avm_gas.js +2 -2
- package/dest/avm/avm_simulator.d.ts +4 -4
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +7 -7
- package/dest/avm/bytecode_utils.d.ts +5 -0
- package/dest/avm/bytecode_utils.d.ts.map +1 -0
- package/dest/avm/bytecode_utils.js +29 -0
- package/dest/avm/errors.js +2 -2
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +3 -3
- package/dest/avm/journal/journal.d.ts +5 -5
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +9 -7
- package/dest/avm/journal/public_storage.d.ts +1 -1
- package/dest/avm/journal/public_storage.d.ts.map +1 -1
- package/dest/avm/journal/public_storage.js +2 -2
- package/dest/avm/opcodes/accrued_substate.d.ts +1 -2
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +6 -15
- package/dest/avm/opcodes/environment_getters.d.ts +13 -8
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +20 -13
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +1 -2
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +5 -5
- package/dest/avm/serialization/instruction_serialization.d.ts +9 -9
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +10 -10
- package/dest/client/client_execution_context.d.ts +3 -1
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +6 -4
- package/dest/client/view_data_oracle.d.ts +3 -1
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +6 -4
- package/dest/mocks/fixtures.d.ts +3 -3
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +4 -4
- package/dest/public/abstract_phase_manager.js +12 -12
- package/dest/public/execution.d.ts +6 -5
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +2 -2
- package/dest/public/executor.d.ts +4 -4
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +19 -14
- package/dest/public/hints_builder.d.ts +1 -1
- package/dest/public/index.d.ts +1 -1
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +1 -1
- package/dest/public/public_kernel.d.ts +1 -1
- package/dest/public/public_kernel.d.ts.map +1 -1
- package/dest/public/public_kernel.js +2 -2
- package/dest/public/side_effect_trace.d.ts +5 -4
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +23 -9
- package/dest/public/side_effect_trace_interface.d.ts +3 -3
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/rollup/rollup.d.ts +1 -1
- package/dest/rollup/rollup.d.ts.map +1 -1
- package/dest/rollup/rollup.js +2 -2
- package/package.json +9 -9
- package/src/acvm/oracle/oracle.ts +12 -2
- package/src/acvm/oracle/typed_oracle.ts +6 -1
- package/src/avm/avm_context.ts +2 -2
- package/src/avm/{avm_message_call_result.ts → avm_contract_call_result.ts} +1 -1
- package/src/avm/avm_execution_environment.ts +10 -27
- package/src/avm/avm_gas.ts +1 -1
- package/src/avm/avm_simulator.ts +9 -11
- package/src/avm/bytecode_utils.ts +32 -0
- package/src/avm/errors.ts +1 -1
- package/src/avm/fixtures/index.ts +3 -6
- package/src/avm/journal/journal.ts +14 -11
- package/src/avm/journal/public_storage.ts +2 -2
- package/src/avm/opcodes/accrued_substate.ts +6 -19
- package/src/avm/opcodes/environment_getters.ts +23 -14
- package/src/avm/opcodes/external_calls.ts +2 -3
- package/src/avm/serialization/bytecode_serialization.ts +4 -3
- package/src/avm/serialization/instruction_serialization.ts +3 -3
- package/src/client/client_execution_context.ts +12 -3
- package/src/client/view_data_oracle.ts +12 -3
- package/src/mocks/fixtures.ts +5 -5
- package/src/public/abstract_phase_manager.ts +15 -15
- package/src/public/execution.ts +10 -6
- package/src/public/executor.ts +35 -20
- package/src/public/index.ts +1 -1
- package/src/public/public_kernel.ts +2 -1
- package/src/public/side_effect_trace.ts +31 -13
- package/src/public/side_effect_trace_interface.ts +3 -3
- package/src/rollup/rollup.ts +3 -1
- package/dest/avm/avm_message_call_result.d.ts.map +0 -1
- package/dest/avm/avm_message_call_result.js +0 -18
- package/dest/public/transitional_adaptors.d.ts +0 -17
- package/dest/public/transitional_adaptors.d.ts.map +0 -1
- package/dest/public/transitional_adaptors.js +0 -42
- package/src/public/transitional_adaptors.ts +0 -70
|
@@ -18,17 +18,20 @@ import {
|
|
|
18
18
|
} from '@aztec/circuits.js';
|
|
19
19
|
import { EventSelector } from '@aztec/foundation/abi';
|
|
20
20
|
import { Fr } from '@aztec/foundation/fields';
|
|
21
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
21
22
|
import { type ContractInstanceWithAddress } from '@aztec/types/contracts';
|
|
22
23
|
|
|
24
|
+
import { type AvmContractCallResult } from '../avm/avm_contract_call_result.js';
|
|
23
25
|
import { type AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
24
|
-
import { type AvmContractCallResults } from '../avm/avm_message_call_result.js';
|
|
25
26
|
import { createSimulationError } from '../common/errors.js';
|
|
26
|
-
import { type
|
|
27
|
+
import { type PublicExecutionRequest, type PublicExecutionResult } from './execution.js';
|
|
27
28
|
import { type PublicSideEffectTraceInterface } from './side_effect_trace_interface.js';
|
|
28
29
|
|
|
29
30
|
export type TracedContractInstance = { exists: boolean } & ContractInstanceWithAddress;
|
|
30
31
|
|
|
31
32
|
export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
33
|
+
public logger = createDebugLogger('aztec:public_side_effect_trace');
|
|
34
|
+
|
|
32
35
|
/** The side effect counter increments with every call to the trace. */
|
|
33
36
|
private sideEffectCounter: number; // kept as number until finalized for efficiency
|
|
34
37
|
|
|
@@ -85,6 +88,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
85
88
|
this.avmCircuitHints.storageValues.items.push(
|
|
86
89
|
new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ value),
|
|
87
90
|
);
|
|
91
|
+
this.logger.debug(`SLOAD cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
|
|
88
92
|
this.incrementSideEffectCounter();
|
|
89
93
|
}
|
|
90
94
|
|
|
@@ -94,6 +98,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
94
98
|
this.contractStorageUpdateRequests.push(
|
|
95
99
|
new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter, storageAddress),
|
|
96
100
|
);
|
|
101
|
+
this.logger.debug(`SSTORE cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
|
|
97
102
|
this.incrementSideEffectCounter();
|
|
98
103
|
}
|
|
99
104
|
|
|
@@ -106,6 +111,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
106
111
|
this.avmCircuitHints.noteHashExists.items.push(
|
|
107
112
|
new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ new Fr(exists ? 1 : 0)),
|
|
108
113
|
);
|
|
114
|
+
this.logger.debug(`NOTE_HASH_CHECK cnt: ${this.sideEffectCounter}`);
|
|
109
115
|
this.incrementSideEffectCounter();
|
|
110
116
|
}
|
|
111
117
|
|
|
@@ -117,6 +123,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
117
123
|
// the noteHash against the one provided by the user code to determine what to return to the user (exists or not),
|
|
118
124
|
// and will then propagate the actually-present noteHash to its public inputs.
|
|
119
125
|
this.newNoteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
|
|
126
|
+
this.logger.debug(`NEW_NOTE_HASH cnt: ${this.sideEffectCounter}`);
|
|
120
127
|
this.incrementSideEffectCounter();
|
|
121
128
|
}
|
|
122
129
|
|
|
@@ -133,6 +140,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
133
140
|
this.avmCircuitHints.nullifierExists.items.push(
|
|
134
141
|
new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ new Fr(exists ? 1 : 0)),
|
|
135
142
|
);
|
|
143
|
+
this.logger.debug(`NULLIFIER_EXISTS cnt: ${this.sideEffectCounter}`);
|
|
136
144
|
this.incrementSideEffectCounter();
|
|
137
145
|
}
|
|
138
146
|
|
|
@@ -140,6 +148,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
140
148
|
// TODO(4805): check if some threshold is reached for max new nullifier
|
|
141
149
|
// NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
142
150
|
this.newNullifiers.push(new Nullifier(nullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
|
|
151
|
+
this.logger.debug(`NEW_NULLIFIER cnt: ${this.sideEffectCounter}`);
|
|
143
152
|
this.incrementSideEffectCounter();
|
|
144
153
|
}
|
|
145
154
|
|
|
@@ -152,6 +161,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
152
161
|
this.avmCircuitHints.l1ToL2MessageExists.items.push(
|
|
153
162
|
new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ new Fr(exists ? 1 : 0)),
|
|
154
163
|
);
|
|
164
|
+
this.logger.debug(`L1_TO_L2_MSG_CHECK cnt: ${this.sideEffectCounter}`);
|
|
155
165
|
this.incrementSideEffectCounter();
|
|
156
166
|
}
|
|
157
167
|
|
|
@@ -159,14 +169,16 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
159
169
|
// TODO(4805): check if some threshold is reached for max messages
|
|
160
170
|
const recipientAddress = EthAddress.fromField(recipient);
|
|
161
171
|
this.newL2ToL1Messages.push(new L2ToL1Message(recipientAddress, content, this.sideEffectCounter));
|
|
172
|
+
this.logger.debug(`NEW_L2_TO_L1_MSG cnt: ${this.sideEffectCounter}`);
|
|
162
173
|
this.incrementSideEffectCounter();
|
|
163
174
|
}
|
|
164
175
|
|
|
165
|
-
public traceUnencryptedLog(contractAddress: Fr,
|
|
176
|
+
public traceUnencryptedLog(contractAddress: Fr, log: Fr[]) {
|
|
166
177
|
// TODO(4805): check if some threshold is reached for max logs
|
|
167
178
|
const ulog = new UnencryptedL2Log(
|
|
168
179
|
AztecAddress.fromField(contractAddress),
|
|
169
|
-
|
|
180
|
+
// TODO(#7198): Remove event selector from UnencryptedL2Log
|
|
181
|
+
EventSelector.fromField(new Fr(0)),
|
|
170
182
|
Buffer.concat(log.map(f => f.toBuffer())),
|
|
171
183
|
);
|
|
172
184
|
const basicLogHash = Fr.fromBuffer(ulog.hash());
|
|
@@ -174,6 +186,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
174
186
|
this.allUnencryptedLogs.push(ulog);
|
|
175
187
|
// TODO(6578): explain magic number 4 here
|
|
176
188
|
this.unencryptedLogsHashes.push(new LogHash(basicLogHash, this.sideEffectCounter, new Fr(ulog.length + 4)));
|
|
189
|
+
this.logger.debug(`NEW_UNENCRYPTED_LOG cnt: ${this.sideEffectCounter}`);
|
|
177
190
|
this.incrementSideEffectCounter();
|
|
178
191
|
}
|
|
179
192
|
|
|
@@ -191,6 +204,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
191
204
|
instance.publicKeysHash,
|
|
192
205
|
),
|
|
193
206
|
);
|
|
207
|
+
this.logger.debug(`CONTRACT_INSTANCE cnt: ${this.sideEffectCounter}`);
|
|
194
208
|
this.incrementSideEffectCounter();
|
|
195
209
|
}
|
|
196
210
|
|
|
@@ -210,7 +224,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
210
224
|
/** Bytecode used for this execution. */
|
|
211
225
|
bytecode: Buffer,
|
|
212
226
|
/** The call's results */
|
|
213
|
-
avmCallResults:
|
|
227
|
+
avmCallResults: AvmContractCallResult,
|
|
214
228
|
/** Function name for logging */
|
|
215
229
|
functionName: string = 'unknown',
|
|
216
230
|
) {
|
|
@@ -234,7 +248,12 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
234
248
|
result.startGasLeft.l2Gas - result.endGasLeft.l2Gas,
|
|
235
249
|
);
|
|
236
250
|
this.avmCircuitHints.externalCalls.items.push(
|
|
237
|
-
new AvmExternalCallHint(
|
|
251
|
+
new AvmExternalCallHint(
|
|
252
|
+
/*success=*/ new Fr(result.reverted ? 0 : 1),
|
|
253
|
+
result.returnValues,
|
|
254
|
+
gasUsed,
|
|
255
|
+
result.endSideEffectCounter,
|
|
256
|
+
),
|
|
238
257
|
);
|
|
239
258
|
}
|
|
240
259
|
|
|
@@ -251,14 +270,14 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
251
270
|
/** Bytecode used for this execution. */
|
|
252
271
|
bytecode: Buffer,
|
|
253
272
|
/** The call's results */
|
|
254
|
-
avmCallResults:
|
|
273
|
+
avmCallResults: AvmContractCallResult,
|
|
255
274
|
/** Function name for logging */
|
|
256
275
|
functionName: string = 'unknown',
|
|
257
276
|
/** The side effect counter of the execution request itself */
|
|
258
277
|
requestSideEffectCounter: number = this.startSideEffectCounter,
|
|
259
278
|
): PublicExecutionResult {
|
|
260
279
|
return {
|
|
261
|
-
|
|
280
|
+
executionRequest: createPublicExecutionRequest(requestSideEffectCounter, avmEnvironment),
|
|
262
281
|
|
|
263
282
|
startSideEffectCounter: new Fr(this.startSideEffectCounter),
|
|
264
283
|
endSideEffectCounter: new Fr(this.sideEffectCounter),
|
|
@@ -303,21 +322,20 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
303
322
|
function createPublicExecutionRequest(
|
|
304
323
|
requestSideEffectCounter: number,
|
|
305
324
|
avmEnvironment: AvmExecutionEnvironment,
|
|
306
|
-
):
|
|
325
|
+
): PublicExecutionRequest {
|
|
307
326
|
const callContext = CallContext.from({
|
|
308
327
|
msgSender: avmEnvironment.sender,
|
|
309
328
|
storageContractAddress: avmEnvironment.storageAddress,
|
|
310
|
-
functionSelector: avmEnvironment.
|
|
329
|
+
functionSelector: avmEnvironment.functionSelector,
|
|
311
330
|
isDelegateCall: avmEnvironment.isDelegateCall,
|
|
312
331
|
isStaticCall: avmEnvironment.isStaticCall,
|
|
313
332
|
sideEffectCounter: requestSideEffectCounter,
|
|
314
333
|
});
|
|
315
|
-
|
|
334
|
+
return {
|
|
316
335
|
contractAddress: avmEnvironment.address,
|
|
317
|
-
functionSelector: avmEnvironment.
|
|
336
|
+
functionSelector: avmEnvironment.functionSelector,
|
|
318
337
|
callContext,
|
|
319
338
|
// execution request does not contain AvmContextInputs prefix
|
|
320
339
|
args: avmEnvironment.getCalldataWithoutPrefix(),
|
|
321
340
|
};
|
|
322
|
-
return execution;
|
|
323
341
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type Gas } from '@aztec/circuits.js';
|
|
2
2
|
import { type Fr } from '@aztec/foundation/fields';
|
|
3
3
|
|
|
4
|
+
import { type AvmContractCallResult } from '../avm/avm_contract_call_result.js';
|
|
4
5
|
import { type AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
5
|
-
import { type AvmContractCallResults } from '../avm/avm_message_call_result.js';
|
|
6
6
|
import { type TracedContractInstance } from './side_effect_trace.js';
|
|
7
7
|
|
|
8
8
|
export interface PublicSideEffectTraceInterface {
|
|
@@ -17,7 +17,7 @@ export interface PublicSideEffectTraceInterface {
|
|
|
17
17
|
traceL1ToL2MessageCheck(contractAddress: Fr, msgHash: Fr, msgLeafIndex: Fr, exists: boolean): void;
|
|
18
18
|
// TODO(dbanks12): should new message accept contract address as arg?
|
|
19
19
|
traceNewL2ToL1Message(recipient: Fr, content: Fr): void;
|
|
20
|
-
traceUnencryptedLog(contractAddress: Fr,
|
|
20
|
+
traceUnencryptedLog(contractAddress: Fr, log: Fr[]): void;
|
|
21
21
|
// TODO(dbanks12): odd that getContractInstance is a one-off in that it accepts an entire object instead of components
|
|
22
22
|
traceGetContractInstance(instance: TracedContractInstance): void;
|
|
23
23
|
traceNestedCall(
|
|
@@ -34,7 +34,7 @@ export interface PublicSideEffectTraceInterface {
|
|
|
34
34
|
/** Bytecode used for this execution. */
|
|
35
35
|
bytecode: Buffer,
|
|
36
36
|
/** The call's results */
|
|
37
|
-
avmCallResults:
|
|
37
|
+
avmCallResults: AvmContractCallResult,
|
|
38
38
|
/** Function name */
|
|
39
39
|
functionName: string,
|
|
40
40
|
): void;
|
package/src/rollup/rollup.ts
CHANGED
|
@@ -28,7 +28,9 @@ import {
|
|
|
28
28
|
convertSimulatedBaseRollupInputsToWitnessMap,
|
|
29
29
|
convertSimulatedBaseRollupOutputsFromWitnessMap,
|
|
30
30
|
} from '@aztec/noir-protocol-circuits-types';
|
|
31
|
-
|
|
31
|
+
|
|
32
|
+
import { WASMSimulator } from '../providers/acvm_wasm.js';
|
|
33
|
+
import { type SimulationProvider } from '../providers/simulation_provider.js';
|
|
32
34
|
|
|
33
35
|
/**
|
|
34
36
|
* Circuit simulator for the rollup circuits.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"avm_message_call_result.d.ts","sourceRoot":"","sources":["../../src/avm/avm_message_call_result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,qBAAa,sBAAsB;IACd,QAAQ,EAAE,OAAO;IAAS,MAAM,EAAE,EAAE,EAAE;IAAS,YAAY,CAAC;gBAA5D,QAAQ,EAAE,OAAO,EAAS,MAAM,EAAE,EAAE,EAAE,EAAS,YAAY,CAAC,6BAAiB;IAEhG,QAAQ,IAAI,MAAM;CAOnB"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Results of an contract call's execution in the AVM.
|
|
3
|
-
*/
|
|
4
|
-
export class AvmContractCallResults {
|
|
5
|
-
constructor(reverted, output, revertReason) {
|
|
6
|
-
this.reverted = reverted;
|
|
7
|
-
this.output = output;
|
|
8
|
-
this.revertReason = revertReason;
|
|
9
|
-
}
|
|
10
|
-
toString() {
|
|
11
|
-
let resultsStr = `reverted: ${this.reverted}, output: ${this.output}`;
|
|
12
|
-
if (this.revertReason) {
|
|
13
|
-
resultsStr += `, revertReason: ${this.revertReason}`;
|
|
14
|
-
}
|
|
15
|
-
return resultsStr;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX21lc3NhZ2VfY2FsbF9yZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtL2F2bV9tZXNzYWdlX2NhbGxfcmVzdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUFtQixRQUFpQixFQUFTLE1BQVksRUFBUyxZQUE4QjtRQUE3RSxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBTTtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtJQUFHLENBQUM7SUFFcEcsUUFBUTtRQUNOLElBQUksVUFBVSxHQUFHLGFBQWEsSUFBSSxDQUFDLFFBQVEsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsVUFBVSxJQUFJLG1CQUFtQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Q0FDRiJ9
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { type GasSettings, type GlobalVariables, type Header } from '@aztec/circuits.js';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
-
import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
5
|
-
import { type PublicExecution } from './execution.js';
|
|
6
|
-
/**
|
|
7
|
-
* Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
|
|
8
|
-
*
|
|
9
|
-
* @param current
|
|
10
|
-
* @param globalVariables
|
|
11
|
-
* @returns
|
|
12
|
-
*/
|
|
13
|
-
export declare function createAvmExecutionEnvironment(current: PublicExecution, header: Header, globalVariables: GlobalVariables, gasSettings: GasSettings, transactionFee: Fr): AvmExecutionEnvironment;
|
|
14
|
-
export declare function markBytecodeAsAvm(bytecode: Buffer): Buffer;
|
|
15
|
-
export declare function decompressBytecodeIfCompressed(bytecode: Buffer): Promise<Buffer>;
|
|
16
|
-
export declare function isAvmBytecode(bytecode: Buffer): Promise<boolean>;
|
|
17
|
-
//# sourceMappingURL=transitional_adaptors.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transitional_adaptors.d.ts","sourceRoot":"","sources":["../../src/public/transitional_adaptors.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAK9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,EAAE,GACjB,uBAAuB,CAiBzB;AASD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAGD,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQtF;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAItE"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
-
import { promisify } from 'util';
|
|
3
|
-
import { gunzip } from 'zlib';
|
|
4
|
-
import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
5
|
-
import { Mov } from '../avm/opcodes/memory.js';
|
|
6
|
-
/**
|
|
7
|
-
* Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
|
|
8
|
-
*
|
|
9
|
-
* @param current
|
|
10
|
-
* @param globalVariables
|
|
11
|
-
* @returns
|
|
12
|
-
*/
|
|
13
|
-
export function createAvmExecutionEnvironment(current, header, globalVariables, gasSettings, transactionFee) {
|
|
14
|
-
return new AvmExecutionEnvironment(current.contractAddress, current.callContext.storageContractAddress, current.callContext.msgSender, globalVariables.gasFees.feePerL2Gas, globalVariables.gasFees.feePerDaGas,
|
|
15
|
-
/*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, gasSettings, transactionFee, current.functionSelector);
|
|
16
|
-
}
|
|
17
|
-
const AVM_MAGIC_SUFFIX = Buffer.from([
|
|
18
|
-
Mov.opcode, // opcode
|
|
19
|
-
0x00, // indirect
|
|
20
|
-
...Buffer.from('000018ca', 'hex'), // srcOffset
|
|
21
|
-
...Buffer.from('000018ca', 'hex'), // dstOffset
|
|
22
|
-
]);
|
|
23
|
-
export function markBytecodeAsAvm(bytecode) {
|
|
24
|
-
return Buffer.concat([bytecode, AVM_MAGIC_SUFFIX]);
|
|
25
|
-
}
|
|
26
|
-
// This is just a helper function for the AVM circuit.
|
|
27
|
-
export async function decompressBytecodeIfCompressed(bytecode) {
|
|
28
|
-
try {
|
|
29
|
-
return await promisify(gunzip)(bytecode);
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
// If the bytecode is not compressed, the gunzip call will throw an error
|
|
33
|
-
// In this case, we assume the bytecode is not compressed and continue.
|
|
34
|
-
return Promise.resolve(bytecode);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
export async function isAvmBytecode(bytecode) {
|
|
38
|
-
const decompressedBytecode = await decompressBytecodeIfCompressed(bytecode);
|
|
39
|
-
const magicSize = AVM_MAGIC_SUFFIX.length;
|
|
40
|
-
return decompressedBytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHL0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxPQUF3QixFQUN4QixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsV0FBd0IsRUFDeEIsY0FBa0I7SUFFbEIsT0FBTyxJQUFJLHVCQUF1QixDQUNoQyxPQUFPLENBQUMsZUFBZSxFQUN2QixPQUFPLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUMxQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFDN0IsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVztJQUNuQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQ2hDLE1BQU0sRUFDTixlQUFlLEVBQ2YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQ2hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUNsQyxPQUFPLENBQUMsSUFBSSxFQUNaLFdBQVcsRUFDWCxjQUFjLEVBQ2QsT0FBTyxDQUFDLGdCQUFnQixDQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNuQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVM7SUFDckIsSUFBSSxFQUFFLFdBQVc7SUFDakIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxZQUFZO0lBQy9DLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsWUFBWTtDQUNoRCxDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQsc0RBQXNEO0FBQ3RELE1BQU0sQ0FBQyxLQUFLLFVBQVUsOEJBQThCLENBQUMsUUFBZ0I7SUFDbkUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxRQUFnQjtJQUNsRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUUsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0lBQzFDLE9BQU8sb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDNUUsQ0FBQyJ9
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
// All code in this file needs to die once the public executor is phased out in favor of the AVM.
|
|
2
|
-
import { type GasSettings, type GlobalVariables, type Header } from '@aztec/circuits.js';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
-
|
|
5
|
-
import { promisify } from 'util';
|
|
6
|
-
import { gunzip } from 'zlib';
|
|
7
|
-
|
|
8
|
-
import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
9
|
-
import { Mov } from '../avm/opcodes/memory.js';
|
|
10
|
-
import { type PublicExecution } from './execution.js';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
|
|
14
|
-
*
|
|
15
|
-
* @param current
|
|
16
|
-
* @param globalVariables
|
|
17
|
-
* @returns
|
|
18
|
-
*/
|
|
19
|
-
export function createAvmExecutionEnvironment(
|
|
20
|
-
current: PublicExecution,
|
|
21
|
-
header: Header,
|
|
22
|
-
globalVariables: GlobalVariables,
|
|
23
|
-
gasSettings: GasSettings,
|
|
24
|
-
transactionFee: Fr,
|
|
25
|
-
): AvmExecutionEnvironment {
|
|
26
|
-
return new AvmExecutionEnvironment(
|
|
27
|
-
current.contractAddress,
|
|
28
|
-
current.callContext.storageContractAddress,
|
|
29
|
-
current.callContext.msgSender,
|
|
30
|
-
globalVariables.gasFees.feePerL2Gas,
|
|
31
|
-
globalVariables.gasFees.feePerDaGas,
|
|
32
|
-
/*contractCallDepth=*/ Fr.zero(),
|
|
33
|
-
header,
|
|
34
|
-
globalVariables,
|
|
35
|
-
current.callContext.isStaticCall,
|
|
36
|
-
current.callContext.isDelegateCall,
|
|
37
|
-
current.args,
|
|
38
|
-
gasSettings,
|
|
39
|
-
transactionFee,
|
|
40
|
-
current.functionSelector,
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const AVM_MAGIC_SUFFIX = Buffer.from([
|
|
45
|
-
Mov.opcode, // opcode
|
|
46
|
-
0x00, // indirect
|
|
47
|
-
...Buffer.from('000018ca', 'hex'), // srcOffset
|
|
48
|
-
...Buffer.from('000018ca', 'hex'), // dstOffset
|
|
49
|
-
]);
|
|
50
|
-
|
|
51
|
-
export function markBytecodeAsAvm(bytecode: Buffer): Buffer {
|
|
52
|
-
return Buffer.concat([bytecode, AVM_MAGIC_SUFFIX]);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// This is just a helper function for the AVM circuit.
|
|
56
|
-
export async function decompressBytecodeIfCompressed(bytecode: Buffer): Promise<Buffer> {
|
|
57
|
-
try {
|
|
58
|
-
return await promisify(gunzip)(bytecode);
|
|
59
|
-
} catch {
|
|
60
|
-
// If the bytecode is not compressed, the gunzip call will throw an error
|
|
61
|
-
// In this case, we assume the bytecode is not compressed and continue.
|
|
62
|
-
return Promise.resolve(bytecode);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export async function isAvmBytecode(bytecode: Buffer): Promise<boolean> {
|
|
67
|
-
const decompressedBytecode = await decompressBytecodeIfCompressed(bytecode);
|
|
68
|
-
const magicSize = AVM_MAGIC_SUFFIX.length;
|
|
69
|
-
return decompressedBytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
|
|
70
|
-
}
|