@aztec/simulator 0.71.0 → 0.73.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/README.md +1 -1
- package/dest/acvm/oracle/oracle.d.ts +0 -1
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +1 -5
- package/dest/acvm/oracle/typed_oracle.d.ts +0 -1
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +1 -4
- package/dest/avm/avm_simulator.d.ts +0 -1
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +4 -19
- package/dest/avm/avm_tree.d.ts +9 -8
- package/dest/avm/avm_tree.d.ts.map +1 -1
- package/dest/avm/avm_tree.js +35 -30
- package/dest/avm/errors.d.ts +6 -0
- package/dest/avm/errors.d.ts.map +1 -1
- package/dest/avm/errors.js +10 -1
- package/dest/avm/fixtures/avm_simulation_tester.d.ts +21 -0
- package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +1 -0
- package/dest/avm/fixtures/avm_simulation_tester.js +74 -0
- package/dest/avm/fixtures/base_avm_simulation_tester.d.ts +35 -0
- package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/avm/fixtures/base_avm_simulation_tester.js +76 -0
- package/dest/avm/fixtures/index.d.ts +6 -2
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +28 -14
- package/dest/avm/fixtures/simple_contract_data_source.d.ts +31 -0
- package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/avm/fixtures/simple_contract_data_source.js +75 -0
- package/dest/avm/journal/journal.d.ts +5 -6
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +28 -26
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +4 -3
- package/dest/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/avm/opcodes/conversion.js +10 -7
- package/dest/avm/opcodes/ec_add.js +2 -2
- package/dest/avm/opcodes/hashing.js +2 -2
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
- package/dest/avm/opcodes/multi_scalar_mul.js +9 -7
- package/dest/avm/test_utils.d.ts +1 -1
- package/dest/avm/test_utils.d.ts.map +1 -1
- package/dest/avm/test_utils.js +4 -3
- package/dest/client/client_execution_context.d.ts +2 -6
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +23 -26
- package/dest/client/execution_note_cache.d.ts +3 -3
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +10 -10
- package/dest/client/pick_notes.js +5 -5
- package/dest/client/simulator.js +4 -4
- package/dest/client/view_data_oracle.js +2 -2
- package/dest/common/hashed_values_cache.d.ts +1 -1
- package/dest/common/hashed_values_cache.d.ts.map +1 -1
- package/dest/common/hashed_values_cache.js +5 -5
- package/dest/providers/acvm_wasm.d.ts +2 -0
- package/dest/providers/acvm_wasm.d.ts.map +1 -1
- package/dest/providers/acvm_wasm.js +15 -2
- package/dest/public/execution.d.ts +8 -26
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +3 -3
- package/dest/public/fee_payment.d.ts +2 -2
- package/dest/public/fee_payment.d.ts.map +1 -1
- package/dest/public/fee_payment.js +3 -3
- package/dest/public/fixtures/index.d.ts +2 -37
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +3 -247
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +21 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -0
- package/dest/public/fixtures/public_tx_simulation_tester.js +89 -0
- package/dest/public/fixtures/utils.d.ts +17 -0
- package/dest/public/fixtures/utils.d.ts.map +1 -0
- package/dest/public/fixtures/utils.js +66 -0
- package/dest/public/index.d.ts +1 -1
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +2 -2
- package/dest/public/public_db_sources.d.ts +2 -1
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +27 -21
- package/dest/public/public_processor.d.ts +4 -5
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +28 -28
- package/dest/public/public_tx_context.d.ts +5 -5
- package/dest/public/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_context.js +44 -18
- package/dest/public/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator.js +9 -12
- package/dest/public/{enqueued_call_side_effect_trace.d.ts → side_effect_trace.d.ts} +12 -15
- package/dest/public/side_effect_trace.d.ts.map +1 -0
- package/dest/public/side_effect_trace.js +350 -0
- package/dest/public/side_effect_trace_interface.d.ts +4 -5
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/test/utils.d.ts +1 -1
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +3 -3
- package/package.json +10 -10
- package/src/acvm/oracle/oracle.ts +0 -5
- package/src/acvm/oracle/typed_oracle.ts +0 -4
- package/src/avm/avm_simulator.ts +3 -27
- package/src/avm/avm_tree.ts +39 -37
- package/src/avm/errors.ts +10 -0
- package/src/avm/fixtures/avm_simulation_tester.ts +105 -0
- package/src/avm/fixtures/base_avm_simulation_tester.ts +104 -0
- package/src/avm/fixtures/index.ts +46 -17
- package/src/avm/fixtures/simple_contract_data_source.ts +98 -0
- package/src/avm/journal/journal.ts +28 -26
- package/src/avm/opcodes/accrued_substate.ts +3 -2
- package/src/avm/opcodes/conversion.ts +15 -6
- package/src/avm/opcodes/ec_add.ts +1 -1
- package/src/avm/opcodes/hashing.ts +1 -1
- package/src/avm/opcodes/multi_scalar_mul.ts +8 -6
- package/src/avm/test_utils.ts +3 -4
- package/src/client/client_execution_context.ts +29 -30
- package/src/client/execution_note_cache.ts +19 -14
- package/src/client/pick_notes.ts +4 -4
- package/src/client/simulator.ts +3 -3
- package/src/client/view_data_oracle.ts +1 -1
- package/src/common/hashed_values_cache.ts +4 -4
- package/src/providers/acvm_wasm.ts +13 -2
- package/src/public/execution.ts +10 -34
- package/src/public/fee_payment.ts +2 -2
- package/src/public/fixtures/index.ts +2 -381
- package/src/public/fixtures/public_tx_simulation_tester.ts +174 -0
- package/src/public/fixtures/utils.ts +110 -0
- package/src/public/index.ts +1 -1
- package/src/public/public_db_sources.ts +31 -20
- package/src/public/public_processor.ts +32 -30
- package/src/public/public_tx_context.ts +87 -28
- package/src/public/public_tx_simulator.ts +7 -14
- package/src/public/{enqueued_call_side_effect_trace.ts → side_effect_trace.ts} +29 -41
- package/src/public/side_effect_trace_interface.ts +4 -4
- package/src/test/utils.ts +2 -2
- package/dest/public/enqueued_call_side_effect_trace.d.ts.map +0 -1
- package/dest/public/enqueued_call_side_effect_trace.js +0 -357
- package/dest/public/transitional_adapters.d.ts +0 -4
- package/dest/public/transitional_adapters.d.ts.map +0 -1
- package/dest/public/transitional_adapters.js +0 -29
- package/src/public/transitional_adapters.ts +0 -113
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
1
2
|
import { foreignCallHandler } from '@aztec/noir-protocol-circuits-types/client';
|
|
2
3
|
import initACVM, { executeCircuit } from '@noir-lang/acvm_js';
|
|
3
4
|
import initAbi from '@noir-lang/noirc_abi';
|
|
4
5
|
import { acvm } from '../acvm/acvm.js';
|
|
5
6
|
import { parseErrorPayload } from '../common/simulation_provider.js';
|
|
6
7
|
export class WASMSimulator {
|
|
8
|
+
constructor(log = createLogger('wasm-simulator')) {
|
|
9
|
+
this.log = log;
|
|
10
|
+
}
|
|
7
11
|
async init() {
|
|
8
12
|
// If these are available, then we are in the
|
|
9
13
|
// web environment. For the node environment, this
|
|
@@ -14,6 +18,7 @@ export class WASMSimulator {
|
|
|
14
18
|
}
|
|
15
19
|
}
|
|
16
20
|
async executeProtocolCircuit(input, compiledCircuit) {
|
|
21
|
+
this.log.debug('init', { hash: compiledCircuit.hash });
|
|
17
22
|
await this.init();
|
|
18
23
|
// Execute the circuit on those initial witness values
|
|
19
24
|
//
|
|
@@ -23,13 +28,21 @@ export class WASMSimulator {
|
|
|
23
28
|
// Execute the circuit
|
|
24
29
|
try {
|
|
25
30
|
const _witnessMap = await executeCircuit(decodedBytecode, input, foreignCallHandler);
|
|
31
|
+
this.log.debug('execution successful', { hash: compiledCircuit.hash });
|
|
26
32
|
return _witnessMap;
|
|
27
33
|
}
|
|
28
34
|
catch (err) {
|
|
29
35
|
// Typescript types catched errors as unknown or any, so we need to narrow its type to check if it has raw assertion payload.
|
|
30
36
|
if (typeof err === 'object' && err !== null && 'rawAssertionPayload' in err) {
|
|
31
|
-
|
|
37
|
+
const parsed = parseErrorPayload(compiledCircuit.abi, err);
|
|
38
|
+
this.log.debug('execution failed', {
|
|
39
|
+
hash: compiledCircuit.hash,
|
|
40
|
+
error: parsed,
|
|
41
|
+
message: parsed.message,
|
|
42
|
+
});
|
|
43
|
+
throw parsed;
|
|
32
44
|
}
|
|
45
|
+
this.log.debug('execution failed', { hash: compiledCircuit.hash, error: err });
|
|
33
46
|
throw new Error(`Circuit execution failed: ${err}`);
|
|
34
47
|
}
|
|
35
48
|
}
|
|
@@ -38,4 +51,4 @@ export class WASMSimulator {
|
|
|
38
51
|
return acvm(acir, initialWitness, callback);
|
|
39
52
|
}
|
|
40
53
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN2bV93YXNtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy9hY3ZtX3dhc20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBR2hGLE9BQU8sUUFBUSxFQUFFLEVBQXVCLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25GLE9BQU8sT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBRzNDLE9BQU8sRUFBcUIsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUQsT0FBTyxFQUEyQixpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTlGLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQXNCLE1BQU0sWUFBWSxDQUFDLGdCQUFnQixDQUFDO1FBQXBDLFFBQUcsR0FBSCxHQUFHLENBQWlDO0lBQUcsQ0FBQztJQUU5RCxLQUFLLENBQUMsSUFBSTtRQUNSLDZDQUE2QztRQUM3QyxrREFBa0Q7UUFDbEQsY0FBYztRQUNkLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDbEMsOEZBQThGO1lBQzlGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUFpQixFQUFFLGVBQW9DO1FBQ2xGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixzREFBc0Q7UUFDdEQsRUFBRTtRQUNGLHFGQUFxRjtRQUNyRixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEUsRUFBRTtRQUNGLHNCQUFzQjtRQUN0QixJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLGNBQWMsQ0FDdEMsZUFBZSxFQUNmLEtBQUssRUFDTCxrQkFBa0IsQ0FDbkIsQ0FBQztZQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsNkhBQTZIO1lBQzdILElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUkscUJBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQzVFLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBcUIsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtvQkFDakMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJO29CQUMxQixLQUFLLEVBQUUsTUFBTTtvQkFDYixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxNQUFNLE1BQU0sQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBWSxFQUFFLGNBQTJCLEVBQUUsUUFBc0I7UUFDeEYsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQ0YifQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import { type PublicExecutionRequest, type SimulationError
|
|
4
|
-
import { type AvmExecutionHints, type ContractStorageRead, type ContractStorageUpdateRequest, type Fr, Gas, type L2ToL1Message, type
|
|
3
|
+
import { type PublicExecutionRequest, type SimulationError } from '@aztec/circuit-types';
|
|
4
|
+
import { type AvmExecutionHints, type ContractStorageRead, type ContractStorageUpdateRequest, type Fr, Gas, type L2ToL1Message, type NoteHash, type Nullifier, type PublicDataUpdateRequest, PublicInnerCallRequest, type PublicLog, type ReadRequest, type ScopedL2ToL1Message, type TreeLeafReadRequest } from '@aztec/circuits.js';
|
|
5
5
|
export interface PublicSideEffects {
|
|
6
6
|
/** The contract storage update requests performed. */
|
|
7
7
|
publicDataWrites: PublicDataUpdateRequest[];
|
|
@@ -11,16 +11,8 @@ export interface PublicSideEffects {
|
|
|
11
11
|
nullifiers: Nullifier[];
|
|
12
12
|
/** The new l2 to l1 messages generated to be inserted into the messages tree. */
|
|
13
13
|
l2ToL1Messages: ScopedL2ToL1Message[];
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
* Note: required as we don't track the counter anywhere else.
|
|
17
|
-
*/
|
|
18
|
-
unencryptedLogsHashes: ScopedLogHash[];
|
|
19
|
-
/**
|
|
20
|
-
* Unencrypted logs emitted during execution.
|
|
21
|
-
* Note: These are preimages to `unencryptedLogsHashes`.
|
|
22
|
-
*/
|
|
23
|
-
unencryptedLogs: UnencryptedFunctionL2Logs;
|
|
14
|
+
/** Public logs emitted during execution. */
|
|
15
|
+
publicLogs: PublicLog[];
|
|
24
16
|
}
|
|
25
17
|
export interface EnqueuedPublicCallExecutionResult {
|
|
26
18
|
/** How much gas was left after this public execution. */
|
|
@@ -93,20 +85,10 @@ export interface PublicFunctionCallResult {
|
|
|
93
85
|
/** L1 to L2 message read requests emitted in this call. */
|
|
94
86
|
l1ToL2MsgReadRequests: TreeLeafReadRequest[];
|
|
95
87
|
/**
|
|
96
|
-
* The
|
|
97
|
-
* Note:
|
|
98
|
-
*/
|
|
99
|
-
unencryptedLogsHashes: LogHash[];
|
|
100
|
-
/**
|
|
101
|
-
* Unencrypted logs emitted during execution of this function call.
|
|
102
|
-
* Note: These are preimages to `unencryptedLogsHashes`.
|
|
103
|
-
*/
|
|
104
|
-
unencryptedLogs: UnencryptedFunctionL2Logs;
|
|
105
|
-
/**
|
|
106
|
-
* Unencrypted logs emitted during this call AND any nested calls.
|
|
107
|
-
* Useful for maintaining correct ordering in ts.
|
|
88
|
+
* The public logs emitted in this call.
|
|
89
|
+
* Note: PublicLog has no counter - unsure if this is needed bc this struct is unused
|
|
108
90
|
*/
|
|
109
|
-
|
|
91
|
+
publicLogs: PublicLog[];
|
|
110
92
|
/** The requests to call public functions made by this call. */
|
|
111
93
|
publicCallRequests: PublicInnerCallRequest[];
|
|
112
94
|
/** The results of nested calls. */
|
|
@@ -116,5 +98,5 @@ export interface PublicFunctionCallResult {
|
|
|
116
98
|
/** The name of the function that was executed. Only used for logging. */
|
|
117
99
|
functionName: string;
|
|
118
100
|
}
|
|
119
|
-
export declare function resultToPublicCallRequest(result: PublicFunctionCallResult): PublicInnerCallRequest
|
|
101
|
+
export declare function resultToPublicCallRequest(result: PublicFunctionCallResult): Promise<PublicInnerCallRequest>;
|
|
120
102
|
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/public/execution.ts"],"names":[],"mappings":";;AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/public/execution.ts"],"names":[],"mappings":"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"}
|
package/dest/public/execution.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Gas, PublicCallStackItemCompressed, PublicInnerCallRequest, RevertCode, } from '@aztec/circuits.js';
|
|
2
2
|
import { computeVarArgsHash } from '@aztec/circuits.js/hash';
|
|
3
|
-
export function resultToPublicCallRequest(result) {
|
|
3
|
+
export async function resultToPublicCallRequest(result) {
|
|
4
4
|
const request = result.executionRequest;
|
|
5
|
-
const item = new PublicCallStackItemCompressed(request.callContext.contractAddress, request.callContext, computeVarArgsHash(request.args), computeVarArgsHash(result.returnValues),
|
|
5
|
+
const item = new PublicCallStackItemCompressed(request.callContext.contractAddress, request.callContext, await computeVarArgsHash(request.args), await computeVarArgsHash(result.returnValues),
|
|
6
6
|
// TODO(@just-mitch): need better mapping from simulator to revert code.
|
|
7
7
|
result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK, Gas.from(result.startGasLeft), Gas.from(result.endGasLeft));
|
|
8
8
|
return new PublicInnerCallRequest(item, result.startSideEffectCounter.toNumber());
|
|
9
9
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy9leGVjdXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUtMLEdBQUcsRUFJSCw2QkFBNkIsRUFFN0Isc0JBQXNCLEVBR3RCLFVBQVUsR0FHWCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBOEc3RCxNQUFNLENBQUMsS0FBSyxVQUFVLHlCQUF5QixDQUFDLE1BQWdDO0lBQzlFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztJQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLDZCQUE2QixDQUM1QyxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFDbkMsT0FBTyxDQUFDLFdBQVcsRUFDbkIsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQ3RDLE1BQU0sa0JBQWtCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUM3Qyx3RUFBd0U7SUFDeEUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUMvRCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQzVCLENBQUM7SUFDRixPQUFPLElBQUksc0JBQXNCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3BGLENBQUMifQ==
|
|
@@ -3,9 +3,9 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
3
3
|
/**
|
|
4
4
|
* Computes the storage slot within the Fee Juice contract for the balance of the fee payer.
|
|
5
5
|
*/
|
|
6
|
-
export declare function computeFeePayerBalanceStorageSlot(feePayer: AztecAddress): Fr
|
|
6
|
+
export declare function computeFeePayerBalanceStorageSlot(feePayer: AztecAddress): Promise<Fr>;
|
|
7
7
|
/**
|
|
8
8
|
* Computes the leaf slot in the public data tree for the balance of the fee payer in the Fee Juice.
|
|
9
9
|
*/
|
|
10
|
-
export declare function computeFeePayerBalanceLeafSlot(feePayer: AztecAddress): Fr
|
|
10
|
+
export declare function computeFeePayerBalanceLeafSlot(feePayer: AztecAddress): Promise<Fr>;
|
|
11
11
|
//# sourceMappingURL=fee_payment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fee_payment.d.ts","sourceRoot":"","sources":["../../src/public/fee_payment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAI9C;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"fee_payment.d.ts","sourceRoot":"","sources":["../../src/public/fee_payment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAI9C;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,YAAY,eAEvE;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC,CAMxF"}
|
|
@@ -11,11 +11,11 @@ export function computeFeePayerBalanceStorageSlot(feePayer) {
|
|
|
11
11
|
/**
|
|
12
12
|
* Computes the leaf slot in the public data tree for the balance of the fee payer in the Fee Juice.
|
|
13
13
|
*/
|
|
14
|
-
export function computeFeePayerBalanceLeafSlot(feePayer) {
|
|
14
|
+
export async function computeFeePayerBalanceLeafSlot(feePayer) {
|
|
15
15
|
if (feePayer.isZero()) {
|
|
16
16
|
return Fr.ZERO;
|
|
17
17
|
}
|
|
18
|
-
const balanceSlot = computeFeePayerBalanceStorageSlot(feePayer);
|
|
18
|
+
const balanceSlot = await computeFeePayerBalanceStorageSlot(feePayer);
|
|
19
19
|
return computePublicDataTreeLeafSlot(ProtocolContractAddress.FeeJuice, balanceSlot);
|
|
20
20
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX3BheW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL2ZlZV9wYXltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV2RTs7R0FFRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxRQUFzQjtJQUN0RSxPQUFPLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsOEJBQThCLENBQUMsUUFBc0I7SUFDekUsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUN0QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDakIsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0saUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEUsT0FBTyw2QkFBNkIsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEYsQ0FBQyJ9
|
|
@@ -1,38 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { type ContractArtifact } from '@aztec/foundation/abi';
|
|
4
|
-
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
5
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
6
|
-
export declare function simulateAvmTestContractGenerateCircuitInputs(setupFunctionNames: string[], setupArgs: Fr[][] | undefined, appFunctionNames: string[], appArgs?: Fr[][], teardownFunctionName?: string, teardownArgs?: Fr[], expectRevert?: boolean, contractDataSource?: MockedAvmTestContractDataSource, assertionErrString?: string): Promise<AvmCircuitInputs>;
|
|
7
|
-
export declare function simulateAvmTestContractCall(functionName: string, args?: Fr[], expectRevert?: boolean, contractDataSource?: MockedAvmTestContractDataSource): Promise<void>;
|
|
8
|
-
/**
|
|
9
|
-
* Craft a carrier transaction for some public calls for simulation by PublicTxSimulator.
|
|
10
|
-
*/
|
|
11
|
-
export declare function createTxForPublicCalls(setupExecutionRequests: PublicExecutionRequest[], appExecutionRequests: PublicExecutionRequest[], teardownExecutionRequest?: PublicExecutionRequest, gasUsedByPrivate?: Gas): Tx;
|
|
12
|
-
export declare class MockedAvmTestContractDataSource implements ContractDataSource {
|
|
13
|
-
private skipContractDeployments;
|
|
14
|
-
private fnName;
|
|
15
|
-
fnSelector: FunctionSelector;
|
|
16
|
-
private bytecode;
|
|
17
|
-
private publicFn;
|
|
18
|
-
private bytecodeCommitment;
|
|
19
|
-
private contractClasses;
|
|
20
|
-
contractInstances: Map<string, ContractInstanceWithAddress>;
|
|
21
|
-
firstContractInstance: ContractInstanceWithAddress;
|
|
22
|
-
instanceSameClassAsFirstContract: ContractInstanceWithAddress;
|
|
23
|
-
otherContractInstance: ContractInstanceWithAddress;
|
|
24
|
-
constructor(skipContractDeployments?: boolean);
|
|
25
|
-
deployContracts(merkleTrees: MerkleTreeWriteOperations): Promise<void>;
|
|
26
|
-
static create(merkleTrees: MerkleTreeWriteOperations, skipContractDeployments?: boolean): Promise<MockedAvmTestContractDataSource>;
|
|
27
|
-
getPublicFunction(_address: AztecAddress, _selector: FunctionSelector): Promise<PublicFunction>;
|
|
28
|
-
getBlockNumber(): Promise<number>;
|
|
29
|
-
getContractClass(id: Fr): Promise<ContractClassPublic | undefined>;
|
|
30
|
-
getBytecodeCommitment(_id: Fr): Promise<Fr>;
|
|
31
|
-
addContractClass(_contractClass: ContractClassPublic): Promise<void>;
|
|
32
|
-
getContract(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
|
|
33
|
-
getContractClassIds(): Promise<Fr[]>;
|
|
34
|
-
getContractArtifact(_address: AztecAddress): Promise<ContractArtifact | undefined>;
|
|
35
|
-
getContractFunctionName(_address: AztecAddress, _selector: FunctionSelector): Promise<string>;
|
|
36
|
-
registerContractFunctionSignatures(_address: AztecAddress, _signatures: string[]): Promise<void>;
|
|
37
|
-
}
|
|
1
|
+
export * from './public_tx_simulation_tester.js';
|
|
2
|
+
export * from './utils.js';
|
|
38
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,YAAY,CAAC"}
|
|
@@ -1,247 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { makeContractClassPublic, makeContractInstanceFromClassId } from '@aztec/circuits.js/testing';
|
|
5
|
-
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
6
|
-
import { Fr, Point } from '@aztec/foundation/fields';
|
|
7
|
-
import { openTmpStore } from '@aztec/kv-store/lmdb';
|
|
8
|
-
import { AvmTestContractArtifact } from '@aztec/noir-contracts.js/AvmTest';
|
|
9
|
-
import { MerkleTrees } from '@aztec/world-state';
|
|
10
|
-
import { strict as assert } from 'assert';
|
|
11
|
-
import { initContext, initExecutionEnvironment, initPersistableStateManager } from '../../avm/fixtures/index.js';
|
|
12
|
-
import { AvmEphemeralForest, AvmSimulator } from '../../server.js';
|
|
13
|
-
import { PublicEnqueuedCallSideEffectTrace } from '../enqueued_call_side_effect_trace.js';
|
|
14
|
-
import { WorldStateDB } from '../public_db_sources.js';
|
|
15
|
-
import { PublicTxSimulator } from '../public_tx_simulator.js';
|
|
16
|
-
const TIMESTAMP = new Fr(99833);
|
|
17
|
-
export async function simulateAvmTestContractGenerateCircuitInputs(setupFunctionNames, setupArgs = [], appFunctionNames, appArgs = [], teardownFunctionName, teardownArgs = [], expectRevert = false, contractDataSource = new MockedAvmTestContractDataSource(), assertionErrString) {
|
|
18
|
-
const globals = GlobalVariables.empty();
|
|
19
|
-
globals.timestamp = TIMESTAMP;
|
|
20
|
-
const merkleTrees = await (await MerkleTrees.new(openTmpStore())).fork();
|
|
21
|
-
await contractDataSource.deployContracts(merkleTrees);
|
|
22
|
-
const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
|
|
23
|
-
const simulator = new PublicTxSimulator(merkleTrees, worldStateDB, globals, /*doMerkleOperations=*/ true);
|
|
24
|
-
const sender = AztecAddress.random();
|
|
25
|
-
const callContext = new CallContext(sender, contractDataSource.firstContractInstance.address, contractDataSource.fnSelector,
|
|
26
|
-
/*isStaticCall=*/ false);
|
|
27
|
-
const setupExecutionRequests = [];
|
|
28
|
-
for (let i = 0; i < setupFunctionNames.length; i++) {
|
|
29
|
-
const functionSelector = getAvmTestContractFunctionSelector(setupFunctionNames[i]);
|
|
30
|
-
const fnArgs = [functionSelector.toField(), ...setupArgs[i]];
|
|
31
|
-
const executionRequest = new PublicExecutionRequest(callContext, fnArgs);
|
|
32
|
-
setupExecutionRequests.push(executionRequest);
|
|
33
|
-
}
|
|
34
|
-
const appExecutionRequests = [];
|
|
35
|
-
for (let i = 0; i < appFunctionNames.length; i++) {
|
|
36
|
-
const functionSelector = getAvmTestContractFunctionSelector(appFunctionNames[i]);
|
|
37
|
-
const fnArgs = [functionSelector.toField(), ...appArgs[i]];
|
|
38
|
-
const executionRequest = new PublicExecutionRequest(callContext, fnArgs);
|
|
39
|
-
appExecutionRequests.push(executionRequest);
|
|
40
|
-
}
|
|
41
|
-
let teardownExecutionRequest = undefined;
|
|
42
|
-
if (teardownFunctionName) {
|
|
43
|
-
const functionSelector = getAvmTestContractFunctionSelector(teardownFunctionName);
|
|
44
|
-
const fnArgs = [functionSelector.toField(), ...teardownArgs];
|
|
45
|
-
teardownExecutionRequest = new PublicExecutionRequest(callContext, fnArgs);
|
|
46
|
-
}
|
|
47
|
-
const tx = createTxForPublicCalls(setupExecutionRequests, appExecutionRequests, teardownExecutionRequest);
|
|
48
|
-
const avmResult = await simulator.simulate(tx);
|
|
49
|
-
if (!expectRevert) {
|
|
50
|
-
expect(avmResult.revertCode.isOK()).toBe(true);
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
// Explicit revert when an assertion failed.
|
|
54
|
-
expect(avmResult.revertCode.isOK()).toBe(false);
|
|
55
|
-
expect(avmResult.revertReason).toBeDefined();
|
|
56
|
-
if (assertionErrString !== undefined) {
|
|
57
|
-
expect(avmResult.revertReason?.getMessage()).toContain(assertionErrString);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
const avmCircuitInputs = avmResult.avmProvingRequest.inputs;
|
|
61
|
-
return avmCircuitInputs;
|
|
62
|
-
}
|
|
63
|
-
export async function simulateAvmTestContractCall(functionName, args = [], expectRevert = false, contractDataSource = new MockedAvmTestContractDataSource()) {
|
|
64
|
-
const globals = GlobalVariables.empty();
|
|
65
|
-
globals.timestamp = TIMESTAMP;
|
|
66
|
-
const merkleTrees = await (await MerkleTrees.new(openTmpStore())).fork();
|
|
67
|
-
await contractDataSource.deployContracts(merkleTrees);
|
|
68
|
-
const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
|
|
69
|
-
const trace = new PublicEnqueuedCallSideEffectTrace();
|
|
70
|
-
const ephemeralTrees = await AvmEphemeralForest.create(worldStateDB.getMerkleInterface());
|
|
71
|
-
const persistableState = initPersistableStateManager({
|
|
72
|
-
worldStateDB,
|
|
73
|
-
trace,
|
|
74
|
-
merkleTrees: ephemeralTrees,
|
|
75
|
-
doMerkleOperations: true,
|
|
76
|
-
});
|
|
77
|
-
const sender = AztecAddress.random();
|
|
78
|
-
const functionSelector = getAvmTestContractFunctionSelector(functionName);
|
|
79
|
-
args = [functionSelector.toField(), ...args];
|
|
80
|
-
const environment = initExecutionEnvironment({
|
|
81
|
-
calldata: args,
|
|
82
|
-
globals,
|
|
83
|
-
address: contractDataSource.firstContractInstance.address,
|
|
84
|
-
sender,
|
|
85
|
-
});
|
|
86
|
-
const context = initContext({ env: environment, persistableState });
|
|
87
|
-
// First we simulate (though it's not needed in this simple case).
|
|
88
|
-
const simulator = new AvmSimulator(context);
|
|
89
|
-
const results = await simulator.execute();
|
|
90
|
-
expect(results.reverted).toBe(expectRevert);
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Craft a carrier transaction for some public calls for simulation by PublicTxSimulator.
|
|
94
|
-
*/
|
|
95
|
-
export function createTxForPublicCalls(setupExecutionRequests, appExecutionRequests, teardownExecutionRequest, gasUsedByPrivate = Gas.empty()) {
|
|
96
|
-
assert(setupExecutionRequests.length > 0 || appExecutionRequests.length > 0 || teardownExecutionRequest !== undefined, "Can't create public tx with no enqueued calls");
|
|
97
|
-
const setupCallRequests = setupExecutionRequests.map(er => er.toCallRequest());
|
|
98
|
-
const appCallRequests = appExecutionRequests.map(er => er.toCallRequest());
|
|
99
|
-
// use max limits
|
|
100
|
-
const gasLimits = new Gas(DEFAULT_GAS_LIMIT, MAX_L2_GAS_PER_TX_PUBLIC_PORTION);
|
|
101
|
-
const forPublic = PartialPrivateTailPublicInputsForPublic.empty();
|
|
102
|
-
// TODO(#9269): Remove this fake nullifier method as we move away from 1st nullifier as hash.
|
|
103
|
-
forPublic.nonRevertibleAccumulatedData.nullifiers[0] = Fr.random(); // fake tx nullifier
|
|
104
|
-
// We reverse order because the simulator expects it to be like a "stack" of calls to pop from
|
|
105
|
-
for (let i = setupCallRequests.length - 1; i >= 0; i--) {
|
|
106
|
-
forPublic.nonRevertibleAccumulatedData.publicCallRequests[i] = setupCallRequests[i];
|
|
107
|
-
}
|
|
108
|
-
for (let i = appCallRequests.length - 1; i >= 0; i--) {
|
|
109
|
-
forPublic.revertibleAccumulatedData.publicCallRequests[i] = appCallRequests[i];
|
|
110
|
-
}
|
|
111
|
-
if (teardownExecutionRequest) {
|
|
112
|
-
forPublic.publicTeardownCallRequest = teardownExecutionRequest.toCallRequest();
|
|
113
|
-
}
|
|
114
|
-
const teardownGasLimits = teardownExecutionRequest ? gasLimits : Gas.empty();
|
|
115
|
-
const gasSettings = new GasSettings(gasLimits, teardownGasLimits, GasFees.empty(), GasFees.empty());
|
|
116
|
-
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
117
|
-
const constantData = new TxConstantData(BlockHeader.empty(), txContext, Fr.zero(), Fr.zero());
|
|
118
|
-
const txData = new PrivateKernelTailCircuitPublicInputs(constantData, RollupValidationRequests.empty(),
|
|
119
|
-
/*gasUsed=*/ gasUsedByPrivate, AztecAddress.zero(), forPublic);
|
|
120
|
-
const tx = Tx.newWithTxData(txData, teardownExecutionRequest);
|
|
121
|
-
// Reverse order because the simulator expects it to be like a "stack" of calls to pop from.
|
|
122
|
-
// Also push app calls before setup calls for this reason.
|
|
123
|
-
for (let i = appExecutionRequests.length - 1; i >= 0; i--) {
|
|
124
|
-
tx.enqueuedPublicFunctionCalls.push(appExecutionRequests[i]);
|
|
125
|
-
}
|
|
126
|
-
for (let i = setupExecutionRequests.length - 1; i >= 0; i--) {
|
|
127
|
-
tx.enqueuedPublicFunctionCalls.push(setupExecutionRequests[i]);
|
|
128
|
-
}
|
|
129
|
-
return tx;
|
|
130
|
-
}
|
|
131
|
-
export class MockedAvmTestContractDataSource {
|
|
132
|
-
constructor(skipContractDeployments = false) {
|
|
133
|
-
this.skipContractDeployments = skipContractDeployments;
|
|
134
|
-
this.fnName = 'public_dispatch';
|
|
135
|
-
this.fnSelector = getAvmTestContractFunctionSelector(this.fnName);
|
|
136
|
-
// maps contract class ID to class
|
|
137
|
-
this.contractClasses = new Map();
|
|
138
|
-
// maps contract instance address to instance
|
|
139
|
-
this.contractInstances = new Map();
|
|
140
|
-
this.firstContractInstance = SerializableContractInstance.default().withAddress(AztecAddress.fromNumber(0));
|
|
141
|
-
this.instanceSameClassAsFirstContract = SerializableContractInstance.default().withAddress(AztecAddress.fromNumber(0));
|
|
142
|
-
this.bytecode = getAvmTestContractBytecode(this.fnName);
|
|
143
|
-
this.fnSelector = getAvmTestContractFunctionSelector(this.fnName);
|
|
144
|
-
this.publicFn = { bytecode: this.bytecode, selector: this.fnSelector };
|
|
145
|
-
this.bytecodeCommitment = computePublicBytecodeCommitment(this.bytecode);
|
|
146
|
-
// create enough unique classes to hit the limit (plus two extra)
|
|
147
|
-
for (let i = 0; i < MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS + 1; i++) {
|
|
148
|
-
const contractClass = makeContractClassPublic(/*seed=*/ i, this.publicFn);
|
|
149
|
-
const contractInstance = makeContractInstanceFromClassId(contractClass.id, /*seed=*/ i);
|
|
150
|
-
this.contractClasses.set(contractClass.id.toString(), contractClass);
|
|
151
|
-
this.contractInstances.set(contractInstance.address.toString(), contractInstance);
|
|
152
|
-
if (i === 0) {
|
|
153
|
-
this.firstContractInstance = contractInstance;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
// a contract with the same class but different instance/address as the first contract
|
|
157
|
-
this.instanceSameClassAsFirstContract = makeContractInstanceFromClassId(this.firstContractInstance.contractClassId,
|
|
158
|
-
/*seed=*/ 1000);
|
|
159
|
-
// The values here should match those in `avm_simulator.test.ts`
|
|
160
|
-
// Used for GETCONTRACTINSTANCE test
|
|
161
|
-
this.otherContractInstance = new SerializableContractInstance({
|
|
162
|
-
version: 1,
|
|
163
|
-
salt: new Fr(0x123),
|
|
164
|
-
deployer: new AztecAddress(new Fr(0x456)),
|
|
165
|
-
contractClassId: new Fr(0x789),
|
|
166
|
-
initializationHash: new Fr(0x101112),
|
|
167
|
-
publicKeys: new PublicKeys(new Point(new Fr(0x131415), new Fr(0x161718), false), new Point(new Fr(0x192021), new Fr(0x222324), false), new Point(new Fr(0x252627), new Fr(0x282930), false), new Point(new Fr(0x313233), new Fr(0x343536), false)),
|
|
168
|
-
}).withAddress(AztecAddress.fromNumber(0x4444));
|
|
169
|
-
}
|
|
170
|
-
async deployContracts(merkleTrees) {
|
|
171
|
-
if (!this.skipContractDeployments) {
|
|
172
|
-
for (const contractInstance of this.contractInstances.values()) {
|
|
173
|
-
const contractAddressNullifier = siloNullifier(AztecAddress.fromNumber(DEPLOYER_CONTRACT_ADDRESS), contractInstance.address.toField());
|
|
174
|
-
await merkleTrees.batchInsert(MerkleTreeId.NULLIFIER_TREE, [contractAddressNullifier.toBuffer()], 0);
|
|
175
|
-
}
|
|
176
|
-
const instanceSameClassAsFirstContractNullifier = siloNullifier(AztecAddress.fromNumber(DEPLOYER_CONTRACT_ADDRESS), this.instanceSameClassAsFirstContract.address.toField());
|
|
177
|
-
await merkleTrees.batchInsert(MerkleTreeId.NULLIFIER_TREE, [instanceSameClassAsFirstContractNullifier.toBuffer()], 0);
|
|
178
|
-
// other contract address used by the bulk test's GETCONTRACTINSTANCE test
|
|
179
|
-
const otherContractAddressNullifier = siloNullifier(AztecAddress.fromNumber(DEPLOYER_CONTRACT_ADDRESS), this.otherContractInstance.address.toField());
|
|
180
|
-
await merkleTrees.batchInsert(MerkleTreeId.NULLIFIER_TREE, [otherContractAddressNullifier.toBuffer()], 0);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
static async create(merkleTrees, skipContractDeployments = false) {
|
|
184
|
-
const dataSource = new MockedAvmTestContractDataSource(skipContractDeployments);
|
|
185
|
-
if (!skipContractDeployments) {
|
|
186
|
-
await dataSource.deployContracts(merkleTrees);
|
|
187
|
-
}
|
|
188
|
-
return dataSource;
|
|
189
|
-
}
|
|
190
|
-
getPublicFunction(_address, _selector) {
|
|
191
|
-
return Promise.resolve(this.publicFn);
|
|
192
|
-
}
|
|
193
|
-
getBlockNumber() {
|
|
194
|
-
throw new Error('Method not implemented.');
|
|
195
|
-
}
|
|
196
|
-
getContractClass(id) {
|
|
197
|
-
return Promise.resolve(this.contractClasses.get(id.toString()));
|
|
198
|
-
}
|
|
199
|
-
getBytecodeCommitment(_id) {
|
|
200
|
-
return Promise.resolve(this.bytecodeCommitment);
|
|
201
|
-
}
|
|
202
|
-
addContractClass(_contractClass) {
|
|
203
|
-
return Promise.resolve();
|
|
204
|
-
}
|
|
205
|
-
getContract(address) {
|
|
206
|
-
if (!this.skipContractDeployments) {
|
|
207
|
-
if (address.equals(this.otherContractInstance.address)) {
|
|
208
|
-
return Promise.resolve(this.otherContractInstance);
|
|
209
|
-
}
|
|
210
|
-
else if (address.equals(this.instanceSameClassAsFirstContract.address)) {
|
|
211
|
-
return Promise.resolve(this.instanceSameClassAsFirstContract);
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
return Promise.resolve(this.contractInstances.get(address.toString()));
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
return Promise.resolve(undefined);
|
|
218
|
-
}
|
|
219
|
-
getContractClassIds() {
|
|
220
|
-
throw new Error('Method not implemented.');
|
|
221
|
-
}
|
|
222
|
-
getContractArtifact(_address) {
|
|
223
|
-
throw new Error('Method not implemented.');
|
|
224
|
-
}
|
|
225
|
-
getContractFunctionName(_address, _selector) {
|
|
226
|
-
return Promise.resolve(this.fnName);
|
|
227
|
-
}
|
|
228
|
-
registerContractFunctionSignatures(_address, _signatures) {
|
|
229
|
-
return Promise.resolve();
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
function getAvmTestContractFunctionSelector(functionName) {
|
|
233
|
-
const artifact = AvmTestContractArtifact.functions.find(f => f.name === functionName);
|
|
234
|
-
assert(!!artifact, `Function ${functionName} not found in AvmTestContractArtifact`);
|
|
235
|
-
const params = artifact.parameters;
|
|
236
|
-
return FunctionSelector.fromNameAndParameters(artifact.name, params);
|
|
237
|
-
}
|
|
238
|
-
function getAvmTestContractArtifact(functionName) {
|
|
239
|
-
const artifact = AvmTestContractArtifact.functions.find(f => f.name === functionName);
|
|
240
|
-
assert(!!artifact?.bytecode, `No bytecode found for function ${functionName}. Try re-running bootstrap.sh on the repository root.`);
|
|
241
|
-
return artifact;
|
|
242
|
-
}
|
|
243
|
-
function getAvmTestContractBytecode(functionName) {
|
|
244
|
-
const artifact = getAvmTestContractArtifact(functionName);
|
|
245
|
-
return artifact.bytecode;
|
|
246
|
-
}
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL2ZpeHR1cmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQWtDLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hILE9BQU8sRUFFTCxXQUFXLEVBQ1gsV0FBVyxFQUlYLGlCQUFpQixFQUNqQix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLEdBQUcsRUFDSCxPQUFPLEVBQ1AsV0FBVyxFQUNYLGVBQWUsRUFDZixnQ0FBZ0MsRUFDaEMsNkNBQTZDLEVBQzdDLHVDQUF1QyxFQUN2QyxvQ0FBb0MsRUFFcEMsVUFBVSxFQUNWLHdCQUF3QixFQUN4Qiw0QkFBNEIsRUFDNUIsY0FBYyxFQUNkLFNBQVMsRUFDVCwrQkFBK0IsR0FDaEMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLCtCQUErQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakgsT0FBTyxFQUFF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
|
|
1
|
+
export * from './public_tx_simulation_tester.js';
|
|
2
|
+
export * from './utils.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL2ZpeHR1cmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxZQUFZLENBQUMifQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
2
|
+
import { BaseAvmSimulationTester } from '../../avm/fixtures/base_avm_simulation_tester.js';
|
|
3
|
+
import { type PublicTxResult } from '../public_tx_simulator.js';
|
|
4
|
+
export type TestEnqueuedCall = {
|
|
5
|
+
address: AztecAddress;
|
|
6
|
+
fnName: string;
|
|
7
|
+
args: any[];
|
|
8
|
+
isStaticCall?: boolean;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* A test class that extends the BaseAvmSimulationTester to enable real-app testing of the PublicTxSimulator.
|
|
12
|
+
* It provides an interface for simulating one transaction at a time and maintains state between subsequent
|
|
13
|
+
* transactions.
|
|
14
|
+
*/
|
|
15
|
+
export declare class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
16
|
+
private txCount;
|
|
17
|
+
static create(skipContractDeployments?: boolean): Promise<PublicTxSimulationTester>;
|
|
18
|
+
simulateTx(sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress): Promise<PublicTxResult>;
|
|
19
|
+
private commitTxStateUpdates;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=public_tx_simulation_tester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAO/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAI3F,OAAO,EAAE,KAAK,cAAc,EAAqB,MAAM,2BAA2B,CAAC;AAMnF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,uBAAuB;IACnE,OAAO,CAAC,OAAO,CAAK;WAEA,MAAM,CAAC,uBAAuB,UAAQ,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAMjF,UAAU,CACrB,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,gBAAgB,EAAO,EACnC,QAAQ,GAAE,gBAAgB,EAAO,EACjC,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,GAAE,YAAkC,GAC3C,OAAO,CAAC,cAAc,CAAC;YAwEZ,oBAAoB;CAqBnC"}
|