@aztec/pxe 1.2.1 → 2.0.0-nightly.20250813
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/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +5 -2
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +48 -29
- package/dest/contract_function_simulator/index.d.ts +1 -0
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
- 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 +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +22 -0
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +49 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +44 -43
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +127 -106
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +7 -2
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +16 -11
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +41 -17
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +51 -23
- package/dest/contract_function_simulator/oracle/typed_oracle.d.ts +48 -47
- package/dest/contract_function_simulator/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/typed_oracle.js +89 -87
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +31 -30
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +33 -30
- package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +1 -1
- package/dest/contract_function_simulator/pxe_oracle_interface.js +6 -7
- package/dest/entrypoints/server/utils.d.ts +4 -2
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +4 -2
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +4 -4
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -1
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.js +58 -59
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.js +41 -0
- package/dest/private_kernel/hints/index.d.ts +1 -0
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +1 -0
- 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 +13 -4
- package/dest/private_kernel/private_kernel_oracle.d.ts +1 -1
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +6 -6
- package/dest/pxe_service/error_enriching.d.ts.map +1 -1
- package/dest/pxe_service/error_enriching.js +1 -0
- package/dest/pxe_service/pxe_service.d.ts +3 -2
- package/dest/pxe_service/pxe_service.d.ts.map +1 -1
- package/dest/pxe_service/pxe_service.js +28 -19
- package/dest/storage/capsule_data_provider/capsule_data_provider.js +1 -1
- package/dest/storage/note_data_provider/note_data_provider.d.ts.map +1 -1
- package/dest/storage/note_data_provider/note_data_provider.js +16 -4
- package/package.json +16 -16
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +67 -37
- package/src/contract_function_simulator/index.ts +1 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
- 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 -1
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +52 -0
- package/src/contract_function_simulator/oracle/oracle.ts +149 -111
- package/src/contract_function_simulator/oracle/private_execution.ts +17 -12
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +60 -24
- package/src/contract_function_simulator/oracle/typed_oracle.ts +108 -92
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +34 -30
- package/src/contract_function_simulator/pxe_oracle_interface.ts +6 -8
- package/src/entrypoints/server/utils.ts +17 -6
- package/src/private_kernel/hints/build_private_kernel_reset_private_inputs.ts +106 -104
- package/src/private_kernel/hints/compute_tx_include_by_timestamp.ts +58 -0
- package/src/private_kernel/hints/index.ts +1 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +21 -4
- package/src/private_kernel/private_kernel_oracle.ts +1 -1
- package/src/private_kernel/private_kernel_oracle_impl.ts +12 -9
- package/src/pxe_service/error_enriching.ts +1 -0
- package/src/pxe_service/pxe_service.ts +30 -32
- package/src/storage/capsule_data_provider/capsule_data_provider.ts +1 -1
- package/src/storage/note_data_provider/note_data_provider.ts +27 -16
|
@@ -13,6 +13,7 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
13
13
|
import { ContractClassLog, ContractClassLogFields } from '@aztec/stdlib/logs';
|
|
14
14
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
15
15
|
|
|
16
|
+
import { packAsRetrievedNote } from './note_packing_utils.js';
|
|
16
17
|
import type { TypedOracle } from './typed_oracle.js';
|
|
17
18
|
|
|
18
19
|
/**
|
|
@@ -26,60 +27,80 @@ export class Oracle {
|
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
toACIRCallback(): ACIRCallback {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
30
|
+
const excludedProps = ['typedOracle', 'constructor', 'toACIRCallback'] as const;
|
|
31
|
+
|
|
32
|
+
// Get all the oracle function names
|
|
33
|
+
const oracleNames = Object.getOwnPropertyNames(Oracle.prototype).filter(
|
|
34
|
+
name => !excludedProps.includes(name as (typeof excludedProps)[number]),
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
// Validate oracle names - these must be prefixed with either "private" or "utility" to indicate their scope
|
|
38
|
+
// and must correspond to a function on the Oracle class.
|
|
39
|
+
oracleNames.forEach(name => {
|
|
40
|
+
if (!name.startsWith('private') && !name.startsWith('utility')) {
|
|
41
|
+
throw new Error(
|
|
42
|
+
`Oracle function "${name}" must be prefixed with either "private" or "utility" to indicate its scope`,
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const method = this[name as keyof Omit<Oracle, (typeof excludedProps)[number]>];
|
|
47
|
+
if (typeof method !== 'function') {
|
|
48
|
+
throw new Error(`Oracle property "${name}" must be a function`);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// Build callback object and return it
|
|
53
|
+
return oracleNames.reduce((acc, name) => {
|
|
54
|
+
const method = this[name as keyof Omit<Oracle, (typeof excludedProps)[number]>];
|
|
55
|
+
acc[name] = method.bind(this);
|
|
56
|
+
return acc;
|
|
57
|
+
}, {} as ACIRCallback);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
utilityGetRandomField(): Promise<ACVMField[]> {
|
|
61
|
+
const val = this.typedOracle.utilityGetRandomField();
|
|
41
62
|
return Promise.resolve([toACVMField(val)]);
|
|
42
63
|
}
|
|
43
64
|
|
|
44
65
|
// Since the argument is a slice, noir automatically adds a length field to oracle call.
|
|
45
|
-
|
|
46
|
-
this.typedOracle.
|
|
66
|
+
privateStoreInExecutionCache(_length: ACVMField[], values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
|
|
67
|
+
this.typedOracle.privateStoreInExecutionCache(values.map(Fr.fromString), Fr.fromString(hash));
|
|
47
68
|
return Promise.resolve([]);
|
|
48
69
|
}
|
|
49
70
|
|
|
50
|
-
async
|
|
51
|
-
const values = await this.typedOracle.
|
|
71
|
+
async privateLoadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
|
|
72
|
+
const values = await this.typedOracle.privateLoadFromExecutionCache(Fr.fromString(returnsHash));
|
|
52
73
|
return [values.map(toACVMField)];
|
|
53
74
|
}
|
|
54
75
|
|
|
55
|
-
async
|
|
56
|
-
return [toACVMField(await this.typedOracle.
|
|
76
|
+
async utilityGetBlockNumber(): Promise<ACVMField[]> {
|
|
77
|
+
return [toACVMField(await this.typedOracle.utilityGetBlockNumber())];
|
|
57
78
|
}
|
|
58
79
|
|
|
59
|
-
async
|
|
60
|
-
return [toACVMField(await this.typedOracle.
|
|
80
|
+
async utilityGetTimestamp(): Promise<ACVMField[]> {
|
|
81
|
+
return [toACVMField(await this.typedOracle.utilityGetTimestamp())];
|
|
61
82
|
}
|
|
62
83
|
|
|
63
|
-
async
|
|
64
|
-
return [toACVMField(await this.typedOracle.
|
|
84
|
+
async utilityGetContractAddress(): Promise<ACVMField[]> {
|
|
85
|
+
return [toACVMField(await this.typedOracle.utilityGetContractAddress())];
|
|
65
86
|
}
|
|
66
87
|
|
|
67
|
-
async
|
|
68
|
-
return [toACVMField(await this.typedOracle.
|
|
88
|
+
async utilityGetVersion(): Promise<ACVMField[]> {
|
|
89
|
+
return [toACVMField(await this.typedOracle.utilityGetVersion())];
|
|
69
90
|
}
|
|
70
91
|
|
|
71
|
-
async
|
|
72
|
-
return [toACVMField(await this.typedOracle.
|
|
92
|
+
async utilityGetChainId(): Promise<ACVMField[]> {
|
|
93
|
+
return [toACVMField(await this.typedOracle.utilityGetChainId())];
|
|
73
94
|
}
|
|
74
95
|
|
|
75
|
-
async
|
|
76
|
-
const keyValidationRequest = await this.typedOracle.
|
|
96
|
+
async utilityGetKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
|
|
97
|
+
const keyValidationRequest = await this.typedOracle.utilityGetKeyValidationRequest(Fr.fromString(pkMHash));
|
|
77
98
|
|
|
78
99
|
return keyValidationRequest.toFields().map(toACVMField);
|
|
79
100
|
}
|
|
80
101
|
|
|
81
|
-
async
|
|
82
|
-
const instance = await this.typedOracle.
|
|
102
|
+
async utilityGetContractInstance([address]: ACVMField[]): Promise<ACVMField[]> {
|
|
103
|
+
const instance = await this.typedOracle.utilityGetContractInstance(AztecAddress.fromField(Fr.fromString(address)));
|
|
83
104
|
|
|
84
105
|
return [
|
|
85
106
|
instance.salt,
|
|
@@ -90,7 +111,7 @@ export class Oracle {
|
|
|
90
111
|
].map(toACVMField);
|
|
91
112
|
}
|
|
92
113
|
|
|
93
|
-
async
|
|
114
|
+
async utilityGetMembershipWitness(
|
|
94
115
|
[blockNumber]: ACVMField[],
|
|
95
116
|
[treeId]: ACVMField[],
|
|
96
117
|
[leafValue]: ACVMField[],
|
|
@@ -99,7 +120,11 @@ export class Oracle {
|
|
|
99
120
|
const parsedTreeId = Fr.fromString(treeId).toNumber();
|
|
100
121
|
const parsedLeafValue = Fr.fromString(leafValue);
|
|
101
122
|
|
|
102
|
-
const witness = await this.typedOracle.
|
|
123
|
+
const witness = await this.typedOracle.utilityGetMembershipWitness(
|
|
124
|
+
parsedBlockNumber,
|
|
125
|
+
parsedTreeId,
|
|
126
|
+
parsedLeafValue,
|
|
127
|
+
);
|
|
103
128
|
if (!witness) {
|
|
104
129
|
throw new Error(
|
|
105
130
|
`Leaf ${leafValue} not found in the tree ${MerkleTreeId[parsedTreeId]} at block ${parsedBlockNumber}.`,
|
|
@@ -108,28 +133,28 @@ export class Oracle {
|
|
|
108
133
|
return [toACVMField(witness[0]), witness.slice(1).map(toACVMField)];
|
|
109
134
|
}
|
|
110
135
|
|
|
111
|
-
async
|
|
136
|
+
async utilityGetNullifierMembershipWitness(
|
|
112
137
|
[blockNumber]: ACVMField[],
|
|
113
138
|
[nullifier]: ACVMField[], // nullifier, we try to find the witness for (to prove inclusion)
|
|
114
139
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
115
140
|
const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
|
|
116
141
|
const parsedNullifier = Fr.fromString(nullifier);
|
|
117
142
|
|
|
118
|
-
const witness = await this.typedOracle.
|
|
143
|
+
const witness = await this.typedOracle.utilityGetNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
|
|
119
144
|
if (!witness) {
|
|
120
145
|
throw new Error(`Nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`);
|
|
121
146
|
}
|
|
122
147
|
return witness.toNoirRepresentation();
|
|
123
148
|
}
|
|
124
149
|
|
|
125
|
-
async
|
|
150
|
+
async utilityGetLowNullifierMembershipWitness(
|
|
126
151
|
[blockNumber]: ACVMField[],
|
|
127
152
|
[nullifier]: ACVMField[], // nullifier, we try to find the low nullifier witness for (to prove non-inclusion)
|
|
128
153
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
129
154
|
const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
|
|
130
155
|
const parsedNullifier = Fr.fromString(nullifier);
|
|
131
156
|
|
|
132
|
-
const witness = await this.typedOracle.
|
|
157
|
+
const witness = await this.typedOracle.utilityGetLowNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
|
|
133
158
|
if (!witness) {
|
|
134
159
|
throw new Error(
|
|
135
160
|
`Low nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`,
|
|
@@ -138,47 +163,48 @@ export class Oracle {
|
|
|
138
163
|
return witness.toNoirRepresentation();
|
|
139
164
|
}
|
|
140
165
|
|
|
141
|
-
async
|
|
166
|
+
async utilityGetPublicDataWitness(
|
|
142
167
|
[blockNumber]: ACVMField[],
|
|
143
168
|
[leafSlot]: ACVMField[],
|
|
144
169
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
145
170
|
const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
|
|
146
171
|
const parsedLeafSlot = Fr.fromString(leafSlot);
|
|
147
172
|
|
|
148
|
-
const witness = await this.typedOracle.
|
|
173
|
+
const witness = await this.typedOracle.utilityGetPublicDataWitness(parsedBlockNumber, parsedLeafSlot);
|
|
149
174
|
if (!witness) {
|
|
150
175
|
throw new Error(`Public data witness not found for slot ${parsedLeafSlot} at block ${parsedBlockNumber}.`);
|
|
151
176
|
}
|
|
152
177
|
return witness.toNoirRepresentation();
|
|
153
178
|
}
|
|
154
179
|
|
|
155
|
-
async
|
|
180
|
+
async utilityGetBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
|
|
156
181
|
const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
|
|
157
182
|
|
|
158
|
-
const header = await this.typedOracle.
|
|
183
|
+
const header = await this.typedOracle.utilityGetBlockHeader(parsedBlockNumber);
|
|
159
184
|
if (!header) {
|
|
160
185
|
throw new Error(`Block header not found for block ${parsedBlockNumber}.`);
|
|
161
186
|
}
|
|
162
187
|
return header.toFields().map(toACVMField);
|
|
163
188
|
}
|
|
164
189
|
|
|
165
|
-
async
|
|
190
|
+
async utilityGetAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[][]> {
|
|
166
191
|
const messageHashField = Fr.fromString(messageHash);
|
|
167
|
-
const witness = await this.typedOracle.
|
|
192
|
+
const witness = await this.typedOracle.utilityGetAuthWitness(messageHashField);
|
|
168
193
|
if (!witness) {
|
|
169
194
|
throw new Error(`Unknown auth witness for message hash ${messageHashField}`);
|
|
170
195
|
}
|
|
171
196
|
return [witness.map(toACVMField)];
|
|
172
197
|
}
|
|
173
198
|
|
|
174
|
-
|
|
199
|
+
// TODO(benesjan): This doesn't map to the underlying oracle name which is just ugly.
|
|
200
|
+
async utilityGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[][]> {
|
|
175
201
|
const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
|
|
176
|
-
const { publicKeys, partialAddress } = await this.typedOracle.
|
|
202
|
+
const { publicKeys, partialAddress } = await this.typedOracle.utilityGetCompleteAddress(parsedAddress);
|
|
177
203
|
|
|
178
204
|
return [[...publicKeys.toFields(), partialAddress].map(toACVMField)];
|
|
179
205
|
}
|
|
180
206
|
|
|
181
|
-
async
|
|
207
|
+
async utilityGetNotes(
|
|
182
208
|
[storageSlot]: ACVMField[],
|
|
183
209
|
[numSelects]: ACVMField[],
|
|
184
210
|
selectByIndexes: ACVMField[],
|
|
@@ -196,7 +222,7 @@ export class Oracle {
|
|
|
196
222
|
[maxNotes]: ACVMField[],
|
|
197
223
|
[packedRetrievedNoteLength]: ACVMField[],
|
|
198
224
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
199
|
-
const noteDatas = await this.typedOracle.
|
|
225
|
+
const noteDatas = await this.typedOracle.utilityGetNotes(
|
|
200
226
|
Fr.fromString(storageSlot),
|
|
201
227
|
+numSelects,
|
|
202
228
|
selectByIndexes.map(s => +s),
|
|
@@ -220,33 +246,25 @@ export class Oracle {
|
|
|
220
246
|
}
|
|
221
247
|
}
|
|
222
248
|
|
|
223
|
-
|
|
224
|
-
// array is structured as [contract_address, note_nonce, nonzero_note_hash_counter, ...packed_note].
|
|
225
|
-
|
|
226
|
-
const returnDataAsArrayOfArrays = noteDatas.map(({ contractAddress, noteNonce, index, note }) => {
|
|
227
|
-
// If index is undefined, the note is transient which implies that the nonzero_note_hash_counter has to be true
|
|
228
|
-
const noteIsTransient = index === undefined;
|
|
229
|
-
const nonzeroNoteHashCounter = noteIsTransient ? true : false;
|
|
230
|
-
// If you change the array on the next line you have to change the `unpack_retrieved_note` function in
|
|
231
|
-
// `aztec/src/note/retrieved_note.nr`
|
|
232
|
-
return [contractAddress, noteNonce, nonzeroNoteHashCounter, ...note.items];
|
|
233
|
-
});
|
|
249
|
+
const returnDataAsArrayOfPackedRetrievedNotes = noteDatas.map(packAsRetrievedNote);
|
|
234
250
|
|
|
235
251
|
// Now we convert each sub-array to an array of ACVMField
|
|
236
|
-
const returnDataAsArrayOfACVMFieldArrays =
|
|
252
|
+
const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfPackedRetrievedNotes.map(subArray =>
|
|
253
|
+
subArray.map(toACVMField),
|
|
254
|
+
);
|
|
237
255
|
|
|
238
256
|
// At last we convert the array of arrays to a bounded vec of arrays
|
|
239
257
|
return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedRetrievedNoteLength);
|
|
240
258
|
}
|
|
241
259
|
|
|
242
|
-
|
|
260
|
+
privateNotifyCreatedNote(
|
|
243
261
|
[storageSlot]: ACVMField[],
|
|
244
262
|
[noteTypeId]: ACVMField[],
|
|
245
263
|
note: ACVMField[],
|
|
246
264
|
[noteHash]: ACVMField[],
|
|
247
265
|
[counter]: ACVMField[],
|
|
248
266
|
): Promise<ACVMField[]> {
|
|
249
|
-
this.typedOracle.
|
|
267
|
+
this.typedOracle.privateNotifyCreatedNote(
|
|
250
268
|
Fr.fromString(storageSlot),
|
|
251
269
|
NoteSelector.fromField(Fr.fromString(noteTypeId)),
|
|
252
270
|
note.map(Fr.fromString),
|
|
@@ -256,31 +274,31 @@ export class Oracle {
|
|
|
256
274
|
return Promise.resolve([]);
|
|
257
275
|
}
|
|
258
276
|
|
|
259
|
-
async
|
|
277
|
+
async privateNotifyNullifiedNote(
|
|
260
278
|
[innerNullifier]: ACVMField[],
|
|
261
279
|
[noteHash]: ACVMField[],
|
|
262
280
|
[counter]: ACVMField[],
|
|
263
281
|
): Promise<ACVMField[]> {
|
|
264
|
-
await this.typedOracle.
|
|
282
|
+
await this.typedOracle.privateNotifyNullifiedNote(Fr.fromString(innerNullifier), Fr.fromString(noteHash), +counter);
|
|
265
283
|
return [];
|
|
266
284
|
}
|
|
267
285
|
|
|
268
|
-
async
|
|
269
|
-
await this.typedOracle.
|
|
286
|
+
async privateNotifyCreatedNullifier([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
|
|
287
|
+
await this.typedOracle.privateNotifyCreatedNullifier(Fr.fromString(innerNullifier));
|
|
270
288
|
return [];
|
|
271
289
|
}
|
|
272
290
|
|
|
273
|
-
async
|
|
274
|
-
const exists = await this.typedOracle.
|
|
291
|
+
async utilityCheckNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
|
|
292
|
+
const exists = await this.typedOracle.utilityCheckNullifierExists(Fr.fromString(innerNullifier));
|
|
275
293
|
return [toACVMField(exists)];
|
|
276
294
|
}
|
|
277
295
|
|
|
278
|
-
async
|
|
296
|
+
async utilityGetL1ToL2MembershipWitness(
|
|
279
297
|
[contractAddress]: ACVMField[],
|
|
280
298
|
[messageHash]: ACVMField[],
|
|
281
299
|
[secret]: ACVMField[],
|
|
282
300
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
283
|
-
const message = await this.typedOracle.
|
|
301
|
+
const message = await this.typedOracle.utilityGetL1ToL2MembershipWitness(
|
|
284
302
|
AztecAddress.fromString(contractAddress),
|
|
285
303
|
Fr.fromString(messageHash),
|
|
286
304
|
Fr.fromString(secret),
|
|
@@ -288,13 +306,13 @@ export class Oracle {
|
|
|
288
306
|
return message.toNoirRepresentation();
|
|
289
307
|
}
|
|
290
308
|
|
|
291
|
-
async
|
|
309
|
+
async utilityStorageRead(
|
|
292
310
|
[contractAddress]: ACVMField[],
|
|
293
311
|
[startStorageSlot]: ACVMField[],
|
|
294
312
|
[blockNumber]: ACVMField[],
|
|
295
313
|
[numberOfElements]: ACVMField[],
|
|
296
314
|
): Promise<ACVMField[][]> {
|
|
297
|
-
const values = await this.typedOracle.
|
|
315
|
+
const values = await this.typedOracle.utilityStorageRead(
|
|
298
316
|
new AztecAddress(Fr.fromString(contractAddress)),
|
|
299
317
|
Fr.fromString(startStorageSlot),
|
|
300
318
|
+blockNumber,
|
|
@@ -303,12 +321,7 @@ export class Oracle {
|
|
|
303
321
|
return [values.map(toACVMField)];
|
|
304
322
|
}
|
|
305
323
|
|
|
306
|
-
|
|
307
|
-
const newValues = await this.typedOracle.storageWrite(Fr.fromString(startStorageSlot), values.map(Fr.fromString));
|
|
308
|
-
return newValues.map(toACVMField);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
notifyCreatedContractClassLog(
|
|
324
|
+
privateNotifyCreatedContractClassLog(
|
|
312
325
|
[contractAddress]: ACVMField[],
|
|
313
326
|
message: ACVMField[],
|
|
314
327
|
[length]: ACVMField[],
|
|
@@ -317,25 +330,27 @@ export class Oracle {
|
|
|
317
330
|
const logFields = new ContractClassLogFields(message.map(Fr.fromString));
|
|
318
331
|
const log = new ContractClassLog(new AztecAddress(Fr.fromString(contractAddress)), logFields, +length);
|
|
319
332
|
|
|
320
|
-
this.typedOracle.
|
|
333
|
+
this.typedOracle.privateNotifyCreatedContractClassLog(log, +counter);
|
|
321
334
|
return Promise.resolve([]);
|
|
322
335
|
}
|
|
323
336
|
|
|
324
|
-
|
|
337
|
+
utilityDebugLog(message: ACVMField[], _ignoredFieldsSize: ACVMField[], fields: ACVMField[]): Promise<ACVMField[]> {
|
|
325
338
|
const messageStr = message.map(acvmField => String.fromCharCode(Fr.fromString(acvmField).toNumber())).join('');
|
|
326
339
|
const fieldsFr = fields.map(Fr.fromString);
|
|
327
|
-
this.typedOracle.
|
|
340
|
+
this.typedOracle.utilityDebugLog(messageStr, fieldsFr);
|
|
328
341
|
return Promise.resolve([]);
|
|
329
342
|
}
|
|
330
343
|
|
|
331
|
-
|
|
344
|
+
// This function's name is directly hardcoded in `circuit_recorder.ts`. Don't forget to update it there if you
|
|
345
|
+
// change the name here.
|
|
346
|
+
async privateCallPrivateFunction(
|
|
332
347
|
[contractAddress]: ACVMField[],
|
|
333
348
|
[functionSelector]: ACVMField[],
|
|
334
349
|
[argsHash]: ACVMField[],
|
|
335
350
|
[sideEffectCounter]: ACVMField[],
|
|
336
351
|
[isStaticCall]: ACVMField[],
|
|
337
352
|
): Promise<ACVMField[][]> {
|
|
338
|
-
const { endSideEffectCounter, returnsHash } = await this.typedOracle.
|
|
353
|
+
const { endSideEffectCounter, returnsHash } = await this.typedOracle.privateCallPrivateFunction(
|
|
339
354
|
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
340
355
|
FunctionSelector.fromField(Fr.fromString(functionSelector)),
|
|
341
356
|
Fr.fromString(argsHash),
|
|
@@ -345,13 +360,13 @@ export class Oracle {
|
|
|
345
360
|
return [[endSideEffectCounter, returnsHash].map(toACVMField)];
|
|
346
361
|
}
|
|
347
362
|
|
|
348
|
-
async
|
|
363
|
+
async privateNotifyEnqueuedPublicFunctionCall(
|
|
349
364
|
[contractAddress]: ACVMField[],
|
|
350
365
|
[calldataHash]: ACVMField[],
|
|
351
366
|
[sideEffectCounter]: ACVMField[],
|
|
352
367
|
[isStaticCall]: ACVMField[],
|
|
353
368
|
): Promise<ACVMField[]> {
|
|
354
|
-
await this.typedOracle.
|
|
369
|
+
await this.typedOracle.privateNotifyEnqueuedPublicFunctionCall(
|
|
355
370
|
AztecAddress.fromString(contractAddress),
|
|
356
371
|
Fr.fromString(calldataHash),
|
|
357
372
|
Fr.fromString(sideEffectCounter).toNumber(),
|
|
@@ -360,13 +375,13 @@ export class Oracle {
|
|
|
360
375
|
return [];
|
|
361
376
|
}
|
|
362
377
|
|
|
363
|
-
async
|
|
378
|
+
async privateNotifySetPublicTeardownFunctionCall(
|
|
364
379
|
[contractAddress]: ACVMField[],
|
|
365
380
|
[calldataHash]: ACVMField[],
|
|
366
381
|
[sideEffectCounter]: ACVMField[],
|
|
367
382
|
[isStaticCall]: ACVMField[],
|
|
368
383
|
): Promise<ACVMField[]> {
|
|
369
|
-
await this.typedOracle.
|
|
384
|
+
await this.typedOracle.privateNotifySetPublicTeardownFunctionCall(
|
|
370
385
|
AztecAddress.fromString(contractAddress),
|
|
371
386
|
Fr.fromString(calldataHash),
|
|
372
387
|
Fr.fromString(sideEffectCounter).toNumber(),
|
|
@@ -375,40 +390,45 @@ export class Oracle {
|
|
|
375
390
|
return [];
|
|
376
391
|
}
|
|
377
392
|
|
|
378
|
-
async
|
|
379
|
-
|
|
393
|
+
async privateNotifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]): Promise<
|
|
394
|
+
ACVMField[]
|
|
395
|
+
> {
|
|
396
|
+
await this.typedOracle.privateNotifySetMinRevertibleSideEffectCounter(
|
|
380
397
|
Fr.fromString(minRevertibleSideEffectCounter).toNumber(),
|
|
381
398
|
);
|
|
382
399
|
return Promise.resolve([]);
|
|
383
400
|
}
|
|
384
401
|
|
|
385
|
-
async
|
|
386
|
-
const taggingSecret = await this.typedOracle.
|
|
402
|
+
async utilityGetIndexedTaggingSecretAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
|
|
403
|
+
const taggingSecret = await this.typedOracle.utilityGetIndexedTaggingSecretAsSender(
|
|
387
404
|
AztecAddress.fromString(sender),
|
|
388
405
|
AztecAddress.fromString(recipient),
|
|
389
406
|
);
|
|
390
407
|
return taggingSecret.toFields().map(toACVMField);
|
|
391
408
|
}
|
|
392
409
|
|
|
393
|
-
async
|
|
394
|
-
|
|
410
|
+
async privateIncrementAppTaggingSecretIndexAsSender(
|
|
411
|
+
[sender]: ACVMField[],
|
|
412
|
+
[recipient]: ACVMField[],
|
|
413
|
+
): Promise<ACVMField[]> {
|
|
414
|
+
await this.typedOracle.privateIncrementAppTaggingSecretIndexAsSender(
|
|
395
415
|
AztecAddress.fromString(sender),
|
|
396
416
|
AztecAddress.fromString(recipient),
|
|
397
417
|
);
|
|
398
418
|
return [];
|
|
399
419
|
}
|
|
400
420
|
|
|
401
|
-
async
|
|
402
|
-
await this.typedOracle.
|
|
421
|
+
async utilityFetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
|
|
422
|
+
await this.typedOracle.utilityFetchTaggedLogs(Fr.fromString(pendingTaggedLogArrayBaseSlot));
|
|
403
423
|
return [];
|
|
404
424
|
}
|
|
405
425
|
|
|
406
|
-
async
|
|
426
|
+
async utilityValidateEnqueuedNotesAndEvents(
|
|
407
427
|
[contractAddress]: ACVMField[],
|
|
408
428
|
[noteValidationRequestsArrayBaseSlot]: ACVMField[],
|
|
409
429
|
[eventValidationRequestsArrayBaseSlot]: ACVMField[],
|
|
410
430
|
): Promise<ACVMField[]> {
|
|
411
|
-
await this.typedOracle.
|
|
431
|
+
await this.typedOracle.utilityValidateEnqueuedNotesAndEvents(
|
|
412
432
|
AztecAddress.fromString(contractAddress),
|
|
413
433
|
Fr.fromString(noteValidationRequestsArrayBaseSlot),
|
|
414
434
|
Fr.fromString(eventValidationRequestsArrayBaseSlot),
|
|
@@ -417,12 +437,12 @@ export class Oracle {
|
|
|
417
437
|
return [];
|
|
418
438
|
}
|
|
419
439
|
|
|
420
|
-
async
|
|
440
|
+
async utilityBulkRetrieveLogs(
|
|
421
441
|
[contractAddress]: ACVMField[],
|
|
422
442
|
[logRetrievalRequestsArrayBaseSlot]: ACVMField[],
|
|
423
443
|
[logRetrievalResponsesArrayBaseSlot]: ACVMField[],
|
|
424
444
|
): Promise<ACVMField[]> {
|
|
425
|
-
await this.typedOracle.
|
|
445
|
+
await this.typedOracle.utilityBulkRetrieveLogs(
|
|
426
446
|
AztecAddress.fromString(contractAddress),
|
|
427
447
|
Fr.fromString(logRetrievalRequestsArrayBaseSlot),
|
|
428
448
|
Fr.fromString(logRetrievalResponsesArrayBaseSlot),
|
|
@@ -430,8 +450,12 @@ export class Oracle {
|
|
|
430
450
|
return [];
|
|
431
451
|
}
|
|
432
452
|
|
|
433
|
-
async
|
|
434
|
-
|
|
453
|
+
async utilityStoreCapsule(
|
|
454
|
+
[contractAddress]: ACVMField[],
|
|
455
|
+
[slot]: ACVMField[],
|
|
456
|
+
capsule: ACVMField[],
|
|
457
|
+
): Promise<ACVMField[]> {
|
|
458
|
+
await this.typedOracle.utilityStoreCapsule(
|
|
435
459
|
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
436
460
|
Fr.fromString(slot),
|
|
437
461
|
capsule.map(Fr.fromString),
|
|
@@ -439,12 +463,12 @@ export class Oracle {
|
|
|
439
463
|
return [];
|
|
440
464
|
}
|
|
441
465
|
|
|
442
|
-
async
|
|
466
|
+
async utilityLoadCapsule(
|
|
443
467
|
[contractAddress]: ACVMField[],
|
|
444
468
|
[slot]: ACVMField[],
|
|
445
469
|
[tSize]: ACVMField[],
|
|
446
470
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
447
|
-
const values = await this.typedOracle.
|
|
471
|
+
const values = await this.typedOracle.utilityLoadCapsule(
|
|
448
472
|
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
449
473
|
Fr.fromString(slot),
|
|
450
474
|
);
|
|
@@ -460,18 +484,21 @@ export class Oracle {
|
|
|
460
484
|
}
|
|
461
485
|
}
|
|
462
486
|
|
|
463
|
-
async
|
|
464
|
-
await this.typedOracle.
|
|
487
|
+
async utilityDeleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
|
|
488
|
+
await this.typedOracle.utilityDeleteCapsule(
|
|
489
|
+
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
490
|
+
Fr.fromString(slot),
|
|
491
|
+
);
|
|
465
492
|
return [];
|
|
466
493
|
}
|
|
467
494
|
|
|
468
|
-
async
|
|
495
|
+
async utilityCopyCapsule(
|
|
469
496
|
[contractAddress]: ACVMField[],
|
|
470
497
|
[srcSlot]: ACVMField[],
|
|
471
498
|
[dstSlot]: ACVMField[],
|
|
472
499
|
[numEntries]: ACVMField[],
|
|
473
500
|
): Promise<ACVMField[]> {
|
|
474
|
-
await this.typedOracle.
|
|
501
|
+
await this.typedOracle.utilityCopyCapsule(
|
|
475
502
|
AztecAddress.fromField(Fr.fromString(contractAddress)),
|
|
476
503
|
Fr.fromString(srcSlot),
|
|
477
504
|
Fr.fromString(dstSlot),
|
|
@@ -480,7 +507,7 @@ export class Oracle {
|
|
|
480
507
|
return [];
|
|
481
508
|
}
|
|
482
509
|
|
|
483
|
-
async
|
|
510
|
+
async utilityAes128Decrypt(
|
|
484
511
|
ciphertextBVecStorage: ACVMField[],
|
|
485
512
|
[ciphertextLength]: ACVMField[],
|
|
486
513
|
iv: ACVMField[],
|
|
@@ -490,25 +517,36 @@ export class Oracle {
|
|
|
490
517
|
const ivBuffer = fromUintArray(iv, 8);
|
|
491
518
|
const symKeyBuffer = fromUintArray(symKey, 8);
|
|
492
519
|
|
|
493
|
-
const plaintext = await this.typedOracle.
|
|
520
|
+
const plaintext = await this.typedOracle.utilityAes128Decrypt(ciphertext, ivBuffer, symKeyBuffer);
|
|
494
521
|
return bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
|
|
495
522
|
}
|
|
496
523
|
|
|
497
|
-
async
|
|
524
|
+
async utilityGetSharedSecret(
|
|
498
525
|
[address]: ACVMField[],
|
|
499
526
|
[ephPKField0]: ACVMField[],
|
|
500
527
|
[ephPKField1]: ACVMField[],
|
|
501
528
|
[ephPKField2]: ACVMField[],
|
|
502
529
|
): Promise<ACVMField[]> {
|
|
503
|
-
const secret = await this.typedOracle.
|
|
530
|
+
const secret = await this.typedOracle.utilityGetSharedSecret(
|
|
504
531
|
AztecAddress.fromField(Fr.fromString(address)),
|
|
505
532
|
Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
|
|
506
533
|
);
|
|
507
534
|
return secret.toFields().map(toACVMField);
|
|
508
535
|
}
|
|
509
536
|
|
|
510
|
-
async
|
|
511
|
-
await this.typedOracle.
|
|
537
|
+
async utilityEmitOffchainEffect(data: ACVMField[]) {
|
|
538
|
+
await this.typedOracle.utilityEmitOffchainEffect(data.map(Fr.fromString));
|
|
539
|
+
return [];
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
async privateGetSenderForTags(): Promise<ACVMField[]> {
|
|
543
|
+
const sender = await this.typedOracle.privateGetSenderForTags();
|
|
544
|
+
// Return [1, address] for Some(address), [0, 0] for None
|
|
545
|
+
return sender ? [toACVMField(1n), toACVMField(sender)] : [toACVMField(0n), toACVMField(0n)];
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
async privateSetSenderForTags([senderForTags]: ACVMField[]): Promise<ACVMField[]> {
|
|
549
|
+
await this.typedOracle.privateSetSenderForTags(AztecAddress.fromField(Fr.fromString(senderForTags)));
|
|
512
550
|
return [];
|
|
513
551
|
}
|
|
514
552
|
}
|