@aztec/txe 0.0.1-commit.87a0206 → 0.0.1-commit.88c5703d4
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 +88 -54
- package/dest/oracle/interfaces.d.ts +29 -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 -23
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +107 -52
- package/dest/rpc_translator.d.ts +85 -83
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +250 -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/dummy_p2p_client.d.ts +14 -11
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +23 -14
- 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 +3 -1
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +4 -0
- 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 +9 -6
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +80 -21
- package/dest/util/txe_public_contract_data_source.d.ts +2 -3
- package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.js +5 -22
- package/package.json +15 -15
- package/src/index.ts +89 -52
- package/src/oracle/interfaces.ts +32 -31
- package/src/oracle/txe_oracle_public_context.ts +12 -12
- package/src/oracle/txe_oracle_top_level_context.ts +110 -91
- package/src/rpc_translator.ts +278 -169
- package/src/state_machine/archiver.ts +5 -5
- package/src/state_machine/dummy_p2p_client.ts +33 -20
- package/src/state_machine/index.ts +6 -1
- package/src/state_machine/mock_epoch_cache.ts +5 -0
- package/src/state_machine/synchronizer.ts +4 -4
- package/src/txe_session.ts +83 -71
- package/src/util/txe_public_contract_data_source.ts +10 -36
- package/dest/util/txe_contract_store.d.ts +0 -12
- package/dest/util/txe_contract_store.d.ts.map +0 -1
- package/dest/util/txe_contract_store.js +0 -22
- package/src/util/txe_contract_store.ts +0 -36
package/dest/rpc_translator.js
CHANGED
|
@@ -6,7 +6,7 @@ import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/stdlib/abi
|
|
|
6
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
7
|
import { BlockHash } from '@aztec/stdlib/block';
|
|
8
8
|
import { addressFromSingle, arrayOfArraysToBoundedVecOfArrays, arrayToBoundedVec, bufferToU8Array, fromArray, fromSingle, fromUintArray, fromUintBoundedVec, toArray, toForeignCallResult, toSingle } from './util/encoding.js';
|
|
9
|
-
const MAX_EVENT_LEN =
|
|
9
|
+
const MAX_EVENT_LEN = 10; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN
|
|
10
10
|
const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
|
|
11
11
|
export class UnavailableOracleError extends Error {
|
|
12
12
|
constructor(oracleName){
|
|
@@ -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,59 +134,73 @@ 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);
|
|
179
|
-
|
|
197
|
+
// TODO(F-335): Avoid doing the following 2 calls here.
|
|
198
|
+
{
|
|
199
|
+
await this.handlerAsTxe().syncContractNonOracleMethod(contractAddress, scope, this.stateHandler.getCurrentJob());
|
|
200
|
+
// We cycle job to commit the stores after the contract sync.
|
|
201
|
+
await this.stateHandler.cycleJob();
|
|
202
|
+
}
|
|
203
|
+
const events = await this.handlerAsTxe().getPrivateEvents(selector, contractAddress, scope);
|
|
180
204
|
if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
|
|
181
205
|
throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
|
|
182
206
|
}
|
|
@@ -194,48 +218,54 @@ export class RPCTranslator {
|
|
|
194
218
|
toSingle(queryLength)
|
|
195
219
|
]);
|
|
196
220
|
}
|
|
197
|
-
|
|
221
|
+
// eslint-disable-next-line camelcase
|
|
222
|
+
aztec_prv_storeInExecutionCache(foreignValues, foreignHash) {
|
|
198
223
|
const values = fromArray(foreignValues);
|
|
199
224
|
const hash = fromSingle(foreignHash);
|
|
200
|
-
this.handlerAsPrivate().
|
|
225
|
+
this.handlerAsPrivate().storeInExecutionCache(values, hash);
|
|
201
226
|
return toForeignCallResult([]);
|
|
202
227
|
}
|
|
203
|
-
|
|
228
|
+
// eslint-disable-next-line camelcase
|
|
229
|
+
async aztec_prv_loadFromExecutionCache(foreignHash) {
|
|
204
230
|
const hash = fromSingle(foreignHash);
|
|
205
|
-
const returns = await this.handlerAsPrivate().
|
|
231
|
+
const returns = await this.handlerAsPrivate().loadFromExecutionCache(hash);
|
|
206
232
|
return toForeignCallResult([
|
|
207
233
|
toArray(returns)
|
|
208
234
|
]);
|
|
209
235
|
}
|
|
210
236
|
// When the argument is a slice, noir automatically adds a length field to oracle call.
|
|
211
237
|
// When the argument is an array, we add the field length manually to the signature.
|
|
212
|
-
|
|
238
|
+
// eslint-disable-next-line camelcase
|
|
239
|
+
async aztec_utl_log(foreignLevel, foreignMessage, _foreignLength, foreignFields) {
|
|
213
240
|
const level = fromSingle(foreignLevel).toNumber();
|
|
214
241
|
const message = fromArray(foreignMessage).map((field)=>String.fromCharCode(field.toNumber())).join('');
|
|
215
242
|
const fields = fromArray(foreignFields);
|
|
216
|
-
this.handlerAsMisc().
|
|
243
|
+
await this.handlerAsMisc().log(level, message, fields);
|
|
217
244
|
return toForeignCallResult([]);
|
|
218
245
|
}
|
|
219
|
-
|
|
246
|
+
// eslint-disable-next-line camelcase
|
|
247
|
+
async aztec_utl_storageRead(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
|
|
220
248
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
221
249
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
222
250
|
const startStorageSlot = fromSingle(foreignStartStorageSlot);
|
|
223
251
|
const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
|
|
224
|
-
const values = await this.handlerAsUtility().
|
|
252
|
+
const values = await this.handlerAsUtility().storageRead(blockHash, contractAddress, startStorageSlot, numberOfElements);
|
|
225
253
|
return toForeignCallResult([
|
|
226
254
|
toArray(values)
|
|
227
255
|
]);
|
|
228
256
|
}
|
|
229
|
-
|
|
257
|
+
// eslint-disable-next-line camelcase
|
|
258
|
+
async aztec_utl_getPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
|
|
230
259
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
231
260
|
const leafSlot = fromSingle(foreignLeafSlot);
|
|
232
|
-
const witness = await this.handlerAsUtility().
|
|
261
|
+
const witness = await this.handlerAsUtility().getPublicDataWitness(blockHash, leafSlot);
|
|
233
262
|
if (!witness) {
|
|
234
263
|
throw new Error(`Public data witness not found for slot ${leafSlot} at block ${blockHash.toString()}.`);
|
|
235
264
|
}
|
|
236
265
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
237
266
|
}
|
|
238
|
-
|
|
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) {
|
|
239
269
|
// Parse Option<AztecAddress>: ownerIsSome is 0 for None, 1 for Some
|
|
240
270
|
const owner = fromSingle(foreignOwnerIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignOwnerValue)) : undefined;
|
|
241
271
|
const storageSlot = fromSingle(foreignStorageSlot);
|
|
@@ -254,7 +284,7 @@ export class RPCTranslator {
|
|
|
254
284
|
const status = fromSingle(foreignStatus).toNumber();
|
|
255
285
|
const maxNotes = fromSingle(foreignMaxNotes).toNumber();
|
|
256
286
|
const packedHintedNoteLength = fromSingle(foreignPackedHintedNoteLength).toNumber();
|
|
257
|
-
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);
|
|
258
288
|
const returnDataAsArrayOfArrays = noteDatas.map((noteData)=>packAsHintedNote({
|
|
259
289
|
contractAddress: noteData.contractAddress,
|
|
260
290
|
owner: noteData.owner,
|
|
@@ -269,7 +299,8 @@ export class RPCTranslator {
|
|
|
269
299
|
// At last we convert the array of arrays to a bounded vec of arrays
|
|
270
300
|
return toForeignCallResult(arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes, packedHintedNoteLength));
|
|
271
301
|
}
|
|
272
|
-
|
|
302
|
+
// eslint-disable-next-line camelcase
|
|
303
|
+
aztec_prv_notifyCreatedNote(foreignOwner, foreignStorageSlot, foreignRandomness, foreignNoteTypeId, foreignNote, foreignNoteHash, foreignCounter) {
|
|
273
304
|
const owner = addressFromSingle(foreignOwner);
|
|
274
305
|
const storageSlot = fromSingle(foreignStorageSlot);
|
|
275
306
|
const randomness = fromSingle(foreignRandomness);
|
|
@@ -277,39 +308,44 @@ export class RPCTranslator {
|
|
|
277
308
|
const note = fromArray(foreignNote);
|
|
278
309
|
const noteHash = fromSingle(foreignNoteHash);
|
|
279
310
|
const counter = fromSingle(foreignCounter).toNumber();
|
|
280
|
-
this.handlerAsPrivate().
|
|
311
|
+
this.handlerAsPrivate().notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter);
|
|
281
312
|
return toForeignCallResult([]);
|
|
282
313
|
}
|
|
283
|
-
|
|
314
|
+
// eslint-disable-next-line camelcase
|
|
315
|
+
async aztec_prv_notifyNullifiedNote(foreignInnerNullifier, foreignNoteHash, foreignCounter) {
|
|
284
316
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
285
317
|
const noteHash = fromSingle(foreignNoteHash);
|
|
286
318
|
const counter = fromSingle(foreignCounter).toNumber();
|
|
287
|
-
await this.handlerAsPrivate().
|
|
319
|
+
await this.handlerAsPrivate().notifyNullifiedNote(innerNullifier, noteHash, counter);
|
|
288
320
|
return toForeignCallResult([]);
|
|
289
321
|
}
|
|
290
|
-
|
|
322
|
+
// eslint-disable-next-line camelcase
|
|
323
|
+
async aztec_prv_notifyCreatedNullifier(foreignInnerNullifier) {
|
|
291
324
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
292
|
-
await this.handlerAsPrivate().
|
|
325
|
+
await this.handlerAsPrivate().notifyCreatedNullifier(innerNullifier);
|
|
293
326
|
return toForeignCallResult([]);
|
|
294
327
|
}
|
|
295
|
-
|
|
328
|
+
// eslint-disable-next-line camelcase
|
|
329
|
+
async aztec_prv_isNullifierPending(foreignInnerNullifier, foreignContractAddress) {
|
|
296
330
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
297
331
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
298
|
-
const isPending = await this.handlerAsPrivate().
|
|
332
|
+
const isPending = await this.handlerAsPrivate().isNullifierPending(innerNullifier, contractAddress);
|
|
299
333
|
return toForeignCallResult([
|
|
300
334
|
toSingle(new Fr(isPending))
|
|
301
335
|
]);
|
|
302
336
|
}
|
|
303
|
-
|
|
337
|
+
// eslint-disable-next-line camelcase
|
|
338
|
+
async aztec_utl_checkNullifierExists(foreignInnerNullifier) {
|
|
304
339
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
305
|
-
const exists = await this.handlerAsUtility().
|
|
340
|
+
const exists = await this.handlerAsUtility().checkNullifierExists(innerNullifier);
|
|
306
341
|
return toForeignCallResult([
|
|
307
342
|
toSingle(new Fr(exists))
|
|
308
343
|
]);
|
|
309
344
|
}
|
|
310
|
-
|
|
345
|
+
// eslint-disable-next-line camelcase
|
|
346
|
+
async aztec_utl_getContractInstance(foreignAddress) {
|
|
311
347
|
const address = addressFromSingle(foreignAddress);
|
|
312
|
-
const instance = await this.handlerAsUtility().
|
|
348
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
313
349
|
return toForeignCallResult([
|
|
314
350
|
instance.salt,
|
|
315
351
|
instance.deployer.toField(),
|
|
@@ -318,9 +354,10 @@ export class RPCTranslator {
|
|
|
318
354
|
...instance.publicKeys.toFields()
|
|
319
355
|
].map(toSingle));
|
|
320
356
|
}
|
|
321
|
-
|
|
357
|
+
// eslint-disable-next-line camelcase
|
|
358
|
+
async aztec_utl_tryGetPublicKeysAndPartialAddress(foreignAddress) {
|
|
322
359
|
const address = addressFromSingle(foreignAddress);
|
|
323
|
-
const result = await this.handlerAsUtility().
|
|
360
|
+
const result = await this.handlerAsUtility().tryGetPublicKeysAndPartialAddress(address);
|
|
324
361
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
325
362
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
326
363
|
if (result === undefined) {
|
|
@@ -340,26 +377,30 @@ export class RPCTranslator {
|
|
|
340
377
|
]);
|
|
341
378
|
}
|
|
342
379
|
}
|
|
343
|
-
|
|
380
|
+
// eslint-disable-next-line camelcase
|
|
381
|
+
async aztec_utl_getKeyValidationRequest(foreignPkMHash) {
|
|
344
382
|
const pkMHash = fromSingle(foreignPkMHash);
|
|
345
|
-
const keyValidationRequest = await this.handlerAsUtility().
|
|
383
|
+
const keyValidationRequest = await this.handlerAsUtility().getKeyValidationRequest(pkMHash);
|
|
346
384
|
return toForeignCallResult(keyValidationRequest.toFields().map(toSingle));
|
|
347
385
|
}
|
|
348
|
-
|
|
386
|
+
// eslint-disable-next-line camelcase
|
|
387
|
+
aztec_prv_callPrivateFunction(_foreignTargetContractAddress, _foreignFunctionSelector, _foreignArgsHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
|
|
349
388
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead');
|
|
350
389
|
}
|
|
351
|
-
|
|
390
|
+
// eslint-disable-next-line camelcase
|
|
391
|
+
async aztec_utl_getNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
352
392
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
353
393
|
const nullifier = fromSingle(foreignNullifier);
|
|
354
|
-
const witness = await this.handlerAsUtility().
|
|
394
|
+
const witness = await this.handlerAsUtility().getNullifierMembershipWitness(blockHash, nullifier);
|
|
355
395
|
if (!witness) {
|
|
356
396
|
throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
|
|
357
397
|
}
|
|
358
398
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
359
399
|
}
|
|
360
|
-
|
|
400
|
+
// eslint-disable-next-line camelcase
|
|
401
|
+
async aztec_utl_getAuthWitness(foreignMessageHash) {
|
|
361
402
|
const messageHash = fromSingle(foreignMessageHash);
|
|
362
|
-
const authWitness = await this.handlerAsUtility().
|
|
403
|
+
const authWitness = await this.handlerAsUtility().getAuthWitness(messageHash);
|
|
363
404
|
if (!authWitness) {
|
|
364
405
|
throw new Error(`Auth witness not found for message hash ${messageHash}.`);
|
|
365
406
|
}
|
|
@@ -367,92 +408,112 @@ export class RPCTranslator {
|
|
|
367
408
|
toArray(authWitness)
|
|
368
409
|
]);
|
|
369
410
|
}
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
}
|
|
373
|
-
privateNotifySetPublicTeardownFunctionCall(_foreignTargetContractAddress, _foreignCalldataHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
|
|
411
|
+
// eslint-disable-next-line camelcase
|
|
412
|
+
aztec_prv_validatePublicCalldata(_foreignCalldataHash) {
|
|
374
413
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
375
414
|
}
|
|
376
|
-
|
|
415
|
+
// eslint-disable-next-line camelcase
|
|
416
|
+
aztec_prv_notifyRevertiblePhaseStart(_foreignMinRevertibleSideEffectCounter) {
|
|
377
417
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
378
418
|
}
|
|
379
|
-
|
|
419
|
+
// eslint-disable-next-line camelcase
|
|
420
|
+
async aztec_prv_inRevertiblePhase(foreignSideEffectCounter) {
|
|
380
421
|
const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
|
|
381
|
-
const isRevertible = await this.handlerAsPrivate().
|
|
422
|
+
const isRevertible = await this.handlerAsPrivate().inRevertiblePhase(sideEffectCounter);
|
|
382
423
|
return toForeignCallResult([
|
|
383
424
|
toSingle(new Fr(isRevertible))
|
|
384
425
|
]);
|
|
385
426
|
}
|
|
386
|
-
|
|
387
|
-
|
|
427
|
+
// eslint-disable-next-line camelcase
|
|
428
|
+
aztec_utl_getUtilityContext() {
|
|
429
|
+
const context = this.handlerAsUtility().getUtilityContext();
|
|
388
430
|
return toForeignCallResult(context.toNoirRepresentation());
|
|
389
431
|
}
|
|
390
|
-
|
|
432
|
+
// eslint-disable-next-line camelcase
|
|
433
|
+
async aztec_utl_getBlockHeader(foreignBlockNumber) {
|
|
391
434
|
const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
|
|
392
|
-
const header = await this.handlerAsUtility().
|
|
435
|
+
const header = await this.handlerAsUtility().getBlockHeader(blockNumber);
|
|
393
436
|
if (!header) {
|
|
394
437
|
throw new Error(`Block header not found for block ${blockNumber}.`);
|
|
395
438
|
}
|
|
396
439
|
return toForeignCallResult(header.toFields().map(toSingle));
|
|
397
440
|
}
|
|
398
|
-
|
|
441
|
+
// eslint-disable-next-line camelcase
|
|
442
|
+
async aztec_utl_getNoteHashMembershipWitness(foreignAnchorBlockHash, foreignNoteHash) {
|
|
399
443
|
const blockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
400
444
|
const noteHash = fromSingle(foreignNoteHash);
|
|
401
|
-
const witness = await this.handlerAsUtility().
|
|
445
|
+
const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash);
|
|
402
446
|
if (!witness) {
|
|
403
447
|
throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
|
|
404
448
|
}
|
|
405
449
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
406
450
|
}
|
|
407
|
-
|
|
451
|
+
// eslint-disable-next-line camelcase
|
|
452
|
+
async aztec_utl_getBlockHashMembershipWitness(foreignAnchorBlockHash, foreignBlockHash) {
|
|
408
453
|
const anchorBlockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
409
454
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
410
|
-
const witness = await this.handlerAsUtility().
|
|
455
|
+
const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
411
456
|
if (!witness) {
|
|
412
457
|
throw new Error(`Block hash ${blockHash.toString()} not found in the archive tree at anchor block ${anchorBlockHash.toString()}.`);
|
|
413
458
|
}
|
|
414
459
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
415
460
|
}
|
|
416
|
-
|
|
461
|
+
// eslint-disable-next-line camelcase
|
|
462
|
+
async aztec_utl_getLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
417
463
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
418
464
|
const nullifier = fromSingle(foreignNullifier);
|
|
419
|
-
const witness = await this.handlerAsUtility().
|
|
465
|
+
const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
420
466
|
if (!witness) {
|
|
421
467
|
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
|
|
422
468
|
}
|
|
423
469
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
424
470
|
}
|
|
425
|
-
|
|
471
|
+
// eslint-disable-next-line camelcase
|
|
472
|
+
async aztec_utl_fetchTaggedLogs(foreignPendingTaggedLogArrayBaseSlot) {
|
|
426
473
|
const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
|
|
427
|
-
await this.handlerAsUtility().
|
|
474
|
+
await this.handlerAsUtility().fetchTaggedLogs(pendingTaggedLogArrayBaseSlot);
|
|
428
475
|
return toForeignCallResult([]);
|
|
429
476
|
}
|
|
430
|
-
|
|
477
|
+
// eslint-disable-next-line camelcase
|
|
478
|
+
async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(foreignContractAddress, foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot, foreignMaxNotePackedLen, foreignMaxEventSerializedLen) {
|
|
431
479
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
432
480
|
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
433
481
|
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
434
|
-
|
|
482
|
+
const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
|
|
483
|
+
const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
|
|
484
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot, maxNotePackedLen, maxEventSerializedLen);
|
|
435
485
|
return toForeignCallResult([]);
|
|
436
486
|
}
|
|
437
|
-
|
|
487
|
+
// eslint-disable-next-line camelcase
|
|
488
|
+
async aztec_utl_bulkRetrieveLogs(foreignContractAddress, foreignLogRetrievalRequestsArrayBaseSlot, foreignLogRetrievalResponsesArrayBaseSlot) {
|
|
438
489
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
439
490
|
const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
|
|
440
491
|
const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
|
|
441
|
-
await this.handlerAsUtility().
|
|
492
|
+
await this.handlerAsUtility().bulkRetrieveLogs(contractAddress, logRetrievalRequestsArrayBaseSlot, logRetrievalResponsesArrayBaseSlot);
|
|
493
|
+
return toForeignCallResult([]);
|
|
494
|
+
}
|
|
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);
|
|
442
501
|
return toForeignCallResult([]);
|
|
443
502
|
}
|
|
444
|
-
|
|
503
|
+
// eslint-disable-next-line camelcase
|
|
504
|
+
async aztec_utl_storeCapsule(foreignContractAddress, foreignSlot, foreignCapsule) {
|
|
445
505
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
446
506
|
const slot = fromSingle(foreignSlot);
|
|
447
507
|
const capsule = fromArray(foreignCapsule);
|
|
448
|
-
await this.handlerAsUtility().
|
|
508
|
+
await this.handlerAsUtility().storeCapsule(contractAddress, slot, capsule);
|
|
449
509
|
return toForeignCallResult([]);
|
|
450
510
|
}
|
|
451
|
-
|
|
511
|
+
// eslint-disable-next-line camelcase
|
|
512
|
+
async aztec_utl_loadCapsule(foreignContractAddress, foreignSlot, foreignTSize) {
|
|
452
513
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
453
514
|
const slot = fromSingle(foreignSlot);
|
|
454
515
|
const tSize = fromSingle(foreignTSize).toNumber();
|
|
455
|
-
const values = await this.handlerAsUtility().
|
|
516
|
+
const values = await this.handlerAsUtility().loadCapsule(contractAddress, slot);
|
|
456
517
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
457
518
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
458
519
|
if (values === null) {
|
|
@@ -469,197 +530,234 @@ export class RPCTranslator {
|
|
|
469
530
|
]);
|
|
470
531
|
}
|
|
471
532
|
}
|
|
472
|
-
|
|
533
|
+
// eslint-disable-next-line camelcase
|
|
534
|
+
async aztec_utl_deleteCapsule(foreignContractAddress, foreignSlot) {
|
|
473
535
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
474
536
|
const slot = fromSingle(foreignSlot);
|
|
475
|
-
await this.handlerAsUtility().
|
|
537
|
+
await this.handlerAsUtility().deleteCapsule(contractAddress, slot);
|
|
476
538
|
return toForeignCallResult([]);
|
|
477
539
|
}
|
|
478
|
-
|
|
540
|
+
// eslint-disable-next-line camelcase
|
|
541
|
+
async aztec_utl_copyCapsule(foreignContractAddress, foreignSrcSlot, foreignDstSlot, foreignNumEntries) {
|
|
479
542
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
480
543
|
const srcSlot = fromSingle(foreignSrcSlot);
|
|
481
544
|
const dstSlot = fromSingle(foreignDstSlot);
|
|
482
545
|
const numEntries = fromSingle(foreignNumEntries).toNumber();
|
|
483
|
-
await this.handlerAsUtility().
|
|
546
|
+
await this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries);
|
|
484
547
|
return toForeignCallResult([]);
|
|
485
548
|
}
|
|
486
549
|
// TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
|
|
487
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
|
|
488
551
|
// to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
|
|
489
552
|
// existence of a txe_oracle method?
|
|
490
|
-
|
|
553
|
+
// TODO(F-452): Return Option and wrap in try/catch so BB exceptions don't crash TXE.
|
|
554
|
+
// eslint-disable-next-line camelcase
|
|
555
|
+
async aztec_utl_aes128Decrypt(foreignCiphertextBVecStorage, foreignCiphertextLength, foreignIv, foreignSymKey) {
|
|
491
556
|
const ciphertext = fromUintBoundedVec(foreignCiphertextBVecStorage, foreignCiphertextLength, 8);
|
|
492
557
|
const iv = fromUintArray(foreignIv, 8);
|
|
493
558
|
const symKey = fromUintArray(foreignSymKey, 8);
|
|
494
|
-
const plaintextBuffer = await this.handlerAsUtility().
|
|
559
|
+
const plaintextBuffer = await this.handlerAsUtility().aes128Decrypt(ciphertext, iv, symKey);
|
|
495
560
|
return toForeignCallResult(arrayToBoundedVec(bufferToU8Array(plaintextBuffer), foreignCiphertextBVecStorage.length));
|
|
496
561
|
}
|
|
497
|
-
|
|
562
|
+
// eslint-disable-next-line camelcase
|
|
563
|
+
async aztec_utl_getSharedSecret(foreignAddress, foreignEphPKField0, foreignEphPKField1, foreignEphPKField2) {
|
|
498
564
|
const address = AztecAddress.fromField(fromSingle(foreignAddress));
|
|
499
565
|
const ephPK = Point.fromFields([
|
|
500
566
|
fromSingle(foreignEphPKField0),
|
|
501
567
|
fromSingle(foreignEphPKField1),
|
|
502
568
|
fromSingle(foreignEphPKField2)
|
|
503
569
|
]);
|
|
504
|
-
const secret = await this.handlerAsUtility().
|
|
570
|
+
const secret = await this.handlerAsUtility().getSharedSecret(address, ephPK);
|
|
505
571
|
return toForeignCallResult(secret.toFields().map(toSingle));
|
|
506
572
|
}
|
|
507
|
-
|
|
573
|
+
// eslint-disable-next-line camelcase
|
|
574
|
+
aztec_utl_emitOffchainEffect(_foreignData) {
|
|
508
575
|
throw new Error('Offchain effects are not yet supported in the TestEnvironment');
|
|
509
576
|
}
|
|
510
577
|
// AVM opcodes
|
|
511
|
-
|
|
578
|
+
// eslint-disable-next-line camelcase
|
|
579
|
+
aztec_avm_emitPublicLog(_foreignMessage) {
|
|
512
580
|
// TODO(#8811): Implement
|
|
513
581
|
return toForeignCallResult([]);
|
|
514
582
|
}
|
|
515
|
-
|
|
583
|
+
// eslint-disable-next-line camelcase
|
|
584
|
+
async aztec_avm_storageRead(foreignSlot, foreignContractAddress) {
|
|
516
585
|
const slot = fromSingle(foreignSlot);
|
|
517
586
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
518
|
-
const value = (await this.handlerAsAvm().
|
|
587
|
+
const value = (await this.handlerAsAvm().storageRead(slot, contractAddress)).value;
|
|
519
588
|
return toForeignCallResult([
|
|
520
589
|
toSingle(new Fr(value))
|
|
521
590
|
]);
|
|
522
591
|
}
|
|
523
|
-
|
|
592
|
+
// eslint-disable-next-line camelcase
|
|
593
|
+
async aztec_avm_storageWrite(foreignSlot, foreignValue) {
|
|
524
594
|
const slot = fromSingle(foreignSlot);
|
|
525
595
|
const value = fromSingle(foreignValue);
|
|
526
|
-
await this.handlerAsAvm().
|
|
596
|
+
await this.handlerAsAvm().storageWrite(slot, value);
|
|
527
597
|
return toForeignCallResult([]);
|
|
528
598
|
}
|
|
529
|
-
|
|
599
|
+
// eslint-disable-next-line camelcase
|
|
600
|
+
async aztec_avm_getContractInstanceDeployer(foreignAddress) {
|
|
530
601
|
const address = addressFromSingle(foreignAddress);
|
|
531
|
-
const instance = await this.handlerAsUtility().
|
|
602
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
532
603
|
return toForeignCallResult([
|
|
533
604
|
toSingle(instance.deployer),
|
|
534
605
|
// AVM requires an extra boolean indicating the instance was found
|
|
535
606
|
toSingle(new Fr(1))
|
|
536
607
|
]);
|
|
537
608
|
}
|
|
538
|
-
|
|
609
|
+
// eslint-disable-next-line camelcase
|
|
610
|
+
async aztec_avm_getContractInstanceClassId(foreignAddress) {
|
|
539
611
|
const address = addressFromSingle(foreignAddress);
|
|
540
|
-
const instance = await this.handlerAsUtility().
|
|
612
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
541
613
|
return toForeignCallResult([
|
|
542
614
|
toSingle(instance.currentContractClassId),
|
|
543
615
|
// AVM requires an extra boolean indicating the instance was found
|
|
544
616
|
toSingle(new Fr(1))
|
|
545
617
|
]);
|
|
546
618
|
}
|
|
547
|
-
|
|
619
|
+
// eslint-disable-next-line camelcase
|
|
620
|
+
async aztec_avm_getContractInstanceInitializationHash(foreignAddress) {
|
|
548
621
|
const address = addressFromSingle(foreignAddress);
|
|
549
|
-
const instance = await this.handlerAsUtility().
|
|
622
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
550
623
|
return toForeignCallResult([
|
|
551
624
|
toSingle(instance.initializationHash),
|
|
552
625
|
// AVM requires an extra boolean indicating the instance was found
|
|
553
626
|
toSingle(new Fr(1))
|
|
554
627
|
]);
|
|
555
628
|
}
|
|
556
|
-
|
|
557
|
-
|
|
629
|
+
// eslint-disable-next-line camelcase
|
|
630
|
+
async aztec_avm_sender() {
|
|
631
|
+
const sender = await this.handlerAsAvm().sender();
|
|
558
632
|
return toForeignCallResult([
|
|
559
633
|
toSingle(sender)
|
|
560
634
|
]);
|
|
561
635
|
}
|
|
562
|
-
|
|
636
|
+
// eslint-disable-next-line camelcase
|
|
637
|
+
async aztec_avm_emitNullifier(foreignNullifier) {
|
|
563
638
|
const nullifier = fromSingle(foreignNullifier);
|
|
564
|
-
await this.handlerAsAvm().
|
|
639
|
+
await this.handlerAsAvm().emitNullifier(nullifier);
|
|
565
640
|
return toForeignCallResult([]);
|
|
566
641
|
}
|
|
567
|
-
|
|
642
|
+
// eslint-disable-next-line camelcase
|
|
643
|
+
async aztec_avm_emitNoteHash(foreignNoteHash) {
|
|
568
644
|
const noteHash = fromSingle(foreignNoteHash);
|
|
569
|
-
await this.handlerAsAvm().
|
|
645
|
+
await this.handlerAsAvm().emitNoteHash(noteHash);
|
|
570
646
|
return toForeignCallResult([]);
|
|
571
647
|
}
|
|
572
|
-
|
|
648
|
+
// eslint-disable-next-line camelcase
|
|
649
|
+
async aztec_avm_nullifierExists(foreignSiloedNullifier) {
|
|
573
650
|
const siloedNullifier = fromSingle(foreignSiloedNullifier);
|
|
574
|
-
const exists = await this.handlerAsAvm().
|
|
651
|
+
const exists = await this.handlerAsAvm().nullifierExists(siloedNullifier);
|
|
575
652
|
return toForeignCallResult([
|
|
576
653
|
toSingle(new Fr(exists))
|
|
577
654
|
]);
|
|
578
655
|
}
|
|
579
|
-
|
|
580
|
-
|
|
656
|
+
// eslint-disable-next-line camelcase
|
|
657
|
+
async aztec_avm_address() {
|
|
658
|
+
const contractAddress = await this.handlerAsAvm().address();
|
|
581
659
|
return toForeignCallResult([
|
|
582
660
|
toSingle(contractAddress.toField())
|
|
583
661
|
]);
|
|
584
662
|
}
|
|
585
|
-
|
|
586
|
-
|
|
663
|
+
// eslint-disable-next-line camelcase
|
|
664
|
+
async aztec_avm_blockNumber() {
|
|
665
|
+
const blockNumber = await this.handlerAsAvm().blockNumber();
|
|
587
666
|
return toForeignCallResult([
|
|
588
667
|
toSingle(new Fr(blockNumber))
|
|
589
668
|
]);
|
|
590
669
|
}
|
|
591
|
-
|
|
592
|
-
|
|
670
|
+
// eslint-disable-next-line camelcase
|
|
671
|
+
async aztec_avm_timestamp() {
|
|
672
|
+
const timestamp = await this.handlerAsAvm().timestamp();
|
|
593
673
|
return toForeignCallResult([
|
|
594
674
|
toSingle(new Fr(timestamp))
|
|
595
675
|
]);
|
|
596
676
|
}
|
|
597
|
-
|
|
598
|
-
|
|
677
|
+
// eslint-disable-next-line camelcase
|
|
678
|
+
async aztec_avm_isStaticCall() {
|
|
679
|
+
const isStaticCall = await this.handlerAsAvm().isStaticCall();
|
|
599
680
|
return toForeignCallResult([
|
|
600
681
|
toSingle(new Fr(isStaticCall ? 1 : 0))
|
|
601
682
|
]);
|
|
602
683
|
}
|
|
603
|
-
|
|
604
|
-
|
|
684
|
+
// eslint-disable-next-line camelcase
|
|
685
|
+
async aztec_avm_chainId() {
|
|
686
|
+
const chainId = await this.handlerAsAvm().chainId();
|
|
605
687
|
return toForeignCallResult([
|
|
606
688
|
toSingle(chainId)
|
|
607
689
|
]);
|
|
608
690
|
}
|
|
609
|
-
|
|
610
|
-
|
|
691
|
+
// eslint-disable-next-line camelcase
|
|
692
|
+
async aztec_avm_version() {
|
|
693
|
+
const version = await this.handlerAsAvm().version();
|
|
611
694
|
return toForeignCallResult([
|
|
612
695
|
toSingle(version)
|
|
613
696
|
]);
|
|
614
697
|
}
|
|
615
|
-
|
|
698
|
+
// eslint-disable-next-line camelcase
|
|
699
|
+
aztec_avm_returndataSize() {
|
|
616
700
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
617
701
|
}
|
|
618
|
-
|
|
702
|
+
// eslint-disable-next-line camelcase
|
|
703
|
+
aztec_avm_returndataCopy(_foreignRdOffset, _foreignCopySize) {
|
|
619
704
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
620
705
|
}
|
|
621
|
-
|
|
706
|
+
// eslint-disable-next-line camelcase
|
|
707
|
+
aztec_avm_call(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
|
|
622
708
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
623
709
|
}
|
|
624
|
-
|
|
710
|
+
// eslint-disable-next-line camelcase
|
|
711
|
+
aztec_avm_staticCall(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
|
|
625
712
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
626
713
|
}
|
|
627
|
-
|
|
714
|
+
// eslint-disable-next-line camelcase
|
|
715
|
+
aztec_avm_successCopy() {
|
|
628
716
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
629
717
|
}
|
|
630
|
-
|
|
718
|
+
// eslint-disable-next-line camelcase
|
|
719
|
+
async aztec_txe_privateCallNewFlow(foreignFrom, foreignTargetContractAddress, foreignFunctionSelector, foreignArgs, foreignArgsHash, foreignIsStaticCall) {
|
|
631
720
|
const from = addressFromSingle(foreignFrom);
|
|
632
721
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
633
722
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
634
723
|
const args = fromArray(foreignArgs);
|
|
635
724
|
const argsHash = fromSingle(foreignArgsHash);
|
|
636
725
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
637
|
-
const returnValues = await this.handlerAsTxe().
|
|
726
|
+
const returnValues = await this.handlerAsTxe().privateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, this.stateHandler.getCurrentJob());
|
|
727
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
728
|
+
await this.stateHandler.cycleJob();
|
|
638
729
|
return toForeignCallResult([
|
|
639
730
|
toArray(returnValues)
|
|
640
731
|
]);
|
|
641
732
|
}
|
|
642
|
-
|
|
733
|
+
// eslint-disable-next-line camelcase
|
|
734
|
+
async aztec_txe_executeUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
|
|
643
735
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
644
736
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
645
737
|
const args = fromArray(foreignArgs);
|
|
646
|
-
const returnValues = await this.handlerAsTxe().
|
|
738
|
+
const returnValues = await this.handlerAsTxe().executeUtilityFunction(targetContractAddress, functionSelector, args, this.stateHandler.getCurrentJob());
|
|
739
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
740
|
+
await this.stateHandler.cycleJob();
|
|
647
741
|
return toForeignCallResult([
|
|
648
742
|
toArray(returnValues)
|
|
649
743
|
]);
|
|
650
744
|
}
|
|
651
|
-
|
|
745
|
+
// eslint-disable-next-line camelcase
|
|
746
|
+
async aztec_txe_publicCallNewFlow(foreignFrom, foreignAddress, foreignCalldata, foreignIsStaticCall) {
|
|
652
747
|
const from = addressFromSingle(foreignFrom);
|
|
653
748
|
const address = addressFromSingle(foreignAddress);
|
|
654
749
|
const calldata = fromArray(foreignCalldata);
|
|
655
750
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
656
|
-
const returnValues = await this.handlerAsTxe().
|
|
751
|
+
const returnValues = await this.handlerAsTxe().publicCallNewFlow(from, address, calldata, isStaticCall);
|
|
752
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
753
|
+
await this.stateHandler.cycleJob();
|
|
657
754
|
return toForeignCallResult([
|
|
658
755
|
toArray(returnValues)
|
|
659
756
|
]);
|
|
660
757
|
}
|
|
661
|
-
|
|
662
|
-
|
|
758
|
+
// eslint-disable-next-line camelcase
|
|
759
|
+
async aztec_prv_getSenderForTags() {
|
|
760
|
+
const sender = await this.handlerAsPrivate().getSenderForTags();
|
|
663
761
|
// Return a Noir Option struct with `some` and `value` fields
|
|
664
762
|
if (sender === undefined) {
|
|
665
763
|
// No sender found, return Option with some=0 and value=0
|
|
@@ -675,15 +773,17 @@ export class RPCTranslator {
|
|
|
675
773
|
]);
|
|
676
774
|
}
|
|
677
775
|
}
|
|
678
|
-
|
|
776
|
+
// eslint-disable-next-line camelcase
|
|
777
|
+
async aztec_prv_setSenderForTags(foreignSenderForTags) {
|
|
679
778
|
const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
|
|
680
|
-
await this.handlerAsPrivate().
|
|
779
|
+
await this.handlerAsPrivate().setSenderForTags(senderForTags);
|
|
681
780
|
return toForeignCallResult([]);
|
|
682
781
|
}
|
|
683
|
-
|
|
782
|
+
// eslint-disable-next-line camelcase
|
|
783
|
+
async aztec_prv_getNextAppTagAsSender(foreignSender, foreignRecipient) {
|
|
684
784
|
const sender = AztecAddress.fromField(fromSingle(foreignSender));
|
|
685
785
|
const recipient = AztecAddress.fromField(fromSingle(foreignRecipient));
|
|
686
|
-
const nextAppTag = await this.handlerAsPrivate().
|
|
786
|
+
const nextAppTag = await this.handlerAsPrivate().getNextAppTagAsSender(sender, recipient);
|
|
687
787
|
return toForeignCallResult([
|
|
688
788
|
toSingle(nextAppTag.value)
|
|
689
789
|
]);
|