@aztec/txe 0.0.1-commit.96dac018d → 0.0.1-commit.9badcec54
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/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +8 -6
- package/dest/oracle/interfaces.d.ts +28 -28
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.d.ts +13 -13
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +12 -12
- package/dest/oracle/txe_oracle_top_level_context.d.ts +27 -21
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +56 -39
- package/dest/rpc_translator.d.ts +120 -82
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +372 -162
- package/dest/state_machine/archiver.d.ts +3 -3
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +7 -8
- package/dest/state_machine/dummy_p2p_client.d.ts +3 -2
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +5 -2
- package/dest/state_machine/global_variable_builder.d.ts +9 -4
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
- package/dest/state_machine/global_variable_builder.js +9 -3
- package/dest/state_machine/index.d.ts +4 -2
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +8 -4
- package/dest/state_machine/mock_epoch_cache.d.ts +18 -3
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +35 -2
- package/dest/state_machine/synchronizer.d.ts +5 -5
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/state_machine/synchronizer.js +3 -3
- package/dest/txe_session.d.ts +4 -3
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +27 -15
- package/dest/util/encoding.d.ts +71 -1
- package/dest/util/encoding.d.ts.map +1 -1
- package/dest/util/encoding.js +4 -0
- package/dest/util/txe_public_contract_data_source.d.ts +1 -1
- package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.js +1 -3
- package/package.json +15 -15
- package/src/index.ts +8 -5
- package/src/oracle/interfaces.ts +27 -31
- package/src/oracle/txe_oracle_public_context.ts +12 -12
- package/src/oracle/txe_oracle_top_level_context.ts +66 -43
- package/src/rpc_translator.ts +431 -183
- package/src/state_machine/archiver.ts +6 -5
- package/src/state_machine/dummy_p2p_client.ts +6 -2
- package/src/state_machine/global_variable_builder.ts +18 -3
- package/src/state_machine/index.ts +8 -2
- package/src/state_machine/mock_epoch_cache.ts +46 -3
- package/src/state_machine/synchronizer.ts +4 -4
- package/src/txe_session.ts +29 -13
- package/src/util/encoding.ts +5 -0
- package/src/util/txe_public_contract_data_source.ts +0 -2
package/dest/rpc_translator.js
CHANGED
|
@@ -4,9 +4,8 @@ import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
|
4
4
|
import { packAsHintedNote } from '@aztec/pxe/simulator';
|
|
5
5
|
import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
|
|
6
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
const MAX_EVENT_LEN = 12; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_RESERVED_FIELDS
|
|
7
|
+
import { addressFromSingle, arrayOfArraysToBoundedVecOfArrays, arrayToBoundedVec, blockHashFromSingle, bufferToU8Array, fromArray, fromSingle, fromUintArray, fromUintBoundedVec, toArray, toForeignCallResult, toSingle } from './util/encoding.js';
|
|
8
|
+
const MAX_EVENT_LEN = 10; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN
|
|
10
9
|
const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
|
|
11
10
|
export class UnavailableOracleError extends Error {
|
|
12
11
|
constructor(oracleName){
|
|
@@ -61,59 +60,69 @@ export class RPCTranslator {
|
|
|
61
60
|
return this.oracleHandler;
|
|
62
61
|
}
|
|
63
62
|
// TXE session state transition functions - these get handled by the state handler
|
|
64
|
-
|
|
63
|
+
// eslint-disable-next-line camelcase
|
|
64
|
+
async aztec_txe_setTopLevelTXEContext() {
|
|
65
65
|
await this.stateHandler.enterTopLevelState();
|
|
66
66
|
return toForeignCallResult([]);
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
// eslint-disable-next-line camelcase
|
|
69
|
+
async aztec_txe_setPrivateTXEContext(foreignContractAddressIsSome, foreignContractAddressValue, foreignAnchorBlockNumberIsSome, foreignAnchorBlockNumberValue) {
|
|
69
70
|
const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
|
|
70
71
|
const anchorBlockNumber = fromSingle(foreignAnchorBlockNumberIsSome).toBool() ? BlockNumber(fromSingle(foreignAnchorBlockNumberValue).toNumber()) : undefined;
|
|
71
72
|
const privateContextInputs = await this.stateHandler.enterPrivateState(contractAddress, anchorBlockNumber);
|
|
72
73
|
return toForeignCallResult(privateContextInputs.toFields().map(toSingle));
|
|
73
74
|
}
|
|
74
|
-
|
|
75
|
+
// eslint-disable-next-line camelcase
|
|
76
|
+
async aztec_txe_setPublicTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
|
|
75
77
|
const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
|
|
76
78
|
await this.stateHandler.enterPublicState(contractAddress);
|
|
77
79
|
return toForeignCallResult([]);
|
|
78
80
|
}
|
|
79
|
-
|
|
81
|
+
// eslint-disable-next-line camelcase
|
|
82
|
+
async aztec_txe_setUtilityTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
|
|
80
83
|
const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
|
|
81
84
|
await this.stateHandler.enterUtilityState(contractAddress);
|
|
82
85
|
return toForeignCallResult([]);
|
|
83
86
|
}
|
|
84
87
|
// Other oracles - these get handled by the oracle handler
|
|
85
88
|
// TXE-specific oracles
|
|
86
|
-
|
|
87
|
-
|
|
89
|
+
// eslint-disable-next-line camelcase
|
|
90
|
+
aztec_txe_getDefaultAddress() {
|
|
91
|
+
const defaultAddress = this.handlerAsTxe().getDefaultAddress();
|
|
88
92
|
return toForeignCallResult([
|
|
89
93
|
toSingle(defaultAddress)
|
|
90
94
|
]);
|
|
91
95
|
}
|
|
92
|
-
|
|
93
|
-
|
|
96
|
+
// eslint-disable-next-line camelcase
|
|
97
|
+
async aztec_txe_getNextBlockNumber() {
|
|
98
|
+
const nextBlockNumber = await this.handlerAsTxe().getNextBlockNumber();
|
|
94
99
|
return toForeignCallResult([
|
|
95
100
|
toSingle(nextBlockNumber)
|
|
96
101
|
]);
|
|
97
102
|
}
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
// eslint-disable-next-line camelcase
|
|
104
|
+
async aztec_txe_getNextBlockTimestamp() {
|
|
105
|
+
const nextBlockTimestamp = await this.handlerAsTxe().getNextBlockTimestamp();
|
|
100
106
|
return toForeignCallResult([
|
|
101
107
|
toSingle(nextBlockTimestamp)
|
|
102
108
|
]);
|
|
103
109
|
}
|
|
104
|
-
|
|
110
|
+
// eslint-disable-next-line camelcase
|
|
111
|
+
async aztec_txe_advanceBlocksBy(foreignBlocks) {
|
|
105
112
|
const blocks = fromSingle(foreignBlocks).toNumber();
|
|
106
|
-
await this.handlerAsTxe().
|
|
113
|
+
await this.handlerAsTxe().advanceBlocksBy(blocks);
|
|
107
114
|
return toForeignCallResult([]);
|
|
108
115
|
}
|
|
109
|
-
|
|
116
|
+
// eslint-disable-next-line camelcase
|
|
117
|
+
aztec_txe_advanceTimestampBy(foreignDuration) {
|
|
110
118
|
const duration = fromSingle(foreignDuration).toBigInt();
|
|
111
|
-
this.handlerAsTxe().
|
|
119
|
+
this.handlerAsTxe().advanceTimestampBy(duration);
|
|
112
120
|
return toForeignCallResult([]);
|
|
113
121
|
}
|
|
114
|
-
|
|
122
|
+
// eslint-disable-next-line camelcase
|
|
123
|
+
async aztec_txe_deploy(artifact, instance, foreignSecret) {
|
|
115
124
|
const secret = fromSingle(foreignSecret);
|
|
116
|
-
await this.handlerAsTxe().
|
|
125
|
+
await this.handlerAsTxe().deploy(artifact, instance, secret);
|
|
117
126
|
return toForeignCallResult([
|
|
118
127
|
toArray([
|
|
119
128
|
instance.salt,
|
|
@@ -124,55 +133,64 @@ export class RPCTranslator {
|
|
|
124
133
|
])
|
|
125
134
|
]);
|
|
126
135
|
}
|
|
127
|
-
|
|
136
|
+
// eslint-disable-next-line camelcase
|
|
137
|
+
async aztec_txe_createAccount(foreignSecret) {
|
|
128
138
|
const secret = fromSingle(foreignSecret);
|
|
129
|
-
const completeAddress = await this.handlerAsTxe().
|
|
139
|
+
const completeAddress = await this.handlerAsTxe().createAccount(secret);
|
|
130
140
|
return toForeignCallResult([
|
|
131
141
|
toSingle(completeAddress.address),
|
|
132
142
|
...completeAddress.publicKeys.toFields().map(toSingle)
|
|
133
143
|
]);
|
|
134
144
|
}
|
|
135
|
-
|
|
145
|
+
// eslint-disable-next-line camelcase
|
|
146
|
+
async aztec_txe_addAccount(artifact, instance, foreignSecret) {
|
|
136
147
|
const secret = fromSingle(foreignSecret);
|
|
137
|
-
const completeAddress = await this.handlerAsTxe().
|
|
148
|
+
const completeAddress = await this.handlerAsTxe().addAccount(artifact, instance, secret);
|
|
138
149
|
return toForeignCallResult([
|
|
139
150
|
toSingle(completeAddress.address),
|
|
140
151
|
...completeAddress.publicKeys.toFields().map(toSingle)
|
|
141
152
|
]);
|
|
142
153
|
}
|
|
143
|
-
|
|
154
|
+
// eslint-disable-next-line camelcase
|
|
155
|
+
async aztec_txe_addAuthWitness(foreignAddress, foreignMessageHash) {
|
|
144
156
|
const address = addressFromSingle(foreignAddress);
|
|
145
157
|
const messageHash = fromSingle(foreignMessageHash);
|
|
146
|
-
await this.handlerAsTxe().
|
|
158
|
+
await this.handlerAsTxe().addAuthWitness(address, messageHash);
|
|
147
159
|
return toForeignCallResult([]);
|
|
148
160
|
}
|
|
149
161
|
// PXE oracles
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
162
|
+
// eslint-disable-next-line camelcase
|
|
163
|
+
aztec_utl_assertCompatibleOracleVersionV2(foreignMajor, foreignMinor) {
|
|
164
|
+
const major = fromSingle(foreignMajor).toNumber();
|
|
165
|
+
const minor = fromSingle(foreignMinor).toNumber();
|
|
166
|
+
this.handlerAsMisc().assertCompatibleOracleVersion(major, minor);
|
|
153
167
|
return toForeignCallResult([]);
|
|
154
168
|
}
|
|
155
|
-
|
|
156
|
-
|
|
169
|
+
// eslint-disable-next-line camelcase
|
|
170
|
+
aztec_utl_getRandomField() {
|
|
171
|
+
const randomField = this.handlerAsMisc().getRandomField();
|
|
157
172
|
return toForeignCallResult([
|
|
158
173
|
toSingle(randomField)
|
|
159
174
|
]);
|
|
160
175
|
}
|
|
161
|
-
|
|
162
|
-
|
|
176
|
+
// eslint-disable-next-line camelcase
|
|
177
|
+
async aztec_txe_getLastBlockTimestamp() {
|
|
178
|
+
const timestamp = await this.handlerAsTxe().getLastBlockTimestamp();
|
|
163
179
|
return toForeignCallResult([
|
|
164
180
|
toSingle(new Fr(timestamp))
|
|
165
181
|
]);
|
|
166
182
|
}
|
|
167
|
-
|
|
168
|
-
|
|
183
|
+
// eslint-disable-next-line camelcase
|
|
184
|
+
async aztec_txe_getLastTxEffects() {
|
|
185
|
+
const { txHash, noteHashes, nullifiers } = await this.handlerAsTxe().getLastTxEffects();
|
|
169
186
|
return toForeignCallResult([
|
|
170
187
|
toSingle(txHash.hash),
|
|
171
188
|
...arrayToBoundedVec(toArray(noteHashes), MAX_NOTE_HASHES_PER_TX),
|
|
172
189
|
...arrayToBoundedVec(toArray(nullifiers), MAX_NULLIFIERS_PER_TX)
|
|
173
190
|
]);
|
|
174
191
|
}
|
|
175
|
-
|
|
192
|
+
// eslint-disable-next-line camelcase
|
|
193
|
+
async aztec_txe_getPrivateEvents(foreignSelector, foreignContractAddress, foreignScope) {
|
|
176
194
|
const selector = EventSelector.fromField(fromSingle(foreignSelector));
|
|
177
195
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
178
196
|
const scope = addressFromSingle(foreignScope);
|
|
@@ -182,7 +200,7 @@ export class RPCTranslator {
|
|
|
182
200
|
// We cycle job to commit the stores after the contract sync.
|
|
183
201
|
await this.stateHandler.cycleJob();
|
|
184
202
|
}
|
|
185
|
-
const events = await this.handlerAsTxe().
|
|
203
|
+
const events = await this.handlerAsTxe().getPrivateEvents(selector, contractAddress, scope);
|
|
186
204
|
if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
|
|
187
205
|
throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
|
|
188
206
|
}
|
|
@@ -200,48 +218,54 @@ export class RPCTranslator {
|
|
|
200
218
|
toSingle(queryLength)
|
|
201
219
|
]);
|
|
202
220
|
}
|
|
203
|
-
|
|
221
|
+
// eslint-disable-next-line camelcase
|
|
222
|
+
aztec_prv_setHashPreimage(foreignValues, foreignHash) {
|
|
204
223
|
const values = fromArray(foreignValues);
|
|
205
224
|
const hash = fromSingle(foreignHash);
|
|
206
|
-
this.handlerAsPrivate().
|
|
225
|
+
this.handlerAsPrivate().setHashPreimage(values, hash);
|
|
207
226
|
return toForeignCallResult([]);
|
|
208
227
|
}
|
|
209
|
-
|
|
228
|
+
// eslint-disable-next-line camelcase
|
|
229
|
+
async aztec_prv_getHashPreimage(foreignHash) {
|
|
210
230
|
const hash = fromSingle(foreignHash);
|
|
211
|
-
const returns = await this.handlerAsPrivate().
|
|
231
|
+
const returns = await this.handlerAsPrivate().getHashPreimage(hash);
|
|
212
232
|
return toForeignCallResult([
|
|
213
233
|
toArray(returns)
|
|
214
234
|
]);
|
|
215
235
|
}
|
|
216
236
|
// When the argument is a slice, noir automatically adds a length field to oracle call.
|
|
217
237
|
// When the argument is an array, we add the field length manually to the signature.
|
|
218
|
-
|
|
238
|
+
// eslint-disable-next-line camelcase
|
|
239
|
+
async aztec_utl_log(foreignLevel, foreignMessage, _foreignLength, foreignFields) {
|
|
219
240
|
const level = fromSingle(foreignLevel).toNumber();
|
|
220
241
|
const message = fromArray(foreignMessage).map((field)=>String.fromCharCode(field.toNumber())).join('');
|
|
221
242
|
const fields = fromArray(foreignFields);
|
|
222
|
-
await this.handlerAsMisc().
|
|
243
|
+
await this.handlerAsMisc().log(level, message, fields);
|
|
223
244
|
return toForeignCallResult([]);
|
|
224
245
|
}
|
|
225
|
-
|
|
226
|
-
|
|
246
|
+
// eslint-disable-next-line camelcase
|
|
247
|
+
async aztec_utl_getFromPublicStorage(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
|
|
248
|
+
const blockHash = blockHashFromSingle(foreignBlockHash);
|
|
227
249
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
228
250
|
const startStorageSlot = fromSingle(foreignStartStorageSlot);
|
|
229
251
|
const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
|
|
230
|
-
const values = await this.handlerAsUtility().
|
|
252
|
+
const values = await this.handlerAsUtility().getFromPublicStorage(blockHash, contractAddress, startStorageSlot, numberOfElements);
|
|
231
253
|
return toForeignCallResult([
|
|
232
254
|
toArray(values)
|
|
233
255
|
]);
|
|
234
256
|
}
|
|
235
|
-
|
|
236
|
-
|
|
257
|
+
// eslint-disable-next-line camelcase
|
|
258
|
+
async aztec_utl_getPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
|
|
259
|
+
const blockHash = blockHashFromSingle(foreignBlockHash);
|
|
237
260
|
const leafSlot = fromSingle(foreignLeafSlot);
|
|
238
|
-
const witness = await this.handlerAsUtility().
|
|
261
|
+
const witness = await this.handlerAsUtility().getPublicDataWitness(blockHash, leafSlot);
|
|
239
262
|
if (!witness) {
|
|
240
263
|
throw new Error(`Public data witness not found for slot ${leafSlot} at block ${blockHash.toString()}.`);
|
|
241
264
|
}
|
|
242
265
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
243
266
|
}
|
|
244
|
-
|
|
267
|
+
// eslint-disable-next-line camelcase
|
|
268
|
+
async aztec_utl_getNotes(foreignOwnerIsSome, foreignOwnerValue, foreignStorageSlot, foreignNumSelects, foreignSelectByIndexes, foreignSelectByOffsets, foreignSelectByLengths, foreignSelectValues, foreignSelectComparators, foreignSortByIndexes, foreignSortByOffsets, foreignSortByLengths, foreignSortOrder, foreignLimit, foreignOffset, foreignStatus, foreignMaxNotes, foreignPackedHintedNoteLength) {
|
|
245
269
|
// Parse Option<AztecAddress>: ownerIsSome is 0 for None, 1 for Some
|
|
246
270
|
const owner = fromSingle(foreignOwnerIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignOwnerValue)) : undefined;
|
|
247
271
|
const storageSlot = fromSingle(foreignStorageSlot);
|
|
@@ -260,7 +284,7 @@ export class RPCTranslator {
|
|
|
260
284
|
const status = fromSingle(foreignStatus).toNumber();
|
|
261
285
|
const maxNotes = fromSingle(foreignMaxNotes).toNumber();
|
|
262
286
|
const packedHintedNoteLength = fromSingle(foreignPackedHintedNoteLength).toNumber();
|
|
263
|
-
const noteDatas = await this.handlerAsUtility().
|
|
287
|
+
const noteDatas = await this.handlerAsUtility().getNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status);
|
|
264
288
|
const returnDataAsArrayOfArrays = noteDatas.map((noteData)=>packAsHintedNote({
|
|
265
289
|
contractAddress: noteData.contractAddress,
|
|
266
290
|
owner: noteData.owner,
|
|
@@ -275,7 +299,8 @@ export class RPCTranslator {
|
|
|
275
299
|
// At last we convert the array of arrays to a bounded vec of arrays
|
|
276
300
|
return toForeignCallResult(arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes, packedHintedNoteLength));
|
|
277
301
|
}
|
|
278
|
-
|
|
302
|
+
// eslint-disable-next-line camelcase
|
|
303
|
+
aztec_prv_notifyCreatedNote(foreignOwner, foreignStorageSlot, foreignRandomness, foreignNoteTypeId, foreignNote, foreignNoteHash, foreignCounter) {
|
|
279
304
|
const owner = addressFromSingle(foreignOwner);
|
|
280
305
|
const storageSlot = fromSingle(foreignStorageSlot);
|
|
281
306
|
const randomness = fromSingle(foreignRandomness);
|
|
@@ -283,39 +308,44 @@ export class RPCTranslator {
|
|
|
283
308
|
const note = fromArray(foreignNote);
|
|
284
309
|
const noteHash = fromSingle(foreignNoteHash);
|
|
285
310
|
const counter = fromSingle(foreignCounter).toNumber();
|
|
286
|
-
this.handlerAsPrivate().
|
|
311
|
+
this.handlerAsPrivate().notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter);
|
|
287
312
|
return toForeignCallResult([]);
|
|
288
313
|
}
|
|
289
|
-
|
|
314
|
+
// eslint-disable-next-line camelcase
|
|
315
|
+
async aztec_prv_notifyNullifiedNote(foreignInnerNullifier, foreignNoteHash, foreignCounter) {
|
|
290
316
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
291
317
|
const noteHash = fromSingle(foreignNoteHash);
|
|
292
318
|
const counter = fromSingle(foreignCounter).toNumber();
|
|
293
|
-
await this.handlerAsPrivate().
|
|
319
|
+
await this.handlerAsPrivate().notifyNullifiedNote(innerNullifier, noteHash, counter);
|
|
294
320
|
return toForeignCallResult([]);
|
|
295
321
|
}
|
|
296
|
-
|
|
322
|
+
// eslint-disable-next-line camelcase
|
|
323
|
+
async aztec_prv_notifyCreatedNullifier(foreignInnerNullifier) {
|
|
297
324
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
298
|
-
await this.handlerAsPrivate().
|
|
325
|
+
await this.handlerAsPrivate().notifyCreatedNullifier(innerNullifier);
|
|
299
326
|
return toForeignCallResult([]);
|
|
300
327
|
}
|
|
301
|
-
|
|
328
|
+
// eslint-disable-next-line camelcase
|
|
329
|
+
async aztec_prv_isNullifierPending(foreignInnerNullifier, foreignContractAddress) {
|
|
302
330
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
303
331
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
304
|
-
const isPending = await this.handlerAsPrivate().
|
|
332
|
+
const isPending = await this.handlerAsPrivate().isNullifierPending(innerNullifier, contractAddress);
|
|
305
333
|
return toForeignCallResult([
|
|
306
334
|
toSingle(new Fr(isPending))
|
|
307
335
|
]);
|
|
308
336
|
}
|
|
309
|
-
|
|
337
|
+
// eslint-disable-next-line camelcase
|
|
338
|
+
async aztec_utl_doesNullifierExist(foreignInnerNullifier) {
|
|
310
339
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
311
|
-
const exists = await this.handlerAsUtility().
|
|
340
|
+
const exists = await this.handlerAsUtility().doesNullifierExist(innerNullifier);
|
|
312
341
|
return toForeignCallResult([
|
|
313
342
|
toSingle(new Fr(exists))
|
|
314
343
|
]);
|
|
315
344
|
}
|
|
316
|
-
|
|
345
|
+
// eslint-disable-next-line camelcase
|
|
346
|
+
async aztec_utl_getContractInstance(foreignAddress) {
|
|
317
347
|
const address = addressFromSingle(foreignAddress);
|
|
318
|
-
const instance = await this.handlerAsUtility().
|
|
348
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
319
349
|
return toForeignCallResult([
|
|
320
350
|
instance.salt,
|
|
321
351
|
instance.deployer.toField(),
|
|
@@ -324,9 +354,10 @@ export class RPCTranslator {
|
|
|
324
354
|
...instance.publicKeys.toFields()
|
|
325
355
|
].map(toSingle));
|
|
326
356
|
}
|
|
327
|
-
|
|
357
|
+
// eslint-disable-next-line camelcase
|
|
358
|
+
async aztec_utl_getPublicKeysAndPartialAddress(foreignAddress) {
|
|
328
359
|
const address = addressFromSingle(foreignAddress);
|
|
329
|
-
const result = await this.handlerAsUtility().
|
|
360
|
+
const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(address);
|
|
330
361
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
331
362
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
332
363
|
if (result === undefined) {
|
|
@@ -346,26 +377,30 @@ export class RPCTranslator {
|
|
|
346
377
|
]);
|
|
347
378
|
}
|
|
348
379
|
}
|
|
349
|
-
|
|
380
|
+
// eslint-disable-next-line camelcase
|
|
381
|
+
async aztec_utl_getKeyValidationRequest(foreignPkMHash) {
|
|
350
382
|
const pkMHash = fromSingle(foreignPkMHash);
|
|
351
|
-
const keyValidationRequest = await this.handlerAsUtility().
|
|
383
|
+
const keyValidationRequest = await this.handlerAsUtility().getKeyValidationRequest(pkMHash);
|
|
352
384
|
return toForeignCallResult(keyValidationRequest.toFields().map(toSingle));
|
|
353
385
|
}
|
|
354
|
-
|
|
386
|
+
// eslint-disable-next-line camelcase
|
|
387
|
+
aztec_prv_callPrivateFunction(_foreignTargetContractAddress, _foreignFunctionSelector, _foreignArgsHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
|
|
355
388
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead');
|
|
356
389
|
}
|
|
357
|
-
|
|
358
|
-
|
|
390
|
+
// eslint-disable-next-line camelcase
|
|
391
|
+
async aztec_utl_getNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
392
|
+
const blockHash = blockHashFromSingle(foreignBlockHash);
|
|
359
393
|
const nullifier = fromSingle(foreignNullifier);
|
|
360
|
-
const witness = await this.handlerAsUtility().
|
|
394
|
+
const witness = await this.handlerAsUtility().getNullifierMembershipWitness(blockHash, nullifier);
|
|
361
395
|
if (!witness) {
|
|
362
396
|
throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
|
|
363
397
|
}
|
|
364
398
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
365
399
|
}
|
|
366
|
-
|
|
400
|
+
// eslint-disable-next-line camelcase
|
|
401
|
+
async aztec_utl_getAuthWitness(foreignMessageHash) {
|
|
367
402
|
const messageHash = fromSingle(foreignMessageHash);
|
|
368
|
-
const authWitness = await this.handlerAsUtility().
|
|
403
|
+
const authWitness = await this.handlerAsUtility().getAuthWitness(messageHash);
|
|
369
404
|
if (!authWitness) {
|
|
370
405
|
throw new Error(`Auth witness not found for message hash ${messageHash}.`);
|
|
371
406
|
}
|
|
@@ -373,92 +408,152 @@ export class RPCTranslator {
|
|
|
373
408
|
toArray(authWitness)
|
|
374
409
|
]);
|
|
375
410
|
}
|
|
376
|
-
|
|
411
|
+
// eslint-disable-next-line camelcase
|
|
412
|
+
aztec_prv_assertValidPublicCalldata(_foreignCalldataHash) {
|
|
377
413
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
378
414
|
}
|
|
379
|
-
|
|
415
|
+
// eslint-disable-next-line camelcase
|
|
416
|
+
aztec_prv_notifyRevertiblePhaseStart(_foreignMinRevertibleSideEffectCounter) {
|
|
380
417
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
381
418
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
}
|
|
385
|
-
async privateIsSideEffectCounterRevertible(foreignSideEffectCounter) {
|
|
419
|
+
// eslint-disable-next-line camelcase
|
|
420
|
+
async aztec_prv_isExecutionInRevertiblePhase(foreignSideEffectCounter) {
|
|
386
421
|
const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
|
|
387
|
-
const isRevertible = await this.handlerAsPrivate().
|
|
422
|
+
const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter);
|
|
388
423
|
return toForeignCallResult([
|
|
389
424
|
toSingle(new Fr(isRevertible))
|
|
390
425
|
]);
|
|
391
426
|
}
|
|
392
|
-
|
|
393
|
-
|
|
427
|
+
// eslint-disable-next-line camelcase
|
|
428
|
+
aztec_utl_getUtilityContext() {
|
|
429
|
+
const context = this.handlerAsUtility().getUtilityContext();
|
|
394
430
|
return toForeignCallResult(context.toNoirRepresentation());
|
|
395
431
|
}
|
|
396
|
-
|
|
432
|
+
// eslint-disable-next-line camelcase
|
|
433
|
+
async aztec_utl_getBlockHeader(foreignBlockNumber) {
|
|
397
434
|
const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
|
|
398
|
-
const header = await this.handlerAsUtility().
|
|
435
|
+
const header = await this.handlerAsUtility().getBlockHeader(blockNumber);
|
|
399
436
|
if (!header) {
|
|
400
437
|
throw new Error(`Block header not found for block ${blockNumber}.`);
|
|
401
438
|
}
|
|
402
439
|
return toForeignCallResult(header.toFields().map(toSingle));
|
|
403
440
|
}
|
|
404
|
-
|
|
405
|
-
|
|
441
|
+
// eslint-disable-next-line camelcase
|
|
442
|
+
async aztec_utl_getNoteHashMembershipWitness(foreignAnchorBlockHash, foreignNoteHash) {
|
|
443
|
+
const blockHash = blockHashFromSingle(foreignAnchorBlockHash);
|
|
406
444
|
const noteHash = fromSingle(foreignNoteHash);
|
|
407
|
-
const witness = await this.handlerAsUtility().
|
|
445
|
+
const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash);
|
|
408
446
|
if (!witness) {
|
|
409
447
|
throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
|
|
410
448
|
}
|
|
411
449
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
412
450
|
}
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
const
|
|
416
|
-
const
|
|
451
|
+
// eslint-disable-next-line camelcase
|
|
452
|
+
async aztec_utl_getBlockHashMembershipWitness(foreignAnchorBlockHash, foreignBlockHash) {
|
|
453
|
+
const anchorBlockHash = blockHashFromSingle(foreignAnchorBlockHash);
|
|
454
|
+
const blockHash = blockHashFromSingle(foreignBlockHash);
|
|
455
|
+
const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
417
456
|
if (!witness) {
|
|
418
457
|
throw new Error(`Block hash ${blockHash.toString()} not found in the archive tree at anchor block ${anchorBlockHash.toString()}.`);
|
|
419
458
|
}
|
|
420
459
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
421
460
|
}
|
|
422
|
-
|
|
423
|
-
|
|
461
|
+
// eslint-disable-next-line camelcase
|
|
462
|
+
async aztec_utl_getLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
463
|
+
const blockHash = blockHashFromSingle(foreignBlockHash);
|
|
424
464
|
const nullifier = fromSingle(foreignNullifier);
|
|
425
|
-
const witness = await this.handlerAsUtility().
|
|
465
|
+
const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
426
466
|
if (!witness) {
|
|
427
467
|
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
|
|
428
468
|
}
|
|
429
469
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
430
470
|
}
|
|
431
|
-
|
|
471
|
+
// eslint-disable-next-line camelcase
|
|
472
|
+
async aztec_utl_getPendingTaggedLogs(foreignPendingTaggedLogArrayBaseSlot, foreignScope) {
|
|
432
473
|
const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
|
|
433
|
-
|
|
474
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
475
|
+
await this.handlerAsUtility().getPendingTaggedLogs(pendingTaggedLogArrayBaseSlot, scope);
|
|
434
476
|
return toForeignCallResult([]);
|
|
435
477
|
}
|
|
436
|
-
|
|
478
|
+
// eslint-disable-next-line camelcase
|
|
479
|
+
async aztec_utl_getPendingTaggedLogs_v2(foreignScope) {
|
|
480
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
481
|
+
const slot = await this.handlerAsUtility().getPendingTaggedLogsV2(scope);
|
|
482
|
+
return toForeignCallResult([
|
|
483
|
+
toSingle(slot)
|
|
484
|
+
]);
|
|
485
|
+
}
|
|
486
|
+
// eslint-disable-next-line camelcase
|
|
487
|
+
async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(foreignContractAddress, foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot, foreignMaxNotePackedLen, foreignMaxEventSerializedLen, foreignScope) {
|
|
437
488
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
438
489
|
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
439
490
|
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
440
|
-
|
|
491
|
+
const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
|
|
492
|
+
const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
|
|
493
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
494
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot, maxNotePackedLen, maxEventSerializedLen, scope);
|
|
495
|
+
return toForeignCallResult([]);
|
|
496
|
+
}
|
|
497
|
+
// eslint-disable-next-line camelcase
|
|
498
|
+
async aztec_utl_validateAndStoreEnqueuedNotesAndEvents_v2(foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot, foreignMaxNotePackedLen, foreignMaxEventSerializedLen, foreignScope) {
|
|
499
|
+
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
500
|
+
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
501
|
+
const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
|
|
502
|
+
const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
|
|
503
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
504
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEventsV2(noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot, maxNotePackedLen, maxEventSerializedLen, scope);
|
|
441
505
|
return toForeignCallResult([]);
|
|
442
506
|
}
|
|
443
|
-
|
|
507
|
+
// eslint-disable-next-line camelcase
|
|
508
|
+
async aztec_utl_getLogsByTag(foreignContractAddress, foreignLogRetrievalRequestsArrayBaseSlot, foreignLogRetrievalResponsesArrayBaseSlot, foreignScope) {
|
|
444
509
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
445
510
|
const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
|
|
446
511
|
const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
|
|
447
|
-
|
|
512
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
513
|
+
await this.handlerAsUtility().getLogsByTag(contractAddress, logRetrievalRequestsArrayBaseSlot, logRetrievalResponsesArrayBaseSlot, scope);
|
|
448
514
|
return toForeignCallResult([]);
|
|
449
515
|
}
|
|
450
|
-
|
|
516
|
+
// eslint-disable-next-line camelcase
|
|
517
|
+
async aztec_utl_getMessageContextsByTxHash(foreignContractAddress, foreignMessageContextRequestsArrayBaseSlot, foreignMessageContextResponsesArrayBaseSlot, foreignScope) {
|
|
518
|
+
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
519
|
+
const messageContextRequestsArrayBaseSlot = fromSingle(foreignMessageContextRequestsArrayBaseSlot);
|
|
520
|
+
const messageContextResponsesArrayBaseSlot = fromSingle(foreignMessageContextResponsesArrayBaseSlot);
|
|
521
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
522
|
+
await this.handlerAsUtility().getMessageContextsByTxHash(contractAddress, messageContextRequestsArrayBaseSlot, messageContextResponsesArrayBaseSlot, scope);
|
|
523
|
+
return toForeignCallResult([]);
|
|
524
|
+
}
|
|
525
|
+
// eslint-disable-next-line camelcase
|
|
526
|
+
async aztec_utl_getLogsByTag_v2(foreignRequestArrayBaseSlot) {
|
|
527
|
+
const requestArrayBaseSlot = fromSingle(foreignRequestArrayBaseSlot);
|
|
528
|
+
const responseSlot = await this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot);
|
|
529
|
+
return toForeignCallResult([
|
|
530
|
+
toSingle(responseSlot)
|
|
531
|
+
]);
|
|
532
|
+
}
|
|
533
|
+
// eslint-disable-next-line camelcase
|
|
534
|
+
async aztec_utl_getMessageContextsByTxHash_v2(foreignRequestArrayBaseSlot) {
|
|
535
|
+
const requestArrayBaseSlot = fromSingle(foreignRequestArrayBaseSlot);
|
|
536
|
+
const responseSlot = await this.handlerAsUtility().getMessageContextsByTxHashV2(requestArrayBaseSlot);
|
|
537
|
+
return toForeignCallResult([
|
|
538
|
+
toSingle(responseSlot)
|
|
539
|
+
]);
|
|
540
|
+
}
|
|
541
|
+
// eslint-disable-next-line camelcase
|
|
542
|
+
aztec_utl_setCapsule(foreignContractAddress, foreignSlot, foreignCapsule, foreignScope) {
|
|
451
543
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
452
544
|
const slot = fromSingle(foreignSlot);
|
|
453
545
|
const capsule = fromArray(foreignCapsule);
|
|
454
|
-
|
|
546
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
547
|
+
this.handlerAsUtility().setCapsule(contractAddress, slot, capsule, scope);
|
|
455
548
|
return toForeignCallResult([]);
|
|
456
549
|
}
|
|
457
|
-
|
|
550
|
+
// eslint-disable-next-line camelcase
|
|
551
|
+
async aztec_utl_getCapsule(foreignContractAddress, foreignSlot, foreignTSize, foreignScope) {
|
|
458
552
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
459
553
|
const slot = fromSingle(foreignSlot);
|
|
460
554
|
const tSize = fromSingle(foreignTSize).toNumber();
|
|
461
|
-
const
|
|
555
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
556
|
+
const values = await this.handlerAsUtility().getCapsule(contractAddress, slot, scope);
|
|
462
557
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
463
558
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
464
559
|
if (values === null) {
|
|
@@ -475,203 +570,316 @@ export class RPCTranslator {
|
|
|
475
570
|
]);
|
|
476
571
|
}
|
|
477
572
|
}
|
|
478
|
-
|
|
573
|
+
// eslint-disable-next-line camelcase
|
|
574
|
+
aztec_utl_deleteCapsule(foreignContractAddress, foreignSlot, foreignScope) {
|
|
479
575
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
480
576
|
const slot = fromSingle(foreignSlot);
|
|
481
|
-
|
|
577
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
578
|
+
this.handlerAsUtility().deleteCapsule(contractAddress, slot, scope);
|
|
482
579
|
return toForeignCallResult([]);
|
|
483
580
|
}
|
|
484
|
-
|
|
581
|
+
// eslint-disable-next-line camelcase
|
|
582
|
+
async aztec_utl_copyCapsule(foreignContractAddress, foreignSrcSlot, foreignDstSlot, foreignNumEntries, foreignScope) {
|
|
485
583
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
486
584
|
const srcSlot = fromSingle(foreignSrcSlot);
|
|
487
585
|
const dstSlot = fromSingle(foreignDstSlot);
|
|
488
586
|
const numEntries = fromSingle(foreignNumEntries).toNumber();
|
|
489
|
-
|
|
587
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
588
|
+
await this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope);
|
|
589
|
+
return toForeignCallResult([]);
|
|
590
|
+
}
|
|
591
|
+
// eslint-disable-next-line camelcase
|
|
592
|
+
aztec_utl_pushEphemeral(foreignSlot, foreignElements) {
|
|
593
|
+
const slot = fromSingle(foreignSlot);
|
|
594
|
+
const elements = fromArray(foreignElements);
|
|
595
|
+
const newLen = this.handlerAsUtility().pushEphemeral(slot, elements);
|
|
596
|
+
return toForeignCallResult([
|
|
597
|
+
toSingle(new Fr(newLen))
|
|
598
|
+
]);
|
|
599
|
+
}
|
|
600
|
+
// eslint-disable-next-line camelcase
|
|
601
|
+
aztec_utl_popEphemeral(foreignSlot) {
|
|
602
|
+
const slot = fromSingle(foreignSlot);
|
|
603
|
+
const element = this.handlerAsUtility().popEphemeral(slot);
|
|
604
|
+
return toForeignCallResult([
|
|
605
|
+
toArray(element)
|
|
606
|
+
]);
|
|
607
|
+
}
|
|
608
|
+
// eslint-disable-next-line camelcase
|
|
609
|
+
aztec_utl_getEphemeral(foreignSlot, foreignIndex) {
|
|
610
|
+
const slot = fromSingle(foreignSlot);
|
|
611
|
+
const index = fromSingle(foreignIndex).toNumber();
|
|
612
|
+
const element = this.handlerAsUtility().getEphemeral(slot, index);
|
|
613
|
+
return toForeignCallResult([
|
|
614
|
+
toArray(element)
|
|
615
|
+
]);
|
|
616
|
+
}
|
|
617
|
+
// eslint-disable-next-line camelcase
|
|
618
|
+
aztec_utl_setEphemeral(foreignSlot, foreignIndex, foreignElements) {
|
|
619
|
+
const slot = fromSingle(foreignSlot);
|
|
620
|
+
const index = fromSingle(foreignIndex).toNumber();
|
|
621
|
+
const elements = fromArray(foreignElements);
|
|
622
|
+
this.handlerAsUtility().setEphemeral(slot, index, elements);
|
|
623
|
+
return toForeignCallResult([]);
|
|
624
|
+
}
|
|
625
|
+
// eslint-disable-next-line camelcase
|
|
626
|
+
aztec_utl_getEphemeralLen(foreignSlot) {
|
|
627
|
+
const slot = fromSingle(foreignSlot);
|
|
628
|
+
const len = this.handlerAsUtility().getEphemeralLen(slot);
|
|
629
|
+
return toForeignCallResult([
|
|
630
|
+
toSingle(new Fr(len))
|
|
631
|
+
]);
|
|
632
|
+
}
|
|
633
|
+
// eslint-disable-next-line camelcase
|
|
634
|
+
aztec_utl_removeEphemeral(foreignSlot, foreignIndex) {
|
|
635
|
+
const slot = fromSingle(foreignSlot);
|
|
636
|
+
const index = fromSingle(foreignIndex).toNumber();
|
|
637
|
+
this.handlerAsUtility().removeEphemeral(slot, index);
|
|
638
|
+
return toForeignCallResult([]);
|
|
639
|
+
}
|
|
640
|
+
// eslint-disable-next-line camelcase
|
|
641
|
+
aztec_utl_clearEphemeral(foreignSlot) {
|
|
642
|
+
const slot = fromSingle(foreignSlot);
|
|
643
|
+
this.handlerAsUtility().clearEphemeral(slot);
|
|
490
644
|
return toForeignCallResult([]);
|
|
491
645
|
}
|
|
492
646
|
// TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
|
|
493
647
|
// The compiler didn't throw an error, so it took me a while to learn of the existence of this file, and that I need
|
|
494
648
|
// to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
|
|
495
649
|
// existence of a txe_oracle method?
|
|
496
|
-
|
|
650
|
+
// eslint-disable-next-line camelcase
|
|
651
|
+
async aztec_utl_decryptAes128(foreignCiphertextBVecStorage, foreignCiphertextLength, foreignIv, foreignSymKey) {
|
|
497
652
|
const ciphertext = fromUintBoundedVec(foreignCiphertextBVecStorage, foreignCiphertextLength, 8);
|
|
498
653
|
const iv = fromUintArray(foreignIv, 8);
|
|
499
654
|
const symKey = fromUintArray(foreignSymKey, 8);
|
|
500
|
-
|
|
501
|
-
|
|
655
|
+
// Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
|
|
656
|
+
try {
|
|
657
|
+
const plaintextBuffer = await this.handlerAsUtility().decryptAes128(ciphertext, iv, symKey);
|
|
658
|
+
const [storage, length] = arrayToBoundedVec(bufferToU8Array(plaintextBuffer), foreignCiphertextBVecStorage.length);
|
|
659
|
+
return toForeignCallResult([
|
|
660
|
+
toSingle(new Fr(1)),
|
|
661
|
+
storage,
|
|
662
|
+
length
|
|
663
|
+
]);
|
|
664
|
+
} catch {
|
|
665
|
+
const zeroStorage = toArray(Array(foreignCiphertextBVecStorage.length).fill(new Fr(0)));
|
|
666
|
+
return toForeignCallResult([
|
|
667
|
+
toSingle(new Fr(0)),
|
|
668
|
+
zeroStorage,
|
|
669
|
+
toSingle(new Fr(0))
|
|
670
|
+
]);
|
|
671
|
+
}
|
|
502
672
|
}
|
|
503
|
-
|
|
673
|
+
// eslint-disable-next-line camelcase
|
|
674
|
+
async aztec_utl_getSharedSecret(foreignAddress, foreignEphPKField0, foreignEphPKField1, foreignEphPKField2, foreignContractAddress) {
|
|
504
675
|
const address = AztecAddress.fromField(fromSingle(foreignAddress));
|
|
505
676
|
const ephPK = Point.fromFields([
|
|
506
677
|
fromSingle(foreignEphPKField0),
|
|
507
678
|
fromSingle(foreignEphPKField1),
|
|
508
679
|
fromSingle(foreignEphPKField2)
|
|
509
680
|
]);
|
|
510
|
-
const
|
|
511
|
-
|
|
681
|
+
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
682
|
+
const secret = await this.handlerAsUtility().getSharedSecret(address, ephPK, contractAddress);
|
|
683
|
+
return toForeignCallResult([
|
|
684
|
+
toSingle(secret)
|
|
685
|
+
]);
|
|
686
|
+
}
|
|
687
|
+
// eslint-disable-next-line camelcase
|
|
688
|
+
aztec_utl_setContractSyncCacheInvalid(foreignContractAddress, foreignScopes, foreignScopeCount) {
|
|
689
|
+
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
690
|
+
const count = fromSingle(foreignScopeCount).toNumber();
|
|
691
|
+
const scopes = fromArray(foreignScopes).slice(0, count).map((f)=>new AztecAddress(f));
|
|
692
|
+
this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress, scopes);
|
|
693
|
+
return Promise.resolve(toForeignCallResult([]));
|
|
512
694
|
}
|
|
513
|
-
|
|
695
|
+
// eslint-disable-next-line camelcase
|
|
696
|
+
aztec_utl_emitOffchainEffect(_foreignData) {
|
|
514
697
|
throw new Error('Offchain effects are not yet supported in the TestEnvironment');
|
|
515
698
|
}
|
|
516
699
|
// AVM opcodes
|
|
517
|
-
|
|
700
|
+
// eslint-disable-next-line camelcase
|
|
701
|
+
aztec_avm_emitPublicLog(_foreignMessage) {
|
|
518
702
|
// TODO(#8811): Implement
|
|
519
703
|
return toForeignCallResult([]);
|
|
520
704
|
}
|
|
521
|
-
|
|
705
|
+
// eslint-disable-next-line camelcase
|
|
706
|
+
async aztec_avm_storageRead(foreignSlot, foreignContractAddress) {
|
|
522
707
|
const slot = fromSingle(foreignSlot);
|
|
523
708
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
524
|
-
const value = (await this.handlerAsAvm().
|
|
709
|
+
const value = (await this.handlerAsAvm().storageRead(slot, contractAddress)).value;
|
|
525
710
|
return toForeignCallResult([
|
|
526
711
|
toSingle(new Fr(value))
|
|
527
712
|
]);
|
|
528
713
|
}
|
|
529
|
-
|
|
714
|
+
// eslint-disable-next-line camelcase
|
|
715
|
+
async aztec_avm_storageWrite(foreignSlot, foreignValue) {
|
|
530
716
|
const slot = fromSingle(foreignSlot);
|
|
531
717
|
const value = fromSingle(foreignValue);
|
|
532
|
-
await this.handlerAsAvm().
|
|
718
|
+
await this.handlerAsAvm().storageWrite(slot, value);
|
|
533
719
|
return toForeignCallResult([]);
|
|
534
720
|
}
|
|
535
|
-
|
|
721
|
+
// eslint-disable-next-line camelcase
|
|
722
|
+
async aztec_avm_getContractInstanceDeployer(foreignAddress) {
|
|
536
723
|
const address = addressFromSingle(foreignAddress);
|
|
537
|
-
const instance = await this.handlerAsUtility().
|
|
724
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
538
725
|
return toForeignCallResult([
|
|
539
726
|
toSingle(instance.deployer),
|
|
540
727
|
// AVM requires an extra boolean indicating the instance was found
|
|
541
728
|
toSingle(new Fr(1))
|
|
542
729
|
]);
|
|
543
730
|
}
|
|
544
|
-
|
|
731
|
+
// eslint-disable-next-line camelcase
|
|
732
|
+
async aztec_avm_getContractInstanceClassId(foreignAddress) {
|
|
545
733
|
const address = addressFromSingle(foreignAddress);
|
|
546
|
-
const instance = await this.handlerAsUtility().
|
|
734
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
547
735
|
return toForeignCallResult([
|
|
548
736
|
toSingle(instance.currentContractClassId),
|
|
549
737
|
// AVM requires an extra boolean indicating the instance was found
|
|
550
738
|
toSingle(new Fr(1))
|
|
551
739
|
]);
|
|
552
740
|
}
|
|
553
|
-
|
|
741
|
+
// eslint-disable-next-line camelcase
|
|
742
|
+
async aztec_avm_getContractInstanceInitializationHash(foreignAddress) {
|
|
554
743
|
const address = addressFromSingle(foreignAddress);
|
|
555
|
-
const instance = await this.handlerAsUtility().
|
|
744
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
556
745
|
return toForeignCallResult([
|
|
557
746
|
toSingle(instance.initializationHash),
|
|
558
747
|
// AVM requires an extra boolean indicating the instance was found
|
|
559
748
|
toSingle(new Fr(1))
|
|
560
749
|
]);
|
|
561
750
|
}
|
|
562
|
-
|
|
563
|
-
|
|
751
|
+
// eslint-disable-next-line camelcase
|
|
752
|
+
async aztec_avm_sender() {
|
|
753
|
+
const sender = await this.handlerAsAvm().sender();
|
|
564
754
|
return toForeignCallResult([
|
|
565
755
|
toSingle(sender)
|
|
566
756
|
]);
|
|
567
757
|
}
|
|
568
|
-
|
|
758
|
+
// eslint-disable-next-line camelcase
|
|
759
|
+
async aztec_avm_emitNullifier(foreignNullifier) {
|
|
569
760
|
const nullifier = fromSingle(foreignNullifier);
|
|
570
|
-
await this.handlerAsAvm().
|
|
761
|
+
await this.handlerAsAvm().emitNullifier(nullifier);
|
|
571
762
|
return toForeignCallResult([]);
|
|
572
763
|
}
|
|
573
|
-
|
|
764
|
+
// eslint-disable-next-line camelcase
|
|
765
|
+
async aztec_avm_emitNoteHash(foreignNoteHash) {
|
|
574
766
|
const noteHash = fromSingle(foreignNoteHash);
|
|
575
|
-
await this.handlerAsAvm().
|
|
767
|
+
await this.handlerAsAvm().emitNoteHash(noteHash);
|
|
576
768
|
return toForeignCallResult([]);
|
|
577
769
|
}
|
|
578
|
-
|
|
770
|
+
// eslint-disable-next-line camelcase
|
|
771
|
+
async aztec_avm_nullifierExists(foreignSiloedNullifier) {
|
|
579
772
|
const siloedNullifier = fromSingle(foreignSiloedNullifier);
|
|
580
|
-
const exists = await this.handlerAsAvm().
|
|
773
|
+
const exists = await this.handlerAsAvm().nullifierExists(siloedNullifier);
|
|
581
774
|
return toForeignCallResult([
|
|
582
775
|
toSingle(new Fr(exists))
|
|
583
776
|
]);
|
|
584
777
|
}
|
|
585
|
-
|
|
586
|
-
|
|
778
|
+
// eslint-disable-next-line camelcase
|
|
779
|
+
async aztec_avm_address() {
|
|
780
|
+
const contractAddress = await this.handlerAsAvm().address();
|
|
587
781
|
return toForeignCallResult([
|
|
588
782
|
toSingle(contractAddress.toField())
|
|
589
783
|
]);
|
|
590
784
|
}
|
|
591
|
-
|
|
592
|
-
|
|
785
|
+
// eslint-disable-next-line camelcase
|
|
786
|
+
async aztec_avm_blockNumber() {
|
|
787
|
+
const blockNumber = await this.handlerAsAvm().blockNumber();
|
|
593
788
|
return toForeignCallResult([
|
|
594
789
|
toSingle(new Fr(blockNumber))
|
|
595
790
|
]);
|
|
596
791
|
}
|
|
597
|
-
|
|
598
|
-
|
|
792
|
+
// eslint-disable-next-line camelcase
|
|
793
|
+
async aztec_avm_timestamp() {
|
|
794
|
+
const timestamp = await this.handlerAsAvm().timestamp();
|
|
599
795
|
return toForeignCallResult([
|
|
600
796
|
toSingle(new Fr(timestamp))
|
|
601
797
|
]);
|
|
602
798
|
}
|
|
603
|
-
|
|
604
|
-
|
|
799
|
+
// eslint-disable-next-line camelcase
|
|
800
|
+
async aztec_avm_isStaticCall() {
|
|
801
|
+
const isStaticCall = await this.handlerAsAvm().isStaticCall();
|
|
605
802
|
return toForeignCallResult([
|
|
606
803
|
toSingle(new Fr(isStaticCall ? 1 : 0))
|
|
607
804
|
]);
|
|
608
805
|
}
|
|
609
|
-
|
|
610
|
-
|
|
806
|
+
// eslint-disable-next-line camelcase
|
|
807
|
+
async aztec_avm_chainId() {
|
|
808
|
+
const chainId = await this.handlerAsAvm().chainId();
|
|
611
809
|
return toForeignCallResult([
|
|
612
810
|
toSingle(chainId)
|
|
613
811
|
]);
|
|
614
812
|
}
|
|
615
|
-
|
|
616
|
-
|
|
813
|
+
// eslint-disable-next-line camelcase
|
|
814
|
+
async aztec_avm_version() {
|
|
815
|
+
const version = await this.handlerAsAvm().version();
|
|
617
816
|
return toForeignCallResult([
|
|
618
817
|
toSingle(version)
|
|
619
818
|
]);
|
|
620
819
|
}
|
|
621
|
-
|
|
820
|
+
// eslint-disable-next-line camelcase
|
|
821
|
+
aztec_avm_returndataSize() {
|
|
622
822
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
623
823
|
}
|
|
624
|
-
|
|
824
|
+
// eslint-disable-next-line camelcase
|
|
825
|
+
aztec_avm_returndataCopy(_foreignRdOffset, _foreignCopySize) {
|
|
625
826
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
626
827
|
}
|
|
627
|
-
|
|
828
|
+
// eslint-disable-next-line camelcase
|
|
829
|
+
aztec_avm_call(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
|
|
628
830
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
629
831
|
}
|
|
630
|
-
|
|
832
|
+
// eslint-disable-next-line camelcase
|
|
833
|
+
aztec_avm_staticCall(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
|
|
631
834
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
632
835
|
}
|
|
633
|
-
|
|
836
|
+
// eslint-disable-next-line camelcase
|
|
837
|
+
aztec_avm_successCopy() {
|
|
634
838
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
635
839
|
}
|
|
636
|
-
|
|
840
|
+
// eslint-disable-next-line camelcase
|
|
841
|
+
async aztec_txe_privateCallNewFlow(foreignFrom, foreignTargetContractAddress, foreignFunctionSelector, foreignArgs, foreignArgsHash, foreignIsStaticCall) {
|
|
637
842
|
const from = addressFromSingle(foreignFrom);
|
|
638
843
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
639
844
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
640
845
|
const args = fromArray(foreignArgs);
|
|
641
846
|
const argsHash = fromSingle(foreignArgsHash);
|
|
642
847
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
643
|
-
const returnValues = await this.handlerAsTxe().
|
|
848
|
+
const returnValues = await this.handlerAsTxe().privateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, this.stateHandler.getCurrentJob());
|
|
644
849
|
// TODO(F-335): Avoid doing the following call here.
|
|
645
850
|
await this.stateHandler.cycleJob();
|
|
646
851
|
return toForeignCallResult([
|
|
647
852
|
toArray(returnValues)
|
|
648
853
|
]);
|
|
649
854
|
}
|
|
650
|
-
|
|
855
|
+
// eslint-disable-next-line camelcase
|
|
856
|
+
async aztec_txe_executeUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
|
|
651
857
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
652
858
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
653
859
|
const args = fromArray(foreignArgs);
|
|
654
|
-
const returnValues = await this.handlerAsTxe().
|
|
860
|
+
const returnValues = await this.handlerAsTxe().executeUtilityFunction(targetContractAddress, functionSelector, args, this.stateHandler.getCurrentJob());
|
|
655
861
|
// TODO(F-335): Avoid doing the following call here.
|
|
656
862
|
await this.stateHandler.cycleJob();
|
|
657
863
|
return toForeignCallResult([
|
|
658
864
|
toArray(returnValues)
|
|
659
865
|
]);
|
|
660
866
|
}
|
|
661
|
-
|
|
867
|
+
// eslint-disable-next-line camelcase
|
|
868
|
+
async aztec_txe_publicCallNewFlow(foreignFrom, foreignAddress, foreignCalldata, foreignIsStaticCall) {
|
|
662
869
|
const from = addressFromSingle(foreignFrom);
|
|
663
870
|
const address = addressFromSingle(foreignAddress);
|
|
664
871
|
const calldata = fromArray(foreignCalldata);
|
|
665
872
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
666
|
-
const returnValues = await this.handlerAsTxe().
|
|
873
|
+
const returnValues = await this.handlerAsTxe().publicCallNewFlow(from, address, calldata, isStaticCall);
|
|
667
874
|
// TODO(F-335): Avoid doing the following call here.
|
|
668
875
|
await this.stateHandler.cycleJob();
|
|
669
876
|
return toForeignCallResult([
|
|
670
877
|
toArray(returnValues)
|
|
671
878
|
]);
|
|
672
879
|
}
|
|
673
|
-
|
|
674
|
-
|
|
880
|
+
// eslint-disable-next-line camelcase
|
|
881
|
+
async aztec_prv_getSenderForTags() {
|
|
882
|
+
const sender = await this.handlerAsPrivate().getSenderForTags();
|
|
675
883
|
// Return a Noir Option struct with `some` and `value` fields
|
|
676
884
|
if (sender === undefined) {
|
|
677
885
|
// No sender found, return Option with some=0 and value=0
|
|
@@ -687,15 +895,17 @@ export class RPCTranslator {
|
|
|
687
895
|
]);
|
|
688
896
|
}
|
|
689
897
|
}
|
|
690
|
-
|
|
898
|
+
// eslint-disable-next-line camelcase
|
|
899
|
+
async aztec_prv_setSenderForTags(foreignSenderForTags) {
|
|
691
900
|
const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
|
|
692
|
-
await this.handlerAsPrivate().
|
|
901
|
+
await this.handlerAsPrivate().setSenderForTags(senderForTags);
|
|
693
902
|
return toForeignCallResult([]);
|
|
694
903
|
}
|
|
695
|
-
|
|
904
|
+
// eslint-disable-next-line camelcase
|
|
905
|
+
async aztec_prv_getNextAppTagAsSender(foreignSender, foreignRecipient) {
|
|
696
906
|
const sender = AztecAddress.fromField(fromSingle(foreignSender));
|
|
697
907
|
const recipient = AztecAddress.fromField(fromSingle(foreignRecipient));
|
|
698
|
-
const nextAppTag = await this.handlerAsPrivate().
|
|
908
|
+
const nextAppTag = await this.handlerAsPrivate().getNextAppTagAsSender(sender, recipient);
|
|
699
909
|
return toForeignCallResult([
|
|
700
910
|
toSingle(nextAppTag.value)
|
|
701
911
|
]);
|