@aztec/simulator 0.70.0 → 0.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/acvm/deserialize.d.ts +9 -0
- package/dest/acvm/deserialize.d.ts.map +1 -1
- package/dest/acvm/deserialize.js +12 -1
- package/dest/acvm/oracle/oracle.d.ts +5 -9
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +25 -28
- package/dest/acvm/oracle/typed_oracle.d.ts +5 -2
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +14 -5
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +9 -5
- package/dest/client/db_oracle.d.ts +43 -12
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/private_execution.js +2 -2
- package/dest/client/simulator.js +2 -2
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +5 -2
- package/dest/client/view_data_oracle.d.ts +5 -2
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +32 -11
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +15 -16
- package/dest/public/public_processor.d.ts +3 -3
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +8 -8
- package/dest/public/public_tx_simulator.d.ts +1 -1
- package/dest/public/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator.js +3 -3
- package/package.json +9 -9
- package/src/acvm/deserialize.ts +12 -0
- package/src/acvm/oracle/oracle.ts +70 -29
- package/src/acvm/oracle/typed_oracle.ts +25 -4
- package/src/avm/opcodes/memory.ts +8 -4
- package/src/client/db_oracle.ts +55 -12
- package/src/client/private_execution.ts +1 -1
- package/src/client/simulator.ts +1 -1
- package/src/client/unconstrained_execution.ts +4 -1
- package/src/client/view_data_oracle.ts +44 -14
- package/src/public/fixtures/index.ts +14 -20
- package/src/public/public_processor.ts +13 -6
- package/src/public/public_tx_simulator.ts +2 -2
|
@@ -3,7 +3,7 @@ import { NestedProcessReturnValues, TxExecutionPhase, UnencryptedFunctionL2Logs,
|
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
5
5
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
6
|
-
import { Attributes, trackSpan } from '@aztec/telemetry-client';
|
|
6
|
+
import { Attributes, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
7
7
|
import { strict as assert } from 'assert';
|
|
8
8
|
import { AvmSimulator } from '../avm/index.js';
|
|
9
9
|
import { NullifierCollisionError } from '../avm/journal/nullifiers.js';
|
|
@@ -17,7 +17,7 @@ let PublicTxSimulator = (() => {
|
|
|
17
17
|
let _simulateEnqueuedCall_decorators;
|
|
18
18
|
let _simulateEnqueuedCallInternal_decorators;
|
|
19
19
|
return _a = class PublicTxSimulator {
|
|
20
|
-
constructor(db, worldStateDB,
|
|
20
|
+
constructor(db, worldStateDB, globalVariables, doMerkleOperations = false, enforceFeePayment = true, telemetryClient = getTelemetryClient()) {
|
|
21
21
|
this.db = (__runInitializers(this, _instanceExtraInitializers), db);
|
|
22
22
|
this.worldStateDB = worldStateDB;
|
|
23
23
|
this.globalVariables = globalVariables;
|
|
@@ -333,4 +333,4 @@ let PublicTxSimulator = (() => {
|
|
|
333
333
|
_a;
|
|
334
334
|
})();
|
|
335
335
|
export { PublicTxSimulator };
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3R4X3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUlMLHlCQUF5QixFQUl6QixnQkFBZ0IsRUFDaEIseUJBQXlCLEdBQzFCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFxQyxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRyxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUcxQyxPQUFPLEVBQW1DLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7SUFvQjVDLGlCQUFpQjs7Ozs7c0JBQWpCLGlCQUFpQjtZQUs1QixZQUNVLEVBQTRCLEVBQzVCLFlBQTBCLEVBQ2xDLGVBQWdDLEVBQ3hCLGVBQWdDLEVBQ2hDLHFCQUE4QixLQUFLLEVBQ25DLG9CQUE2QixJQUFJO2dCQUxqQyxPQUFFLElBTkQsbURBQWlCLEVBTWxCLEVBQUUsRUFBMEI7Z0JBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFj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
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3R4X3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUlMLHlCQUF5QixFQUl6QixnQkFBZ0IsRUFDaEIseUJBQXlCLEdBQzFCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFxQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2SCxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUcxQyxPQUFPLEVBQW1DLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7SUFvQjVDLGlCQUFpQjs7Ozs7c0JBQWpCLGlCQUFpQjtZQUs1QixZQUNVLEVBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGVBQWdDLEVBQ2hDLHFCQUE4QixLQUFLLEVBQ25DLG9CQUE2QixJQUFJLEVBQ3pDLGtCQUFtQyxrQkFBa0IsRUFBRTtnQkFML0MsT0FBRSxJQU5ELG1EQUFpQixFQU1sQixFQUFFLEVBQTBCO2dC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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.71.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./common": "./dest/common.js",
|
|
@@ -60,14 +60,14 @@
|
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@aztec/circuit-types": "0.
|
|
64
|
-
"@aztec/circuits.js": "0.
|
|
65
|
-
"@aztec/foundation": "0.
|
|
66
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
67
|
-
"@aztec/protocol-contracts": "0.
|
|
68
|
-
"@aztec/telemetry-client": "0.
|
|
69
|
-
"@aztec/types": "0.
|
|
70
|
-
"@aztec/world-state": "0.
|
|
63
|
+
"@aztec/circuit-types": "0.71.0",
|
|
64
|
+
"@aztec/circuits.js": "0.71.0",
|
|
65
|
+
"@aztec/foundation": "0.71.0",
|
|
66
|
+
"@aztec/noir-protocol-circuits-types": "0.71.0",
|
|
67
|
+
"@aztec/protocol-contracts": "0.71.0",
|
|
68
|
+
"@aztec/telemetry-client": "0.71.0",
|
|
69
|
+
"@aztec/types": "0.71.0",
|
|
70
|
+
"@aztec/world-state": "0.71.0",
|
|
71
71
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
72
72
|
"@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
|
|
73
73
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
package/src/acvm/deserialize.ts
CHANGED
|
@@ -29,6 +29,18 @@ export function frToBoolean(fr: Fr): boolean {
|
|
|
29
29
|
return fr.toBigInt() === BigInt(1);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Converts a Noir BoundedVec of Fields into an Fr array. Note that BoundedVecs are structs, and therefore translated as
|
|
34
|
+
* two separate ACVMField arrays.
|
|
35
|
+
*
|
|
36
|
+
* @param storage The array with the BoundedVec's storage (i.e. BoundedVec::storage())
|
|
37
|
+
* @param length The length of the BoundedVec (i.e. BoundedVec::len())
|
|
38
|
+
* @returns An array with the same content as the Noir version. Elements past the length are discarded.
|
|
39
|
+
*/
|
|
40
|
+
export function fromBoundedVec(storage: ACVMField[], length: ACVMField): Fr[] {
|
|
41
|
+
return storage.slice(0, frToNumber(fromACVMField(length))).map(fromACVMField);
|
|
42
|
+
}
|
|
43
|
+
|
|
32
44
|
/**
|
|
33
45
|
* Transforms a witness map to its field elements.
|
|
34
46
|
* @param witness - The witness to extract from.
|
|
@@ -2,15 +2,12 @@ import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
|
2
2
|
import { FunctionSelector, NoteSelector } from '@aztec/foundation/abi';
|
|
3
3
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
6
5
|
|
|
7
6
|
import { type ACVMField } from '../acvm_types.js';
|
|
8
|
-
import { frToBoolean, frToNumber, fromACVMField } from '../deserialize.js';
|
|
7
|
+
import { frToBoolean, frToNumber, fromACVMField, fromBoundedVec } from '../deserialize.js';
|
|
9
8
|
import { toACVMField } from '../serialize.js';
|
|
10
9
|
import { type TypedOracle } from './typed_oracle.js';
|
|
11
10
|
|
|
12
|
-
const logger = createLogger('simulator:acvm:oracle');
|
|
13
|
-
|
|
14
11
|
/**
|
|
15
12
|
* A data source that has all the apis required by Aztec.nr.
|
|
16
13
|
*/
|
|
@@ -384,34 +381,78 @@ export class Oracle {
|
|
|
384
381
|
await this.typedOracle.syncNotes();
|
|
385
382
|
}
|
|
386
383
|
|
|
387
|
-
async
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
384
|
+
async deliverNote(
|
|
385
|
+
[contractAddress]: ACVMField[],
|
|
386
|
+
[storageSlot]: ACVMField[],
|
|
387
|
+
[nonce]: ACVMField[],
|
|
388
|
+
content: ACVMField[],
|
|
389
|
+
[contentLength]: ACVMField[],
|
|
390
|
+
[noteHash]: ACVMField[],
|
|
391
|
+
[nullifier]: ACVMField[],
|
|
392
|
+
[txHash]: ACVMField[],
|
|
393
|
+
[recipient]: ACVMField[],
|
|
394
|
+
): Promise<ACVMField> {
|
|
395
|
+
// TODO(#10728): try-catch this block and return false if we get an exception so that the contract can decide what
|
|
396
|
+
// to do if a note fails delivery (e.g. not increment the tagging index, or add it to some pending work list).
|
|
397
|
+
// Delivery might fail due to temporary issues, such as poor node connectivity.
|
|
398
|
+
await this.typedOracle.deliverNote(
|
|
399
|
+
AztecAddress.fromString(contractAddress),
|
|
400
|
+
fromACVMField(storageSlot),
|
|
401
|
+
fromACVMField(nonce),
|
|
402
|
+
fromBoundedVec(content, contentLength),
|
|
403
|
+
fromACVMField(noteHash),
|
|
404
|
+
fromACVMField(nullifier),
|
|
405
|
+
fromACVMField(txHash),
|
|
406
|
+
AztecAddress.fromString(recipient),
|
|
407
|
+
);
|
|
408
|
+
|
|
409
|
+
return toACVMField(true);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
async dbStore([contractAddress]: ACVMField[], [slot]: ACVMField[], values: ACVMField[]) {
|
|
413
|
+
await this.typedOracle.dbStore(
|
|
414
|
+
AztecAddress.fromField(fromACVMField(contractAddress)),
|
|
415
|
+
fromACVMField(slot),
|
|
416
|
+
values.map(fromACVMField),
|
|
417
|
+
);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
async dbLoad(
|
|
421
|
+
[contractAddress]: ACVMField[],
|
|
422
|
+
[slot]: ACVMField[],
|
|
423
|
+
[tSize]: ACVMField[],
|
|
424
|
+
): Promise<(ACVMField | ACVMField[])[]> {
|
|
425
|
+
const values = await this.typedOracle.dbLoad(
|
|
426
|
+
AztecAddress.fromField(fromACVMField(contractAddress)),
|
|
427
|
+
fromACVMField(slot),
|
|
428
|
+
);
|
|
429
|
+
|
|
430
|
+
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
431
|
+
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
406
432
|
if (values === null) {
|
|
407
|
-
// No data was found so we set
|
|
408
|
-
|
|
409
|
-
logger.debug(`No data found for key ${processedKey} in contract ${processedContract}`);
|
|
410
|
-
return [toACVMField(0), Array(processedTSize).fill(toACVMField(0))];
|
|
433
|
+
// No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
|
|
434
|
+
return [toACVMField(0), Array(frToNumber(fromACVMField(tSize))).fill(toACVMField(0))];
|
|
411
435
|
} else {
|
|
412
|
-
// Data was found so we set
|
|
413
|
-
logger.debug(`Returning data for key ${processedKey} in contract ${processedContract}. Data: [${values}]`);
|
|
436
|
+
// Data was found so we set `some` to 1 and return it along with `value`.
|
|
414
437
|
return [toACVMField(1), values.map(toACVMField)];
|
|
415
438
|
}
|
|
416
439
|
}
|
|
440
|
+
|
|
441
|
+
async dbDelete([contractAddress]: ACVMField[], [slot]: ACVMField[]) {
|
|
442
|
+
await this.typedOracle.dbDelete(AztecAddress.fromField(fromACVMField(contractAddress)), fromACVMField(slot));
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
async dbCopy(
|
|
446
|
+
[contractAddress]: ACVMField[],
|
|
447
|
+
[srcSlot]: ACVMField[],
|
|
448
|
+
[dstSlot]: ACVMField[],
|
|
449
|
+
[numEntries]: ACVMField[],
|
|
450
|
+
) {
|
|
451
|
+
await this.typedOracle.dbCopy(
|
|
452
|
+
AztecAddress.fromField(fromACVMField(contractAddress)),
|
|
453
|
+
fromACVMField(srcSlot),
|
|
454
|
+
fromACVMField(dstSlot),
|
|
455
|
+
frToNumber(fromACVMField(numEntries)),
|
|
456
|
+
);
|
|
457
|
+
}
|
|
417
458
|
}
|
|
@@ -237,11 +237,32 @@ export abstract class TypedOracle {
|
|
|
237
237
|
throw new OracleMethodNotAvailableError('syncNotes');
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
-
|
|
241
|
-
|
|
240
|
+
deliverNote(
|
|
241
|
+
_contractAddress: AztecAddress,
|
|
242
|
+
_storageSlot: Fr,
|
|
243
|
+
_nonce: Fr,
|
|
244
|
+
_content: Fr[],
|
|
245
|
+
_noteHash: Fr,
|
|
246
|
+
_nullifier: Fr,
|
|
247
|
+
_txHash: Fr,
|
|
248
|
+
_recipient: AztecAddress,
|
|
249
|
+
): Promise<void> {
|
|
250
|
+
throw new OracleMethodNotAvailableError('deliverNote');
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
dbStore(_contractAddress: AztecAddress, _key: Fr, _values: Fr[]): Promise<void> {
|
|
254
|
+
throw new OracleMethodNotAvailableError('dbStore');
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
dbLoad(_contractAddress: AztecAddress, _key: Fr): Promise<Fr[] | null> {
|
|
258
|
+
throw new OracleMethodNotAvailableError('dbLoad');
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
dbDelete(_contractAddress: AztecAddress, _key: Fr): Promise<void> {
|
|
262
|
+
throw new OracleMethodNotAvailableError('dbDelete');
|
|
242
263
|
}
|
|
243
264
|
|
|
244
|
-
|
|
245
|
-
throw new OracleMethodNotAvailableError('
|
|
265
|
+
dbCopy(_contractAddress: AztecAddress, _srcKey: Fr, _dstKey: Fr, _numEntries: number): Promise<void> {
|
|
266
|
+
throw new OracleMethodNotAvailableError('dbCopy');
|
|
246
267
|
}
|
|
247
268
|
}
|
|
@@ -190,7 +190,10 @@ export class CalldataCopy extends Instruction {
|
|
|
190
190
|
const copySize = memory.get(copySizeOffset).toNumber();
|
|
191
191
|
context.machineState.consumeGas(this.gasCost(copySize));
|
|
192
192
|
|
|
193
|
-
|
|
193
|
+
// Values which are out-of-range of the calldata array will be set with Field(0);
|
|
194
|
+
const slice = context.environment.calldata.slice(cdStart, cdStart + copySize).map(f => new Field(f));
|
|
195
|
+
// slice has size = MIN(copySize, calldata.length - cdStart) as TS truncates out-of-range portion
|
|
196
|
+
const transformedData = [...slice, ...Array(copySize - slice.length).fill(new Field(0))];
|
|
194
197
|
|
|
195
198
|
memory.setSlice(dstOffset, transformedData);
|
|
196
199
|
|
|
@@ -253,9 +256,10 @@ export class ReturndataCopy extends Instruction {
|
|
|
253
256
|
const copySize = memory.get(copySizeOffset).toNumber();
|
|
254
257
|
context.machineState.consumeGas(this.gasCost(copySize));
|
|
255
258
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
+
// Values which are out-of-range of the returndata array will be set with Field(0);
|
|
260
|
+
const slice = context.machineState.nestedReturndata.slice(rdStart, rdStart + copySize).map(f => new Field(f));
|
|
261
|
+
// slice has size = MIN(copySize, returndata.length - rdStart) as TS truncates out-of-range portion
|
|
262
|
+
const transformedData = [...slice, ...Array(copySize - slice.length).fill(new Field(0))];
|
|
259
263
|
|
|
260
264
|
memory.setSlice(dstOffset, transformedData);
|
|
261
265
|
|
package/src/client/db_oracle.ts
CHANGED
|
@@ -233,26 +233,69 @@ export interface DBOracle extends CommitmentsDB {
|
|
|
233
233
|
*/
|
|
234
234
|
processTaggedLogs(logs: TxScopedL2Log[], recipient: AztecAddress): Promise<void>;
|
|
235
235
|
|
|
236
|
+
/**
|
|
237
|
+
* Delivers the preimage and metadata of a committed note so that it can be later requested via the `getNotes`
|
|
238
|
+
* oracle.
|
|
239
|
+
*
|
|
240
|
+
* @param contractAddress - The address of the contract that created the note (i.e. the siloing contract)
|
|
241
|
+
* @param storageSlot - The storage slot of the note - used for indexing in `getNotes`
|
|
242
|
+
* @param nonce - The nonce of the note used by the kernel to compute the unique note hash
|
|
243
|
+
* @param content - The note's content: this is the primary item to return in `getNotes`
|
|
244
|
+
* @param noteHash - The non-unique non-siloed note hash
|
|
245
|
+
* @param nullifier - The inner (non-siloed) note nullifier
|
|
246
|
+
* @param txHash - The transaction in which the note was added to the note hash tree
|
|
247
|
+
* @param recipient - The account that discovered the note
|
|
248
|
+
*/
|
|
249
|
+
deliverNote(
|
|
250
|
+
contractAddress: AztecAddress,
|
|
251
|
+
storageSlot: Fr,
|
|
252
|
+
nonce: Fr,
|
|
253
|
+
content: Fr[],
|
|
254
|
+
noteHash: Fr,
|
|
255
|
+
nullifier: Fr,
|
|
256
|
+
txHash: Fr,
|
|
257
|
+
recipient: AztecAddress,
|
|
258
|
+
): Promise<void>;
|
|
259
|
+
|
|
236
260
|
/**
|
|
237
261
|
* Removes all of a contract's notes that have been nullified from the note database.
|
|
238
262
|
*/
|
|
239
263
|
removeNullifiedNotes(contractAddress: AztecAddress): Promise<void>;
|
|
240
264
|
|
|
241
265
|
/**
|
|
242
|
-
*
|
|
243
|
-
*
|
|
244
|
-
* @param
|
|
245
|
-
* @param
|
|
246
|
-
* @param values -
|
|
266
|
+
* Stores arbitrary information in a per-contract non-volatile database, which can later be retrieved with `dbLoad`.
|
|
267
|
+
* * If data was already stored at this slot, it is overwrriten.
|
|
268
|
+
* @param contractAddress - The contract address to scope the data under.
|
|
269
|
+
* @param slot - The slot in the database in which to store the value. Slots need not be contiguous.
|
|
270
|
+
* @param values - The data to store.
|
|
247
271
|
*/
|
|
248
|
-
|
|
272
|
+
dbStore(contractAddress: AztecAddress, slot: Fr, values: Fr[]): Promise<void>;
|
|
249
273
|
|
|
250
274
|
/**
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
* @param
|
|
254
|
-
* @
|
|
255
|
-
|
|
275
|
+
* Returns data previously stored via `dbStore` in the per-contract non-volatile database.
|
|
276
|
+
* @param contractAddress - The contract address under which the data is scoped.
|
|
277
|
+
* @param slot - The slot in the database to read.
|
|
278
|
+
* @returns The stored data or `null` if no data is stored under the slot.
|
|
279
|
+
*/
|
|
280
|
+
dbLoad(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null>;
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Deletes data in the per-contract non-volatile database. Does nothing if no data was present.
|
|
284
|
+
* @param contractAddress - The contract address under which the data is scoped.
|
|
285
|
+
* @param slot - The slot in the database to delete.
|
|
286
|
+
*/
|
|
287
|
+
dbDelete(contractAddress: AztecAddress, slot: Fr): Promise<void>;
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Copies a number of contiguous entries in the per-contract non-volatile database. This allows for efficient data
|
|
291
|
+
* structures by avoiding repeated calls to `dbLoad` and `dbStore`.
|
|
292
|
+
* Supports overlapping source and destination regions (which will result in the overlapped source values being
|
|
293
|
+
* overwritten). All copied slots must exist in the database (i.e. have been stored and not deleted)
|
|
294
|
+
*
|
|
295
|
+
* @param contractAddress - The contract address under which the data is scoped.
|
|
296
|
+
* @param srcSlot - The first slot to copy from.
|
|
297
|
+
* @param dstSlot - The first slot to copy to.
|
|
298
|
+
* @param numEntries - The number of entries to copy.
|
|
256
299
|
*/
|
|
257
|
-
|
|
300
|
+
dbCopy(contractAddress: AztecAddress, srcSlot: Fr, dstSlot: Fr, numEntries: number): Promise<void>;
|
|
258
301
|
}
|
|
@@ -29,7 +29,7 @@ export async function executePrivateFunction(
|
|
|
29
29
|
log = createLogger('simulator:private_execution'),
|
|
30
30
|
): Promise<PrivateCallExecutionResult> {
|
|
31
31
|
const functionName = await context.getDebugFunctionName();
|
|
32
|
-
log.verbose(`Executing private function ${functionName}
|
|
32
|
+
log.verbose(`Executing private function ${functionName}`, { contract: contractAddress });
|
|
33
33
|
const acir = artifact.bytecode;
|
|
34
34
|
const initialWitness = context.getInitialWitness(artifact);
|
|
35
35
|
const acvmCallback = new Oracle(context);
|
package/src/client/simulator.ts
CHANGED
|
@@ -192,7 +192,7 @@ export class AcirSimulator {
|
|
|
192
192
|
const execRequest: FunctionCall = {
|
|
193
193
|
name: artifact.name,
|
|
194
194
|
to: contractAddress,
|
|
195
|
-
selector: FunctionSelector.
|
|
195
|
+
selector: FunctionSelector.fromNameAndParameters(artifact),
|
|
196
196
|
type: FunctionType.UNCONSTRAINED,
|
|
197
197
|
isStatic: artifact.isStatic,
|
|
198
198
|
args: encodeArguments(artifact, [
|
|
@@ -22,7 +22,10 @@ export async function executeUnconstrainedFunction(
|
|
|
22
22
|
args: Fr[],
|
|
23
23
|
log = createLogger('simulator:unconstrained_execution'),
|
|
24
24
|
): Promise<AbiDecoded> {
|
|
25
|
-
log.verbose(`Executing unconstrained function ${
|
|
25
|
+
log.verbose(`Executing unconstrained function ${artifact.name}`, {
|
|
26
|
+
contract: contractAddress,
|
|
27
|
+
selector: functionSelector,
|
|
28
|
+
});
|
|
26
29
|
|
|
27
30
|
const acir = artifact.bytecode;
|
|
28
31
|
const initialWitness = toACVMWitness(0, args);
|
|
@@ -310,23 +310,53 @@ export class ViewDataOracle extends TypedOracle {
|
|
|
310
310
|
await this.db.removeNullifiedNotes(this.contractAddress);
|
|
311
311
|
}
|
|
312
312
|
|
|
313
|
-
public override
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
313
|
+
public override async deliverNote(
|
|
314
|
+
contractAddress: AztecAddress,
|
|
315
|
+
storageSlot: Fr,
|
|
316
|
+
nonce: Fr,
|
|
317
|
+
content: Fr[],
|
|
318
|
+
noteHash: Fr,
|
|
319
|
+
nullifier: Fr,
|
|
320
|
+
txHash: Fr,
|
|
321
|
+
recipient: AztecAddress,
|
|
322
|
+
) {
|
|
323
|
+
// TODO(#10727): allow other contracts to deliver notes
|
|
324
|
+
if (!this.contractAddress.equals(contractAddress)) {
|
|
325
|
+
throw new Error(`Got a note delivery request from ${contractAddress}, expected ${this.contractAddress}`);
|
|
319
326
|
}
|
|
320
|
-
|
|
327
|
+
|
|
328
|
+
await this.db.deliverNote(contractAddress, storageSlot, nonce, content, noteHash, nullifier, txHash, recipient);
|
|
321
329
|
}
|
|
322
330
|
|
|
323
|
-
public override
|
|
324
|
-
if (!
|
|
325
|
-
// TODO(#10727): instead of this check
|
|
326
|
-
throw new Error(
|
|
327
|
-
|
|
328
|
-
|
|
331
|
+
public override dbStore(contractAddress: AztecAddress, slot: Fr, values: Fr[]): Promise<void> {
|
|
332
|
+
if (!contractAddress.equals(this.contractAddress)) {
|
|
333
|
+
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
334
|
+
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
335
|
+
}
|
|
336
|
+
return this.db.dbStore(this.contractAddress, slot, values);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
public override dbLoad(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null> {
|
|
340
|
+
if (!contractAddress.equals(this.contractAddress)) {
|
|
341
|
+
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
342
|
+
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
343
|
+
}
|
|
344
|
+
return this.db.dbLoad(this.contractAddress, slot);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
public override dbDelete(contractAddress: AztecAddress, slot: Fr): Promise<void> {
|
|
348
|
+
if (!contractAddress.equals(this.contractAddress)) {
|
|
349
|
+
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
350
|
+
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
351
|
+
}
|
|
352
|
+
return this.db.dbDelete(this.contractAddress, slot);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
public override dbCopy(contractAddress: AztecAddress, srcSlot: Fr, dstSlot: Fr, numEntries: number): Promise<void> {
|
|
356
|
+
if (!contractAddress.equals(this.contractAddress)) {
|
|
357
|
+
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
358
|
+
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
329
359
|
}
|
|
330
|
-
return this.db.
|
|
360
|
+
return this.db.dbCopy(this.contractAddress, srcSlot, dstSlot, numEntries);
|
|
331
361
|
}
|
|
332
362
|
}
|
|
@@ -32,7 +32,6 @@ import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
|
32
32
|
import { Fr, Point } from '@aztec/foundation/fields';
|
|
33
33
|
import { openTmpStore } from '@aztec/kv-store/lmdb';
|
|
34
34
|
import { AvmTestContractArtifact } from '@aztec/noir-contracts.js/AvmTest';
|
|
35
|
-
import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
|
|
36
35
|
import { MerkleTrees } from '@aztec/world-state';
|
|
37
36
|
|
|
38
37
|
import { strict as assert } from 'assert';
|
|
@@ -59,17 +58,11 @@ export async function simulateAvmTestContractGenerateCircuitInputs(
|
|
|
59
58
|
const globals = GlobalVariables.empty();
|
|
60
59
|
globals.timestamp = TIMESTAMP;
|
|
61
60
|
|
|
62
|
-
const merkleTrees = await (await MerkleTrees.new(openTmpStore()
|
|
61
|
+
const merkleTrees = await (await MerkleTrees.new(openTmpStore())).fork();
|
|
63
62
|
await contractDataSource.deployContracts(merkleTrees);
|
|
64
63
|
const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
|
|
65
64
|
|
|
66
|
-
const simulator = new PublicTxSimulator(
|
|
67
|
-
merkleTrees,
|
|
68
|
-
worldStateDB,
|
|
69
|
-
new NoopTelemetryClient(),
|
|
70
|
-
globals,
|
|
71
|
-
/*doMerkleOperations=*/ true,
|
|
72
|
-
);
|
|
65
|
+
const simulator = new PublicTxSimulator(merkleTrees, worldStateDB, globals, /*doMerkleOperations=*/ true);
|
|
73
66
|
|
|
74
67
|
const sender = AztecAddress.random();
|
|
75
68
|
const callContext = new CallContext(
|
|
@@ -79,16 +72,14 @@ export async function simulateAvmTestContractGenerateCircuitInputs(
|
|
|
79
72
|
/*isStaticCall=*/ false,
|
|
80
73
|
);
|
|
81
74
|
const setupExecutionRequests: PublicExecutionRequest[] = [];
|
|
82
|
-
|
|
83
|
-
for (let i = setupFunctionNames.length - 1; i >= 0; i--) {
|
|
75
|
+
for (let i = 0; i < setupFunctionNames.length; i++) {
|
|
84
76
|
const functionSelector = getAvmTestContractFunctionSelector(setupFunctionNames[i]);
|
|
85
77
|
const fnArgs = [functionSelector.toField(), ...setupArgs[i]];
|
|
86
78
|
const executionRequest = new PublicExecutionRequest(callContext, fnArgs);
|
|
87
79
|
setupExecutionRequests.push(executionRequest);
|
|
88
80
|
}
|
|
89
81
|
const appExecutionRequests: PublicExecutionRequest[] = [];
|
|
90
|
-
|
|
91
|
-
for (let i = appFunctionNames.length - 1; i >= 0; i--) {
|
|
82
|
+
for (let i = 0; i < appFunctionNames.length; i++) {
|
|
92
83
|
const functionSelector = getAvmTestContractFunctionSelector(appFunctionNames[i]);
|
|
93
84
|
const fnArgs = [functionSelector.toField(), ...appArgs[i]];
|
|
94
85
|
const executionRequest = new PublicExecutionRequest(callContext, fnArgs);
|
|
@@ -130,7 +121,7 @@ export async function simulateAvmTestContractCall(
|
|
|
130
121
|
const globals = GlobalVariables.empty();
|
|
131
122
|
globals.timestamp = TIMESTAMP;
|
|
132
123
|
|
|
133
|
-
const merkleTrees = await (await MerkleTrees.new(openTmpStore()
|
|
124
|
+
const merkleTrees = await (await MerkleTrees.new(openTmpStore())).fork();
|
|
134
125
|
await contractDataSource.deployContracts(merkleTrees);
|
|
135
126
|
const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
|
|
136
127
|
|
|
@@ -183,10 +174,11 @@ export function createTxForPublicCalls(
|
|
|
183
174
|
// TODO(#9269): Remove this fake nullifier method as we move away from 1st nullifier as hash.
|
|
184
175
|
forPublic.nonRevertibleAccumulatedData.nullifiers[0] = Fr.random(); // fake tx nullifier
|
|
185
176
|
|
|
186
|
-
|
|
177
|
+
// We reverse order because the simulator expects it to be like a "stack" of calls to pop from
|
|
178
|
+
for (let i = setupCallRequests.length - 1; i >= 0; i--) {
|
|
187
179
|
forPublic.nonRevertibleAccumulatedData.publicCallRequests[i] = setupCallRequests[i];
|
|
188
180
|
}
|
|
189
|
-
for (let i =
|
|
181
|
+
for (let i = appCallRequests.length - 1; i >= 0; i--) {
|
|
190
182
|
forPublic.revertibleAccumulatedData.publicCallRequests[i] = appCallRequests[i];
|
|
191
183
|
}
|
|
192
184
|
if (teardownExecutionRequest) {
|
|
@@ -207,12 +199,14 @@ export function createTxForPublicCalls(
|
|
|
207
199
|
);
|
|
208
200
|
const tx = Tx.newWithTxData(txData, teardownExecutionRequest);
|
|
209
201
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
for (let i = 0; i < appExecutionRequests.length; i++) {
|
|
202
|
+
// Reverse order because the simulator expects it to be like a "stack" of calls to pop from.
|
|
203
|
+
// Also push app calls before setup calls for this reason.
|
|
204
|
+
for (let i = appExecutionRequests.length - 1; i >= 0; i--) {
|
|
214
205
|
tx.enqueuedPublicFunctionCalls.push(appExecutionRequests[i]);
|
|
215
206
|
}
|
|
207
|
+
for (let i = setupExecutionRequests.length - 1; i >= 0; i--) {
|
|
208
|
+
tx.enqueuedPublicFunctionCalls.push(setupExecutionRequests[i]);
|
|
209
|
+
}
|
|
216
210
|
|
|
217
211
|
return tx;
|
|
218
212
|
}
|