@aztec/txe 0.0.1-commit.c949de6bc → 0.0.1-commit.cbf2c2d5d
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 +22 -21
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +31 -26
- package/dest/rpc_translator.d.ts +87 -82
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +260 -150
- 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 +5 -7
- 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 +7 -3
- package/dest/state_machine/mock_epoch_cache.d.ts +17 -3
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +32 -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 +18 -9
- package/dest/util/encoding.d.ts +69 -1
- package/dest/util/encoding.d.ts.map +1 -1
- 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 +29 -24
- package/src/rpc_translator.ts +289 -172
- package/src/state_machine/archiver.ts +5 -5
- package/src/state_machine/index.ts +6 -1
- package/src/state_machine/mock_epoch_cache.ts +42 -3
- package/src/state_machine/synchronizer.ts +4 -4
- package/src/txe_session.ts +17 -4
- package/src/util/txe_public_contract_data_source.ts +0 -2
package/dest/rpc_translator.js
CHANGED
|
@@ -61,59 +61,69 @@ export class RPCTranslator {
|
|
|
61
61
|
return this.oracleHandler;
|
|
62
62
|
}
|
|
63
63
|
// TXE session state transition functions - these get handled by the state handler
|
|
64
|
-
|
|
64
|
+
// eslint-disable-next-line camelcase
|
|
65
|
+
async aztec_txe_setTopLevelTXEContext() {
|
|
65
66
|
await this.stateHandler.enterTopLevelState();
|
|
66
67
|
return toForeignCallResult([]);
|
|
67
68
|
}
|
|
68
|
-
|
|
69
|
+
// eslint-disable-next-line camelcase
|
|
70
|
+
async aztec_txe_setPrivateTXEContext(foreignContractAddressIsSome, foreignContractAddressValue, foreignAnchorBlockNumberIsSome, foreignAnchorBlockNumberValue) {
|
|
69
71
|
const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
|
|
70
72
|
const anchorBlockNumber = fromSingle(foreignAnchorBlockNumberIsSome).toBool() ? BlockNumber(fromSingle(foreignAnchorBlockNumberValue).toNumber()) : undefined;
|
|
71
73
|
const privateContextInputs = await this.stateHandler.enterPrivateState(contractAddress, anchorBlockNumber);
|
|
72
74
|
return toForeignCallResult(privateContextInputs.toFields().map(toSingle));
|
|
73
75
|
}
|
|
74
|
-
|
|
76
|
+
// eslint-disable-next-line camelcase
|
|
77
|
+
async aztec_txe_setPublicTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
|
|
75
78
|
const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
|
|
76
79
|
await this.stateHandler.enterPublicState(contractAddress);
|
|
77
80
|
return toForeignCallResult([]);
|
|
78
81
|
}
|
|
79
|
-
|
|
82
|
+
// eslint-disable-next-line camelcase
|
|
83
|
+
async aztec_txe_setUtilityTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
|
|
80
84
|
const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
|
|
81
85
|
await this.stateHandler.enterUtilityState(contractAddress);
|
|
82
86
|
return toForeignCallResult([]);
|
|
83
87
|
}
|
|
84
88
|
// Other oracles - these get handled by the oracle handler
|
|
85
89
|
// TXE-specific oracles
|
|
86
|
-
|
|
87
|
-
|
|
90
|
+
// eslint-disable-next-line camelcase
|
|
91
|
+
aztec_txe_getDefaultAddress() {
|
|
92
|
+
const defaultAddress = this.handlerAsTxe().getDefaultAddress();
|
|
88
93
|
return toForeignCallResult([
|
|
89
94
|
toSingle(defaultAddress)
|
|
90
95
|
]);
|
|
91
96
|
}
|
|
92
|
-
|
|
93
|
-
|
|
97
|
+
// eslint-disable-next-line camelcase
|
|
98
|
+
async aztec_txe_getNextBlockNumber() {
|
|
99
|
+
const nextBlockNumber = await this.handlerAsTxe().getNextBlockNumber();
|
|
94
100
|
return toForeignCallResult([
|
|
95
101
|
toSingle(nextBlockNumber)
|
|
96
102
|
]);
|
|
97
103
|
}
|
|
98
|
-
|
|
99
|
-
|
|
104
|
+
// eslint-disable-next-line camelcase
|
|
105
|
+
async aztec_txe_getNextBlockTimestamp() {
|
|
106
|
+
const nextBlockTimestamp = await this.handlerAsTxe().getNextBlockTimestamp();
|
|
100
107
|
return toForeignCallResult([
|
|
101
108
|
toSingle(nextBlockTimestamp)
|
|
102
109
|
]);
|
|
103
110
|
}
|
|
104
|
-
|
|
111
|
+
// eslint-disable-next-line camelcase
|
|
112
|
+
async aztec_txe_advanceBlocksBy(foreignBlocks) {
|
|
105
113
|
const blocks = fromSingle(foreignBlocks).toNumber();
|
|
106
|
-
await this.handlerAsTxe().
|
|
114
|
+
await this.handlerAsTxe().advanceBlocksBy(blocks);
|
|
107
115
|
return toForeignCallResult([]);
|
|
108
116
|
}
|
|
109
|
-
|
|
117
|
+
// eslint-disable-next-line camelcase
|
|
118
|
+
aztec_txe_advanceTimestampBy(foreignDuration) {
|
|
110
119
|
const duration = fromSingle(foreignDuration).toBigInt();
|
|
111
|
-
this.handlerAsTxe().
|
|
120
|
+
this.handlerAsTxe().advanceTimestampBy(duration);
|
|
112
121
|
return toForeignCallResult([]);
|
|
113
122
|
}
|
|
114
|
-
|
|
123
|
+
// eslint-disable-next-line camelcase
|
|
124
|
+
async aztec_txe_deploy(artifact, instance, foreignSecret) {
|
|
115
125
|
const secret = fromSingle(foreignSecret);
|
|
116
|
-
await this.handlerAsTxe().
|
|
126
|
+
await this.handlerAsTxe().deploy(artifact, instance, secret);
|
|
117
127
|
return toForeignCallResult([
|
|
118
128
|
toArray([
|
|
119
129
|
instance.salt,
|
|
@@ -124,55 +134,63 @@ export class RPCTranslator {
|
|
|
124
134
|
])
|
|
125
135
|
]);
|
|
126
136
|
}
|
|
127
|
-
|
|
137
|
+
// eslint-disable-next-line camelcase
|
|
138
|
+
async aztec_txe_createAccount(foreignSecret) {
|
|
128
139
|
const secret = fromSingle(foreignSecret);
|
|
129
|
-
const completeAddress = await this.handlerAsTxe().
|
|
140
|
+
const completeAddress = await this.handlerAsTxe().createAccount(secret);
|
|
130
141
|
return toForeignCallResult([
|
|
131
142
|
toSingle(completeAddress.address),
|
|
132
143
|
...completeAddress.publicKeys.toFields().map(toSingle)
|
|
133
144
|
]);
|
|
134
145
|
}
|
|
135
|
-
|
|
146
|
+
// eslint-disable-next-line camelcase
|
|
147
|
+
async aztec_txe_addAccount(artifact, instance, foreignSecret) {
|
|
136
148
|
const secret = fromSingle(foreignSecret);
|
|
137
|
-
const completeAddress = await this.handlerAsTxe().
|
|
149
|
+
const completeAddress = await this.handlerAsTxe().addAccount(artifact, instance, secret);
|
|
138
150
|
return toForeignCallResult([
|
|
139
151
|
toSingle(completeAddress.address),
|
|
140
152
|
...completeAddress.publicKeys.toFields().map(toSingle)
|
|
141
153
|
]);
|
|
142
154
|
}
|
|
143
|
-
|
|
155
|
+
// eslint-disable-next-line camelcase
|
|
156
|
+
async aztec_txe_addAuthWitness(foreignAddress, foreignMessageHash) {
|
|
144
157
|
const address = addressFromSingle(foreignAddress);
|
|
145
158
|
const messageHash = fromSingle(foreignMessageHash);
|
|
146
|
-
await this.handlerAsTxe().
|
|
159
|
+
await this.handlerAsTxe().addAuthWitness(address, messageHash);
|
|
147
160
|
return toForeignCallResult([]);
|
|
148
161
|
}
|
|
149
162
|
// PXE oracles
|
|
150
|
-
|
|
163
|
+
// eslint-disable-next-line camelcase
|
|
164
|
+
aztec_utl_assertCompatibleOracleVersion(foreignVersion) {
|
|
151
165
|
const version = fromSingle(foreignVersion).toNumber();
|
|
152
|
-
this.handlerAsMisc().
|
|
166
|
+
this.handlerAsMisc().assertCompatibleOracleVersion(version);
|
|
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_storeInExecutionCache(foreignValues, foreignHash) {
|
|
204
223
|
const values = fromArray(foreignValues);
|
|
205
224
|
const hash = fromSingle(foreignHash);
|
|
206
|
-
this.handlerAsPrivate().
|
|
225
|
+
this.handlerAsPrivate().storeInExecutionCache(values, hash);
|
|
207
226
|
return toForeignCallResult([]);
|
|
208
227
|
}
|
|
209
|
-
|
|
228
|
+
// eslint-disable-next-line camelcase
|
|
229
|
+
async aztec_prv_loadFromExecutionCache(foreignHash) {
|
|
210
230
|
const hash = fromSingle(foreignHash);
|
|
211
|
-
const returns = await this.handlerAsPrivate().
|
|
231
|
+
const returns = await this.handlerAsPrivate().loadFromExecutionCache(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
|
-
|
|
246
|
+
// eslint-disable-next-line camelcase
|
|
247
|
+
async aztec_utl_storageRead(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
|
|
226
248
|
const blockHash = new BlockHash(fromSingle(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().storageRead(blockHash, contractAddress, startStorageSlot, numberOfElements);
|
|
231
253
|
return toForeignCallResult([
|
|
232
254
|
toArray(values)
|
|
233
255
|
]);
|
|
234
256
|
}
|
|
235
|
-
|
|
257
|
+
// eslint-disable-next-line camelcase
|
|
258
|
+
async aztec_utl_getPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
|
|
236
259
|
const blockHash = new BlockHash(fromSingle(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_checkNullifierExists(foreignInnerNullifier) {
|
|
310
339
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
311
|
-
const exists = await this.handlerAsUtility().
|
|
340
|
+
const exists = await this.handlerAsUtility().checkNullifierExists(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_tryGetPublicKeysAndPartialAddress(foreignAddress) {
|
|
328
359
|
const address = addressFromSingle(foreignAddress);
|
|
329
|
-
const result = await this.handlerAsUtility().
|
|
360
|
+
const result = await this.handlerAsUtility().tryGetPublicKeysAndPartialAddress(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
|
-
|
|
390
|
+
// eslint-disable-next-line camelcase
|
|
391
|
+
async aztec_utl_getNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
358
392
|
const blockHash = new BlockHash(fromSingle(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,112 @@ export class RPCTranslator {
|
|
|
373
408
|
toArray(authWitness)
|
|
374
409
|
]);
|
|
375
410
|
}
|
|
376
|
-
|
|
411
|
+
// eslint-disable-next-line camelcase
|
|
412
|
+
aztec_prv_validatePublicCalldata(_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_inRevertiblePhase(foreignSideEffectCounter) {
|
|
386
421
|
const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
|
|
387
|
-
const isRevertible = await this.handlerAsPrivate().
|
|
422
|
+
const isRevertible = await this.handlerAsPrivate().inRevertiblePhase(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
|
-
|
|
441
|
+
// eslint-disable-next-line camelcase
|
|
442
|
+
async aztec_utl_getNoteHashMembershipWitness(foreignAnchorBlockHash, foreignNoteHash) {
|
|
405
443
|
const blockHash = new BlockHash(fromSingle(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
|
-
|
|
451
|
+
// eslint-disable-next-line camelcase
|
|
452
|
+
async aztec_utl_getBlockHashMembershipWitness(foreignAnchorBlockHash, foreignBlockHash) {
|
|
414
453
|
const anchorBlockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
415
454
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
416
|
-
const witness = await this.handlerAsUtility().
|
|
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
|
-
|
|
461
|
+
// eslint-disable-next-line camelcase
|
|
462
|
+
async aztec_utl_getLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
423
463
|
const blockHash = new BlockHash(fromSingle(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_fetchTaggedLogs(foreignPendingTaggedLogArrayBaseSlot) {
|
|
432
473
|
const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
|
|
433
|
-
await this.handlerAsUtility().
|
|
474
|
+
await this.handlerAsUtility().fetchTaggedLogs(pendingTaggedLogArrayBaseSlot);
|
|
434
475
|
return toForeignCallResult([]);
|
|
435
476
|
}
|
|
436
|
-
|
|
477
|
+
// eslint-disable-next-line camelcase
|
|
478
|
+
async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(foreignContractAddress, foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot, foreignMaxNotePackedLen, foreignMaxEventSerializedLen) {
|
|
437
479
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
438
480
|
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
439
481
|
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
440
|
-
|
|
482
|
+
const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
|
|
483
|
+
const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
|
|
484
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot, maxNotePackedLen, maxEventSerializedLen);
|
|
441
485
|
return toForeignCallResult([]);
|
|
442
486
|
}
|
|
443
|
-
|
|
487
|
+
// eslint-disable-next-line camelcase
|
|
488
|
+
async aztec_utl_bulkRetrieveLogs(foreignContractAddress, foreignLogRetrievalRequestsArrayBaseSlot, foreignLogRetrievalResponsesArrayBaseSlot) {
|
|
444
489
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
445
490
|
const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
|
|
446
491
|
const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
|
|
447
|
-
await this.handlerAsUtility().
|
|
492
|
+
await this.handlerAsUtility().bulkRetrieveLogs(contractAddress, logRetrievalRequestsArrayBaseSlot, logRetrievalResponsesArrayBaseSlot);
|
|
448
493
|
return toForeignCallResult([]);
|
|
449
494
|
}
|
|
450
|
-
|
|
495
|
+
// eslint-disable-next-line camelcase
|
|
496
|
+
async aztec_utl_utilityResolveMessageContexts(foreignContractAddress, foreignMessageContextRequestsArrayBaseSlot, foreignMessageContextResponsesArrayBaseSlot) {
|
|
497
|
+
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
498
|
+
const messageContextRequestsArrayBaseSlot = fromSingle(foreignMessageContextRequestsArrayBaseSlot);
|
|
499
|
+
const messageContextResponsesArrayBaseSlot = fromSingle(foreignMessageContextResponsesArrayBaseSlot);
|
|
500
|
+
await this.handlerAsUtility().utilityResolveMessageContexts(contractAddress, messageContextRequestsArrayBaseSlot, messageContextResponsesArrayBaseSlot);
|
|
501
|
+
return toForeignCallResult([]);
|
|
502
|
+
}
|
|
503
|
+
// eslint-disable-next-line camelcase
|
|
504
|
+
async aztec_utl_storeCapsule(foreignContractAddress, foreignSlot, foreignCapsule) {
|
|
451
505
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
452
506
|
const slot = fromSingle(foreignSlot);
|
|
453
507
|
const capsule = fromArray(foreignCapsule);
|
|
454
|
-
await this.handlerAsUtility().
|
|
508
|
+
await this.handlerAsUtility().storeCapsule(contractAddress, slot, capsule);
|
|
455
509
|
return toForeignCallResult([]);
|
|
456
510
|
}
|
|
457
|
-
|
|
511
|
+
// eslint-disable-next-line camelcase
|
|
512
|
+
async aztec_utl_loadCapsule(foreignContractAddress, foreignSlot, foreignTSize) {
|
|
458
513
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
459
514
|
const slot = fromSingle(foreignSlot);
|
|
460
515
|
const tSize = fromSingle(foreignTSize).toNumber();
|
|
461
|
-
const values = await this.handlerAsUtility().
|
|
516
|
+
const values = await this.handlerAsUtility().loadCapsule(contractAddress, slot);
|
|
462
517
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
463
518
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
464
519
|
if (values === null) {
|
|
@@ -475,203 +530,256 @@ export class RPCTranslator {
|
|
|
475
530
|
]);
|
|
476
531
|
}
|
|
477
532
|
}
|
|
478
|
-
|
|
533
|
+
// eslint-disable-next-line camelcase
|
|
534
|
+
async aztec_utl_deleteCapsule(foreignContractAddress, foreignSlot) {
|
|
479
535
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
480
536
|
const slot = fromSingle(foreignSlot);
|
|
481
|
-
await this.handlerAsUtility().
|
|
537
|
+
await this.handlerAsUtility().deleteCapsule(contractAddress, slot);
|
|
482
538
|
return toForeignCallResult([]);
|
|
483
539
|
}
|
|
484
|
-
|
|
540
|
+
// eslint-disable-next-line camelcase
|
|
541
|
+
async aztec_utl_copyCapsule(foreignContractAddress, foreignSrcSlot, foreignDstSlot, foreignNumEntries) {
|
|
485
542
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
486
543
|
const srcSlot = fromSingle(foreignSrcSlot);
|
|
487
544
|
const dstSlot = fromSingle(foreignDstSlot);
|
|
488
545
|
const numEntries = fromSingle(foreignNumEntries).toNumber();
|
|
489
|
-
await this.handlerAsUtility().
|
|
546
|
+
await this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries);
|
|
490
547
|
return toForeignCallResult([]);
|
|
491
548
|
}
|
|
492
549
|
// TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
|
|
493
550
|
// 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
551
|
// to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
|
|
495
552
|
// existence of a txe_oracle method?
|
|
496
|
-
|
|
553
|
+
// eslint-disable-next-line camelcase
|
|
554
|
+
async aztec_utl_tryAes128Decrypt(foreignCiphertextBVecStorage, foreignCiphertextLength, foreignIv, foreignSymKey) {
|
|
497
555
|
const ciphertext = fromUintBoundedVec(foreignCiphertextBVecStorage, foreignCiphertextLength, 8);
|
|
498
556
|
const iv = fromUintArray(foreignIv, 8);
|
|
499
557
|
const symKey = fromUintArray(foreignSymKey, 8);
|
|
500
|
-
|
|
501
|
-
|
|
558
|
+
// Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
|
|
559
|
+
try {
|
|
560
|
+
const plaintextBuffer = await this.handlerAsUtility().aes128Decrypt(ciphertext, iv, symKey);
|
|
561
|
+
const [storage, length] = arrayToBoundedVec(bufferToU8Array(plaintextBuffer), foreignCiphertextBVecStorage.length);
|
|
562
|
+
return toForeignCallResult([
|
|
563
|
+
toSingle(new Fr(1)),
|
|
564
|
+
storage,
|
|
565
|
+
length
|
|
566
|
+
]);
|
|
567
|
+
} catch {
|
|
568
|
+
const zeroStorage = toArray(Array(foreignCiphertextBVecStorage.length).fill(new Fr(0)));
|
|
569
|
+
return toForeignCallResult([
|
|
570
|
+
toSingle(new Fr(0)),
|
|
571
|
+
zeroStorage,
|
|
572
|
+
toSingle(new Fr(0))
|
|
573
|
+
]);
|
|
574
|
+
}
|
|
502
575
|
}
|
|
503
|
-
|
|
576
|
+
// eslint-disable-next-line camelcase
|
|
577
|
+
async aztec_utl_getSharedSecret(foreignAddress, foreignEphPKField0, foreignEphPKField1, foreignEphPKField2) {
|
|
504
578
|
const address = AztecAddress.fromField(fromSingle(foreignAddress));
|
|
505
579
|
const ephPK = Point.fromFields([
|
|
506
580
|
fromSingle(foreignEphPKField0),
|
|
507
581
|
fromSingle(foreignEphPKField1),
|
|
508
582
|
fromSingle(foreignEphPKField2)
|
|
509
583
|
]);
|
|
510
|
-
const secret = await this.handlerAsUtility().
|
|
584
|
+
const secret = await this.handlerAsUtility().getSharedSecret(address, ephPK);
|
|
511
585
|
return toForeignCallResult(secret.toFields().map(toSingle));
|
|
512
586
|
}
|
|
513
|
-
|
|
587
|
+
// eslint-disable-next-line camelcase
|
|
588
|
+
aztec_utl_invalidateContractSyncCache(foreignContractAddress, foreignScopes, foreignScopeCount) {
|
|
589
|
+
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
590
|
+
const count = fromSingle(foreignScopeCount).toNumber();
|
|
591
|
+
const scopes = fromArray(foreignScopes).slice(0, count).map((f)=>new AztecAddress(f));
|
|
592
|
+
this.handlerAsUtility().invalidateContractSyncCache(contractAddress, scopes);
|
|
593
|
+
return Promise.resolve(toForeignCallResult([]));
|
|
594
|
+
}
|
|
595
|
+
// eslint-disable-next-line camelcase
|
|
596
|
+
aztec_utl_emitOffchainEffect(_foreignData) {
|
|
514
597
|
throw new Error('Offchain effects are not yet supported in the TestEnvironment');
|
|
515
598
|
}
|
|
516
599
|
// AVM opcodes
|
|
517
|
-
|
|
600
|
+
// eslint-disable-next-line camelcase
|
|
601
|
+
aztec_avm_emitPublicLog(_foreignMessage) {
|
|
518
602
|
// TODO(#8811): Implement
|
|
519
603
|
return toForeignCallResult([]);
|
|
520
604
|
}
|
|
521
|
-
|
|
605
|
+
// eslint-disable-next-line camelcase
|
|
606
|
+
async aztec_avm_storageRead(foreignSlot, foreignContractAddress) {
|
|
522
607
|
const slot = fromSingle(foreignSlot);
|
|
523
608
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
524
|
-
const value = (await this.handlerAsAvm().
|
|
609
|
+
const value = (await this.handlerAsAvm().storageRead(slot, contractAddress)).value;
|
|
525
610
|
return toForeignCallResult([
|
|
526
611
|
toSingle(new Fr(value))
|
|
527
612
|
]);
|
|
528
613
|
}
|
|
529
|
-
|
|
614
|
+
// eslint-disable-next-line camelcase
|
|
615
|
+
async aztec_avm_storageWrite(foreignSlot, foreignValue) {
|
|
530
616
|
const slot = fromSingle(foreignSlot);
|
|
531
617
|
const value = fromSingle(foreignValue);
|
|
532
|
-
await this.handlerAsAvm().
|
|
618
|
+
await this.handlerAsAvm().storageWrite(slot, value);
|
|
533
619
|
return toForeignCallResult([]);
|
|
534
620
|
}
|
|
535
|
-
|
|
621
|
+
// eslint-disable-next-line camelcase
|
|
622
|
+
async aztec_avm_getContractInstanceDeployer(foreignAddress) {
|
|
536
623
|
const address = addressFromSingle(foreignAddress);
|
|
537
|
-
const instance = await this.handlerAsUtility().
|
|
624
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
538
625
|
return toForeignCallResult([
|
|
539
626
|
toSingle(instance.deployer),
|
|
540
627
|
// AVM requires an extra boolean indicating the instance was found
|
|
541
628
|
toSingle(new Fr(1))
|
|
542
629
|
]);
|
|
543
630
|
}
|
|
544
|
-
|
|
631
|
+
// eslint-disable-next-line camelcase
|
|
632
|
+
async aztec_avm_getContractInstanceClassId(foreignAddress) {
|
|
545
633
|
const address = addressFromSingle(foreignAddress);
|
|
546
|
-
const instance = await this.handlerAsUtility().
|
|
634
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
547
635
|
return toForeignCallResult([
|
|
548
636
|
toSingle(instance.currentContractClassId),
|
|
549
637
|
// AVM requires an extra boolean indicating the instance was found
|
|
550
638
|
toSingle(new Fr(1))
|
|
551
639
|
]);
|
|
552
640
|
}
|
|
553
|
-
|
|
641
|
+
// eslint-disable-next-line camelcase
|
|
642
|
+
async aztec_avm_getContractInstanceInitializationHash(foreignAddress) {
|
|
554
643
|
const address = addressFromSingle(foreignAddress);
|
|
555
|
-
const instance = await this.handlerAsUtility().
|
|
644
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
556
645
|
return toForeignCallResult([
|
|
557
646
|
toSingle(instance.initializationHash),
|
|
558
647
|
// AVM requires an extra boolean indicating the instance was found
|
|
559
648
|
toSingle(new Fr(1))
|
|
560
649
|
]);
|
|
561
650
|
}
|
|
562
|
-
|
|
563
|
-
|
|
651
|
+
// eslint-disable-next-line camelcase
|
|
652
|
+
async aztec_avm_sender() {
|
|
653
|
+
const sender = await this.handlerAsAvm().sender();
|
|
564
654
|
return toForeignCallResult([
|
|
565
655
|
toSingle(sender)
|
|
566
656
|
]);
|
|
567
657
|
}
|
|
568
|
-
|
|
658
|
+
// eslint-disable-next-line camelcase
|
|
659
|
+
async aztec_avm_emitNullifier(foreignNullifier) {
|
|
569
660
|
const nullifier = fromSingle(foreignNullifier);
|
|
570
|
-
await this.handlerAsAvm().
|
|
661
|
+
await this.handlerAsAvm().emitNullifier(nullifier);
|
|
571
662
|
return toForeignCallResult([]);
|
|
572
663
|
}
|
|
573
|
-
|
|
664
|
+
// eslint-disable-next-line camelcase
|
|
665
|
+
async aztec_avm_emitNoteHash(foreignNoteHash) {
|
|
574
666
|
const noteHash = fromSingle(foreignNoteHash);
|
|
575
|
-
await this.handlerAsAvm().
|
|
667
|
+
await this.handlerAsAvm().emitNoteHash(noteHash);
|
|
576
668
|
return toForeignCallResult([]);
|
|
577
669
|
}
|
|
578
|
-
|
|
670
|
+
// eslint-disable-next-line camelcase
|
|
671
|
+
async aztec_avm_nullifierExists(foreignSiloedNullifier) {
|
|
579
672
|
const siloedNullifier = fromSingle(foreignSiloedNullifier);
|
|
580
|
-
const exists = await this.handlerAsAvm().
|
|
673
|
+
const exists = await this.handlerAsAvm().nullifierExists(siloedNullifier);
|
|
581
674
|
return toForeignCallResult([
|
|
582
675
|
toSingle(new Fr(exists))
|
|
583
676
|
]);
|
|
584
677
|
}
|
|
585
|
-
|
|
586
|
-
|
|
678
|
+
// eslint-disable-next-line camelcase
|
|
679
|
+
async aztec_avm_address() {
|
|
680
|
+
const contractAddress = await this.handlerAsAvm().address();
|
|
587
681
|
return toForeignCallResult([
|
|
588
682
|
toSingle(contractAddress.toField())
|
|
589
683
|
]);
|
|
590
684
|
}
|
|
591
|
-
|
|
592
|
-
|
|
685
|
+
// eslint-disable-next-line camelcase
|
|
686
|
+
async aztec_avm_blockNumber() {
|
|
687
|
+
const blockNumber = await this.handlerAsAvm().blockNumber();
|
|
593
688
|
return toForeignCallResult([
|
|
594
689
|
toSingle(new Fr(blockNumber))
|
|
595
690
|
]);
|
|
596
691
|
}
|
|
597
|
-
|
|
598
|
-
|
|
692
|
+
// eslint-disable-next-line camelcase
|
|
693
|
+
async aztec_avm_timestamp() {
|
|
694
|
+
const timestamp = await this.handlerAsAvm().timestamp();
|
|
599
695
|
return toForeignCallResult([
|
|
600
696
|
toSingle(new Fr(timestamp))
|
|
601
697
|
]);
|
|
602
698
|
}
|
|
603
|
-
|
|
604
|
-
|
|
699
|
+
// eslint-disable-next-line camelcase
|
|
700
|
+
async aztec_avm_isStaticCall() {
|
|
701
|
+
const isStaticCall = await this.handlerAsAvm().isStaticCall();
|
|
605
702
|
return toForeignCallResult([
|
|
606
703
|
toSingle(new Fr(isStaticCall ? 1 : 0))
|
|
607
704
|
]);
|
|
608
705
|
}
|
|
609
|
-
|
|
610
|
-
|
|
706
|
+
// eslint-disable-next-line camelcase
|
|
707
|
+
async aztec_avm_chainId() {
|
|
708
|
+
const chainId = await this.handlerAsAvm().chainId();
|
|
611
709
|
return toForeignCallResult([
|
|
612
710
|
toSingle(chainId)
|
|
613
711
|
]);
|
|
614
712
|
}
|
|
615
|
-
|
|
616
|
-
|
|
713
|
+
// eslint-disable-next-line camelcase
|
|
714
|
+
async aztec_avm_version() {
|
|
715
|
+
const version = await this.handlerAsAvm().version();
|
|
617
716
|
return toForeignCallResult([
|
|
618
717
|
toSingle(version)
|
|
619
718
|
]);
|
|
620
719
|
}
|
|
621
|
-
|
|
720
|
+
// eslint-disable-next-line camelcase
|
|
721
|
+
aztec_avm_returndataSize() {
|
|
622
722
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
623
723
|
}
|
|
624
|
-
|
|
724
|
+
// eslint-disable-next-line camelcase
|
|
725
|
+
aztec_avm_returndataCopy(_foreignRdOffset, _foreignCopySize) {
|
|
625
726
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
626
727
|
}
|
|
627
|
-
|
|
728
|
+
// eslint-disable-next-line camelcase
|
|
729
|
+
aztec_avm_call(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
|
|
628
730
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
629
731
|
}
|
|
630
|
-
|
|
732
|
+
// eslint-disable-next-line camelcase
|
|
733
|
+
aztec_avm_staticCall(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
|
|
631
734
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
632
735
|
}
|
|
633
|
-
|
|
736
|
+
// eslint-disable-next-line camelcase
|
|
737
|
+
aztec_avm_successCopy() {
|
|
634
738
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
635
739
|
}
|
|
636
|
-
|
|
740
|
+
// eslint-disable-next-line camelcase
|
|
741
|
+
async aztec_txe_privateCallNewFlow(foreignFrom, foreignTargetContractAddress, foreignFunctionSelector, foreignArgs, foreignArgsHash, foreignIsStaticCall) {
|
|
637
742
|
const from = addressFromSingle(foreignFrom);
|
|
638
743
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
639
744
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
640
745
|
const args = fromArray(foreignArgs);
|
|
641
746
|
const argsHash = fromSingle(foreignArgsHash);
|
|
642
747
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
643
|
-
const returnValues = await this.handlerAsTxe().
|
|
748
|
+
const returnValues = await this.handlerAsTxe().privateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, this.stateHandler.getCurrentJob());
|
|
644
749
|
// TODO(F-335): Avoid doing the following call here.
|
|
645
750
|
await this.stateHandler.cycleJob();
|
|
646
751
|
return toForeignCallResult([
|
|
647
752
|
toArray(returnValues)
|
|
648
753
|
]);
|
|
649
754
|
}
|
|
650
|
-
|
|
755
|
+
// eslint-disable-next-line camelcase
|
|
756
|
+
async aztec_txe_executeUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
|
|
651
757
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
652
758
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
653
759
|
const args = fromArray(foreignArgs);
|
|
654
|
-
const returnValues = await this.handlerAsTxe().
|
|
760
|
+
const returnValues = await this.handlerAsTxe().executeUtilityFunction(targetContractAddress, functionSelector, args, this.stateHandler.getCurrentJob());
|
|
655
761
|
// TODO(F-335): Avoid doing the following call here.
|
|
656
762
|
await this.stateHandler.cycleJob();
|
|
657
763
|
return toForeignCallResult([
|
|
658
764
|
toArray(returnValues)
|
|
659
765
|
]);
|
|
660
766
|
}
|
|
661
|
-
|
|
767
|
+
// eslint-disable-next-line camelcase
|
|
768
|
+
async aztec_txe_publicCallNewFlow(foreignFrom, foreignAddress, foreignCalldata, foreignIsStaticCall) {
|
|
662
769
|
const from = addressFromSingle(foreignFrom);
|
|
663
770
|
const address = addressFromSingle(foreignAddress);
|
|
664
771
|
const calldata = fromArray(foreignCalldata);
|
|
665
772
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
666
|
-
const returnValues = await this.handlerAsTxe().
|
|
773
|
+
const returnValues = await this.handlerAsTxe().publicCallNewFlow(from, address, calldata, isStaticCall);
|
|
667
774
|
// TODO(F-335): Avoid doing the following call here.
|
|
668
775
|
await this.stateHandler.cycleJob();
|
|
669
776
|
return toForeignCallResult([
|
|
670
777
|
toArray(returnValues)
|
|
671
778
|
]);
|
|
672
779
|
}
|
|
673
|
-
|
|
674
|
-
|
|
780
|
+
// eslint-disable-next-line camelcase
|
|
781
|
+
async aztec_prv_getSenderForTags() {
|
|
782
|
+
const sender = await this.handlerAsPrivate().getSenderForTags();
|
|
675
783
|
// Return a Noir Option struct with `some` and `value` fields
|
|
676
784
|
if (sender === undefined) {
|
|
677
785
|
// No sender found, return Option with some=0 and value=0
|
|
@@ -687,15 +795,17 @@ export class RPCTranslator {
|
|
|
687
795
|
]);
|
|
688
796
|
}
|
|
689
797
|
}
|
|
690
|
-
|
|
798
|
+
// eslint-disable-next-line camelcase
|
|
799
|
+
async aztec_prv_setSenderForTags(foreignSenderForTags) {
|
|
691
800
|
const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
|
|
692
|
-
await this.handlerAsPrivate().
|
|
801
|
+
await this.handlerAsPrivate().setSenderForTags(senderForTags);
|
|
693
802
|
return toForeignCallResult([]);
|
|
694
803
|
}
|
|
695
|
-
|
|
804
|
+
// eslint-disable-next-line camelcase
|
|
805
|
+
async aztec_prv_getNextAppTagAsSender(foreignSender, foreignRecipient) {
|
|
696
806
|
const sender = AztecAddress.fromField(fromSingle(foreignSender));
|
|
697
807
|
const recipient = AztecAddress.fromField(fromSingle(foreignRecipient));
|
|
698
|
-
const nextAppTag = await this.handlerAsPrivate().
|
|
808
|
+
const nextAppTag = await this.handlerAsPrivate().getNextAppTagAsSender(sender, recipient);
|
|
699
809
|
return toForeignCallResult([
|
|
700
810
|
toSingle(nextAppTag.value)
|
|
701
811
|
]);
|