@aztec/pxe 0.0.1-commit.e0f15ab9b → 0.0.1-commit.e304674f1
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/block_synchronizer/block_synchronizer.d.ts +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +6 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +3 -4
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +4 -3
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +2 -3
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +2 -5
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +2 -3
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -5
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +19 -19
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +18 -22
- package/dest/contract_function_simulator/oracle/oracle.d.ts +38 -19
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +60 -39
- package/dest/contract_function_simulator/oracle/private_execution.js +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +7 -8
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +16 -7
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +30 -29
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +115 -79
- package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +9 -2
- package/dest/contract_logging.d.ts +9 -4
- package/dest/contract_logging.d.ts.map +1 -1
- package/dest/contract_logging.js +21 -6
- package/dest/contract_sync/contract_sync_service.d.ts +3 -4
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
- package/dest/contract_sync/contract_sync_service.js +12 -22
- package/dest/contract_sync/helpers.d.ts +2 -3
- package/dest/contract_sync/helpers.d.ts.map +1 -1
- package/dest/contract_sync/helpers.js +7 -2
- package/dest/debug/pxe_debug_utils.d.ts +3 -3
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.d.ts +1 -2
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +0 -1
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +2 -2
- package/dest/entrypoints/client/lazy/index.d.ts +1 -2
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +0 -1
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +2 -2
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -1
- package/dest/entrypoints/server/index.d.ts +1 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +0 -1
- package/dest/entrypoints/server/utils.d.ts +2 -2
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +2 -2
- package/dest/events/event_service.d.ts +3 -2
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +16 -4
- package/dest/logs/log_service.d.ts +6 -7
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +32 -30
- package/dest/messages/message_context_service.d.ts +3 -3
- package/dest/messages/message_context_service.d.ts.map +1 -1
- package/dest/messages/message_context_service.js +3 -3
- package/dest/notes/note_service.d.ts +4 -5
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +14 -5
- package/dest/notes_filter.d.ts +2 -3
- package/dest/notes_filter.d.ts.map +1 -1
- package/dest/oracle_version.d.ts +2 -2
- package/dest/oracle_version.js +2 -2
- package/dest/pxe.d.ts +4 -5
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +6 -4
- package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_service.js +50 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +33 -28
- package/dest/storage/capsule_store/index.d.ts +2 -1
- package/dest/storage/capsule_store/index.d.ts.map +1 -1
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +1 -1
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +2 -2
- package/package.json +16 -16
- package/src/block_synchronizer/block_synchronizer.ts +6 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +6 -6
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +0 -3
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +0 -3
- package/src/contract_function_simulator/oracle/interfaces.ts +26 -17
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +13 -50
- package/src/contract_function_simulator/oracle/oracle.ts +79 -33
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -1
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +19 -10
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +204 -91
- package/src/contract_function_simulator/pick_notes.ts +9 -2
- package/src/contract_logging.ts +18 -5
- package/src/contract_sync/contract_sync_service.ts +32 -43
- package/src/contract_sync/helpers.ts +4 -4
- package/src/debug/pxe_debug_utils.ts +3 -3
- package/src/entrypoints/client/bundle/index.ts +0 -1
- package/src/entrypoints/client/bundle/utils.ts +2 -3
- package/src/entrypoints/client/lazy/index.ts +0 -1
- package/src/entrypoints/client/lazy/utils.ts +2 -3
- package/src/entrypoints/pxe_creation_options.ts +7 -0
- package/src/entrypoints/server/index.ts +0 -1
- package/src/entrypoints/server/utils.ts +2 -3
- package/src/events/event_service.ts +17 -4
- package/src/logs/log_service.ts +63 -48
- package/src/messages/message_context_service.ts +3 -4
- package/src/notes/note_service.ts +18 -8
- package/src/notes_filter.ts +1 -3
- package/src/oracle_version.ts +2 -2
- package/src/pxe.ts +11 -10
- package/src/storage/capsule_store/capsule_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +34 -26
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +2 -5
- package/dest/access_scopes.d.ts +0 -9
- package/dest/access_scopes.d.ts.map +0 -1
- package/dest/access_scopes.js +0 -6
- package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts +0 -16
- package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts.map +0 -1
- package/dest/contract_function_simulator/noir-structs/message_tx_context.js +0 -57
- package/src/access_scopes.ts +0 -9
- package/src/contract_function_simulator/noir-structs/message_tx_context.ts +0 -55
|
@@ -27,6 +27,25 @@ export class UnavailableOracleError extends Error {
|
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* A data source that has all the apis required by Aztec.nr.
|
|
30
|
+
*
|
|
31
|
+
* ## Oracle naming conventions
|
|
32
|
+
*
|
|
33
|
+
* We try to keep oracle naming consistent, please see below the conventions we adhere to.
|
|
34
|
+
*
|
|
35
|
+
* Each oracle method name has the form `aztec_{scope}_{verb}{Object}`, where:
|
|
36
|
+
*
|
|
37
|
+
* - **Scope prefix** indicates the execution context required:
|
|
38
|
+
* - `aztec_prv_` — available only during private function execution.
|
|
39
|
+
* - `aztec_utl_` — available during both utility and private execution.
|
|
40
|
+
*
|
|
41
|
+
* - **Verb** signals the operation's semantics (verb-first, then object):
|
|
42
|
+
* - `get` — read / lookup / get data from oracle into contract.
|
|
43
|
+
* - `does`/`is`/`has` — predicate (returns boolean).
|
|
44
|
+
* - `emit`/`notify` — propagate data from contract to oracle.
|
|
45
|
+
* - `set` — contract driven oracle state mutation (capsules, execution cache, tagging, etc).
|
|
46
|
+
* - `call` — trigger nested execution (control flow).
|
|
47
|
+
* - `assert` — validate a condition, throw on failure.
|
|
48
|
+
* - Standalone verbs (`delete`, `copy`, `decrypt`, `log`, etc) are used when no generic verb fits.
|
|
30
49
|
*/
|
|
31
50
|
export class Oracle {
|
|
32
51
|
constructor(private handler: IMiscOracle | IUtilityExecutionOracle | IPrivateExecutionOracle) {}
|
|
@@ -108,14 +127,14 @@ export class Oracle {
|
|
|
108
127
|
}
|
|
109
128
|
|
|
110
129
|
// eslint-disable-next-line camelcase
|
|
111
|
-
|
|
112
|
-
this.handlerAsPrivate().
|
|
130
|
+
aztec_prv_setHashPreimage(values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
|
|
131
|
+
this.handlerAsPrivate().setHashPreimage(values.map(Fr.fromString), Fr.fromString(hash));
|
|
113
132
|
return Promise.resolve([]);
|
|
114
133
|
}
|
|
115
134
|
|
|
116
135
|
// eslint-disable-next-line camelcase
|
|
117
|
-
async
|
|
118
|
-
const values = await this.handlerAsPrivate().
|
|
136
|
+
async aztec_prv_getHashPreimage([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
|
|
137
|
+
const values = await this.handlerAsPrivate().getHashPreimage(Fr.fromString(returnsHash));
|
|
119
138
|
return [values.map(toACVMField)];
|
|
120
139
|
}
|
|
121
140
|
|
|
@@ -252,9 +271,9 @@ export class Oracle {
|
|
|
252
271
|
}
|
|
253
272
|
|
|
254
273
|
// eslint-disable-next-line camelcase
|
|
255
|
-
async
|
|
274
|
+
async aztec_utl_getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
|
|
256
275
|
const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
|
|
257
|
-
const result = await this.handlerAsUtility().
|
|
276
|
+
const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(parsedAddress);
|
|
258
277
|
|
|
259
278
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
260
279
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
@@ -380,8 +399,8 @@ export class Oracle {
|
|
|
380
399
|
}
|
|
381
400
|
|
|
382
401
|
// eslint-disable-next-line camelcase
|
|
383
|
-
async
|
|
384
|
-
const exists = await this.handlerAsUtility().
|
|
402
|
+
async aztec_utl_doesNullifierExist([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
|
|
403
|
+
const exists = await this.handlerAsUtility().doesNullifierExist(Fr.fromString(innerNullifier));
|
|
385
404
|
return [toACVMField(exists)];
|
|
386
405
|
}
|
|
387
406
|
|
|
@@ -400,13 +419,13 @@ export class Oracle {
|
|
|
400
419
|
}
|
|
401
420
|
|
|
402
421
|
// eslint-disable-next-line camelcase
|
|
403
|
-
async
|
|
422
|
+
async aztec_utl_getFromPublicStorage(
|
|
404
423
|
[blockHash]: ACVMField[],
|
|
405
424
|
[contractAddress]: ACVMField[],
|
|
406
425
|
[startStorageSlot]: ACVMField[],
|
|
407
426
|
[numberOfElements]: ACVMField[],
|
|
408
427
|
): Promise<ACVMField[][]> {
|
|
409
|
-
const values = await this.handlerAsUtility().
|
|
428
|
+
const values = await this.handlerAsUtility().getFromPublicStorage(
|
|
410
429
|
BlockHash.fromString(blockHash),
|
|
411
430
|
new AztecAddress(Fr.fromString(contractAddress)),
|
|
412
431
|
Fr.fromString(startStorageSlot),
|
|
@@ -464,8 +483,8 @@ export class Oracle {
|
|
|
464
483
|
}
|
|
465
484
|
|
|
466
485
|
// eslint-disable-next-line camelcase
|
|
467
|
-
async
|
|
468
|
-
await this.handlerAsPrivate().
|
|
486
|
+
async aztec_prv_assertValidPublicCalldata([calldataHash]: ACVMField[]): Promise<ACVMField[]> {
|
|
487
|
+
await this.handlerAsPrivate().assertValidPublicCalldata(Fr.fromString(calldataHash));
|
|
469
488
|
return [];
|
|
470
489
|
}
|
|
471
490
|
|
|
@@ -476,8 +495,10 @@ export class Oracle {
|
|
|
476
495
|
}
|
|
477
496
|
|
|
478
497
|
// eslint-disable-next-line camelcase
|
|
479
|
-
async
|
|
480
|
-
const isRevertible = await this.handlerAsPrivate().
|
|
498
|
+
async aztec_prv_isExecutionInRevertiblePhase([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
|
|
499
|
+
const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(
|
|
500
|
+
Fr.fromString(sideEffectCounter).toNumber(),
|
|
501
|
+
);
|
|
481
502
|
return Promise.resolve([toACVMField(isRevertible)]);
|
|
482
503
|
}
|
|
483
504
|
|
|
@@ -491,8 +512,14 @@ export class Oracle {
|
|
|
491
512
|
}
|
|
492
513
|
|
|
493
514
|
// eslint-disable-next-line camelcase
|
|
494
|
-
async
|
|
495
|
-
|
|
515
|
+
async aztec_utl_getPendingTaggedLogs(
|
|
516
|
+
[pendingTaggedLogArrayBaseSlot]: ACVMField[],
|
|
517
|
+
[scope]: ACVMField[],
|
|
518
|
+
): Promise<ACVMField[]> {
|
|
519
|
+
await this.handlerAsUtility().getPendingTaggedLogs(
|
|
520
|
+
Fr.fromString(pendingTaggedLogArrayBaseSlot),
|
|
521
|
+
AztecAddress.fromString(scope),
|
|
522
|
+
);
|
|
496
523
|
return [];
|
|
497
524
|
}
|
|
498
525
|
|
|
@@ -503,6 +530,7 @@ export class Oracle {
|
|
|
503
530
|
[eventValidationRequestsArrayBaseSlot]: ACVMField[],
|
|
504
531
|
[maxNotePackedLen]: ACVMField[],
|
|
505
532
|
[maxEventSerializedLen]: ACVMField[],
|
|
533
|
+
[scope]: ACVMField[],
|
|
506
534
|
): Promise<ACVMField[]> {
|
|
507
535
|
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
|
|
508
536
|
AztecAddress.fromString(contractAddress),
|
|
@@ -510,62 +538,71 @@ export class Oracle {
|
|
|
510
538
|
Fr.fromString(eventValidationRequestsArrayBaseSlot),
|
|
511
539
|
Fr.fromString(maxNotePackedLen).toNumber(),
|
|
512
540
|
Fr.fromString(maxEventSerializedLen).toNumber(),
|
|
541
|
+
AztecAddress.fromString(scope),
|
|
513
542
|
);
|
|
514
543
|
|
|
515
544
|
return [];
|
|
516
545
|
}
|
|
517
546
|
|
|
518
547
|
// eslint-disable-next-line camelcase
|
|
519
|
-
async
|
|
548
|
+
async aztec_utl_getLogsByTag(
|
|
520
549
|
[contractAddress]: ACVMField[],
|
|
521
550
|
[logRetrievalRequestsArrayBaseSlot]: ACVMField[],
|
|
522
551
|
[logRetrievalResponsesArrayBaseSlot]: ACVMField[],
|
|
552
|
+
[scope]: ACVMField[],
|
|
523
553
|
): Promise<ACVMField[]> {
|
|
524
|
-
await this.handlerAsUtility().
|
|
554
|
+
await this.handlerAsUtility().getLogsByTag(
|
|
525
555
|
AztecAddress.fromString(contractAddress),
|
|
526
556
|
Fr.fromString(logRetrievalRequestsArrayBaseSlot),
|
|
527
557
|
Fr.fromString(logRetrievalResponsesArrayBaseSlot),
|
|
558
|
+
AztecAddress.fromString(scope),
|
|
528
559
|
);
|
|
529
560
|
return [];
|
|
530
561
|
}
|
|
531
562
|
|
|
532
563
|
// eslint-disable-next-line camelcase
|
|
533
|
-
async
|
|
564
|
+
async aztec_utl_getMessageContextsByTxHash(
|
|
534
565
|
[contractAddress]: ACVMField[],
|
|
535
566
|
[messageContextRequestsArrayBaseSlot]: ACVMField[],
|
|
536
567
|
[messageContextResponsesArrayBaseSlot]: ACVMField[],
|
|
568
|
+
[scope]: ACVMField[],
|
|
537
569
|
): Promise<ACVMField[]> {
|
|
538
|
-
await this.handlerAsUtility().
|
|
570
|
+
await this.handlerAsUtility().getMessageContextsByTxHash(
|
|
539
571
|
AztecAddress.fromString(contractAddress),
|
|
540
572
|
Fr.fromString(messageContextRequestsArrayBaseSlot),
|
|
541
573
|
Fr.fromString(messageContextResponsesArrayBaseSlot),
|
|
574
|
+
AztecAddress.fromString(scope),
|
|
542
575
|
);
|
|
543
576
|
return [];
|
|
544
577
|
}
|
|
545
578
|
|
|
546
579
|
// eslint-disable-next-line camelcase
|
|
547
|
-
|
|
580
|
+
aztec_utl_setCapsule(
|
|
548
581
|
[contractAddress]: ACVMField[],
|
|
549
582
|
[slot]: ACVMField[],
|
|
550
583
|
capsule: ACVMField[],
|
|
584
|
+
[scope]: ACVMField[],
|
|
551
585
|
): Promise<ACVMField[]> {
|
|
552
|
-
|
|
586
|
+
this.handlerAsUtility().setCapsule(
|
|
553
587
|
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
554
588
|
Fr.fromString(slot),
|
|
555
589
|
capsule.map(Fr.fromString),
|
|
590
|
+
AztecAddress.fromField(Fr.fromString(scope)),
|
|
556
591
|
);
|
|
557
|
-
return [];
|
|
592
|
+
return Promise.resolve([]);
|
|
558
593
|
}
|
|
559
594
|
|
|
560
595
|
// eslint-disable-next-line camelcase
|
|
561
|
-
async
|
|
596
|
+
async aztec_utl_getCapsule(
|
|
562
597
|
[contractAddress]: ACVMField[],
|
|
563
598
|
[slot]: ACVMField[],
|
|
564
599
|
[tSize]: ACVMField[],
|
|
600
|
+
[scope]: ACVMField[],
|
|
565
601
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
566
|
-
const values = await this.handlerAsUtility().
|
|
602
|
+
const values = await this.handlerAsUtility().getCapsule(
|
|
567
603
|
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
568
604
|
Fr.fromString(slot),
|
|
605
|
+
AztecAddress.fromField(Fr.fromString(scope)),
|
|
569
606
|
);
|
|
570
607
|
|
|
571
608
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
@@ -580,12 +617,17 @@ export class Oracle {
|
|
|
580
617
|
}
|
|
581
618
|
|
|
582
619
|
// eslint-disable-next-line camelcase
|
|
583
|
-
|
|
584
|
-
|
|
620
|
+
aztec_utl_deleteCapsule(
|
|
621
|
+
[contractAddress]: ACVMField[],
|
|
622
|
+
[slot]: ACVMField[],
|
|
623
|
+
[scope]: ACVMField[],
|
|
624
|
+
): Promise<ACVMField[]> {
|
|
625
|
+
this.handlerAsUtility().deleteCapsule(
|
|
585
626
|
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
586
627
|
Fr.fromString(slot),
|
|
628
|
+
AztecAddress.fromField(Fr.fromString(scope)),
|
|
587
629
|
);
|
|
588
|
-
return [];
|
|
630
|
+
return Promise.resolve([]);
|
|
589
631
|
}
|
|
590
632
|
|
|
591
633
|
// eslint-disable-next-line camelcase
|
|
@@ -594,18 +636,20 @@ export class Oracle {
|
|
|
594
636
|
[srcSlot]: ACVMField[],
|
|
595
637
|
[dstSlot]: ACVMField[],
|
|
596
638
|
[numEntries]: ACVMField[],
|
|
639
|
+
[scope]: ACVMField[],
|
|
597
640
|
): Promise<ACVMField[]> {
|
|
598
641
|
await this.handlerAsUtility().copyCapsule(
|
|
599
642
|
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
600
643
|
Fr.fromString(srcSlot),
|
|
601
644
|
Fr.fromString(dstSlot),
|
|
602
645
|
Fr.fromString(numEntries).toNumber(),
|
|
646
|
+
AztecAddress.fromField(Fr.fromString(scope)),
|
|
603
647
|
);
|
|
604
648
|
return [];
|
|
605
649
|
}
|
|
606
650
|
|
|
607
651
|
// eslint-disable-next-line camelcase
|
|
608
|
-
async
|
|
652
|
+
async aztec_utl_decryptAes128(
|
|
609
653
|
ciphertextBVecStorage: ACVMField[],
|
|
610
654
|
[ciphertextLength]: ACVMField[],
|
|
611
655
|
iv: ACVMField[],
|
|
@@ -617,7 +661,7 @@ export class Oracle {
|
|
|
617
661
|
|
|
618
662
|
// Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
|
|
619
663
|
try {
|
|
620
|
-
const plaintext = await this.handlerAsUtility().
|
|
664
|
+
const plaintext = await this.handlerAsUtility().decryptAes128(ciphertext, ivBuffer, symKeyBuffer);
|
|
621
665
|
const [storage, length] = bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
|
|
622
666
|
return [toACVMField(1), storage, length];
|
|
623
667
|
} catch {
|
|
@@ -632,22 +676,24 @@ export class Oracle {
|
|
|
632
676
|
[ephPKField0]: ACVMField[],
|
|
633
677
|
[ephPKField1]: ACVMField[],
|
|
634
678
|
[ephPKField2]: ACVMField[],
|
|
679
|
+
[contractAddress]: ACVMField[],
|
|
635
680
|
): Promise<ACVMField[]> {
|
|
636
681
|
const secret = await this.handlerAsUtility().getSharedSecret(
|
|
637
682
|
AztecAddress.fromField(Fr.fromString(address)),
|
|
638
683
|
Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
|
|
684
|
+
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
639
685
|
);
|
|
640
|
-
return secret
|
|
686
|
+
return [toACVMField(secret)];
|
|
641
687
|
}
|
|
642
688
|
|
|
643
689
|
// eslint-disable-next-line camelcase
|
|
644
|
-
|
|
690
|
+
aztec_utl_setContractSyncCacheInvalid(
|
|
645
691
|
[contractAddress]: ACVMField[],
|
|
646
692
|
scopes: ACVMField[],
|
|
647
693
|
[scopeCount]: ACVMField[],
|
|
648
694
|
): Promise<ACVMField[]> {
|
|
649
695
|
const scopeAddresses = scopes.slice(0, +scopeCount).map(s => AztecAddress.fromField(Fr.fromString(s)));
|
|
650
|
-
this.handlerAsUtility().
|
|
696
|
+
this.handlerAsUtility().setContractSyncCacheInvalid(
|
|
651
697
|
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
652
698
|
scopeAddresses,
|
|
653
699
|
);
|
|
@@ -76,7 +76,7 @@ export async function executePrivateFunction(
|
|
|
76
76
|
|
|
77
77
|
const contractClassLogs = privateExecutionOracle.getContractClassLogs();
|
|
78
78
|
|
|
79
|
-
const rawReturnValues = await privateExecutionOracle.
|
|
79
|
+
const rawReturnValues = await privateExecutionOracle.getHashPreimage(publicInputs.returnsHash);
|
|
80
80
|
|
|
81
81
|
const newNotes = privateExecutionOracle.getNewNotes();
|
|
82
82
|
const noteHashNullifierCounterMap = privateExecutionOracle.getNoteHashNullifierCounterMap();
|
|
@@ -25,7 +25,6 @@ import {
|
|
|
25
25
|
type TxContext,
|
|
26
26
|
} from '@aztec/stdlib/tx';
|
|
27
27
|
|
|
28
|
-
import type { AccessScopes } from '../../access_scopes.js';
|
|
29
28
|
import { NoteService } from '../../notes/note_service.js';
|
|
30
29
|
import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
|
|
31
30
|
import { syncSenderTaggingIndexes } from '../../tagging/index.js';
|
|
@@ -43,7 +42,7 @@ export type PrivateExecutionOracleArgs = Omit<UtilityExecutionOracleArgs, 'contr
|
|
|
43
42
|
txContext: TxContext;
|
|
44
43
|
callContext: CallContext;
|
|
45
44
|
/** Needed to trigger contract synchronization before nested calls */
|
|
46
|
-
utilityExecutor: (call: FunctionCall, scopes:
|
|
45
|
+
utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
|
|
47
46
|
executionCache: HashedValuesCache;
|
|
48
47
|
noteCache: ExecutionNoteCache;
|
|
49
48
|
taggingIndexCache: ExecutionTaggingIndexCache;
|
|
@@ -76,7 +75,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
76
75
|
private readonly argsHash: Fr;
|
|
77
76
|
private readonly txContext: TxContext;
|
|
78
77
|
private readonly callContext: CallContext;
|
|
79
|
-
private readonly utilityExecutor: (call: FunctionCall, scopes:
|
|
78
|
+
private readonly utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
|
|
80
79
|
private readonly executionCache: HashedValuesCache;
|
|
81
80
|
private readonly noteCache: ExecutionNoteCache;
|
|
82
81
|
private readonly taggingIndexCache: ExecutionTaggingIndexCache;
|
|
@@ -210,6 +209,16 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
210
209
|
recipient,
|
|
211
210
|
);
|
|
212
211
|
|
|
212
|
+
if (!extendedSecret) {
|
|
213
|
+
// We'd only fail to compute an extended secret if the recipient is an invalid address. To prevent
|
|
214
|
+
// king-of-the-hill attacks, instead of failing we use a random tag. By including a correct-looking tag in the
|
|
215
|
+
// log, the transaction shape is preserved and no privacy is leaked, even if the tag is bogus.
|
|
216
|
+
this.logger.warn(`Computing a tag for invalid recipient ${recipient} - returning a random tag instead`, {
|
|
217
|
+
contractAddress: this.contractAddress,
|
|
218
|
+
});
|
|
219
|
+
return new Tag(Fr.random());
|
|
220
|
+
}
|
|
221
|
+
|
|
213
222
|
const index = await this.#getIndexToUseForSecret(extendedSecret);
|
|
214
223
|
this.logger.debug(
|
|
215
224
|
`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`,
|
|
@@ -265,7 +274,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
265
274
|
* @param values - Values to store.
|
|
266
275
|
* @returns The hash of the values.
|
|
267
276
|
*/
|
|
268
|
-
public
|
|
277
|
+
public setHashPreimage(values: Fr[], hash: Fr) {
|
|
269
278
|
return this.executionCache.store(values, hash);
|
|
270
279
|
}
|
|
271
280
|
|
|
@@ -274,7 +283,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
274
283
|
* @param hash - Hash of the values.
|
|
275
284
|
* @returns The values.
|
|
276
285
|
*/
|
|
277
|
-
public
|
|
286
|
+
public getHashPreimage(hash: Fr): Promise<Fr[]> {
|
|
278
287
|
const preimage = this.executionCache.getPreimage(hash);
|
|
279
288
|
if (!preimage) {
|
|
280
289
|
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
@@ -282,7 +291,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
282
291
|
return Promise.resolve(preimage);
|
|
283
292
|
}
|
|
284
293
|
|
|
285
|
-
override async
|
|
294
|
+
override async doesNullifierExist(innerNullifier: Fr): Promise<boolean> {
|
|
286
295
|
// This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
|
|
287
296
|
// in the synched block, during private execution there's also the possibility of it being pending, i.e. created
|
|
288
297
|
// in the current transaction.
|
|
@@ -295,7 +304,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
295
304
|
|
|
296
305
|
return (
|
|
297
306
|
this.noteCache.getNullifiers(this.contractAddress).has(nullifier) ||
|
|
298
|
-
(await super.
|
|
307
|
+
(await super.doesNullifierExist(innerNullifier))
|
|
299
308
|
);
|
|
300
309
|
}
|
|
301
310
|
|
|
@@ -555,7 +564,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
555
564
|
senderTaggingStore: this.senderTaggingStore,
|
|
556
565
|
recipientTaggingStore: this.recipientTaggingStore,
|
|
557
566
|
senderAddressBookStore: this.senderAddressBookStore,
|
|
558
|
-
|
|
567
|
+
capsuleService: this.capsuleService,
|
|
559
568
|
privateEventStore: this.privateEventStore,
|
|
560
569
|
messageContextService: this.messageContextService,
|
|
561
570
|
contractSyncService: this.contractSyncService,
|
|
@@ -598,7 +607,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
598
607
|
}
|
|
599
608
|
|
|
600
609
|
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
|
|
601
|
-
public
|
|
610
|
+
public assertValidPublicCalldata(calldataHash: Fr) {
|
|
602
611
|
const calldata = this.executionCache.getPreimage(calldataHash);
|
|
603
612
|
if (!calldata) {
|
|
604
613
|
throw new Error('Calldata for public call not found in cache');
|
|
@@ -615,7 +624,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
615
624
|
return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
616
625
|
}
|
|
617
626
|
|
|
618
|
-
public
|
|
627
|
+
public isExecutionInRevertiblePhase(sideEffectCounter: number): Promise<boolean> {
|
|
619
628
|
return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
|
|
620
629
|
}
|
|
621
630
|
|