@aztec/simulator 0.0.1-commit.f2ce05ee → 0.0.1-commit.f5a9928
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 +4 -4
- package/dest/client.d.ts +1 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +0 -2
- package/dest/private/acvm_wasm.d.ts +1 -1
- package/dest/private/acvm_wasm.d.ts.map +1 -1
- package/dest/private/acvm_wasm.js +3 -1
- package/dest/private/circuit_recording/circuit_recorder.d.ts +36 -23
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +65 -69
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +7 -19
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +38 -42
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +11 -14
- package/dest/public/avm/avm_gas.js +3 -3
- package/dest/public/avm/avm_simulator.js +1 -1
- package/dest/public/avm/calldata.d.ts +1 -1
- package/dest/public/avm/calldata.d.ts.map +1 -1
- package/dest/public/avm/calldata.js +3 -2
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +2 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +18 -3
- package/dest/public/avm/fixtures/utils.d.ts +1 -1
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
- package/dest/public/avm/fixtures/utils.js +4 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +2 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +3 -4
- package/dest/public/avm/opcodes/contract.d.ts +3 -2
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +5 -1
- package/dest/public/avm/opcodes/ec_add.d.ts +2 -4
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +13 -27
- package/dest/public/avm/serialization/bytecode_serialization.js +3 -3
- package/dest/public/avm/serialization/instruction_serialization.d.ts +2 -2
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +1 -1
- package/dest/public/contracts_db_checkpoint.d.ts +2 -2
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
- package/dest/public/contracts_db_checkpoint.js +1 -1
- package/dest/public/fixtures/amm_test.js +4 -4
- package/dest/public/fixtures/bulk_test.d.ts +1 -1
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
- package/dest/public/fixtures/bulk_test.js +33 -6
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +8 -1
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +91 -2
- package/dest/public/fixtures/opcode_spammer.d.ts +1 -1
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -1
- package/dest/public/fixtures/opcode_spammer.js +8 -16
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +6 -5
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +38 -9
- package/dest/public/fixtures/token_test.js +3 -3
- package/dest/public/fixtures/utils.d.ts +2 -2
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +21 -20
- package/dest/public/hinting_db_sources.d.ts +5 -5
- package/dest/public/hinting_db_sources.d.ts.map +1 -1
- package/dest/public/hinting_db_sources.js +8 -7
- package/dest/public/public_db_sources.d.ts +6 -3
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +16 -10
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +5 -5
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +5 -5
- package/dest/public/public_processor/public_processor.d.ts +8 -5
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +121 -67
- package/dest/public/public_processor/public_processor_metrics.d.ts +4 -1
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +8 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +1 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +5 -4
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +2 -3
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +2 -2
- package/dest/public/public_tx_simulator/factories.d.ts +2 -2
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +2 -2
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +7 -3
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +8 -10
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +6 -2
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +14 -9
- package/dest/public/state_manager/state_manager.js +1 -1
- package/dest/public/test_executor_metrics.d.ts +6 -1
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +22 -0
- package/package.json +16 -16
- package/src/client.ts +0 -2
- package/src/private/acvm_wasm.ts +4 -1
- package/src/private/circuit_recording/circuit_recorder.ts +84 -78
- package/src/private/circuit_recording/file_circuit_recorder.ts +38 -48
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
- package/src/public/avm/avm_gas.ts +2 -2
- package/src/public/avm/avm_simulator.ts +1 -1
- package/src/public/avm/calldata.ts +3 -2
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +23 -3
- package/src/public/avm/fixtures/utils.ts +4 -1
- package/src/public/avm/opcodes/accrued_substate.ts +3 -4
- package/src/public/avm/opcodes/contract.ts +5 -1
- package/src/public/avm/opcodes/ec_add.ts +12 -31
- package/src/public/avm/opcodes/external_calls.ts +1 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +2 -2
- package/src/public/avm/serialization/instruction_serialization.ts +1 -1
- package/src/public/contracts_db_checkpoint.ts +1 -1
- package/src/public/fixtures/amm_test.ts +4 -4
- package/src/public/fixtures/bulk_test.ts +31 -6
- package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
- package/src/public/fixtures/custom_bytecode_tests.ts +209 -2
- package/src/public/fixtures/opcode_spammer.ts +10 -18
- package/src/public/fixtures/public_tx_simulation_tester.ts +45 -5
- package/src/public/fixtures/token_test.ts +3 -3
- package/src/public/fixtures/utils.ts +23 -24
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +1 -1
- package/src/public/hinting_db_sources.ts +10 -7
- package/src/public/public_db_sources.ts +21 -14
- package/src/public/public_processor/guarded_merkle_tree.ts +6 -6
- package/src/public/public_processor/public_processor.ts +158 -88
- package/src/public/public_processor/public_processor_metrics.ts +12 -0
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +5 -4
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +2 -3
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +2 -2
- package/src/public/public_tx_simulator/factories.ts +2 -1
- package/src/public/public_tx_simulator/public_tx_context.ts +8 -10
- package/src/public/public_tx_simulator/public_tx_simulator.ts +14 -10
- package/src/public/state_manager/state_manager.ts +1 -1
- package/src/public/test_executor_metrics.ts +24 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DomainSeparator } from '@aztec/constants';
|
|
2
2
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -11,8 +11,8 @@ const INITIAL_TOKEN_BALANCE = 1_000_000_000n;
|
|
|
11
11
|
* You do NOT need permission to remove this test!
|
|
12
12
|
*/ export async function ammTest(tester, logger, tokenArtifact, ammArtifact, expectToBeTrue) {
|
|
13
13
|
const timer = new Timer();
|
|
14
|
-
const admin = AztecAddress.
|
|
15
|
-
const sender = AztecAddress.
|
|
14
|
+
const admin = AztecAddress.fromNumberUnsafe(42);
|
|
15
|
+
const sender = AztecAddress.fromNumberUnsafe(111);
|
|
16
16
|
logger.debug(`Deploying tokens`);
|
|
17
17
|
const token0 = await setUpToken(tester, tokenArtifact, admin, expectToBeTrue, /*seed=*/ 0);
|
|
18
18
|
const token1 = await setUpToken(tester, tokenArtifact, admin, expectToBeTrue, /*seed=*/ 1);
|
|
@@ -209,5 +209,5 @@ async function computePartialNoteValidityCommitment(partialNote, completer) {
|
|
|
209
209
|
return await poseidon2HashWithSeparator([
|
|
210
210
|
partialNote.commitment,
|
|
211
211
|
completer
|
|
212
|
-
],
|
|
212
|
+
], DomainSeparator.PARTIAL_NOTE_VALIDITY_COMMITMENT);
|
|
213
213
|
}
|
|
@@ -3,4 +3,4 @@ import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
|
3
3
|
import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
|
|
4
4
|
export declare function bulkTest(tester: PublicTxSimulationTester, logger: Logger, avmTestContractArtifact: ContractArtifact): Promise<import("@aztec/stdlib/avm").PublicTxResult>;
|
|
5
5
|
export declare function megaBulkTest(tester: PublicTxSimulationTester, logger: Logger, avmTestContractArtifact: ContractArtifact): Promise<import("@aztec/stdlib/avm").PublicTxResult>;
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsa190ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL2ZpeHR1cmVzL2J1bGtfdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzFELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTVFLHdCQUFzQixRQUFRLENBQzVCLE1BQU0sRUFBRSx3QkFBd0IsRUFDaEMsTUFBTSxFQUFFLE1BQU0sRUFDZCx1QkFBdUIsRUFBRSxnQkFBZ0IsdURBZ0cxQztBQUVELHdCQUFzQixZQUFZLENBQ2hDLE1BQU0sRUFBRSx3QkFBd0IsRUFDaEMsTUFBTSxFQUFFLE1BQU0sRUFDZCx1QkFBdUIsRUFBRSxnQkFBZ0IsdURBaUYxQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulk_test.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/bulk_test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,wBAAwB,EAChC,MAAM,EAAE,MAAM,EACd,uBAAuB,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"bulk_test.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/bulk_test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,wBAAwB,EAChC,MAAM,EAAE,MAAM,EACd,uBAAuB,EAAE,gBAAgB,uDAgG1C;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,wBAAwB,EAChC,MAAM,EAAE,MAAM,EACd,uBAAuB,EAAE,gBAAgB,uDAiF1C"}
|
|
@@ -3,13 +3,14 @@ import { Timer } from '@aztec/foundation/timer';
|
|
|
3
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
export async function bulkTest(tester, logger, avmTestContractArtifact) {
|
|
5
5
|
const timer = new Timer();
|
|
6
|
-
const deployer = AztecAddress.
|
|
6
|
+
const deployer = AztecAddress.fromNumberUnsafe(42);
|
|
7
7
|
const avmTestContract = await tester.registerAndDeployContract(/*constructorArgs=*/ [], deployer, avmTestContractArtifact);
|
|
8
8
|
// Needed since we invoke the Fee Juice Contract in the bulk test.registerFeeJuiceContract
|
|
9
9
|
await tester.registerFeeJuiceContract();
|
|
10
10
|
// Register multiple different protocol contracts (to ensure we don't dedup bytecode hashing events):
|
|
11
11
|
await tester.registerAuthContract();
|
|
12
12
|
await tester.registerInstanceRegistryContract();
|
|
13
|
+
await tester.registerClassRegistryContract();
|
|
13
14
|
// Get a deployed contract instance to pass to the contract
|
|
14
15
|
// for it to use as "expected" values when testing contract instance retrieval.
|
|
15
16
|
const expectContractInstance = avmTestContract;
|
|
@@ -33,10 +34,23 @@ export async function bulkTest(tester, logger, avmTestContractArtifact) {
|
|
|
33
34
|
5,
|
|
34
35
|
6,
|
|
35
36
|
7,
|
|
36
|
-
8
|
|
37
|
+
8,
|
|
38
|
+
9,
|
|
39
|
+
10
|
|
37
40
|
].map((x)=>new Fr(x));
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
// Pinned grumpkin-Poseidon2 Schnorr signature (mirrors the C++ `pinned_test_vector_large`
|
|
42
|
+
// and noir-lang/schnorr v0.4.0's `pinned_vector_large`). Passing these in as calldata
|
|
43
|
+
// (rather than baking them into Noir as constants) keeps MSM + Poseidon2 from being folded
|
|
44
|
+
// by the Noir compiler.
|
|
45
|
+
const schnorrInputs = [
|
|
46
|
+
Fr.fromHexString('0x065812e335a97c2108ea8cf4ccfe2f9dd6b117a0714f5e18461575be93f61da6'),
|
|
47
|
+
Fr.fromHexString('0x1a915003e8ec534f9a15d926a7ded478e178468ccc4f28e236e67450a55ac622'),
|
|
48
|
+
Fr.fromHexString('0xf3bc3b7147acb9c621fd9f72dbf15ffa'),
|
|
49
|
+
Fr.fromHexString('0x08599f379f0301dfefdbd0272554454d'),
|
|
50
|
+
Fr.fromHexString('0x97065383ebbbd76620398792bd259bc2'),
|
|
51
|
+
Fr.fromHexString('0x2ceaee87f45b7a417f0ffb05451a8c92'),
|
|
52
|
+
Fr.fromHexString('0x0123456789abcdef0fedcba9876543210123456789abcdef0fedcba987654321')
|
|
53
|
+
];
|
|
40
54
|
const args = [
|
|
41
55
|
argsField,
|
|
42
56
|
argsU8,
|
|
@@ -44,6 +58,8 @@ export async function bulkTest(tester, logger, avmTestContractArtifact) {
|
|
|
44
58
|
/*expectedDeployer=*/ expectContractInstance.deployer,
|
|
45
59
|
/*expectedClassId=*/ expectContractInstance.currentContractClassId,
|
|
46
60
|
/*expectedInitializationHash=*/ expectContractInstance.initializationHash,
|
|
61
|
+
/*expectedImmutablesHash=*/ expectContractInstance.immutablesHash,
|
|
62
|
+
/*schnorrInputs=*/ schnorrInputs,
|
|
47
63
|
/*skip_strictly_limited_side_effects=*/ false
|
|
48
64
|
];
|
|
49
65
|
const bulkResult = await tester.executeTxWithLabel(/*txLabel=*/ 'AvmTest/bulk_testing', /*sender=*/ deployer, /*setupCalls=*/ [], /*appCalls=*/ [
|
|
@@ -67,7 +83,7 @@ export async function bulkTest(tester, logger, avmTestContractArtifact) {
|
|
|
67
83
|
address: avmTestContract.address,
|
|
68
84
|
fnName: 'assert_calldata_copy',
|
|
69
85
|
args: [
|
|
70
|
-
argsField.slice(3),
|
|
86
|
+
argsField.slice(0, 3),
|
|
71
87
|
/* with_selector: */ true
|
|
72
88
|
]
|
|
73
89
|
},
|
|
@@ -120,7 +136,7 @@ export async function bulkTest(tester, logger, avmTestContractArtifact) {
|
|
|
120
136
|
}
|
|
121
137
|
export async function megaBulkTest(tester, logger, avmTestContractArtifact) {
|
|
122
138
|
const timer = new Timer();
|
|
123
|
-
const deployer = AztecAddress.
|
|
139
|
+
const deployer = AztecAddress.fromNumberUnsafe(42);
|
|
124
140
|
const avmTestContract = await tester.registerAndDeployContract(/*constructorArgs=*/ [], deployer, avmTestContractArtifact);
|
|
125
141
|
// Needed since we invoke the Fee Juice Contract in the bulk test.registerFeeJuiceContract
|
|
126
142
|
await tester.registerFeeJuiceContract();
|
|
@@ -203,6 +219,15 @@ export async function megaBulkTest(tester, logger, avmTestContractArtifact) {
|
|
|
203
219
|
9,
|
|
204
220
|
10
|
|
205
221
|
].map((x)=>new Fr(x));
|
|
222
|
+
const schnorrInputs = [
|
|
223
|
+
Fr.fromHexString('0x065812e335a97c2108ea8cf4ccfe2f9dd6b117a0714f5e18461575be93f61da6'),
|
|
224
|
+
Fr.fromHexString('0x1a915003e8ec534f9a15d926a7ded478e178468ccc4f28e236e67450a55ac622'),
|
|
225
|
+
Fr.fromHexString('0xf3bc3b7147acb9c621fd9f72dbf15ffa'),
|
|
226
|
+
Fr.fromHexString('0x08599f379f0301dfefdbd0272554454d'),
|
|
227
|
+
Fr.fromHexString('0x97065383ebbbd76620398792bd259bc2'),
|
|
228
|
+
Fr.fromHexString('0x2ceaee87f45b7a417f0ffb05451a8c92'),
|
|
229
|
+
Fr.fromHexString('0x0123456789abcdef0fedcba9876543210123456789abcdef0fedcba987654321')
|
|
230
|
+
];
|
|
206
231
|
const genArgs = (argsField)=>[
|
|
207
232
|
argsField,
|
|
208
233
|
argsU8,
|
|
@@ -210,6 +235,8 @@ export async function megaBulkTest(tester, logger, avmTestContractArtifact) {
|
|
|
210
235
|
/*expectedDeployer=*/ expectContractInstance.deployer.toField(),
|
|
211
236
|
/*expectedClassId=*/ expectContractInstance.currentContractClassId.toField(),
|
|
212
237
|
/*expectedInitializationHash=*/ expectContractInstance.initializationHash.toField(),
|
|
238
|
+
/*expectedImmutablesHash=*/ expectContractInstance.immutablesHash.toField(),
|
|
239
|
+
/*schnorrInputs=*/ schnorrInputs,
|
|
213
240
|
// Must skip strictly limited side effects (logs, messages) so we can spam the bulk test several times.
|
|
214
241
|
/*skip_strictly_limited_side_effects=*/ true
|
|
215
242
|
];
|
|
@@ -31,4 +31,4 @@ export declare function executeCustomBytecode(contract: ContractInstanceWithAddr
|
|
|
31
31
|
* @returns The execution result
|
|
32
32
|
*/
|
|
33
33
|
export declare function deployAndExecuteCustomBytecode(bytecode: Buffer, tester: PublicTxSimulationTester, txLabel?: string, contractName?: string, deployer?: AztecAddress, calldata?: any[]): Promise<PublicTxResult>;
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tX2J5dGVjb2RlX3Rlc3Rlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1YmxpYy9maXh0dXJlcy9jdXN0b21fYnl0ZWNvZGVfdGVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTVFOzs7Ozs7O0dBT0c7QUFDSCx3QkFBc0Isb0JBQW9CLENBQ3hDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLE1BQU0sRUFBRSx3QkFBd0IsRUFDaEMsWUFBWSxHQUFFLE1BQWlDLEVBQy9DLFFBQVEsR0FBRSxZQUFnRCxHQUN6RCxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FpQnRDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILHdCQUFzQixxQkFBcUIsQ0FDekMsUUFBUSxFQUFFLDJCQUEyQixFQUNyQyxNQUFNLEVBQUUsd0JBQXdCLEVBQ2hDLE9BQU8sR0FBRSxNQUE2QixFQUN0QyxRQUFRLEdBQUUsR0FBRyxFQUFPLEdBQ25CLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FRekI7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCx3QkFBc0IsOEJBQThCLENBQ2xELFFBQVEsRUFBRSxNQUFNLEVBQ2hCLE1BQU0sRUFBRSx3QkFBd0IsRUFDaEMsT0FBTyxHQUFFLE1BQTZCLEVBQ3RDLFlBQVksR0FBRSxNQUFpQyxFQUMvQyxRQUFRLEdBQUUsWUFBZ0QsRUFDMUQsUUFBUSxHQUFFLEdBQUcsRUFBTyxHQUNuQixPQUFPLENBQUMsY0FBYyxDQUFDLENBR3pCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom_bytecode_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/custom_bytecode_tester.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,wBAAwB,EAChC,YAAY,GAAE,MAAiC,EAC/C,QAAQ,GAAE,
|
|
1
|
+
{"version":3,"file":"custom_bytecode_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/custom_bytecode_tester.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,wBAAwB,EAChC,YAAY,GAAE,MAAiC,EAC/C,QAAQ,GAAE,YAAgD,GACzD,OAAO,CAAC,2BAA2B,CAAC,CAiBtC;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,wBAAwB,EAChC,OAAO,GAAE,MAA6B,EACtC,QAAQ,GAAE,GAAG,EAAO,GACnB,OAAO,CAAC,cAAc,CAAC,CAQzB;AAED;;;;;;;;;GASG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,wBAAwB,EAChC,OAAO,GAAE,MAA6B,EACtC,YAAY,GAAE,MAAiC,EAC/C,QAAQ,GAAE,YAAgD,EAC1D,QAAQ,GAAE,GAAG,EAAO,GACnB,OAAO,CAAC,cAAc,CAAC,CAGzB"}
|
|
@@ -7,7 +7,7 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
7
7
|
* @param contractName - The name of the contract
|
|
8
8
|
* @param deployer - The deployer address
|
|
9
9
|
* @returns The deployed contract instance
|
|
10
|
-
*/ export async function deployCustomBytecode(bytecode, tester, contractName = 'CustomBytecodeContract', deployer = AztecAddress.
|
|
10
|
+
*/ export async function deployCustomBytecode(bytecode, tester, contractName = 'CustomBytecodeContract', deployer = AztecAddress.fromNumberUnsafe(42)) {
|
|
11
11
|
const contractArtifact = emptyContractArtifact();
|
|
12
12
|
contractArtifact.name = contractName;
|
|
13
13
|
contractArtifact.functions = [
|
|
@@ -47,7 +47,7 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
47
47
|
* @param deployer - The deployer address
|
|
48
48
|
* @param calldata - The calldata to use
|
|
49
49
|
* @returns The execution result
|
|
50
|
-
*/ export async function deployAndExecuteCustomBytecode(bytecode, tester, txLabel = 'CustomBytecodeTest', contractName = 'CustomBytecodeContract', deployer = AztecAddress.
|
|
50
|
+
*/ export async function deployAndExecuteCustomBytecode(bytecode, tester, txLabel = 'CustomBytecodeTest', contractName = 'CustomBytecodeContract', deployer = AztecAddress.fromNumberUnsafe(42), calldata = []) {
|
|
51
51
|
const testContract = await deployCustomBytecode(bytecode, tester, contractName, deployer);
|
|
52
52
|
return await executeCustomBytecode(testContract, tester, txLabel, calldata);
|
|
53
53
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
1
2
|
import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
|
|
2
3
|
export declare function addressingWithBaseTagIssueTest(isIndirect: boolean, tester: PublicTxSimulationTester): Promise<import("@aztec/stdlib/avm").PublicTxResult>;
|
|
3
4
|
export declare function addressingWithIndirectTagIssueTest(tester: PublicTxSimulationTester): Promise<import("@aztec/stdlib/avm").PublicTxResult>;
|
|
@@ -9,4 +10,10 @@ export declare function invalidByteTest(tester: PublicTxSimulationTester): Promi
|
|
|
9
10
|
export declare function instructionTruncatedTest(tester: PublicTxSimulationTester): Promise<import("@aztec/stdlib/avm").PublicTxResult>;
|
|
10
11
|
export declare function invalidTagValueTest(tester: PublicTxSimulationTester): Promise<import("@aztec/stdlib/avm").PublicTxResult>;
|
|
11
12
|
export declare function invalidTagValueAndInstructionTruncatedTest(tester: PublicTxSimulationTester): Promise<import("@aztec/stdlib/avm").PublicTxResult>;
|
|
12
|
-
|
|
13
|
+
export declare function setTruncationTest(tester: PublicTxSimulationTester): Promise<import("@aztec/stdlib/avm").PublicTxResult>;
|
|
14
|
+
export declare function castTruncationTest(tester: PublicTxSimulationTester): Promise<import("@aztec/stdlib/avm").PublicTxResult>;
|
|
15
|
+
export declare function deployBitwiseSha256ErrorRowCollisionContracts(tester: PublicTxSimulationTester): Promise<{
|
|
16
|
+
innerContract: ContractInstanceWithAddress;
|
|
17
|
+
outerContract: ContractInstanceWithAddress;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tX2J5dGVjb2RlX3Rlc3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL2ZpeHR1cmVzL2N1c3RvbV9ieXRlY29kZV90ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBZTFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBSTVFLHdCQUFzQiw4QkFBOEIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsdURBY3pHO0FBS0Qsd0JBQXNCLGtDQUFrQyxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsdURBc0J4RjtBQU9ELHdCQUFzQiw4Q0FBOEMsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLHVEQXdCcEc7QUFPRCx3QkFBc0IscURBQXFELENBQUMsTUFBTSxFQUFFLHdCQUF3Qix1REF5QjNHO0FBRUQsd0JBQXNCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSx3QkFBd0IsdURBUXRFO0FBRUQsd0JBQXNCLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx3QkFBd0IsdURBaUJ2RTtBQUdELHdCQUFzQixlQUFlLENBQUMsTUFBTSxFQUFFLHdCQUF3Qix1REFPckU7QUFHRCx3QkFBc0Isd0JBQXdCLENBQUMsTUFBTSxFQUFFLHdCQUF3Qix1REFVOUU7QUFHRCx3QkFBc0IsbUJBQW1CLENBQUMsTUFBTSxFQUFFLHdCQUF3Qix1REFZekU7QUFHRCx3QkFBc0IsMENBQTBDLENBQUMsTUFBTSxFQUFFLHdCQUF3Qix1REFpQmhHO0FBTUQsd0JBQXNCLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx3QkFBd0IsdURBMkR2RTtBQU1ELHdCQUFzQixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLHVEQW1FeEU7QUFxQkQsd0JBQXNCLDZDQUE2QyxDQUNqRSxNQUFNLEVBQUUsd0JBQXdCLEdBQy9CLE9BQU8sQ0FBQztJQUFFLGFBQWEsRUFBRSwyQkFBMkIsQ0FBQztJQUFDLGFBQWEsRUFBRSwyQkFBMkIsQ0FBQTtDQUFFLENBQUMsQ0ErRHJHIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom_bytecode_tests.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/custom_bytecode_tests.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"custom_bytecode_tests.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/custom_bytecode_tests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAe1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAI5E,wBAAsB,8BAA8B,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,wBAAwB,uDAczG;AAKD,wBAAsB,kCAAkC,CAAC,MAAM,EAAE,wBAAwB,uDAsBxF;AAOD,wBAAsB,8CAA8C,CAAC,MAAM,EAAE,wBAAwB,uDAwBpG;AAOD,wBAAsB,qDAAqD,CAAC,MAAM,EAAE,wBAAwB,uDAyB3G;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,wBAAwB,uDAQtE;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,uDAiBvE;AAGD,wBAAsB,eAAe,CAAC,MAAM,EAAE,wBAAwB,uDAOrE;AAGD,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,uDAU9E;AAGD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,uDAYzE;AAGD,wBAAsB,0CAA0C,CAAC,MAAM,EAAE,wBAAwB,uDAiBhG;AAMD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,uDA2DvE;AAMD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,uDAmExE;AAqBD,wBAAsB,6CAA6C,CACjE,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC;IAAE,aAAa,EAAE,2BAA2B,CAAC;IAAC,aAAa,EAAE,2BAA2B,CAAA;CAAE,CAAC,CA+DrG"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { strict as assert } from 'assert';
|
|
2
2
|
import { TypeTag } from '../avm/avm_memory_types.js';
|
|
3
3
|
import { Addressing, AddressingMode } from '../avm/opcodes/addressing_mode.js';
|
|
4
|
-
import { Add, CalldataCopy, Jump, Return, Set } from '../avm/opcodes/index.js';
|
|
4
|
+
import { Add, Call, CalldataCopy, Cast, Jump, Return, Set, Sha256Compression, Xor } from '../avm/opcodes/index.js';
|
|
5
5
|
import { encodeToBytecode } from '../avm/serialization/bytecode_serialization.js';
|
|
6
6
|
import { MAX_OPCODE_VALUE, Opcode, OperandType, getOperandSize } from '../avm/serialization/instruction_serialization.js';
|
|
7
|
-
import { deployAndExecuteCustomBytecode } from './custom_bytecode_tester.js';
|
|
7
|
+
import { deployAndExecuteCustomBytecode, deployCustomBytecode } from './custom_bytecode_tester.js';
|
|
8
8
|
// First instruction resolved a base address (offset 0) which is uninitialized and therefore
|
|
9
9
|
// of invalid tag (FF). This will trigger an exceptional halt.
|
|
10
10
|
export async function addressingWithBaseTagIssueTest(isIndirect, tester) {
|
|
@@ -155,6 +155,66 @@ export async function invalidTagValueAndInstructionTruncatedTest(tester) {
|
|
|
155
155
|
const txLabel = 'InvalidTagValueAndInstructionTruncated';
|
|
156
156
|
return await deployAndExecuteCustomBytecode(bytecode, tester, txLabel);
|
|
157
157
|
}
|
|
158
|
+
// Exercise SET truncation: set values whose widths exceed the target tag and
|
|
159
|
+
// rely on `buildFromTagTruncating` to truncate to the low bits of the tag.
|
|
160
|
+
// Covers sources larger than 128 bits (via SET_FF) and sources in (32, 128]
|
|
161
|
+
// bits (via SET_64) against destination tags U1/U8/U16/U32/U64/U128.
|
|
162
|
+
export async function setTruncationTest(tester) {
|
|
163
|
+
// 200-bit value: forces truncation for every target tag up to U128.
|
|
164
|
+
const LARGE_FIELD_VALUE = (1n << 200n) + 0x1234567890abcdef1234567890abcdefn;
|
|
165
|
+
// 40-bit value: forces truncation for target tags up to U32.
|
|
166
|
+
const LARGE_U64_VALUE = (1n << 40n) + 0xdeadbeefn;
|
|
167
|
+
const bytecode = encodeToBytecode([
|
|
168
|
+
// Zero U32 at offset 0 — used as the Return copy-size slot.
|
|
169
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, TypeTag.UINT32, /*value=*/ 0).as(Opcode.SET_8, Set.wireFormat8),
|
|
170
|
+
// Source >128 bits (via SET_FF) truncated to smaller target tags.
|
|
171
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 1, TypeTag.UINT128, LARGE_FIELD_VALUE).as(Opcode.SET_FF, Set.wireFormatFF),
|
|
172
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 2, TypeTag.UINT64, LARGE_FIELD_VALUE).as(Opcode.SET_FF, Set.wireFormatFF),
|
|
173
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 3, TypeTag.UINT32, LARGE_FIELD_VALUE).as(Opcode.SET_FF, Set.wireFormatFF),
|
|
174
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 4, TypeTag.UINT16, LARGE_FIELD_VALUE).as(Opcode.SET_FF, Set.wireFormatFF),
|
|
175
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 5, TypeTag.UINT8, LARGE_FIELD_VALUE).as(Opcode.SET_FF, Set.wireFormatFF),
|
|
176
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 6, TypeTag.UINT1, LARGE_FIELD_VALUE).as(Opcode.SET_FF, Set.wireFormatFF),
|
|
177
|
+
// Source in (32, 128] bits (via SET_64) truncated to smaller target tags.
|
|
178
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 7, TypeTag.UINT32, LARGE_U64_VALUE).as(Opcode.SET_64, Set.wireFormat64),
|
|
179
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 8, TypeTag.UINT16, LARGE_U64_VALUE).as(Opcode.SET_64, Set.wireFormat64),
|
|
180
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 9, TypeTag.UINT8, LARGE_U64_VALUE).as(Opcode.SET_64, Set.wireFormat64),
|
|
181
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 10, TypeTag.UINT1, LARGE_U64_VALUE).as(Opcode.SET_64, Set.wireFormat64),
|
|
182
|
+
new Return(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*returnOffset=*/ 0)
|
|
183
|
+
]);
|
|
184
|
+
const txLabel = 'SetTruncation';
|
|
185
|
+
return await deployAndExecuteCustomBytecode(bytecode, tester, txLabel);
|
|
186
|
+
}
|
|
187
|
+
// Exercise CAST truncation: store a wide source value in memory then CAST it
|
|
188
|
+
// to smaller destination tags. Covers sources larger than 128 bits (FIELD
|
|
189
|
+
// source) and sources in (32, 128] bits (UINT64 source) against destination
|
|
190
|
+
// tags U1/U8/U16/U32/U64/U128.
|
|
191
|
+
export async function castTruncationTest(tester) {
|
|
192
|
+
// 200-bit source: stored as FIELD so that CASTs to any integer tag truncate.
|
|
193
|
+
const LARGE_FIELD_VALUE = (1n << 200n) + 0x1234567890abcdef1234567890abcdefn;
|
|
194
|
+
// 40-bit source: stored as UINT64 so CASTs to U1/U8/U16/U32 truncate.
|
|
195
|
+
const LARGE_U64_VALUE = (1n << 40n) + 0xdeadbeefn;
|
|
196
|
+
const bytecode = encodeToBytecode([
|
|
197
|
+
// Zero U32 at offset 0 — used as the Return copy-size slot.
|
|
198
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, TypeTag.UINT32, /*value=*/ 0).as(Opcode.SET_8, Set.wireFormat8),
|
|
199
|
+
// Store wide FIELD source at offset 10, then CAST to smaller tags.
|
|
200
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 10, TypeTag.FIELD, LARGE_FIELD_VALUE).as(Opcode.SET_FF, Set.wireFormatFF),
|
|
201
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 10, /*dstOffset=*/ 11, TypeTag.UINT128).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
202
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 10, /*dstOffset=*/ 12, TypeTag.UINT64).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
203
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 10, /*dstOffset=*/ 13, TypeTag.UINT32).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
204
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 10, /*dstOffset=*/ 14, TypeTag.UINT16).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
205
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 10, /*dstOffset=*/ 15, TypeTag.UINT8).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
206
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 10, /*dstOffset=*/ 16, TypeTag.UINT1).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
207
|
+
// Store UINT64 source at offset 20, then CAST to smaller integer tags.
|
|
208
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 20, TypeTag.UINT64, LARGE_U64_VALUE).as(Opcode.SET_64, Set.wireFormat64),
|
|
209
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 20, /*dstOffset=*/ 21, TypeTag.UINT32).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
210
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 20, /*dstOffset=*/ 22, TypeTag.UINT16).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
211
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 20, /*dstOffset=*/ 23, TypeTag.UINT8).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
212
|
+
new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 20, /*dstOffset=*/ 24, TypeTag.UINT1).as(Opcode.CAST_8, Cast.wireFormat8),
|
|
213
|
+
new Return(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*returnOffset=*/ 0)
|
|
214
|
+
]);
|
|
215
|
+
const txLabel = 'CastTruncation';
|
|
216
|
+
return await deployAndExecuteCustomBytecode(bytecode, tester, txLabel);
|
|
217
|
+
}
|
|
158
218
|
/**
|
|
159
219
|
* Returns the offset of the tag in an instruction.
|
|
160
220
|
* @details Loops over the wire format operand type entries until it finds the tag.
|
|
@@ -172,3 +232,32 @@ export async function invalidTagValueAndInstructionTruncatedTest(tester) {
|
|
|
172
232
|
}
|
|
173
233
|
return offset;
|
|
174
234
|
}
|
|
235
|
+
export async function deployBitwiseSha256ErrorRowCollisionContracts(tester) {
|
|
236
|
+
const innerBytecode = encodeToBytecode([
|
|
237
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, TypeTag.UINT32, /*value=*/ 0).as(Opcode.SET_8, Set.wireFormat8),
|
|
238
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 1, TypeTag.UINT16, /*value=*/ 0).as(Opcode.SET_8, Set.wireFormat8),
|
|
239
|
+
new Xor(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(Opcode.XOR_8, Xor.wireFormat8),
|
|
240
|
+
new Return(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*returnOffset=*/ 0)
|
|
241
|
+
]);
|
|
242
|
+
const outerInstructions = [
|
|
243
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, TypeTag.UINT32, /*value=*/ 0).as(Opcode.SET_8, Set.wireFormat8),
|
|
244
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 1, TypeTag.UINT32, /*value=*/ 1).as(Opcode.SET_8, Set.wireFormat8),
|
|
245
|
+
new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 2, TypeTag.UINT32, /*value=*/ 100_000).as(Opcode.SET_32, Set.wireFormat32),
|
|
246
|
+
new CalldataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 1, /*cdStartOffset=*/ 0, /*dstOffset=*/ 3),
|
|
247
|
+
new Call(/*addressing_mode=*/ 0, /*l2GasOffset=*/ 2, /*daGasOffset=*/ 2, /*addrOffset=*/ 3, /*argsSizeOffset=*/ 0, /*argsOffset=*/ 0)
|
|
248
|
+
];
|
|
249
|
+
for(let i = 0; i < 8; i++){
|
|
250
|
+
outerInstructions.push(new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 10 + i, TypeTag.UINT32, /*value=*/ 0).as(Opcode.SET_8, Set.wireFormat8));
|
|
251
|
+
}
|
|
252
|
+
outerInstructions.push(new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 18, TypeTag.UINT32, /*value=*/ 0x61626364).as(Opcode.SET_32, Set.wireFormat32));
|
|
253
|
+
for(let i = 0; i < 15; i++){
|
|
254
|
+
outerInstructions.push(new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 19 + i, TypeTag.UINT32, /*value=*/ 0).as(Opcode.SET_8, Set.wireFormat8));
|
|
255
|
+
}
|
|
256
|
+
outerInstructions.push(new Sha256Compression(/*addressing_mode=*/ 0, /*outputOffset=*/ 34, /*stateOffset=*/ 10, /*inputsOffset=*/ 18), new Return(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*returnOffset=*/ 0));
|
|
257
|
+
const innerContract = await deployCustomBytecode(innerBytecode, tester, 'BitwiseSha256CollisionInner');
|
|
258
|
+
const outerContract = await deployCustomBytecode(encodeToBytecode(outerInstructions), tester, 'BitwiseSha256CollisionOuter');
|
|
259
|
+
return {
|
|
260
|
+
innerContract,
|
|
261
|
+
outerContract
|
|
262
|
+
};
|
|
263
|
+
}
|
|
@@ -119,4 +119,4 @@ export declare function createOpcodeSpamBytecode(config: SpamConfig): Buffer;
|
|
|
119
119
|
export declare function createSideEffectSpamBytecode(config: SpamConfig): Buffer;
|
|
120
120
|
export declare function testOpcodeSpamCase(tester: PublicTxSimulationTester, config: SpamConfig, expectToBeTrue?: (x: boolean) => void): Promise<PublicTxResult>;
|
|
121
121
|
export {};
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Bjb2RlX3NwYW1tZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvZml4dHVyZXMvb3Bjb2RlX3NwYW1tZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0tBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQTJDLEtBQUssY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFLakYsT0FBTyxFQUFTLEtBQUssV0FBVyxFQUFnRCxNQUFNLDRCQUE0QixDQUFDO0FBa0RuSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFM0UsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQU1qRjs7R0FFRztBQUNILFVBQVUsUUFBUTtJQUNoQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsS0FBSyxFQUFFLFdBQVcsQ0FBQztDQUNwQjtBQUVEOzs7R0FHRztBQUNILEtBQUssU0FBUyxHQUFHLFFBQVEsR0FBRyxDQUFDLE1BQU0sVUFBVSxFQUFFLENBQUMsQ0FBQztBQUVqRDs7R0FFRztBQUNILE1BQU0sV0FBVyxVQUFVO0lBQ3pCLGlDQUFpQztJQUNqQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFFbkIsc0RBQXNEO0lBQ3RELGtCQUFrQixFQUFFLE1BQU0sVUFBVSxFQUFFLENBQUM7SUFFdkMsMkRBQTJEO0lBQzNELG1CQUFtQixDQUFDLEVBQUUsTUFBTSxVQUFVLEVBQUUsQ0FBQztJQUV6Qzs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRWYsc0VBQXNFO0lBQ3RFLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUVmLDBEQUEwRDtJQUMxRCxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztDQUM3QjtBQUVEOzs7R0FHRztBQUNILE1BQU0sV0FBVyxvQkFBb0I7SUFDbkMsa0NBQWtDO0lBQ2xDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFZixxREFBcUQ7SUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0NBQ3ZCO0FBTUQ7OztHQUdHO0FBQ0gsZUFBTyxNQUFNLGNBQWMsSUFBc0IsQ0FBQztBQUNsRCxlQUFPLE1BQU0saUJBQWlCLElBQThCLENBQUM7QUFFN0QsNkZBQTZGO0FBQzdGLGVBQU8sTUFBTSxxQkFBcUIsSUFBMEIsQ0FBQztBQUU3RCx1RkFBdUY7QUFDdkYsZUFBTyxNQUFNLGlCQUFpQixJQUEwQixDQUFDO0FBQ3pELGVBQU8sTUFBTSxrQkFBa0IsSUFBMEIsQ0FBQztBQUUxRDs7OztHQUlHO0FBQ0gsZUFBTyxNQUFNLHlCQUF5QixLQUFLLENBQUM7QUFDNUMsZUFBTyxNQUFNLDRCQUE0QixLQUFLLENBQUM7QUFFL0M7Ozs7Ozs7OztHQVNHO0FBQ0gsd0JBQXNCLHFCQUFxQixDQUN6QyxXQUFXLEVBQUUseUJBQXlCLEVBQ3RDLGVBQWUsRUFBRSxZQUFZLEdBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FjZjtBQW1HRDs7R0FFRztBQUNILGVBQU8sTUFBTSxvQkFBb0IsRUFBRSxVQTBCbEMsQ0FBQztBQWtDRjs7OztHQUlHO0FBQ0gsZUFBTyxNQUFNLFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQWs4QjlELENBQUM7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNILHdCQUFnQix1QkFBdUIsQ0FBQyxtQkFBbUIsR0FBRSxNQUFpQixHQUFHLG9CQUFvQixFQUFFLENBc0J0RztBQTRGRDs7O0dBR0c7QUFDSCx3QkFBZ0Isd0JBQXdCLENBQUMsTUFBTSxFQUFFLFVBQVUsR0FBRyxNQUFNLENBZW5FO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxVQUFVLEdBQUcsTUFBTSxDQW1CdkU7QUE0REQsd0JBQXNCLGtCQUFrQixDQUN0QyxNQUFNLEVBQUUsd0JBQXdCLEVBQ2hDLE1BQU0sRUFBRSxVQUFVLEVBQ2xCLGNBQWMsR0FBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssSUFBZSxHQUM5QyxPQUFPLENBQUMsY0FBYyxDQUFDLENBS3pCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opcode_spammer.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/opcode_spammer.ts"],"names":[],"mappings":"AAkKA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAA2C,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAKjF,OAAO,EAAS,KAAK,WAAW,EAAgD,MAAM,4BAA4B,CAAC;AAkDnH,OAAO,EAAE,MAAM,EAAE,MAAM,mDAAmD,CAAC;AAE3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAMjF;;GAEG;AACH,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;CACpB;AAED;;;GAGG;AACH,KAAK,SAAS,GAAG,QAAQ,GAAG,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,KAAK,EAAE,SAAS,EAAE,CAAC;IAEnB,sDAAsD;IACtD,kBAAkB,EAAE,MAAM,UAAU,EAAE,CAAC;IAEvC,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,MAAM,UAAU,EAAE,CAAC;IAEzC;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,qDAAqD;IACrD,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAMD;;;GAGG;AACH,eAAO,MAAM,cAAc,IAAsB,CAAC;AAClD,eAAO,MAAM,iBAAiB,IAA8B,CAAC;AAE7D,6FAA6F;AAC7F,eAAO,MAAM,qBAAqB,IAA0B,CAAC;AAE7D,uFAAuF;AACvF,eAAO,MAAM,iBAAiB,IAA0B,CAAC;AACzD,eAAO,MAAM,kBAAkB,IAA0B,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,yBAAyB,EACtC,eAAe,EAAE,YAAY,GAC5B,OAAO,CAAC,IAAI,CAAC,CAcf;AAmGD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,UA0BlC,CAAC;AAkCF;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"opcode_spammer.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/opcode_spammer.ts"],"names":[],"mappings":"AAkKA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAA2C,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAKjF,OAAO,EAAS,KAAK,WAAW,EAAgD,MAAM,4BAA4B,CAAC;AAkDnH,OAAO,EAAE,MAAM,EAAE,MAAM,mDAAmD,CAAC;AAE3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAMjF;;GAEG;AACH,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;CACpB;AAED;;;GAGG;AACH,KAAK,SAAS,GAAG,QAAQ,GAAG,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,KAAK,EAAE,SAAS,EAAE,CAAC;IAEnB,sDAAsD;IACtD,kBAAkB,EAAE,MAAM,UAAU,EAAE,CAAC;IAEvC,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,MAAM,UAAU,EAAE,CAAC;IAEzC;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,qDAAqD;IACrD,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAMD;;;GAGG;AACH,eAAO,MAAM,cAAc,IAAsB,CAAC;AAClD,eAAO,MAAM,iBAAiB,IAA8B,CAAC;AAE7D,6FAA6F;AAC7F,eAAO,MAAM,qBAAqB,IAA0B,CAAC;AAE7D,uFAAuF;AACvF,eAAO,MAAM,iBAAiB,IAA0B,CAAC;AACzD,eAAO,MAAM,kBAAkB,IAA0B,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,yBAAyB,EACtC,eAAe,EAAE,YAAY,GAC5B,OAAO,CAAC,IAAI,CAAC,CAcf;AAmGD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,UA0BlC,CAAC;AAkCF;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAk8B9D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,mBAAmB,GAAE,MAAiB,GAAG,oBAAoB,EAAE,CAsBtG;AA4FD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAenE;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAmBvE;AA4DD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,EAChC,MAAM,EAAE,UAAU,EAClB,cAAc,GAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAe,GAC9C,OAAO,CAAC,cAAc,CAAC,CAKzB"}
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
* - `EMITNOTEHASH`: max 64 per TX
|
|
144
144
|
* - `EMITNULLIFIER`: max 63 per TX (one reserved for TX nullifier)
|
|
145
145
|
* - `SENDL2TOL1MSG`: max 8 per TX
|
|
146
|
-
* - `
|
|
146
|
+
* - `EMITPUBLICLOG`: limited by total log payload size
|
|
147
147
|
*
|
|
148
148
|
* By having the inner contract REVERT after emitting side effects, those effects are discarded, allowing the outer contract to call it again. This enables thousands of opcode executions per TX instead of just the limit.
|
|
149
149
|
*
|
|
@@ -156,7 +156,7 @@ import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
|
156
156
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
157
157
|
import assert from 'assert';
|
|
158
158
|
import { Field, TaggedMemory, TypeTag, Uint1, Uint32, Uint64 } from '../avm/avm_memory_types.js';
|
|
159
|
-
import { Add, And, Call, CalldataCopy, Cast, DebugLog, Div, EcAdd, EmitNoteHash, EmitNullifier,
|
|
159
|
+
import { Add, And, Call, CalldataCopy, Cast, DebugLog, Div, EcAdd, EmitNoteHash, EmitNullifier, EmitPublicLog, Eq, FieldDiv, GetContractInstance, GetEnvVar, InternalCall, InternalReturn, Jump, JumpI, KeccakF1600, L1ToL2MessageExists, Lt, Lte, Mov, Mul, Not, NoteHashExists, NullifierExists, Or, Poseidon2, Return, ReturndataCopy, ReturndataSize, Revert, SLoad, SStore, SendL2ToL1Message, Set, Sha256Compression, Shl, Shr, StaticCall, Sub, SuccessCopy, ToRadixBE, Xor } from '../avm/opcodes/index.js';
|
|
160
160
|
import { encodeToBytecode } from '../avm/serialization/bytecode_serialization.js';
|
|
161
161
|
import { Opcode } from '../avm/serialization/instruction_serialization.js';
|
|
162
162
|
import { deployCustomBytecode, executeCustomBytecode } from './custom_bytecode_tester.js';
|
|
@@ -1207,8 +1207,8 @@ const STATIC_CALL_CONFIG = {
|
|
|
1207
1207
|
limit: MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
|
|
1208
1208
|
}
|
|
1209
1209
|
],
|
|
1210
|
-
//
|
|
1211
|
-
[Opcode.
|
|
1210
|
+
// EMITPUBLICLOG - two configs: minimal (many small logs) and max-size (one large log)
|
|
1211
|
+
[Opcode.EMITPUBLICLOG]: [
|
|
1212
1212
|
{
|
|
1213
1213
|
label: 'Many empty logs, revert, repeat',
|
|
1214
1214
|
setup: [
|
|
@@ -1222,7 +1222,7 @@ const STATIC_CALL_CONFIG = {
|
|
|
1222
1222
|
}
|
|
1223
1223
|
],
|
|
1224
1224
|
targetInstructions: ()=>[
|
|
1225
|
-
new
|
|
1225
|
+
new EmitPublicLog(/*addressing_mode=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 1)
|
|
1226
1226
|
],
|
|
1227
1227
|
cleanupInstructions: ()=>[
|
|
1228
1228
|
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
|
|
@@ -1244,7 +1244,7 @@ const STATIC_CALL_CONFIG = {
|
|
|
1244
1244
|
}
|
|
1245
1245
|
],
|
|
1246
1246
|
targetInstructions: ()=>[
|
|
1247
|
-
new
|
|
1247
|
+
new EmitPublicLog(/*addressing_mode=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 2)
|
|
1248
1248
|
],
|
|
1249
1249
|
cleanupInstructions: ()=>[
|
|
1250
1250
|
new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
|
|
@@ -1321,23 +1321,15 @@ const STATIC_CALL_CONFIG = {
|
|
|
1321
1321
|
},
|
|
1322
1322
|
{
|
|
1323
1323
|
offset: 2,
|
|
1324
|
-
value: new Uint1(0n)
|
|
1325
|
-
},
|
|
1326
|
-
{
|
|
1327
|
-
offset: 3,
|
|
1328
1324
|
value: new Field(Grumpkin.generator.x)
|
|
1329
1325
|
},
|
|
1330
1326
|
{
|
|
1331
|
-
offset:
|
|
1327
|
+
offset: 3,
|
|
1332
1328
|
value: new Field(Grumpkin.generator.y)
|
|
1333
|
-
},
|
|
1334
|
-
{
|
|
1335
|
-
offset: 5,
|
|
1336
|
-
value: new Uint1(0n)
|
|
1337
1329
|
}
|
|
1338
1330
|
],
|
|
1339
1331
|
targetInstructions: ()=>[
|
|
1340
|
-
new EcAdd(/*addressing_mode=*/ 0, /*p1XOffset=*/ 0, /*p1YOffset=*/ 1, /*
|
|
1332
|
+
new EcAdd(/*addressing_mode=*/ 0, /*p1XOffset=*/ 0, /*p1YOffset=*/ 1, /*p2XOffset=*/ 2, /*p2YOffset=*/ 3, /*dstOffset=*/ 0)
|
|
1341
1333
|
]
|
|
1342
1334
|
}
|
|
1343
1335
|
],
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ContractArtifact } from '@aztec/stdlib/abi';
|
|
2
2
|
import { PublicSimulatorConfig, type PublicTxResult } from '@aztec/stdlib/avm';
|
|
3
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
+
import { Gas } from '@aztec/stdlib/gas';
|
|
4
5
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
5
6
|
import { GlobalVariables, type Tx } from '@aztec/stdlib/tx';
|
|
6
7
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
@@ -36,15 +37,15 @@ export declare class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
36
37
|
constructor(merkleTree: MerkleTreeWriteOperations, contractDataSource: SimpleContractDataSource, globals?: GlobalVariables, metrics?: TestExecutorMetrics, simulatorFactory?: MeasuredSimulatorFactory, config?: PublicSimulatorConfig);
|
|
37
38
|
static create(worldStateService: NativeWorldStateService, globals?: GlobalVariables, metrics?: TestExecutorMetrics, useCppSimulator?: boolean, config?: PublicSimulatorConfig): Promise<PublicTxSimulationTester>;
|
|
38
39
|
setMetricsPrefix(prefix: string): void;
|
|
39
|
-
createTx(sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions): Promise<Tx>;
|
|
40
|
-
simulateTx(sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, txLabel?: string): Promise<PublicTxResult>;
|
|
40
|
+
createTx(sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, gasLimits?: Gas): Promise<Tx>;
|
|
41
|
+
simulateTx(sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, txLabel?: string, gasLimits?: Gas): Promise<PublicTxResult>;
|
|
41
42
|
/**
|
|
42
43
|
* Just simulate the transaction and return the result.
|
|
43
44
|
*
|
|
44
45
|
* This wrapper around simulation allows for easy labeling of a TX
|
|
45
46
|
* which is especially useful when reporting benchmarks or metrics.
|
|
46
47
|
*/
|
|
47
|
-
simulateTxWithLabel(txLabel: string, sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions): Promise<PublicTxResult>;
|
|
48
|
+
simulateTxWithLabel(txLabel: string, sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, gasLimits?: Gas): Promise<PublicTxResult>;
|
|
48
49
|
/**
|
|
49
50
|
* Execute a transaction and return the result.
|
|
50
51
|
*
|
|
@@ -52,7 +53,7 @@ export declare class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
52
53
|
* to do more work (like prove and verify) while still reusing existing
|
|
53
54
|
* test fixtures (like amm_test). That is why it is not named "simulate*".
|
|
54
55
|
*/
|
|
55
|
-
executeTxWithLabel(txLabel: string, sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions): Promise<PublicTxResult>;
|
|
56
|
+
executeTxWithLabel(txLabel: string, sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, gasLimits?: Gas): Promise<PublicTxResult>;
|
|
56
57
|
prettyPrintMetrics(): void;
|
|
57
58
|
/**
|
|
58
59
|
* Cancel the current simulation if one is in progress.
|
|
@@ -69,4 +70,4 @@ export declare class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
69
70
|
getSimulator(): MeasuredPublicTxSimulatorInterface;
|
|
70
71
|
}
|
|
71
72
|
export declare function defaultGlobals(): GlobalVariables;
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRpb25fdGVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL2ZpeHR1cmVzL3B1YmxpY190eF9zaW11bGF0aW9uX3Rlc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBbUIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRixPQUFPLEVBQUUsZUFBZSxFQUFpQyxLQUFLLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBT3hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzVELE9BQU8sS0FBSyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbEgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQTBCLE1BQU0sWUFBWSxDQUFDO0FBTWhGLE1BQU0sTUFBTSxnQkFBZ0IsR0FBRztJQUM3QixNQUFNLENBQUMsRUFBRSxZQUFZLENBQUM7SUFDdEIsT0FBTyxFQUFFLFlBQVksQ0FBQztJQUN0QixNQUFNLENB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,GAAG,EAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAiC,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AAOxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,yDAAyD,CAAC;AAClH,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,KAAK,qBAAqB,EAA0B,MAAM,YAAY,CAAC;AAMhF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAWF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,UAAU,EAAE,yBAAyB,EACrC,WAAW,EAAE,iBAAiB,EAC9B,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,qBAAqB,KAC1B,kCAAkC,CAAC;AAExC;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,uBAAuB;;IASjE,OAAO,CAAC,OAAO;IARjB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAK;IAC9B,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,aAAa,CAAC,CAAS;IAE/B,YACE,UAAU,EAAE,yBAAyB,EACrC,kBAAkB,EAAE,wBAAwB,EAC5C,OAAO,GAAE,eAAkC,EACnC,OAAO,GAAE,mBAA+C,EAChE,gBAAgB,CAAC,EAAE,wBAAwB,EAC3C,MAAM,GAAE,qBAAqC,EAU9C;IAED,OAAoB,MAAM,CACxB,iBAAiB,EAAE,uBAAuB,EAC1C,OAAO,GAAE,eAAkC,EAC3C,OAAO,GAAE,mBAA+C,EACxD,eAAe,UAAQ,EACvB,MAAM,GAAE,qBAAqC,GAC5C,OAAO,CAAC,wBAAwB,CAAC,CAOnC;IAEM,gBAAgB,CAAC,MAAM,EAAE,MAAM,QAErC;IAEY,QAAQ,CACnB,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,gBAAgB,EAAO,EACnC,QAAQ,GAAE,gBAAgB,EAAO,EACjC,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,GAAE,YAAqB,EAE/B,iBAAiB,GAAE,qBAA0F,EAC7G,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,EAAE,CAAC,CAwBb;IAEY,UAAU,CACrB,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,gBAAgB,EAAO,EACnC,QAAQ,GAAE,gBAAgB,EAAO,EACjC,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,GAAE,YAAqB,EAE/B,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,OAAO,GAAE,MAAsB,EAC/B,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,CAAC,CA8BzB;IAED;;;;;OAKG;IACU,mBAAmB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAC7B,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,CAAC,EAAE,YAAY,EACvB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,CAAC,CAWzB;IAED;;;;;;OAMG;IACU,kBAAkB,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAC7B,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,CAAC,EAAE,YAAY,EACvB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,CAAC,CAWzB;IAEM,kBAAkB,SAExB;IAED;;;;;;OAMG;IACU,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;IAED;;;OAGG;IACI,YAAY,IAAI,kCAAkC,CAExD;CAwDF;AAED,wBAAgB,cAAc,oBAM7B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
|
|
2
2
|
import { asyncMap } from '@aztec/foundation/async-map';
|
|
3
3
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
@@ -16,6 +16,8 @@ import { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
|
16
16
|
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
17
17
|
import { createTxForPublicCalls } from './utils.js';
|
|
18
18
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
19
|
+
const TEARDOWN_DA_GAS_LIMIT = 98_304;
|
|
20
|
+
const TEARDOWN_L2_GAS_LIMIT = 817_500;
|
|
19
21
|
const defaultConfig = PublicSimulatorConfig.from({
|
|
20
22
|
skipFeeEnforcement: false,
|
|
21
23
|
collectCallMetadata: true,
|
|
@@ -57,15 +59,15 @@ const defaultConfig = PublicSimulatorConfig.from({
|
|
|
57
59
|
new Fr(420000 + this.txCount)
|
|
58
60
|
]
|
|
59
61
|
}
|
|
60
|
-
}) {
|
|
62
|
+
}, gasLimits) {
|
|
61
63
|
const setupCallRequests = await asyncMap(setupCalls, (call)=>this.#createPubicCallRequestForCall(call, call.sender ?? sender));
|
|
62
64
|
const appCallRequests = await asyncMap(appCalls, (call)=>this.#createPubicCallRequestForCall(call, call.sender ?? sender));
|
|
63
65
|
const teardownCallRequest = teardownCall ? await this.#createPubicCallRequestForCall(teardownCall, teardownCall.sender ?? sender) : undefined;
|
|
64
66
|
this.txCount++;
|
|
65
|
-
return createTxForPublicCalls(privateInsertions, setupCallRequests, appCallRequests, teardownCallRequest, feePayer, /*gasUsedByPrivate*/ teardownCall ? new Gas(
|
|
67
|
+
return createTxForPublicCalls(privateInsertions, setupCallRequests, appCallRequests, teardownCallRequest, feePayer, /*gasUsedByPrivate*/ teardownCall ? new Gas(TEARDOWN_DA_GAS_LIMIT + TX_DA_GAS_OVERHEAD, TEARDOWN_L2_GAS_LIMIT + PUBLIC_TX_L2_GAS_OVERHEAD) : new Gas(TX_DA_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD), defaultGlobals(), gasLimits);
|
|
66
68
|
}
|
|
67
|
-
async simulateTx(sender, setupCalls = [], appCalls = [], teardownCall, feePayer = sender, /* need some unique first nullifier for note-nonce computations */ privateInsertions, txLabel = 'unlabeledTx') {
|
|
68
|
-
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions);
|
|
69
|
+
async simulateTx(sender, setupCalls = [], appCalls = [], teardownCall, feePayer = sender, /* need some unique first nullifier for note-nonce computations */ privateInsertions, txLabel = 'unlabeledTx', gasLimits) {
|
|
70
|
+
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits);
|
|
69
71
|
await this.setFeePayerBalance(feePayer);
|
|
70
72
|
const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
|
|
71
73
|
const fullTxLabel = this.metricsPrefix ? `${this.metricsPrefix}/${txLabelWithCount}` : txLabelWithCount;
|
|
@@ -73,6 +75,13 @@ const defaultConfig = PublicSimulatorConfig.from({
|
|
|
73
75
|
throw new Error('No simulator configured. Pass a simulatorFactory to the constructor or use PublicTxSimulationTester.create()');
|
|
74
76
|
}
|
|
75
77
|
const avmResult = await this.simulator.simulate(tx, fullTxLabel);
|
|
78
|
+
await this.#recordBytecodeSizes(fullTxLabel, [
|
|
79
|
+
...setupCalls,
|
|
80
|
+
...appCalls,
|
|
81
|
+
...teardownCall ? [
|
|
82
|
+
teardownCall
|
|
83
|
+
] : []
|
|
84
|
+
]);
|
|
76
85
|
// Something like this is often useful for debugging:
|
|
77
86
|
//if (avmResult.revertReason) {
|
|
78
87
|
// // resolve / enrich revert reason
|
|
@@ -90,8 +99,8 @@ const defaultConfig = PublicSimulatorConfig.from({
|
|
|
90
99
|
*
|
|
91
100
|
* This wrapper around simulation allows for easy labeling of a TX
|
|
92
101
|
* which is especially useful when reporting benchmarks or metrics.
|
|
93
|
-
*/ async simulateTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions) {
|
|
94
|
-
return await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, txLabel);
|
|
102
|
+
*/ async simulateTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits) {
|
|
103
|
+
return await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, txLabel, gasLimits);
|
|
95
104
|
}
|
|
96
105
|
/**
|
|
97
106
|
* Execute a transaction and return the result.
|
|
@@ -99,8 +108,8 @@ const defaultConfig = PublicSimulatorConfig.from({
|
|
|
99
108
|
* This function can be (it is) overridden by a subclass (AvmProvingTester)
|
|
100
109
|
* to do more work (like prove and verify) while still reusing existing
|
|
101
110
|
* test fixtures (like amm_test). That is why it is not named "simulate*".
|
|
102
|
-
*/ async executeTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions) {
|
|
103
|
-
return await this.simulateTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions);
|
|
111
|
+
*/ async executeTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits) {
|
|
112
|
+
return await this.simulateTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits);
|
|
104
113
|
}
|
|
105
114
|
prettyPrintMetrics() {
|
|
106
115
|
this.metrics.prettyPrint();
|
|
@@ -149,6 +158,26 @@ const defaultConfig = PublicSimulatorConfig.from({
|
|
|
149
158
|
const request = await PublicCallRequest.fromCalldata(sender, address, isStaticCall, calldata);
|
|
150
159
|
return new PublicCallRequestWithCalldata(request, calldata);
|
|
151
160
|
}
|
|
161
|
+
// WARNING: Deduplicates by artifact name, so two different artifacts with the same name
|
|
162
|
+
// in a single tx would only record the first one's bytecode size.
|
|
163
|
+
async #recordBytecodeSizes(txLabel, calls) {
|
|
164
|
+
const seenArtifactNames = new Set();
|
|
165
|
+
for (const call of calls){
|
|
166
|
+
const artifact = await this.contractDataSource.getContractArtifact(call.address);
|
|
167
|
+
if (!artifact || seenArtifactNames.has(artifact.name)) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
seenArtifactNames.add(artifact.name);
|
|
171
|
+
const instance = await this.contractDataSource.getContract(call.address);
|
|
172
|
+
if (!instance) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
const contractClass = await this.contractDataSource.getContractClass(instance.currentContractClassId);
|
|
176
|
+
if (contractClass) {
|
|
177
|
+
this.metrics.recordBytecodeSize(txLabel, artifact.name, contractClass.packedBytecode.length);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
152
181
|
}
|
|
153
182
|
export function defaultGlobals() {
|
|
154
183
|
const globals = GlobalVariables.empty();
|
|
@@ -3,9 +3,9 @@ import { Timer } from '@aztec/foundation/timer';
|
|
|
3
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
export async function tokenTest(tester, logger, tokenArtifact, expectToBeTrue, options = {}) {
|
|
5
5
|
const timer = new Timer();
|
|
6
|
-
const admin = AztecAddress.
|
|
7
|
-
const sender = AztecAddress.
|
|
8
|
-
const receiver = AztecAddress.
|
|
6
|
+
const admin = AztecAddress.fromNumberUnsafe(42);
|
|
7
|
+
const sender = AztecAddress.fromNumberUnsafe(111);
|
|
8
|
+
const receiver = AztecAddress.fromNumberUnsafe(222);
|
|
9
9
|
const token = await setUpToken(tester, tokenArtifact, admin, expectToBeTrue);
|
|
10
10
|
const mintAmount = 100n;
|
|
11
11
|
// EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
|