@aztec/pxe 0.0.1-commit.29c6b1a3 → 0.0.1-commit.2c85e299c
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/access_scopes.d.ts +9 -0
- package/dest/access_scopes.d.ts.map +1 -0
- package/dest/access_scopes.js +6 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +5 -3
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +9 -3
- package/dest/config/index.d.ts +2 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +1 -1
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +54 -30
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +177 -73
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -5
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -3
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +2 -2
- 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 +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +49 -45
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.d.ts +44 -44
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +156 -101
- package/dest/contract_function_simulator/oracle/private_execution.js +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +55 -55
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +101 -56
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +77 -51
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +116 -94
- package/dest/contract_logging.d.ts +22 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +23 -0
- package/dest/contract_sync/contract_sync_service.d.ts +43 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +97 -0
- package/dest/contract_sync/helpers.d.ts +29 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/{index.js → helpers.js} +13 -12
- package/dest/debug/pxe_debug_utils.d.ts +14 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +16 -15
- package/dest/entrypoints/client/bundle/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +21 -7
- package/dest/entrypoints/client/lazy/index.d.ts +4 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -0
- 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 +22 -8
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +4 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +3 -1
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +28 -9
- package/dest/events/event_service.d.ts +4 -5
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +5 -6
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +7 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +19 -29
- package/dest/notes/note_service.d.ts +7 -7
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +9 -9
- package/dest/notes_filter.d.ts +25 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +3 -3
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +21 -13
- package/dest/private_kernel/private_kernel_oracle.d.ts +6 -2
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +7 -3
- package/dest/pxe.d.ts +71 -24
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +104 -66
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
- package/dest/storage/capsule_store/capsule_store.js +6 -8
- package/dest/storage/contract_store/contract_store.d.ts +42 -15
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +157 -72
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +13 -3
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +147 -107
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +84 -61
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +5 -5
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +184 -114
- package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +17 -3
- package/dest/tagging/index.d.ts +2 -2
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +7 -7
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +3 -6
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +4 -7
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +14 -15
- package/package.json +25 -16
- package/src/access_scopes.ts +9 -0
- package/src/block_synchronizer/block_synchronizer.ts +21 -12
- package/src/config/index.ts +1 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +326 -131
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -5
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
- package/src/contract_function_simulator/oracle/interfaces.ts +53 -50
- package/src/contract_function_simulator/oracle/oracle.ts +157 -112
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -1
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +127 -137
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +167 -105
- package/src/contract_logging.ts +39 -0
- package/src/contract_sync/contract_sync_service.ts +152 -0
- package/src/contract_sync/{index.ts → helpers.ts} +21 -21
- package/src/debug/pxe_debug_utils.ts +48 -18
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +16 -15
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +17 -15
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +3 -1
- package/src/entrypoints/server/utils.ts +22 -26
- package/src/events/event_service.ts +4 -6
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +31 -38
- package/src/notes/note_service.ts +9 -10
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +3 -3
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +25 -15
- package/src/private_kernel/private_kernel_oracle.ts +7 -7
- package/src/pxe.ts +197 -118
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
- package/src/storage/capsule_store/capsule_store.ts +8 -8
- package/src/storage/contract_store/contract_store.ts +186 -76
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +169 -132
- package/src/storage/private_event_store/private_event_store.ts +102 -81
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +38 -24
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +214 -130
- package/src/tagging/get_all_logs_by_tags.ts +28 -4
- package/src/tagging/index.ts +1 -1
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +7 -10
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +4 -9
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +11 -20
- package/dest/contract_sync/index.d.ts +0 -23
- package/dest/contract_sync/index.d.ts.map +0 -1
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
|
@@ -3,29 +3,30 @@ import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
|
3
3
|
import { Aes128 } from '@aztec/foundation/crypto/aes128';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { Point } from '@aztec/foundation/curves/grumpkin';
|
|
6
|
-
import { LogLevels,
|
|
6
|
+
import { LogLevels, type Logger, createLogger } from '@aztec/foundation/log';
|
|
7
7
|
import type { MembershipWitness } from '@aztec/foundation/trees';
|
|
8
8
|
import type { KeyStore } from '@aztec/key-store';
|
|
9
9
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
10
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
11
11
|
import { BlockHash } from '@aztec/stdlib/block';
|
|
12
|
-
import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract';
|
|
12
|
+
import type { CompleteAddress, ContractInstance, PartialAddress } from '@aztec/stdlib/contract';
|
|
13
13
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
14
14
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
15
15
|
import type { KeyValidationRequest } from '@aztec/stdlib/kernel';
|
|
16
|
-
import { computeAddressSecret } from '@aztec/stdlib/keys';
|
|
16
|
+
import { type PublicKeys, computeAddressSecret } from '@aztec/stdlib/keys';
|
|
17
17
|
import { deriveEcdhSharedSecret } from '@aztec/stdlib/logs';
|
|
18
18
|
import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
|
|
19
19
|
import type { NoteStatus } from '@aztec/stdlib/note';
|
|
20
20
|
import { MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
21
21
|
import type { BlockHeader, Capsule } from '@aztec/stdlib/tx';
|
|
22
22
|
|
|
23
|
+
import type { AccessScopes } from '../../access_scopes.js';
|
|
24
|
+
import { createContractLogger, logContractMessage } from '../../contract_logging.js';
|
|
23
25
|
import { EventService } from '../../events/event_service.js';
|
|
24
26
|
import { LogService } from '../../logs/log_service.js';
|
|
25
27
|
import { NoteService } from '../../notes/note_service.js';
|
|
26
28
|
import { ORACLE_VERSION } from '../../oracle_version.js';
|
|
27
29
|
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
28
|
-
import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
|
|
29
30
|
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
30
31
|
import type { ContractStore } from '../../storage/contract_store/contract_store.js';
|
|
31
32
|
import type { NoteStore } from '../../storage/note_store/note_store.js';
|
|
@@ -41,6 +42,27 @@ import { pickNotes } from '../pick_notes.js';
|
|
|
41
42
|
import type { IMiscOracle, IUtilityExecutionOracle, NoteData } from './interfaces.js';
|
|
42
43
|
import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
43
44
|
|
|
45
|
+
/** Args for UtilityExecutionOracle constructor. */
|
|
46
|
+
export type UtilityExecutionOracleArgs = {
|
|
47
|
+
contractAddress: AztecAddress;
|
|
48
|
+
/** List of transient auth witnesses to be used during this simulation */
|
|
49
|
+
authWitnesses: AuthWitness[];
|
|
50
|
+
capsules: Capsule[]; // TODO(#12425): Rename to transientCapsules
|
|
51
|
+
anchorBlockHeader: BlockHeader;
|
|
52
|
+
contractStore: ContractStore;
|
|
53
|
+
noteStore: NoteStore;
|
|
54
|
+
keyStore: KeyStore;
|
|
55
|
+
addressStore: AddressStore;
|
|
56
|
+
aztecNode: AztecNode;
|
|
57
|
+
recipientTaggingStore: RecipientTaggingStore;
|
|
58
|
+
senderAddressBookStore: SenderAddressBookStore;
|
|
59
|
+
capsuleStore: CapsuleStore;
|
|
60
|
+
privateEventStore: PrivateEventStore;
|
|
61
|
+
jobId: string;
|
|
62
|
+
log?: ReturnType<typeof createLogger>;
|
|
63
|
+
scopes: AccessScopes;
|
|
64
|
+
};
|
|
65
|
+
|
|
44
66
|
/**
|
|
45
67
|
* The oracle for an execution of utility contract functions.
|
|
46
68
|
*/
|
|
@@ -48,40 +70,55 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
48
70
|
isMisc = true as const;
|
|
49
71
|
isUtility = true as const;
|
|
50
72
|
|
|
51
|
-
private
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
private contractLogger: Logger | undefined;
|
|
74
|
+
|
|
75
|
+
protected readonly contractAddress: AztecAddress;
|
|
76
|
+
protected readonly authWitnesses: AuthWitness[];
|
|
77
|
+
protected readonly capsules: Capsule[];
|
|
78
|
+
protected readonly anchorBlockHeader: BlockHeader;
|
|
79
|
+
protected readonly contractStore: ContractStore;
|
|
80
|
+
protected readonly noteStore: NoteStore;
|
|
81
|
+
protected readonly keyStore: KeyStore;
|
|
82
|
+
protected readonly addressStore: AddressStore;
|
|
83
|
+
protected readonly aztecNode: AztecNode;
|
|
84
|
+
protected readonly recipientTaggingStore: RecipientTaggingStore;
|
|
85
|
+
protected readonly senderAddressBookStore: SenderAddressBookStore;
|
|
86
|
+
protected readonly capsuleStore: CapsuleStore;
|
|
87
|
+
protected readonly privateEventStore: PrivateEventStore;
|
|
88
|
+
protected readonly jobId: string;
|
|
89
|
+
protected logger: ReturnType<typeof createLogger>;
|
|
90
|
+
protected readonly scopes: AccessScopes;
|
|
91
|
+
|
|
92
|
+
constructor(args: UtilityExecutionOracleArgs) {
|
|
93
|
+
this.contractAddress = args.contractAddress;
|
|
94
|
+
this.authWitnesses = args.authWitnesses;
|
|
95
|
+
this.capsules = args.capsules;
|
|
96
|
+
this.anchorBlockHeader = args.anchorBlockHeader;
|
|
97
|
+
this.contractStore = args.contractStore;
|
|
98
|
+
this.noteStore = args.noteStore;
|
|
99
|
+
this.keyStore = args.keyStore;
|
|
100
|
+
this.addressStore = args.addressStore;
|
|
101
|
+
this.aztecNode = args.aztecNode;
|
|
102
|
+
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
103
|
+
this.senderAddressBookStore = args.senderAddressBookStore;
|
|
104
|
+
this.capsuleStore = args.capsuleStore;
|
|
105
|
+
this.privateEventStore = args.privateEventStore;
|
|
106
|
+
this.jobId = args.jobId;
|
|
107
|
+
this.logger = args.log ?? createLogger('simulator:client_view_context');
|
|
108
|
+
this.scopes = args.scopes;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public assertCompatibleOracleVersion(version: number): void {
|
|
75
112
|
if (version !== ORACLE_VERSION) {
|
|
76
113
|
throw new Error(`Incompatible oracle version. Expected version ${ORACLE_VERSION}, got ${version}.`);
|
|
77
114
|
}
|
|
78
115
|
}
|
|
79
116
|
|
|
80
|
-
public
|
|
117
|
+
public getRandomField(): Fr {
|
|
81
118
|
return Fr.random();
|
|
82
119
|
}
|
|
83
120
|
|
|
84
|
-
public
|
|
121
|
+
public getUtilityContext(): UtilityContext {
|
|
85
122
|
return new UtilityContext(this.anchorBlockHeader, this.contractAddress);
|
|
86
123
|
}
|
|
87
124
|
|
|
@@ -90,35 +127,54 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
90
127
|
* @param pkMHash - The master public key hash.
|
|
91
128
|
* @returns A Promise that resolves to nullifier keys.
|
|
92
129
|
* @throws If the keys are not registered in the key store.
|
|
130
|
+
* @throws If scopes are defined and the account is not in the scopes.
|
|
93
131
|
*/
|
|
94
|
-
public
|
|
132
|
+
public async getKeyValidationRequest(pkMHash: Fr): Promise<KeyValidationRequest> {
|
|
133
|
+
// If scopes are defined, check that the key belongs to an account in the scopes.
|
|
134
|
+
if (this.scopes !== 'ALL_SCOPES' && this.scopes.length > 0) {
|
|
135
|
+
let hasAccess = false;
|
|
136
|
+
for (let i = 0; i < this.scopes.length && !hasAccess; i++) {
|
|
137
|
+
if (await this.keyStore.accountHasKey(this.scopes[i], pkMHash)) {
|
|
138
|
+
hasAccess = true;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (!hasAccess) {
|
|
142
|
+
throw new Error(`Key validation request denied: no scoped account has a key with hash ${pkMHash.toString()}.`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
95
145
|
return this.keyStore.getKeyValidationRequest(pkMHash, this.contractAddress);
|
|
96
146
|
}
|
|
97
147
|
|
|
98
148
|
/**
|
|
99
149
|
* Fetches the index and sibling path of a leaf at a given block from the note hash tree.
|
|
100
|
-
* @param
|
|
101
|
-
*
|
|
150
|
+
* @param anchorBlockHash - The hash of a block that contains the note hash tree root in which to find the membership
|
|
151
|
+
* witness.
|
|
152
|
+
* @param noteHash - The note hash to find in the note hash tree.
|
|
102
153
|
* @returns The membership witness containing the leaf index and sibling path
|
|
103
154
|
*/
|
|
104
|
-
public
|
|
105
|
-
|
|
106
|
-
|
|
155
|
+
public getNoteHashMembershipWitness(
|
|
156
|
+
anchorBlockHash: BlockHash,
|
|
157
|
+
noteHash: Fr,
|
|
107
158
|
): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
|
|
108
|
-
return this.aztecNode.getNoteHashMembershipWitness(
|
|
159
|
+
return this.aztecNode.getNoteHashMembershipWitness(anchorBlockHash, noteHash);
|
|
109
160
|
}
|
|
110
161
|
|
|
111
162
|
/**
|
|
112
|
-
* Fetches the index and sibling path of a
|
|
113
|
-
*
|
|
114
|
-
*
|
|
163
|
+
* Fetches the index and sibling path of a block hash in the archive tree.
|
|
164
|
+
*
|
|
165
|
+
* Block hashes are the leaves of the archive tree. Each time a new block is added to the chain,
|
|
166
|
+
* its block hash is appended as a new leaf to the archive tree.
|
|
167
|
+
*
|
|
168
|
+
* @param anchorBlockHash - The hash of a block that contains the archive tree root in which to find the membership
|
|
169
|
+
* witness.
|
|
170
|
+
* @param blockHash - The block hash to find in the archive tree.
|
|
115
171
|
* @returns The membership witness containing the leaf index and sibling path
|
|
116
172
|
*/
|
|
117
|
-
public
|
|
173
|
+
public getBlockHashMembershipWitness(
|
|
174
|
+
anchorBlockHash: BlockHash,
|
|
118
175
|
blockHash: BlockHash,
|
|
119
|
-
leafValue: Fr,
|
|
120
176
|
): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
|
|
121
|
-
return this.aztecNode.
|
|
177
|
+
return this.aztecNode.getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
122
178
|
}
|
|
123
179
|
|
|
124
180
|
/**
|
|
@@ -127,7 +183,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
127
183
|
* @param nullifier - Nullifier we try to find witness for.
|
|
128
184
|
* @returns The nullifier membership witness (if found).
|
|
129
185
|
*/
|
|
130
|
-
public
|
|
186
|
+
public getNullifierMembershipWitness(
|
|
131
187
|
blockHash: BlockHash,
|
|
132
188
|
nullifier: Fr,
|
|
133
189
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
@@ -143,7 +199,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
143
199
|
* list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
|
|
144
200
|
* we are trying to prove non-inclusion for.
|
|
145
201
|
*/
|
|
146
|
-
public
|
|
202
|
+
public getLowNullifierMembershipWitness(
|
|
147
203
|
blockHash: BlockHash,
|
|
148
204
|
nullifier: Fr,
|
|
149
205
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
@@ -156,7 +212,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
156
212
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
157
213
|
* @returns - The witness
|
|
158
214
|
*/
|
|
159
|
-
public
|
|
215
|
+
public getPublicDataWitness(blockHash: BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
|
|
160
216
|
return this.aztecNode.getPublicDataWitness(blockHash, leafSlot);
|
|
161
217
|
}
|
|
162
218
|
|
|
@@ -165,8 +221,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
165
221
|
* @param blockNumber - The number of a block of which to get the block header.
|
|
166
222
|
* @returns Block extracted from a block with block number `blockNumber`.
|
|
167
223
|
*/
|
|
168
|
-
public async
|
|
169
|
-
const anchorBlockNumber =
|
|
224
|
+
public async getBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined> {
|
|
225
|
+
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
170
226
|
if (blockNumber > anchorBlockNumber) {
|
|
171
227
|
throw new Error(`Block number ${blockNumber} is higher than current block ${anchorBlockNumber}`);
|
|
172
228
|
}
|
|
@@ -176,16 +232,21 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
176
232
|
}
|
|
177
233
|
|
|
178
234
|
/**
|
|
179
|
-
* Retrieve the
|
|
235
|
+
* Retrieve the public keys and partial address associated to a given address.
|
|
180
236
|
* @param account - The account address.
|
|
181
|
-
* @returns
|
|
182
|
-
* @throws An error if the account is not registered in the database.
|
|
237
|
+
* @returns The public keys and partial address, or `undefined` if the account is not registered.
|
|
183
238
|
*/
|
|
184
|
-
public
|
|
185
|
-
|
|
239
|
+
public async tryGetPublicKeysAndPartialAddress(
|
|
240
|
+
account: AztecAddress,
|
|
241
|
+
): Promise<{ publicKeys: PublicKeys; partialAddress: PartialAddress } | undefined> {
|
|
242
|
+
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
243
|
+
if (!completeAddress) {
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
return { publicKeys: completeAddress.publicKeys, partialAddress: completeAddress.partialAddress };
|
|
186
247
|
}
|
|
187
248
|
|
|
188
|
-
protected async
|
|
249
|
+
protected async getCompleteAddressOrFail(account: AztecAddress): Promise<CompleteAddress> {
|
|
189
250
|
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
190
251
|
if (!completeAddress) {
|
|
191
252
|
throw new Error(
|
|
@@ -201,11 +262,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
201
262
|
* @param address - Address.
|
|
202
263
|
* @returns A contract instance.
|
|
203
264
|
*/
|
|
204
|
-
public
|
|
205
|
-
return this.getContractInstance(address);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
protected async getContractInstance(address: AztecAddress): Promise<ContractInstance> {
|
|
265
|
+
public async getContractInstance(address: AztecAddress): Promise<ContractInstance> {
|
|
209
266
|
const instance = await this.contractStore.getContractInstance(address);
|
|
210
267
|
if (!instance) {
|
|
211
268
|
throw new Error(`No contract instance found for address ${address.toString()}`);
|
|
@@ -219,7 +276,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
219
276
|
* @param messageHash - Hash of the message to authenticate.
|
|
220
277
|
* @returns Authentication witness for the requested message hash.
|
|
221
278
|
*/
|
|
222
|
-
public
|
|
279
|
+
public getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined> {
|
|
223
280
|
return Promise.resolve(this.authWitnesses.find(w => w.requestHash.equals(messageHash))?.witness);
|
|
224
281
|
}
|
|
225
282
|
|
|
@@ -245,7 +302,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
245
302
|
* @param status - The status of notes to fetch.
|
|
246
303
|
* @returns Array of note data.
|
|
247
304
|
*/
|
|
248
|
-
public async
|
|
305
|
+
public async getNotes(
|
|
249
306
|
owner: AztecAddress | undefined,
|
|
250
307
|
storageSlot: Fr,
|
|
251
308
|
numSelects: number,
|
|
@@ -262,7 +319,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
262
319
|
offset: number,
|
|
263
320
|
status: NoteStatus,
|
|
264
321
|
): Promise<NoteData[]> {
|
|
265
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
322
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
266
323
|
|
|
267
324
|
const dbNotes = await noteService.getNotes(this.contractAddress, owner, storageSlot, status, this.scopes);
|
|
268
325
|
return pickNotes<NoteData>(dbNotes, {
|
|
@@ -285,9 +342,14 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
285
342
|
* @param innerNullifier - The inner nullifier.
|
|
286
343
|
* @returns A boolean indicating whether the nullifier exists in the tree or not.
|
|
287
344
|
*/
|
|
288
|
-
public async
|
|
289
|
-
const nullifier = await
|
|
290
|
-
|
|
345
|
+
public async checkNullifierExists(innerNullifier: Fr) {
|
|
346
|
+
const [nullifier, anchorBlockHash] = await Promise.all([
|
|
347
|
+
siloNullifier(this.contractAddress, innerNullifier!),
|
|
348
|
+
this.anchorBlockHeader.hash(),
|
|
349
|
+
]);
|
|
350
|
+
const [leafIndex] = await this.aztecNode.findLeavesIndexes(anchorBlockHash, MerkleTreeId.NULLIFIER_TREE, [
|
|
351
|
+
nullifier,
|
|
352
|
+
]);
|
|
291
353
|
return leafIndex?.data !== undefined;
|
|
292
354
|
}
|
|
293
355
|
|
|
@@ -299,7 +361,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
299
361
|
* @dev Contract address and secret are only used to compute the nullifier to get non-nullified messages
|
|
300
362
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
301
363
|
*/
|
|
302
|
-
public async
|
|
364
|
+
public async getL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr) {
|
|
303
365
|
const [messageIndex, siblingPath] = await getNonNullifiedL1ToL2MessageWitness(
|
|
304
366
|
this.aztecNode,
|
|
305
367
|
contractAddress,
|
|
@@ -317,7 +379,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
317
379
|
* @param startStorageSlot - The starting storage slot.
|
|
318
380
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
319
381
|
*/
|
|
320
|
-
public async
|
|
382
|
+
public async storageRead(
|
|
321
383
|
blockHash: BlockHash,
|
|
322
384
|
contractAddress: AztecAddress,
|
|
323
385
|
startStorageSlot: Fr,
|
|
@@ -331,43 +393,51 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
331
393
|
slots.map(storageSlot => this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot)),
|
|
332
394
|
);
|
|
333
395
|
|
|
334
|
-
this.
|
|
396
|
+
this.logger.debug(
|
|
335
397
|
`Oracle storage read: slots=[${slots.map(slot => slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`,
|
|
336
398
|
);
|
|
337
399
|
|
|
338
400
|
return values;
|
|
339
401
|
}
|
|
340
402
|
|
|
341
|
-
|
|
403
|
+
/**
|
|
404
|
+
* Returns a per-contract logger whose output is prefixed with `contract_log::<name>(<addrAbbrev>)`.
|
|
405
|
+
*/
|
|
406
|
+
async #getContractLogger(): Promise<Logger> {
|
|
407
|
+
if (!this.contractLogger) {
|
|
408
|
+
// Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
|
|
409
|
+
// to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
|
|
410
|
+
this.contractLogger = await createContractLogger(
|
|
411
|
+
this.contractAddress,
|
|
412
|
+
addr => this.contractStore.getDebugContractName(addr),
|
|
413
|
+
{ instanceId: this.jobId },
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
return this.contractLogger;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
public async log(level: number, message: string, fields: Fr[]): Promise<void> {
|
|
342
420
|
if (!LogLevels[level]) {
|
|
343
|
-
throw new Error(`Invalid
|
|
421
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
344
422
|
}
|
|
345
|
-
const
|
|
346
|
-
|
|
423
|
+
const logger = await this.#getContractLogger();
|
|
424
|
+
logContractMessage(logger, LogLevels[level], message, fields);
|
|
347
425
|
}
|
|
348
426
|
|
|
349
|
-
public async
|
|
427
|
+
public async fetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr) {
|
|
350
428
|
const logService = new LogService(
|
|
351
429
|
this.aztecNode,
|
|
352
|
-
this.
|
|
430
|
+
this.anchorBlockHeader,
|
|
353
431
|
this.keyStore,
|
|
354
432
|
this.capsuleStore,
|
|
355
433
|
this.recipientTaggingStore,
|
|
356
434
|
this.senderAddressBookStore,
|
|
357
435
|
this.addressStore,
|
|
358
436
|
this.jobId,
|
|
437
|
+
this.logger.getBindings(),
|
|
359
438
|
);
|
|
360
439
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
// It is acceptable to run the following operations in parallel for several reasons:
|
|
364
|
-
// 1. syncTaggedLogs does not write to the note store — it only stores the pending tagged logs in a capsule array,
|
|
365
|
-
// which is then processed in Noir after this handler returns.
|
|
366
|
-
// 2. Even if syncTaggedLogs did write to the note store, it would not cause inconsistent state.
|
|
367
|
-
await Promise.all([
|
|
368
|
-
logService.syncTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes),
|
|
369
|
-
noteService.syncNoteNullifiers(this.contractAddress),
|
|
370
|
-
]);
|
|
440
|
+
await logService.fetchTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
|
|
371
441
|
}
|
|
372
442
|
|
|
373
443
|
/**
|
|
@@ -380,7 +450,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
380
450
|
* @param noteValidationRequestsArrayBaseSlot - The base slot of capsule array containing note validation requests.
|
|
381
451
|
* @param eventValidationRequestsArrayBaseSlot - The base slot of capsule array containing event validation requests.
|
|
382
452
|
*/
|
|
383
|
-
public async
|
|
453
|
+
public async validateAndStoreEnqueuedNotesAndEvents(
|
|
384
454
|
contractAddress: AztecAddress,
|
|
385
455
|
noteValidationRequestsArrayBaseSlot: Fr,
|
|
386
456
|
eventValidationRequestsArrayBaseSlot: Fr,
|
|
@@ -400,7 +470,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
400
470
|
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)
|
|
401
471
|
).map(EventValidationRequest.fromFields);
|
|
402
472
|
|
|
403
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
473
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
404
474
|
const noteStorePromises = noteValidationRequests.map(request =>
|
|
405
475
|
noteService.validateAndStoreNote(
|
|
406
476
|
request.contractAddress,
|
|
@@ -416,7 +486,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
416
486
|
),
|
|
417
487
|
);
|
|
418
488
|
|
|
419
|
-
const eventService = new EventService(this.
|
|
489
|
+
const eventService = new EventService(this.anchorBlockHeader, this.aztecNode, this.privateEventStore, this.jobId);
|
|
420
490
|
const eventStorePromises = eventValidationRequests.map(request =>
|
|
421
491
|
eventService.validateAndStoreEvent(
|
|
422
492
|
request.contractAddress,
|
|
@@ -436,7 +506,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
436
506
|
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
437
507
|
}
|
|
438
508
|
|
|
439
|
-
public async
|
|
509
|
+
public async bulkRetrieveLogs(
|
|
440
510
|
contractAddress: AztecAddress,
|
|
441
511
|
logRetrievalRequestsArrayBaseSlot: Fr,
|
|
442
512
|
logRetrievalResponsesArrayBaseSlot: Fr,
|
|
@@ -454,13 +524,14 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
454
524
|
|
|
455
525
|
const logService = new LogService(
|
|
456
526
|
this.aztecNode,
|
|
457
|
-
this.
|
|
527
|
+
this.anchorBlockHeader,
|
|
458
528
|
this.keyStore,
|
|
459
529
|
this.capsuleStore,
|
|
460
530
|
this.recipientTaggingStore,
|
|
461
531
|
this.senderAddressBookStore,
|
|
462
532
|
this.addressStore,
|
|
463
533
|
this.jobId,
|
|
534
|
+
this.logger.getBindings(),
|
|
464
535
|
);
|
|
465
536
|
|
|
466
537
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|
|
@@ -477,7 +548,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
477
548
|
);
|
|
478
549
|
}
|
|
479
550
|
|
|
480
|
-
public
|
|
551
|
+
public storeCapsule(contractAddress: AztecAddress, slot: Fr, capsule: Fr[]): Promise<void> {
|
|
481
552
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
482
553
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
483
554
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
@@ -486,7 +557,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
486
557
|
return Promise.resolve();
|
|
487
558
|
}
|
|
488
559
|
|
|
489
|
-
public async
|
|
560
|
+
public async loadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null> {
|
|
490
561
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
491
562
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
492
563
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
@@ -498,7 +569,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
498
569
|
);
|
|
499
570
|
}
|
|
500
571
|
|
|
501
|
-
public
|
|
572
|
+
public deleteCapsule(contractAddress: AztecAddress, slot: Fr): Promise<void> {
|
|
502
573
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
503
574
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
504
575
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
@@ -507,12 +578,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
507
578
|
return Promise.resolve();
|
|
508
579
|
}
|
|
509
580
|
|
|
510
|
-
public
|
|
511
|
-
contractAddress: AztecAddress,
|
|
512
|
-
srcSlot: Fr,
|
|
513
|
-
dstSlot: Fr,
|
|
514
|
-
numEntries: number,
|
|
515
|
-
): Promise<void> {
|
|
581
|
+
public copyCapsule(contractAddress: AztecAddress, srcSlot: Fr, dstSlot: Fr, numEntries: number): Promise<void> {
|
|
516
582
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
517
583
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
518
584
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
@@ -521,7 +587,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
521
587
|
}
|
|
522
588
|
|
|
523
589
|
// TODO(#11849): consider replacing this oracle with a pure Noir implementation of aes decryption.
|
|
524
|
-
public
|
|
590
|
+
public aes128Decrypt(ciphertext: Buffer, iv: Buffer, symKey: Buffer): Promise<Buffer> {
|
|
525
591
|
const aes128 = new Aes128();
|
|
526
592
|
return aes128.decryptBufferCBC(ciphertext, iv, symKey);
|
|
527
593
|
}
|
|
@@ -532,13 +598,9 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
532
598
|
* @param ephPk - The ephemeral public key to get the secret for.
|
|
533
599
|
* @returns The secret for the given address.
|
|
534
600
|
*/
|
|
535
|
-
public
|
|
536
|
-
return this.getSharedSecret(address, ephPk);
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
protected async getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point> {
|
|
601
|
+
public async getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point> {
|
|
540
602
|
// TODO(#12656): return an app-siloed secret
|
|
541
|
-
const recipientCompleteAddress = await this.
|
|
603
|
+
const recipientCompleteAddress = await this.getCompleteAddressOrFail(address);
|
|
542
604
|
const ivskM = await this.keyStore.getMasterSecretKey(
|
|
543
605
|
recipientCompleteAddress.publicKeys.masterIncomingViewingPublicKey,
|
|
544
606
|
);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { type LogLevel, type Logger, applyStringFormatting, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
+
import type { DebugLog } from '@aztec/stdlib/logs';
|
|
5
|
+
|
|
6
|
+
/** Resolves a contract address to a human-readable name, if available. */
|
|
7
|
+
export type ContractNameResolver = (address: AztecAddress) => Promise<string | undefined>;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Creates a logger whose output is prefixed with `contract_log::<name>(<addrAbbrev>)`.
|
|
11
|
+
*/
|
|
12
|
+
export async function createContractLogger(
|
|
13
|
+
contractAddress: AztecAddress,
|
|
14
|
+
getContractName: ContractNameResolver,
|
|
15
|
+
options?: { instanceId?: string },
|
|
16
|
+
): Promise<Logger> {
|
|
17
|
+
const addrAbbrev = contractAddress.toString().slice(0, 10);
|
|
18
|
+
const name = await getContractName(contractAddress);
|
|
19
|
+
const module = name ? `contract_log::${name}(${addrAbbrev})` : `contract_log::Unknown(${addrAbbrev})`;
|
|
20
|
+
return createLogger(module, options);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Formats and emits a single contract log message through the given logger.
|
|
25
|
+
*/
|
|
26
|
+
export function logContractMessage(logger: Logger, level: LogLevel, message: string, fields: Fr[]): void {
|
|
27
|
+
logger[level](applyStringFormatting(message, fields));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Displays debug logs collected during public function simulation,
|
|
32
|
+
* using the `contract_log::` prefixed logger format.
|
|
33
|
+
*/
|
|
34
|
+
export async function displayDebugLogs(debugLogs: DebugLog[], getContractName: ContractNameResolver): Promise<void> {
|
|
35
|
+
for (const log of debugLogs) {
|
|
36
|
+
const logger = await createContractLogger(log.contractAddress, getContractName);
|
|
37
|
+
logContractMessage(logger, log.level, log.message, log.fields);
|
|
38
|
+
}
|
|
39
|
+
}
|