@aztec/pxe 0.0.1-commit.88e6f9396 → 0.0.1-commit.8c0b8ff
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/bin/check_oracle_version.js +4 -4
- 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/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 +6 -4
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +11 -6
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -4
- 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 +3 -6
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -4
- 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 +3 -6
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +31 -20
- 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 +28 -23
- package/dest/contract_function_simulator/oracle/oracle.d.ts +50 -20
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +157 -41
- 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 +19 -9
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +56 -39
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +202 -93
- 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 +14 -3
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
- 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 +37 -35
- 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 +2 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +1 -2
- 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/events/private_event_filter_validator.d.ts +3 -2
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +15 -0
- package/dest/logs/log_service.d.ts +7 -8
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +27 -37
- 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 +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +4 -7
- package/dest/pxe.d.ts +6 -7
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +17 -12
- package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
- 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 +36 -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/contract_store/contract_store.d.ts +1 -1
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +4 -2
- 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/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +2 -2
- 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 +1 -15
- package/package.json +16 -16
- package/src/bin/check_oracle_version.ts +4 -4
- package/src/block_synchronizer/block_synchronizer.ts +6 -0
- package/src/config/index.ts +1 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +14 -9
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -4
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -4
- package/src/contract_function_simulator/oracle/interfaces.ts +46 -18
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +20 -51
- package/src/contract_function_simulator/oracle/oracle.ts +222 -36
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -1
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +21 -11
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +342 -120
- package/src/contract_function_simulator/pick_notes.ts +14 -3
- package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
- package/src/contract_logging.ts +18 -5
- package/src/contract_sync/contract_sync_service.ts +64 -69
- 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 +1 -2
- package/src/entrypoints/server/utils.ts +2 -3
- package/src/events/event_service.ts +17 -4
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/logs/log_service.ts +57 -78
- 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 +20 -10
- package/src/private_kernel/private_kernel_execution_prover.ts +4 -9
- package/src/pxe.ts +24 -16
- package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
- package/src/storage/capsule_store/capsule_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +44 -26
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +8 -6
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +2 -5
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +2 -14
- 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
|
@@ -6,6 +6,7 @@ import { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
|
|
|
6
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
7
|
import { BlockHash } from '@aztec/stdlib/block';
|
|
8
8
|
import { ContractClassLog, ContractClassLogFields } from '@aztec/stdlib/logs';
|
|
9
|
+
import { ORACLE_VERSION_MAJOR, ORACLE_VERSION_MINOR } from '../../oracle_version.js';
|
|
9
10
|
import { buildLegacyOracleCallbacks } from './legacy_oracle_mappings.js';
|
|
10
11
|
import { packAsHintedNote } from './note_packing_utils.js';
|
|
11
12
|
export class UnavailableOracleError extends Error {
|
|
@@ -15,6 +16,25 @@ export class UnavailableOracleError extends Error {
|
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
18
|
* A data source that has all the apis required by Aztec.nr.
|
|
19
|
+
*
|
|
20
|
+
* ## Oracle naming conventions
|
|
21
|
+
*
|
|
22
|
+
* We try to keep oracle naming consistent, please see below the conventions we adhere to.
|
|
23
|
+
*
|
|
24
|
+
* Each oracle method name has the form `aztec_{scope}_{verb}{Object}`, where:
|
|
25
|
+
*
|
|
26
|
+
* - **Scope prefix** indicates the execution context required:
|
|
27
|
+
* - `aztec_prv_` — available only during private function execution.
|
|
28
|
+
* - `aztec_utl_` — available during both utility and private execution.
|
|
29
|
+
*
|
|
30
|
+
* - **Verb** signals the operation's semantics (verb-first, then object):
|
|
31
|
+
* - `get` — read / lookup / get data from oracle into contract.
|
|
32
|
+
* - `does`/`is`/`has` — predicate (returns boolean).
|
|
33
|
+
* - `emit`/`notify` — propagate data from contract to oracle.
|
|
34
|
+
* - `set` — contract driven oracle state mutation (capsules, execution cache, tagging, etc).
|
|
35
|
+
* - `call` — trigger nested execution (control flow).
|
|
36
|
+
* - `assert` — validate a condition, throw on failure.
|
|
37
|
+
* - Standalone verbs (`delete`, `copy`, `decrypt`, `log`, etc) are used when no generic verb fits.
|
|
18
38
|
*/ export class Oracle {
|
|
19
39
|
handler;
|
|
20
40
|
constructor(handler){
|
|
@@ -66,14 +86,39 @@ export class UnavailableOracleError extends Error {
|
|
|
66
86
|
acc[name] = method.bind(this);
|
|
67
87
|
return acc;
|
|
68
88
|
}, {});
|
|
69
|
-
|
|
89
|
+
const allCallbacks = {
|
|
70
90
|
...callback,
|
|
71
91
|
...buildLegacyOracleCallbacks(this)
|
|
72
92
|
};
|
|
93
|
+
// Wrap in a Proxy to intercept access to missing oracle names and provide enhanced error messages when the
|
|
94
|
+
// contract's minor version is higher than the PXE's (i.e. the contract expects oracles that were added in a newer
|
|
95
|
+
// minor version).
|
|
96
|
+
const handler = this.handler;
|
|
97
|
+
return new Proxy(allCallbacks, {
|
|
98
|
+
get (target, prop) {
|
|
99
|
+
if (prop in target) {
|
|
100
|
+
return target[prop];
|
|
101
|
+
}
|
|
102
|
+
// Return a function that throws with an enhanced error message if applicable
|
|
103
|
+
return ()=>{
|
|
104
|
+
let contractVersion = undefined;
|
|
105
|
+
if ('nonOracleFunctionGetContractOracleVersion' in handler) {
|
|
106
|
+
contractVersion = handler.nonOracleFunctionGetContractOracleVersion();
|
|
107
|
+
}
|
|
108
|
+
if (!contractVersion) {
|
|
109
|
+
throw new Error(`Oracle '${prop}' not found and the contract's oracle version is unknown (the version check oracle ` + `was not called before '${prop}'). This usually means the contract was not compiled with the ` + `#[aztec] macro, which injects the version check as the first oracle call in every private/utility ` + `external function. If you're using a custom entry point, ensure assert_compatible_oracle_version() ` + `is called before any other oracle calls. See https://docs.aztec.network/errors/8`);
|
|
110
|
+
} else if (contractVersion.minor > ORACLE_VERSION_MINOR) {
|
|
111
|
+
throw new Error(`Oracle '${prop}' not found.` + ` This usually means the contract requires a newer private execution environment than you have.` + ` Upgrade your private execution environment to a compatible version. The contract was compiled with` + ` Aztec.nr oracle version ${contractVersion.major}.${contractVersion.minor}, but this private` + ` execution environment only supports up to ${ORACLE_VERSION_MAJOR}.${ORACLE_VERSION_MINOR}.` + ` See https://docs.aztec.network/errors/8`);
|
|
112
|
+
} else {
|
|
113
|
+
throw new Error(`Oracle '${prop}' not found.` + ` The contract's oracle version (${contractVersion.major}.${contractVersion.minor}) is compatible` + ` with this private execution environment (${ORACLE_VERSION_MAJOR}.${ORACLE_VERSION_MINOR}), so all` + ` standard oracles should be available. This could mean the contract was compiled against a modified` + ` version of Aztec.nr, or that it references an oracle that does not exist.` + ` See https://docs.aztec.network/errors/8`);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
});
|
|
73
118
|
}
|
|
74
119
|
// eslint-disable-next-line camelcase
|
|
75
|
-
|
|
76
|
-
this.handlerAsMisc().assertCompatibleOracleVersion(Fr.fromString(
|
|
120
|
+
aztec_utl_assertCompatibleOracleVersionV2([major], [minor]) {
|
|
121
|
+
this.handlerAsMisc().assertCompatibleOracleVersion(Fr.fromString(major).toNumber(), Fr.fromString(minor).toNumber());
|
|
77
122
|
return Promise.resolve([]);
|
|
78
123
|
}
|
|
79
124
|
// eslint-disable-next-line camelcase
|
|
@@ -84,13 +129,13 @@ export class UnavailableOracleError extends Error {
|
|
|
84
129
|
]);
|
|
85
130
|
}
|
|
86
131
|
// eslint-disable-next-line camelcase
|
|
87
|
-
|
|
88
|
-
this.handlerAsPrivate().
|
|
132
|
+
aztec_prv_setHashPreimage(values, [hash]) {
|
|
133
|
+
this.handlerAsPrivate().setHashPreimage(values.map(Fr.fromString), Fr.fromString(hash));
|
|
89
134
|
return Promise.resolve([]);
|
|
90
135
|
}
|
|
91
136
|
// eslint-disable-next-line camelcase
|
|
92
|
-
async
|
|
93
|
-
const values = await this.handlerAsPrivate().
|
|
137
|
+
async aztec_prv_getHashPreimage([returnsHash]) {
|
|
138
|
+
const values = await this.handlerAsPrivate().getHashPreimage(Fr.fromString(returnsHash));
|
|
94
139
|
return [
|
|
95
140
|
values.map(toACVMField)
|
|
96
141
|
];
|
|
@@ -187,9 +232,9 @@ export class UnavailableOracleError extends Error {
|
|
|
187
232
|
];
|
|
188
233
|
}
|
|
189
234
|
// eslint-disable-next-line camelcase
|
|
190
|
-
async
|
|
235
|
+
async aztec_utl_getPublicKeysAndPartialAddress([address]) {
|
|
191
236
|
const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
|
|
192
|
-
const result = await this.handlerAsUtility().
|
|
237
|
+
const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(parsedAddress);
|
|
193
238
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
194
239
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
195
240
|
if (result === undefined) {
|
|
@@ -251,8 +296,8 @@ export class UnavailableOracleError extends Error {
|
|
|
251
296
|
];
|
|
252
297
|
}
|
|
253
298
|
// eslint-disable-next-line camelcase
|
|
254
|
-
async
|
|
255
|
-
const exists = await this.handlerAsUtility().
|
|
299
|
+
async aztec_utl_doesNullifierExist([innerNullifier]) {
|
|
300
|
+
const exists = await this.handlerAsUtility().doesNullifierExist(Fr.fromString(innerNullifier));
|
|
256
301
|
return [
|
|
257
302
|
toACVMField(exists)
|
|
258
303
|
];
|
|
@@ -263,8 +308,8 @@ export class UnavailableOracleError extends Error {
|
|
|
263
308
|
return message.toNoirRepresentation();
|
|
264
309
|
}
|
|
265
310
|
// eslint-disable-next-line camelcase
|
|
266
|
-
async
|
|
267
|
-
const values = await this.handlerAsUtility().
|
|
311
|
+
async aztec_utl_getFromPublicStorage([blockHash], [contractAddress], [startStorageSlot], [numberOfElements]) {
|
|
312
|
+
const values = await this.handlerAsUtility().getFromPublicStorage(BlockHash.fromString(blockHash), new AztecAddress(Fr.fromString(contractAddress)), Fr.fromString(startStorageSlot), +numberOfElements);
|
|
268
313
|
return [
|
|
269
314
|
values.map(toACVMField)
|
|
270
315
|
];
|
|
@@ -297,8 +342,8 @@ export class UnavailableOracleError extends Error {
|
|
|
297
342
|
];
|
|
298
343
|
}
|
|
299
344
|
// eslint-disable-next-line camelcase
|
|
300
|
-
async
|
|
301
|
-
await this.handlerAsPrivate().
|
|
345
|
+
async aztec_prv_assertValidPublicCalldata([calldataHash]) {
|
|
346
|
+
await this.handlerAsPrivate().assertValidPublicCalldata(Fr.fromString(calldataHash));
|
|
302
347
|
return [];
|
|
303
348
|
}
|
|
304
349
|
// eslint-disable-next-line camelcase
|
|
@@ -307,8 +352,8 @@ export class UnavailableOracleError extends Error {
|
|
|
307
352
|
return Promise.resolve([]);
|
|
308
353
|
}
|
|
309
354
|
// eslint-disable-next-line camelcase
|
|
310
|
-
async
|
|
311
|
-
const isRevertible = await this.handlerAsPrivate().
|
|
355
|
+
async aztec_prv_isExecutionInRevertiblePhase([sideEffectCounter]) {
|
|
356
|
+
const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(Fr.fromString(sideEffectCounter).toNumber());
|
|
312
357
|
return Promise.resolve([
|
|
313
358
|
toACVMField(isRevertible)
|
|
314
359
|
]);
|
|
@@ -321,33 +366,59 @@ export class UnavailableOracleError extends Error {
|
|
|
321
366
|
];
|
|
322
367
|
}
|
|
323
368
|
// eslint-disable-next-line camelcase
|
|
324
|
-
async
|
|
325
|
-
await this.handlerAsUtility().
|
|
369
|
+
async aztec_utl_getPendingTaggedLogs([pendingTaggedLogArrayBaseSlot], [scope]) {
|
|
370
|
+
await this.handlerAsUtility().getPendingTaggedLogs(Fr.fromString(pendingTaggedLogArrayBaseSlot), AztecAddress.fromString(scope));
|
|
326
371
|
return [];
|
|
327
372
|
}
|
|
328
373
|
// eslint-disable-next-line camelcase
|
|
329
|
-
async
|
|
330
|
-
await this.handlerAsUtility().
|
|
374
|
+
async aztec_utl_getPendingTaggedLogs_v2([scope]) {
|
|
375
|
+
const slot = await this.handlerAsUtility().getPendingTaggedLogsV2(AztecAddress.fromString(scope));
|
|
376
|
+
return [
|
|
377
|
+
toACVMField(slot)
|
|
378
|
+
];
|
|
379
|
+
}
|
|
380
|
+
// eslint-disable-next-line camelcase
|
|
381
|
+
async aztec_utl_validateAndStoreEnqueuedNotesAndEvents([contractAddress], [noteValidationRequestsArrayBaseSlot], [eventValidationRequestsArrayBaseSlot], [maxNotePackedLen], [maxEventSerializedLen], [scope]) {
|
|
382
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(AztecAddress.fromString(contractAddress), Fr.fromString(noteValidationRequestsArrayBaseSlot), Fr.fromString(eventValidationRequestsArrayBaseSlot), Fr.fromString(maxNotePackedLen).toNumber(), Fr.fromString(maxEventSerializedLen).toNumber(), AztecAddress.fromString(scope));
|
|
331
383
|
return [];
|
|
332
384
|
}
|
|
333
385
|
// eslint-disable-next-line camelcase
|
|
334
|
-
async
|
|
335
|
-
await this.handlerAsUtility().
|
|
386
|
+
async aztec_utl_validateAndStoreEnqueuedNotesAndEvents_v2([noteValidationRequestsArrayBaseSlot], [eventValidationRequestsArrayBaseSlot], [maxNotePackedLen], [maxEventSerializedLen], [scope]) {
|
|
387
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEventsV2(Fr.fromString(noteValidationRequestsArrayBaseSlot), Fr.fromString(eventValidationRequestsArrayBaseSlot), Fr.fromString(maxNotePackedLen).toNumber(), Fr.fromString(maxEventSerializedLen).toNumber(), AztecAddress.fromString(scope));
|
|
336
388
|
return [];
|
|
337
389
|
}
|
|
338
390
|
// eslint-disable-next-line camelcase
|
|
339
|
-
async
|
|
340
|
-
await this.handlerAsUtility().
|
|
391
|
+
async aztec_utl_getLogsByTag([contractAddress], [logRetrievalRequestsArrayBaseSlot], [logRetrievalResponsesArrayBaseSlot], [scope]) {
|
|
392
|
+
await this.handlerAsUtility().getLogsByTag(AztecAddress.fromString(contractAddress), Fr.fromString(logRetrievalRequestsArrayBaseSlot), Fr.fromString(logRetrievalResponsesArrayBaseSlot), AztecAddress.fromString(scope));
|
|
341
393
|
return [];
|
|
342
394
|
}
|
|
343
395
|
// eslint-disable-next-line camelcase
|
|
344
|
-
async
|
|
345
|
-
await this.handlerAsUtility().
|
|
396
|
+
async aztec_utl_getMessageContextsByTxHash([contractAddress], [messageContextRequestsArrayBaseSlot], [messageContextResponsesArrayBaseSlot], [scope]) {
|
|
397
|
+
await this.handlerAsUtility().getMessageContextsByTxHash(AztecAddress.fromString(contractAddress), Fr.fromString(messageContextRequestsArrayBaseSlot), Fr.fromString(messageContextResponsesArrayBaseSlot), AztecAddress.fromString(scope));
|
|
346
398
|
return [];
|
|
347
399
|
}
|
|
348
400
|
// eslint-disable-next-line camelcase
|
|
349
|
-
async
|
|
350
|
-
const
|
|
401
|
+
async aztec_utl_getLogsByTag_v2([requestArrayBaseSlot]) {
|
|
402
|
+
const responseSlot = await this.handlerAsUtility().getLogsByTagV2(Fr.fromString(requestArrayBaseSlot));
|
|
403
|
+
return [
|
|
404
|
+
toACVMField(responseSlot)
|
|
405
|
+
];
|
|
406
|
+
}
|
|
407
|
+
// eslint-disable-next-line camelcase
|
|
408
|
+
async aztec_utl_getMessageContextsByTxHash_v2([requestArrayBaseSlot]) {
|
|
409
|
+
const responseSlot = await this.handlerAsUtility().getMessageContextsByTxHashV2(Fr.fromString(requestArrayBaseSlot));
|
|
410
|
+
return [
|
|
411
|
+
toACVMField(responseSlot)
|
|
412
|
+
];
|
|
413
|
+
}
|
|
414
|
+
// eslint-disable-next-line camelcase
|
|
415
|
+
aztec_utl_setCapsule([contractAddress], [slot], capsule, [scope]) {
|
|
416
|
+
this.handlerAsUtility().setCapsule(AztecAddress.fromField(Fr.fromString(contractAddress)), Fr.fromString(slot), capsule.map(Fr.fromString), AztecAddress.fromField(Fr.fromString(scope)));
|
|
417
|
+
return Promise.resolve([]);
|
|
418
|
+
}
|
|
419
|
+
// eslint-disable-next-line camelcase
|
|
420
|
+
async aztec_utl_getCapsule([contractAddress], [slot], [tSize], [scope]) {
|
|
421
|
+
const values = await this.handlerAsUtility().getCapsule(AztecAddress.fromField(Fr.fromString(contractAddress)), Fr.fromString(slot), AztecAddress.fromField(Fr.fromString(scope)));
|
|
351
422
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
352
423
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
353
424
|
if (values === null) {
|
|
@@ -365,23 +436,66 @@ export class UnavailableOracleError extends Error {
|
|
|
365
436
|
}
|
|
366
437
|
}
|
|
367
438
|
// eslint-disable-next-line camelcase
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
return [];
|
|
439
|
+
aztec_utl_deleteCapsule([contractAddress], [slot], [scope]) {
|
|
440
|
+
this.handlerAsUtility().deleteCapsule(AztecAddress.fromField(Fr.fromString(contractAddress)), Fr.fromString(slot), AztecAddress.fromField(Fr.fromString(scope)));
|
|
441
|
+
return Promise.resolve([]);
|
|
371
442
|
}
|
|
372
443
|
// eslint-disable-next-line camelcase
|
|
373
|
-
async aztec_utl_copyCapsule([contractAddress], [srcSlot], [dstSlot], [numEntries]) {
|
|
374
|
-
await this.handlerAsUtility().copyCapsule(AztecAddress.fromField(Fr.fromString(contractAddress)), Fr.fromString(srcSlot), Fr.fromString(dstSlot), Fr.fromString(numEntries).toNumber());
|
|
444
|
+
async aztec_utl_copyCapsule([contractAddress], [srcSlot], [dstSlot], [numEntries], [scope]) {
|
|
445
|
+
await this.handlerAsUtility().copyCapsule(AztecAddress.fromField(Fr.fromString(contractAddress)), Fr.fromString(srcSlot), Fr.fromString(dstSlot), Fr.fromString(numEntries).toNumber(), AztecAddress.fromField(Fr.fromString(scope)));
|
|
375
446
|
return [];
|
|
376
447
|
}
|
|
377
448
|
// eslint-disable-next-line camelcase
|
|
378
|
-
|
|
449
|
+
aztec_utl_pushEphemeral([slot], elements) {
|
|
450
|
+
const newLen = this.handlerAsUtility().pushEphemeral(Fr.fromString(slot), elements.map(Fr.fromString));
|
|
451
|
+
return Promise.resolve([
|
|
452
|
+
toACVMField(newLen)
|
|
453
|
+
]);
|
|
454
|
+
}
|
|
455
|
+
// eslint-disable-next-line camelcase
|
|
456
|
+
aztec_utl_popEphemeral([slot]) {
|
|
457
|
+
const element = this.handlerAsUtility().popEphemeral(Fr.fromString(slot));
|
|
458
|
+
return Promise.resolve([
|
|
459
|
+
element.map(toACVMField)
|
|
460
|
+
]);
|
|
461
|
+
}
|
|
462
|
+
// eslint-disable-next-line camelcase
|
|
463
|
+
aztec_utl_getEphemeral([slot], [index]) {
|
|
464
|
+
const element = this.handlerAsUtility().getEphemeral(Fr.fromString(slot), Fr.fromString(index).toNumber());
|
|
465
|
+
return Promise.resolve([
|
|
466
|
+
element.map(toACVMField)
|
|
467
|
+
]);
|
|
468
|
+
}
|
|
469
|
+
// eslint-disable-next-line camelcase
|
|
470
|
+
aztec_utl_setEphemeral([slot], [index], elements) {
|
|
471
|
+
this.handlerAsUtility().setEphemeral(Fr.fromString(slot), Fr.fromString(index).toNumber(), elements.map(Fr.fromString));
|
|
472
|
+
return Promise.resolve([]);
|
|
473
|
+
}
|
|
474
|
+
// eslint-disable-next-line camelcase
|
|
475
|
+
aztec_utl_getEphemeralLen([slot]) {
|
|
476
|
+
const len = this.handlerAsUtility().getEphemeralLen(Fr.fromString(slot));
|
|
477
|
+
return Promise.resolve([
|
|
478
|
+
toACVMField(len)
|
|
479
|
+
]);
|
|
480
|
+
}
|
|
481
|
+
// eslint-disable-next-line camelcase
|
|
482
|
+
aztec_utl_removeEphemeral([slot], [index]) {
|
|
483
|
+
this.handlerAsUtility().removeEphemeral(Fr.fromString(slot), Fr.fromString(index).toNumber());
|
|
484
|
+
return Promise.resolve([]);
|
|
485
|
+
}
|
|
486
|
+
// eslint-disable-next-line camelcase
|
|
487
|
+
aztec_utl_clearEphemeral([slot]) {
|
|
488
|
+
this.handlerAsUtility().clearEphemeral(Fr.fromString(slot));
|
|
489
|
+
return Promise.resolve([]);
|
|
490
|
+
}
|
|
491
|
+
// eslint-disable-next-line camelcase
|
|
492
|
+
async aztec_utl_decryptAes128(ciphertextBVecStorage, [ciphertextLength], iv, symKey) {
|
|
379
493
|
const ciphertext = fromUintBoundedVec(ciphertextBVecStorage, ciphertextLength, 8);
|
|
380
494
|
const ivBuffer = fromUintArray(iv, 8);
|
|
381
495
|
const symKeyBuffer = fromUintArray(symKey, 8);
|
|
382
496
|
// Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
|
|
383
497
|
try {
|
|
384
|
-
const plaintext = await this.handlerAsUtility().
|
|
498
|
+
const plaintext = await this.handlerAsUtility().decryptAes128(ciphertext, ivBuffer, symKeyBuffer);
|
|
385
499
|
const [storage, length] = bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
|
|
386
500
|
return [
|
|
387
501
|
toACVMField(1),
|
|
@@ -398,18 +512,20 @@ export class UnavailableOracleError extends Error {
|
|
|
398
512
|
}
|
|
399
513
|
}
|
|
400
514
|
// eslint-disable-next-line camelcase
|
|
401
|
-
async aztec_utl_getSharedSecret([address], [ephPKField0], [ephPKField1], [ephPKField2]) {
|
|
515
|
+
async aztec_utl_getSharedSecret([address], [ephPKField0], [ephPKField1], [ephPKField2], [contractAddress]) {
|
|
402
516
|
const secret = await this.handlerAsUtility().getSharedSecret(AztecAddress.fromField(Fr.fromString(address)), Point.fromFields([
|
|
403
517
|
ephPKField0,
|
|
404
518
|
ephPKField1,
|
|
405
519
|
ephPKField2
|
|
406
|
-
].map(Fr.fromString)));
|
|
407
|
-
return
|
|
520
|
+
].map(Fr.fromString)), AztecAddress.fromField(Fr.fromString(contractAddress)));
|
|
521
|
+
return [
|
|
522
|
+
toACVMField(secret)
|
|
523
|
+
];
|
|
408
524
|
}
|
|
409
525
|
// eslint-disable-next-line camelcase
|
|
410
|
-
|
|
526
|
+
aztec_utl_setContractSyncCacheInvalid([contractAddress], scopes, [scopeCount]) {
|
|
411
527
|
const scopeAddresses = scopes.slice(0, +scopeCount).map((s)=>AztecAddress.fromField(Fr.fromString(s)));
|
|
412
|
-
this.handlerAsUtility().
|
|
528
|
+
this.handlerAsUtility().setContractSyncCacheInvalid(AztecAddress.fromField(Fr.fromString(contractAddress)), scopeAddresses);
|
|
413
529
|
return Promise.resolve([]);
|
|
414
530
|
}
|
|
415
531
|
// eslint-disable-next-line camelcase
|
|
@@ -45,7 +45,7 @@ import { Oracle } from './oracle.js';
|
|
|
45
45
|
appCircuitName: functionName
|
|
46
46
|
});
|
|
47
47
|
const contractClassLogs = privateExecutionOracle.getContractClassLogs();
|
|
48
|
-
const rawReturnValues = await privateExecutionOracle.
|
|
48
|
+
const rawReturnValues = await privateExecutionOracle.getHashPreimage(publicInputs.returnsHash);
|
|
49
49
|
const newNotes = privateExecutionOracle.getNewNotes();
|
|
50
50
|
const noteHashNullifierCounterMap = privateExecutionOracle.getNoteHashNullifierCounterMap();
|
|
51
51
|
const offchainEffects = privateExecutionOracle.getOffchainEffects();
|
|
@@ -7,7 +7,6 @@ import { type ContractClassLog, type TaggingIndexRange } from '@aztec/stdlib/log
|
|
|
7
7
|
import { Tag } from '@aztec/stdlib/logs';
|
|
8
8
|
import { type NoteStatus } from '@aztec/stdlib/note';
|
|
9
9
|
import { CallContext, CountedContractClassLog, NoteAndSlot, PrivateCallExecutionResult, type TxContext } from '@aztec/stdlib/tx';
|
|
10
|
-
import type { AccessScopes } from '../../access_scopes.js';
|
|
11
10
|
import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
|
|
12
11
|
import type { ExecutionNoteCache } from '../execution_note_cache.js';
|
|
13
12
|
import { ExecutionTaggingIndexCache } from '../execution_tagging_index_cache.js';
|
|
@@ -20,7 +19,7 @@ export type PrivateExecutionOracleArgs = Omit<UtilityExecutionOracleArgs, 'contr
|
|
|
20
19
|
txContext: TxContext;
|
|
21
20
|
callContext: CallContext;
|
|
22
21
|
/** Needed to trigger contract synchronization before nested calls */
|
|
23
|
-
utilityExecutor: (call: FunctionCall, scopes:
|
|
22
|
+
utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
|
|
24
23
|
executionCache: HashedValuesCache;
|
|
25
24
|
noteCache: ExecutionNoteCache;
|
|
26
25
|
taggingIndexCache: ExecutionTaggingIndexCache;
|
|
@@ -120,14 +119,14 @@ export declare class PrivateExecutionOracle extends UtilityExecutionOracle imple
|
|
|
120
119
|
* @param values - Values to store.
|
|
121
120
|
* @returns The hash of the values.
|
|
122
121
|
*/
|
|
123
|
-
|
|
122
|
+
setHashPreimage(values: Fr[], hash: Fr): void;
|
|
124
123
|
/**
|
|
125
124
|
* Gets values from the execution cache.
|
|
126
125
|
* @param hash - Hash of the values.
|
|
127
126
|
* @returns The values.
|
|
128
127
|
*/
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
getHashPreimage(hash: Fr): Promise<Fr[]>;
|
|
129
|
+
doesNullifierExist(innerNullifier: Fr): Promise<boolean>;
|
|
131
130
|
/**
|
|
132
131
|
* Gets some notes for a storage slot.
|
|
133
132
|
*
|
|
@@ -206,10 +205,10 @@ export declare class PrivateExecutionOracle extends UtilityExecutionOracle imple
|
|
|
206
205
|
returnsHash: Fr;
|
|
207
206
|
}>;
|
|
208
207
|
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
|
|
209
|
-
|
|
208
|
+
assertValidPublicCalldata(calldataHash: Fr): Promise<void>;
|
|
210
209
|
notifyRevertiblePhaseStart(minRevertibleSideEffectCounter: number): Promise<void>;
|
|
211
|
-
|
|
210
|
+
isExecutionInRevertiblePhase(sideEffectCounter: number): Promise<boolean>;
|
|
212
211
|
private deriveCallContext;
|
|
213
212
|
getDebugFunctionName(): Promise<string>;
|
|
214
213
|
}
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9leGVjdXRpb25fb3JhY2xlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJhY3RfZnVuY3Rpb25fc2ltdWxhdG9yL29yYWNsZS9wcml2YXRlX2V4ZWN1dGlvbl9vcmFjbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3BELE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUFpQixNQUFNLHlCQUF5QixDQUFDO0FBQy9FLE9BQU8sRUFDTCxLQUFLLFdBQVcsRUFFaEIsS0FBSyxZQUFZLEVBQ2pCLGdCQUFnQixFQUNoQixLQUFLLFlBQVksRUFFbEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQXVDLEtBQUssaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4SCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekMsT0FBTyxFQUFRLEtBQUssVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUNMLFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLDBCQUEwQixFQUMxQixLQUFLLFNBQVMsRUFDZixNQUFNLGtCQUFrQixDQUFDO0FBRzFCLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFOUYsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sS0FBSyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxLQUFLLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEcsbURBQW1EO0FBQ25ELE1BQU0sTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsaUJBQWlCLENBQUMsR0FBRztJQUM3RixRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ2IsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUNyQixXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ3pCLHFFQUFxRTtJQUNyRSxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0UsY0FBYyxFQUFFLGlCQUFpQixDQUFDO0lBQ2xDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQztJQUM5QixpQkFBaUIsRUFBRSwwQkFBMEIsQ0FBQztJQUM5QyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQztJQUN2Qyx3QkFBd0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNsQyxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUMzQixhQUFhLENBQUMsRUFBRSxZQUFZLENBQUM7SUFDN0IsU0FBUyxDQUFDLEVBQUUsZ0JBQWdCLENBQUM7Q0FDOUIsQ0FBQztBQUVGOztHQUVHO0FBQ0gscUJBQWEsc0JBQXVCLFNBQVEsc0JBQXVCLFlBQVcsdUJBQXVCOztJQUNuRyxTQUFTLE9BQWlCO0lBRTFCOzs7Ozs7O09BT0c7SUFDSCxPQUFPLENBQUMsUUFBUSxDQUFxQjtJQUNyQyxPQUFPLENBQUMsMkJBQTJCLENBQWtDO0lBQ3JFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBaUM7SUFDMUQsT0FBTyxDQUFDLHNCQUFzQixDQUFvQztJQUVsRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBSztJQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBWTtJQUN0QyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBYztJQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBZ0U7SUFDaEcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQW9CO0lBQ25ELE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFxQjtJQUMvQyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUE2QjtJQUMvRCxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFxQjtJQUN4RCxPQUFPLENBQUMsd0JBQXdCLENBQVM7SUFDekMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztJQUNwQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQWU7SUFDckMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBbUI7SUFFOUMsWUFBWSxJQUFJLEVBQUUsMEJBQTBCLEVBa0IzQztJQUVNLHVCQUF1QixJQUFJLG9CQUFvQixDQUVyRDtJQUlEOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyx1QkFnQnhDO0lBRUQ7O09BRUc7SUFDSSxXQUFXLElBQUksV0FBVyxFQUFFLENBRWxDO0lBRU0sOEJBQThCLHdCQUVwQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CLDhCQUUxQjtJQUVEOztPQUVHO0lBQ0kseUJBQXlCLElBQUksaUJBQWlCLEVBQUUsQ0FFdEQ7SUFFRDs7T0FFRztJQUNJLHlCQUF5QixpQ0FFL0I7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUUzRDtJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHbEU7SUFFRDs7Ozs7T0FLRztJQUNVLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBd0I5RjtJQTJDRDs7OztPQUlHO0lBQ0ksZUFBZSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUU1QztJQUVEOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FNOUM7SUFFYyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FldEU7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FvQkc7SUFDbUIsUUFBUSxDQUM1QixLQUFLLEVBQUUsWUFBWSxHQUFHLFNBQVMsRUFDL0IsV0FBVyxFQUFFLEVBQUUsRUFDZixVQUFVLEVBQUUsTUFBTSxFQUNsQixlQUFlLEVBQUUsTUFBTSxFQUFFLEVBQ3pCLGVBQWUsRUFBRSxNQUFNLEVBQUUsRUFDekIsZUFBZSxFQUFFLE1BQU0sRUFBRSxFQUN6QixZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQ2xCLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxFQUMzQixhQUFhLEVBQUUsTUFBTSxFQUFFLEVBQ3ZCLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFDdkIsYUFBYSxFQUFFLE1BQU0sRUFBRSxFQUN2QixTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQ25CLEtBQUssRUFBRSxNQUFNLEVBQ2IsTUFBTSxFQUFFLE1BQU0sRUFDZCxNQUFNLEVBQUUsVUFBVSxHQUNqQixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FxQ3JCO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGlCQUFpQixDQUN0QixLQUFLLEVBQUUsWUFBWSxFQUNuQixXQUFXLEVBQUUsRUFBRSxFQUNmLFVBQVUsRUFBRSxFQUFFLEVBQ2QsVUFBVSxFQUFFLFlBQVksRUFDeEIsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUNmLFFBQVEsRUFBRSxFQUFFLEVBQ1osT0FBTyxFQUFFLE1BQU0sUUEwQmhCO0lBRUQ7Ozs7O09BS0c7SUFDVSxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBU2pGO0lBRUQ7Ozs7O09BS0c7SUFDSSxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsRUFBRSxpQkFHL0M7SUFFRDs7Ozs7O09BTUc7SUFDVSxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUluRztJQUVEOzs7Ozs7T0FNRztJQUNJLDZCQUE2QixDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQU0xRTtJQWNEOzs7Ozs7OztPQVFHO0lBQ0csbUJBQW1CLENBQ3ZCLHFCQUFxQixFQUFFLFlBQVksRUFDbkMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLFFBQVEsRUFBRSxFQUFFLEVBQ1osaUJBQWlCLEVBQUUsTUFBTSxFQUN6QixZQUFZLEVBQUUsT0FBTzs7O09BNkZ0QjtJQUVELGdIQUFnSDtJQUN6Ryx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsRUFBRSxpQkFXaEQ7SUFFTSwwQkFBMEIsQ0FBQyw4QkFBOEIsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUV2RjtJQUVNLDRCQUE0QixDQUFDLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRS9FO1lBU2EsaUJBQWlCO0lBYXhCLG9CQUFvQixvQkFFMUI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private_execution_oracle.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/oracle/private_execution_oracle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,YAAY,EACjB,gBAAgB,EAChB,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,KAAK,gBAAgB,EAAuC,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxH,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"private_execution_oracle.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/oracle/private_execution_oracle.ts"],"names":[],"mappings":"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"}
|
|
@@ -142,6 +142,15 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
142
142
|
* @returns An app tag to be used in a log.
|
|
143
143
|
*/ async getNextAppTagAsSender(sender, recipient) {
|
|
144
144
|
const extendedSecret = await this.#calculateExtendedDirectionalAppTaggingSecret(this.contractAddress, sender, recipient);
|
|
145
|
+
if (!extendedSecret) {
|
|
146
|
+
// We'd only fail to compute an extended secret if the recipient is an invalid address. To prevent
|
|
147
|
+
// king-of-the-hill attacks, instead of failing we use a random tag. By including a correct-looking tag in the
|
|
148
|
+
// log, the transaction shape is preserved and no privacy is leaked, even if the tag is bogus.
|
|
149
|
+
this.logger.warn(`Computing a tag for invalid recipient ${recipient} - returning a random tag instead`, {
|
|
150
|
+
contractAddress: this.contractAddress
|
|
151
|
+
});
|
|
152
|
+
return new Tag(Fr.random());
|
|
153
|
+
}
|
|
145
154
|
const index = await this.#getIndexToUseForSecret(extendedSecret);
|
|
146
155
|
this.logger.debug(`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`);
|
|
147
156
|
this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
|
|
@@ -175,21 +184,21 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
175
184
|
* Store values in the execution cache.
|
|
176
185
|
* @param values - Values to store.
|
|
177
186
|
* @returns The hash of the values.
|
|
178
|
-
*/
|
|
187
|
+
*/ setHashPreimage(values, hash) {
|
|
179
188
|
return this.executionCache.store(values, hash);
|
|
180
189
|
}
|
|
181
190
|
/**
|
|
182
191
|
* Gets values from the execution cache.
|
|
183
192
|
* @param hash - Hash of the values.
|
|
184
193
|
* @returns The values.
|
|
185
|
-
*/
|
|
194
|
+
*/ getHashPreimage(hash) {
|
|
186
195
|
const preimage = this.executionCache.getPreimage(hash);
|
|
187
196
|
if (!preimage) {
|
|
188
197
|
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
189
198
|
}
|
|
190
199
|
return Promise.resolve(preimage);
|
|
191
200
|
}
|
|
192
|
-
async
|
|
201
|
+
async doesNullifierExist(innerNullifier) {
|
|
193
202
|
// This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
|
|
194
203
|
// in the synched block, during private execution there's also the possibility of it being pending, i.e. created
|
|
195
204
|
// in the current transaction.
|
|
@@ -197,7 +206,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
197
206
|
contractAddress: this.contractAddress
|
|
198
207
|
});
|
|
199
208
|
const nullifier = (await siloNullifier(this.contractAddress, innerNullifier)).toBigInt();
|
|
200
|
-
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.
|
|
209
|
+
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.doesNullifierExist(innerNullifier);
|
|
201
210
|
}
|
|
202
211
|
/**
|
|
203
212
|
* Gets some notes for a storage slot.
|
|
@@ -379,17 +388,18 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
379
388
|
senderTaggingStore: this.senderTaggingStore,
|
|
380
389
|
recipientTaggingStore: this.recipientTaggingStore,
|
|
381
390
|
senderAddressBookStore: this.senderAddressBookStore,
|
|
382
|
-
|
|
391
|
+
capsuleService: this.capsuleService,
|
|
383
392
|
privateEventStore: this.privateEventStore,
|
|
384
393
|
messageContextService: this.messageContextService,
|
|
385
394
|
contractSyncService: this.contractSyncService,
|
|
386
395
|
jobId: this.jobId,
|
|
387
396
|
totalPublicCalldataCount: this.totalPublicCalldataCount,
|
|
388
397
|
sideEffectCounter,
|
|
389
|
-
log: this.logger,
|
|
390
398
|
scopes: this.scopes,
|
|
399
|
+
log: this.logger,
|
|
391
400
|
senderForTags: this.senderForTags,
|
|
392
|
-
simulator: this.simulator
|
|
401
|
+
simulator: this.simulator,
|
|
402
|
+
l2TipsStore: this.l2TipsStore
|
|
393
403
|
});
|
|
394
404
|
const setupTime = simulatorSetupTimer.ms();
|
|
395
405
|
const childExecutionResult = await executePrivateFunction(this.simulator, privateExecutionOracle, targetArtifact, targetContractAddress, functionSelector);
|
|
@@ -407,7 +417,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
407
417
|
returnsHash: publicInputs.returnsHash
|
|
408
418
|
};
|
|
409
419
|
}
|
|
410
|
-
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
|
|
420
|
+
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */ assertValidPublicCalldata(calldataHash) {
|
|
411
421
|
const calldata = this.executionCache.getPreimage(calldataHash);
|
|
412
422
|
if (!calldata) {
|
|
413
423
|
throw new Error('Calldata for public call not found in cache');
|
|
@@ -421,7 +431,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
421
431
|
notifyRevertiblePhaseStart(minRevertibleSideEffectCounter) {
|
|
422
432
|
return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
423
433
|
}
|
|
424
|
-
|
|
434
|
+
isExecutionInRevertiblePhase(sideEffectCounter) {
|
|
425
435
|
return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
|
|
426
436
|
}
|
|
427
437
|
/**
|