@aztec/txe 0.0.1-commit.7d4e6cd → 0.0.1-commit.7ffbba4
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/constants.d.ts +1 -2
- package/dest/constants.d.ts.map +1 -1
- package/dest/constants.js +0 -1
- 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 +16 -16
- package/dest/oracle/txe_oracle_top_level_context.d.ts +22 -22
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +138 -61
- package/dest/rpc_translator.d.ts +86 -81
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +291 -175
- package/dest/state_machine/archiver.d.ts +20 -69
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +36 -178
- package/dest/state_machine/dummy_p2p_client.d.ts +16 -12
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +28 -16
- package/dest/state_machine/index.d.ts +5 -5
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +35 -12
- package/dest/state_machine/mock_epoch_cache.d.ts +8 -6
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +11 -7
- package/dest/state_machine/synchronizer.d.ts +3 -3
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/txe_session.d.ts +11 -6
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +101 -26
- package/dest/util/encoding.d.ts +17 -17
- 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/dest/utils/block_creation.d.ts +4 -4
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +18 -4
- package/dest/utils/tx_effect_creation.d.ts +2 -3
- package/dest/utils/tx_effect_creation.d.ts.map +1 -1
- package/dest/utils/tx_effect_creation.js +3 -6
- package/package.json +16 -16
- package/src/constants.ts +0 -1
- package/src/index.ts +89 -52
- package/src/oracle/interfaces.ts +32 -31
- package/src/oracle/txe_oracle_public_context.ts +16 -18
- package/src/oracle/txe_oracle_top_level_context.ts +173 -111
- package/src/rpc_translator.ts +313 -198
- package/src/state_machine/archiver.ts +37 -234
- package/src/state_machine/dummy_p2p_client.ts +40 -22
- package/src/state_machine/index.ts +49 -11
- package/src/state_machine/mock_epoch_cache.ts +11 -11
- package/src/state_machine/synchronizer.ts +2 -2
- package/src/txe_session.ts +115 -87
- package/src/util/txe_public_contract_data_source.ts +10 -36
- package/src/utils/block_creation.ts +19 -16
- package/src/utils/tx_effect_creation.ts +3 -11
- 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
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Fr, Point } from '@aztec/aztec.js/fields';
|
|
2
2
|
import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX } from '@aztec/constants';
|
|
3
3
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
-
import {
|
|
4
|
+
import { packAsHintedNote } from '@aztec/pxe/simulator';
|
|
5
5
|
import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
|
|
6
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
-
import {
|
|
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) {
|
|
248
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
220
249
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
221
250
|
const startStorageSlot = fromSingle(foreignStartStorageSlot);
|
|
222
|
-
const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
|
|
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
|
-
|
|
230
|
-
|
|
257
|
+
// eslint-disable-next-line camelcase
|
|
258
|
+
async aztec_utl_getPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
|
|
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
|
-
throw new Error(`Public data witness not found for slot ${leafSlot} at block ${
|
|
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);
|
|
@@ -253,23 +283,24 @@ export class RPCTranslator {
|
|
|
253
283
|
const offset = fromSingle(foreignOffset).toNumber();
|
|
254
284
|
const status = fromSingle(foreignStatus).toNumber();
|
|
255
285
|
const maxNotes = fromSingle(foreignMaxNotes).toNumber();
|
|
256
|
-
const
|
|
257
|
-
const noteDatas = await this.handlerAsUtility().
|
|
258
|
-
const returnDataAsArrayOfArrays = noteDatas.map((noteData)=>
|
|
286
|
+
const packedHintedNoteLength = fromSingle(foreignPackedHintedNoteLength).toNumber();
|
|
287
|
+
const noteDatas = await this.handlerAsUtility().getNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status);
|
|
288
|
+
const returnDataAsArrayOfArrays = noteDatas.map((noteData)=>packAsHintedNote({
|
|
259
289
|
contractAddress: noteData.contractAddress,
|
|
260
290
|
owner: noteData.owner,
|
|
261
291
|
randomness: noteData.randomness,
|
|
262
292
|
storageSlot: noteData.storageSlot,
|
|
263
293
|
noteNonce: noteData.noteNonce,
|
|
264
|
-
|
|
294
|
+
isPending: noteData.isPending,
|
|
265
295
|
note: noteData.note
|
|
266
296
|
}));
|
|
267
297
|
// Now we convert each sub-array to an array of ForeignCallSingles
|
|
268
298
|
const returnDataAsArrayOfForeignCallSingleArrays = returnDataAsArrayOfArrays.map((subArray)=>subArray.map(toSingle));
|
|
269
299
|
// At last we convert the array of arrays to a bounded vec of arrays
|
|
270
|
-
return toForeignCallResult(arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes,
|
|
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,31 +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) {
|
|
330
|
+
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
331
|
+
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
332
|
+
const isPending = await this.handlerAsPrivate().isNullifierPending(innerNullifier, contractAddress);
|
|
333
|
+
return toForeignCallResult([
|
|
334
|
+
toSingle(new Fr(isPending))
|
|
335
|
+
]);
|
|
336
|
+
}
|
|
337
|
+
// eslint-disable-next-line camelcase
|
|
338
|
+
async aztec_utl_checkNullifierExists(foreignInnerNullifier) {
|
|
296
339
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
297
|
-
const exists = await this.handlerAsUtility().
|
|
340
|
+
const exists = await this.handlerAsUtility().checkNullifierExists(innerNullifier);
|
|
298
341
|
return toForeignCallResult([
|
|
299
342
|
toSingle(new Fr(exists))
|
|
300
343
|
]);
|
|
301
344
|
}
|
|
302
|
-
|
|
345
|
+
// eslint-disable-next-line camelcase
|
|
346
|
+
async aztec_utl_getContractInstance(foreignAddress) {
|
|
303
347
|
const address = addressFromSingle(foreignAddress);
|
|
304
|
-
const instance = await this.handlerAsUtility().
|
|
348
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
305
349
|
return toForeignCallResult([
|
|
306
350
|
instance.salt,
|
|
307
351
|
instance.deployer.toField(),
|
|
@@ -310,36 +354,53 @@ export class RPCTranslator {
|
|
|
310
354
|
...instance.publicKeys.toFields()
|
|
311
355
|
].map(toSingle));
|
|
312
356
|
}
|
|
313
|
-
|
|
357
|
+
// eslint-disable-next-line camelcase
|
|
358
|
+
async aztec_utl_tryGetPublicKeysAndPartialAddress(foreignAddress) {
|
|
314
359
|
const address = addressFromSingle(foreignAddress);
|
|
315
|
-
const
|
|
316
|
-
return
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
360
|
+
const result = await this.handlerAsUtility().tryGetPublicKeysAndPartialAddress(address);
|
|
361
|
+
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
362
|
+
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
363
|
+
if (result === undefined) {
|
|
364
|
+
// No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
|
|
365
|
+
return toForeignCallResult([
|
|
366
|
+
toSingle(new Fr(0)),
|
|
367
|
+
toArray(Array(13).fill(new Fr(0)))
|
|
368
|
+
]);
|
|
369
|
+
} else {
|
|
370
|
+
// Data was found so we set `some` to 1 and return it along with `value`.
|
|
371
|
+
return toForeignCallResult([
|
|
372
|
+
toSingle(new Fr(1)),
|
|
373
|
+
toArray([
|
|
374
|
+
...result.publicKeys.toFields(),
|
|
375
|
+
result.partialAddress
|
|
376
|
+
])
|
|
377
|
+
]);
|
|
378
|
+
}
|
|
322
379
|
}
|
|
323
|
-
|
|
380
|
+
// eslint-disable-next-line camelcase
|
|
381
|
+
async aztec_utl_getKeyValidationRequest(foreignPkMHash) {
|
|
324
382
|
const pkMHash = fromSingle(foreignPkMHash);
|
|
325
|
-
const keyValidationRequest = await this.handlerAsUtility().
|
|
383
|
+
const keyValidationRequest = await this.handlerAsUtility().getKeyValidationRequest(pkMHash);
|
|
326
384
|
return toForeignCallResult(keyValidationRequest.toFields().map(toSingle));
|
|
327
385
|
}
|
|
328
|
-
|
|
386
|
+
// eslint-disable-next-line camelcase
|
|
387
|
+
aztec_prv_callPrivateFunction(_foreignTargetContractAddress, _foreignFunctionSelector, _foreignArgsHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
|
|
329
388
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead');
|
|
330
389
|
}
|
|
331
|
-
|
|
332
|
-
|
|
390
|
+
// eslint-disable-next-line camelcase
|
|
391
|
+
async aztec_utl_getNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
392
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
333
393
|
const nullifier = fromSingle(foreignNullifier);
|
|
334
|
-
const witness = await this.handlerAsUtility().
|
|
394
|
+
const witness = await this.handlerAsUtility().getNullifierMembershipWitness(blockHash, nullifier);
|
|
335
395
|
if (!witness) {
|
|
336
|
-
throw new Error(`Nullifier membership witness not found at block ${
|
|
396
|
+
throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
|
|
337
397
|
}
|
|
338
398
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
339
399
|
}
|
|
340
|
-
|
|
400
|
+
// eslint-disable-next-line camelcase
|
|
401
|
+
async aztec_utl_getAuthWitness(foreignMessageHash) {
|
|
341
402
|
const messageHash = fromSingle(foreignMessageHash);
|
|
342
|
-
const authWitness = await this.handlerAsUtility().
|
|
403
|
+
const authWitness = await this.handlerAsUtility().getAuthWitness(messageHash);
|
|
343
404
|
if (!authWitness) {
|
|
344
405
|
throw new Error(`Auth witness not found for message hash ${messageHash}.`);
|
|
345
406
|
}
|
|
@@ -347,87 +408,104 @@ export class RPCTranslator {
|
|
|
347
408
|
toArray(authWitness)
|
|
348
409
|
]);
|
|
349
410
|
}
|
|
350
|
-
|
|
411
|
+
// eslint-disable-next-line camelcase
|
|
412
|
+
aztec_prv_validatePublicCalldata(_foreignCalldataHash) {
|
|
351
413
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
352
414
|
}
|
|
353
|
-
|
|
415
|
+
// eslint-disable-next-line camelcase
|
|
416
|
+
aztec_prv_notifyRevertiblePhaseStart(_foreignMinRevertibleSideEffectCounter) {
|
|
354
417
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
355
418
|
}
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
}
|
|
359
|
-
async privateIsSideEffectCounterRevertible(foreignSideEffectCounter) {
|
|
419
|
+
// eslint-disable-next-line camelcase
|
|
420
|
+
async aztec_prv_inRevertiblePhase(foreignSideEffectCounter) {
|
|
360
421
|
const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
|
|
361
|
-
const isRevertible = await this.handlerAsPrivate().
|
|
422
|
+
const isRevertible = await this.handlerAsPrivate().inRevertiblePhase(sideEffectCounter);
|
|
362
423
|
return toForeignCallResult([
|
|
363
424
|
toSingle(new Fr(isRevertible))
|
|
364
425
|
]);
|
|
365
426
|
}
|
|
366
|
-
|
|
367
|
-
|
|
427
|
+
// eslint-disable-next-line camelcase
|
|
428
|
+
aztec_utl_getUtilityContext() {
|
|
429
|
+
const context = this.handlerAsUtility().getUtilityContext();
|
|
368
430
|
return toForeignCallResult(context.toNoirRepresentation());
|
|
369
431
|
}
|
|
370
|
-
|
|
432
|
+
// eslint-disable-next-line camelcase
|
|
433
|
+
async aztec_utl_getBlockHeader(foreignBlockNumber) {
|
|
371
434
|
const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
|
|
372
|
-
const header = await this.handlerAsUtility().
|
|
435
|
+
const header = await this.handlerAsUtility().getBlockHeader(blockNumber);
|
|
373
436
|
if (!header) {
|
|
374
437
|
throw new Error(`Block header not found for block ${blockNumber}.`);
|
|
375
438
|
}
|
|
376
439
|
return toForeignCallResult(header.toFields().map(toSingle));
|
|
377
440
|
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
const
|
|
381
|
-
const
|
|
382
|
-
const witness = await this.handlerAsUtility().
|
|
441
|
+
// eslint-disable-next-line camelcase
|
|
442
|
+
async aztec_utl_getNoteHashMembershipWitness(foreignAnchorBlockHash, foreignNoteHash) {
|
|
443
|
+
const blockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
444
|
+
const noteHash = fromSingle(foreignNoteHash);
|
|
445
|
+
const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash);
|
|
383
446
|
if (!witness) {
|
|
384
|
-
throw new Error(`
|
|
447
|
+
throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
|
|
385
448
|
}
|
|
386
|
-
return toForeignCallResult(
|
|
387
|
-
toSingle(witness[0]),
|
|
388
|
-
toArray(witness.slice(1))
|
|
389
|
-
]);
|
|
449
|
+
return toForeignCallResult(witness.toNoirRepresentation());
|
|
390
450
|
}
|
|
391
|
-
|
|
392
|
-
|
|
451
|
+
// eslint-disable-next-line camelcase
|
|
452
|
+
async aztec_utl_getBlockHashMembershipWitness(foreignAnchorBlockHash, foreignBlockHash) {
|
|
453
|
+
const anchorBlockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
454
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
455
|
+
const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
456
|
+
if (!witness) {
|
|
457
|
+
throw new Error(`Block hash ${blockHash.toString()} not found in the archive tree at anchor block ${anchorBlockHash.toString()}.`);
|
|
458
|
+
}
|
|
459
|
+
return toForeignCallResult(witness.toNoirRepresentation());
|
|
460
|
+
}
|
|
461
|
+
// eslint-disable-next-line camelcase
|
|
462
|
+
async aztec_utl_getLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
463
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
393
464
|
const nullifier = fromSingle(foreignNullifier);
|
|
394
|
-
const witness = await this.handlerAsUtility().
|
|
465
|
+
const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
395
466
|
if (!witness) {
|
|
396
|
-
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${
|
|
467
|
+
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
|
|
397
468
|
}
|
|
398
469
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
399
470
|
}
|
|
400
|
-
|
|
471
|
+
// eslint-disable-next-line camelcase
|
|
472
|
+
async aztec_utl_fetchTaggedLogs(foreignPendingTaggedLogArrayBaseSlot) {
|
|
401
473
|
const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
|
|
402
|
-
await this.handlerAsUtility().
|
|
474
|
+
await this.handlerAsUtility().fetchTaggedLogs(pendingTaggedLogArrayBaseSlot);
|
|
403
475
|
return toForeignCallResult([]);
|
|
404
476
|
}
|
|
405
|
-
|
|
477
|
+
// eslint-disable-next-line camelcase
|
|
478
|
+
async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(foreignContractAddress, foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot, foreignMaxNotePackedLen, foreignMaxEventSerializedLen) {
|
|
406
479
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
407
480
|
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
408
481
|
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
409
|
-
|
|
482
|
+
const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
|
|
483
|
+
const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
|
|
484
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot, maxNotePackedLen, maxEventSerializedLen);
|
|
410
485
|
return toForeignCallResult([]);
|
|
411
486
|
}
|
|
412
|
-
|
|
487
|
+
// eslint-disable-next-line camelcase
|
|
488
|
+
async aztec_utl_bulkRetrieveLogs(foreignContractAddress, foreignLogRetrievalRequestsArrayBaseSlot, foreignLogRetrievalResponsesArrayBaseSlot) {
|
|
413
489
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
414
490
|
const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
|
|
415
491
|
const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
|
|
416
|
-
await this.handlerAsUtility().
|
|
492
|
+
await this.handlerAsUtility().bulkRetrieveLogs(contractAddress, logRetrievalRequestsArrayBaseSlot, logRetrievalResponsesArrayBaseSlot);
|
|
417
493
|
return toForeignCallResult([]);
|
|
418
494
|
}
|
|
419
|
-
|
|
495
|
+
// eslint-disable-next-line camelcase
|
|
496
|
+
async aztec_utl_storeCapsule(foreignContractAddress, foreignSlot, foreignCapsule) {
|
|
420
497
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
421
498
|
const slot = fromSingle(foreignSlot);
|
|
422
499
|
const capsule = fromArray(foreignCapsule);
|
|
423
|
-
await this.handlerAsUtility().
|
|
500
|
+
await this.handlerAsUtility().storeCapsule(contractAddress, slot, capsule);
|
|
424
501
|
return toForeignCallResult([]);
|
|
425
502
|
}
|
|
426
|
-
|
|
503
|
+
// eslint-disable-next-line camelcase
|
|
504
|
+
async aztec_utl_loadCapsule(foreignContractAddress, foreignSlot, foreignTSize) {
|
|
427
505
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
428
506
|
const slot = fromSingle(foreignSlot);
|
|
429
507
|
const tSize = fromSingle(foreignTSize).toNumber();
|
|
430
|
-
const values = await this.handlerAsUtility().
|
|
508
|
+
const values = await this.handlerAsUtility().loadCapsule(contractAddress, slot);
|
|
431
509
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
432
510
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
433
511
|
if (values === null) {
|
|
@@ -444,197 +522,233 @@ export class RPCTranslator {
|
|
|
444
522
|
]);
|
|
445
523
|
}
|
|
446
524
|
}
|
|
447
|
-
|
|
525
|
+
// eslint-disable-next-line camelcase
|
|
526
|
+
async aztec_utl_deleteCapsule(foreignContractAddress, foreignSlot) {
|
|
448
527
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
449
528
|
const slot = fromSingle(foreignSlot);
|
|
450
|
-
await this.handlerAsUtility().
|
|
529
|
+
await this.handlerAsUtility().deleteCapsule(contractAddress, slot);
|
|
451
530
|
return toForeignCallResult([]);
|
|
452
531
|
}
|
|
453
|
-
|
|
532
|
+
// eslint-disable-next-line camelcase
|
|
533
|
+
async aztec_utl_copyCapsule(foreignContractAddress, foreignSrcSlot, foreignDstSlot, foreignNumEntries) {
|
|
454
534
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
455
535
|
const srcSlot = fromSingle(foreignSrcSlot);
|
|
456
536
|
const dstSlot = fromSingle(foreignDstSlot);
|
|
457
537
|
const numEntries = fromSingle(foreignNumEntries).toNumber();
|
|
458
|
-
await this.handlerAsUtility().
|
|
538
|
+
await this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries);
|
|
459
539
|
return toForeignCallResult([]);
|
|
460
540
|
}
|
|
461
541
|
// TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
|
|
462
542
|
// 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
|
|
463
543
|
// to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
|
|
464
544
|
// existence of a txe_oracle method?
|
|
465
|
-
|
|
545
|
+
// eslint-disable-next-line camelcase
|
|
546
|
+
async aztec_utl_aes128Decrypt(foreignCiphertextBVecStorage, foreignCiphertextLength, foreignIv, foreignSymKey) {
|
|
466
547
|
const ciphertext = fromUintBoundedVec(foreignCiphertextBVecStorage, foreignCiphertextLength, 8);
|
|
467
548
|
const iv = fromUintArray(foreignIv, 8);
|
|
468
549
|
const symKey = fromUintArray(foreignSymKey, 8);
|
|
469
|
-
const plaintextBuffer = await this.handlerAsUtility().
|
|
550
|
+
const plaintextBuffer = await this.handlerAsUtility().aes128Decrypt(ciphertext, iv, symKey);
|
|
470
551
|
return toForeignCallResult(arrayToBoundedVec(bufferToU8Array(plaintextBuffer), foreignCiphertextBVecStorage.length));
|
|
471
552
|
}
|
|
472
|
-
|
|
553
|
+
// eslint-disable-next-line camelcase
|
|
554
|
+
async aztec_utl_getSharedSecret(foreignAddress, foreignEphPKField0, foreignEphPKField1, foreignEphPKField2) {
|
|
473
555
|
const address = AztecAddress.fromField(fromSingle(foreignAddress));
|
|
474
556
|
const ephPK = Point.fromFields([
|
|
475
557
|
fromSingle(foreignEphPKField0),
|
|
476
558
|
fromSingle(foreignEphPKField1),
|
|
477
559
|
fromSingle(foreignEphPKField2)
|
|
478
560
|
]);
|
|
479
|
-
const secret = await this.handlerAsUtility().
|
|
561
|
+
const secret = await this.handlerAsUtility().getSharedSecret(address, ephPK);
|
|
480
562
|
return toForeignCallResult(secret.toFields().map(toSingle));
|
|
481
563
|
}
|
|
482
|
-
|
|
564
|
+
// eslint-disable-next-line camelcase
|
|
565
|
+
aztec_utl_emitOffchainEffect(_foreignData) {
|
|
483
566
|
throw new Error('Offchain effects are not yet supported in the TestEnvironment');
|
|
484
567
|
}
|
|
485
568
|
// AVM opcodes
|
|
486
|
-
|
|
569
|
+
// eslint-disable-next-line camelcase
|
|
570
|
+
aztec_avm_emitPublicLog(_foreignMessage) {
|
|
487
571
|
// TODO(#8811): Implement
|
|
488
572
|
return toForeignCallResult([]);
|
|
489
573
|
}
|
|
490
|
-
|
|
574
|
+
// eslint-disable-next-line camelcase
|
|
575
|
+
async aztec_avm_storageRead(foreignSlot, foreignContractAddress) {
|
|
491
576
|
const slot = fromSingle(foreignSlot);
|
|
492
|
-
const
|
|
577
|
+
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
578
|
+
const value = (await this.handlerAsAvm().storageRead(slot, contractAddress)).value;
|
|
493
579
|
return toForeignCallResult([
|
|
494
580
|
toSingle(new Fr(value))
|
|
495
581
|
]);
|
|
496
582
|
}
|
|
497
|
-
|
|
583
|
+
// eslint-disable-next-line camelcase
|
|
584
|
+
async aztec_avm_storageWrite(foreignSlot, foreignValue) {
|
|
498
585
|
const slot = fromSingle(foreignSlot);
|
|
499
586
|
const value = fromSingle(foreignValue);
|
|
500
|
-
await this.handlerAsAvm().
|
|
587
|
+
await this.handlerAsAvm().storageWrite(slot, value);
|
|
501
588
|
return toForeignCallResult([]);
|
|
502
589
|
}
|
|
503
|
-
|
|
590
|
+
// eslint-disable-next-line camelcase
|
|
591
|
+
async aztec_avm_getContractInstanceDeployer(foreignAddress) {
|
|
504
592
|
const address = addressFromSingle(foreignAddress);
|
|
505
|
-
const instance = await this.handlerAsUtility().
|
|
593
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
506
594
|
return toForeignCallResult([
|
|
507
595
|
toSingle(instance.deployer),
|
|
508
596
|
// AVM requires an extra boolean indicating the instance was found
|
|
509
597
|
toSingle(new Fr(1))
|
|
510
598
|
]);
|
|
511
599
|
}
|
|
512
|
-
|
|
600
|
+
// eslint-disable-next-line camelcase
|
|
601
|
+
async aztec_avm_getContractInstanceClassId(foreignAddress) {
|
|
513
602
|
const address = addressFromSingle(foreignAddress);
|
|
514
|
-
const instance = await this.handlerAsUtility().
|
|
603
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
515
604
|
return toForeignCallResult([
|
|
516
605
|
toSingle(instance.currentContractClassId),
|
|
517
606
|
// AVM requires an extra boolean indicating the instance was found
|
|
518
607
|
toSingle(new Fr(1))
|
|
519
608
|
]);
|
|
520
609
|
}
|
|
521
|
-
|
|
610
|
+
// eslint-disable-next-line camelcase
|
|
611
|
+
async aztec_avm_getContractInstanceInitializationHash(foreignAddress) {
|
|
522
612
|
const address = addressFromSingle(foreignAddress);
|
|
523
|
-
const instance = await this.handlerAsUtility().
|
|
613
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
524
614
|
return toForeignCallResult([
|
|
525
615
|
toSingle(instance.initializationHash),
|
|
526
616
|
// AVM requires an extra boolean indicating the instance was found
|
|
527
617
|
toSingle(new Fr(1))
|
|
528
618
|
]);
|
|
529
619
|
}
|
|
530
|
-
|
|
531
|
-
|
|
620
|
+
// eslint-disable-next-line camelcase
|
|
621
|
+
async aztec_avm_sender() {
|
|
622
|
+
const sender = await this.handlerAsAvm().sender();
|
|
532
623
|
return toForeignCallResult([
|
|
533
624
|
toSingle(sender)
|
|
534
625
|
]);
|
|
535
626
|
}
|
|
536
|
-
|
|
627
|
+
// eslint-disable-next-line camelcase
|
|
628
|
+
async aztec_avm_emitNullifier(foreignNullifier) {
|
|
537
629
|
const nullifier = fromSingle(foreignNullifier);
|
|
538
|
-
await this.handlerAsAvm().
|
|
630
|
+
await this.handlerAsAvm().emitNullifier(nullifier);
|
|
539
631
|
return toForeignCallResult([]);
|
|
540
632
|
}
|
|
541
|
-
|
|
633
|
+
// eslint-disable-next-line camelcase
|
|
634
|
+
async aztec_avm_emitNoteHash(foreignNoteHash) {
|
|
542
635
|
const noteHash = fromSingle(foreignNoteHash);
|
|
543
|
-
await this.handlerAsAvm().
|
|
636
|
+
await this.handlerAsAvm().emitNoteHash(noteHash);
|
|
544
637
|
return toForeignCallResult([]);
|
|
545
638
|
}
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
const
|
|
549
|
-
const exists = await this.handlerAsAvm().
|
|
639
|
+
// eslint-disable-next-line camelcase
|
|
640
|
+
async aztec_avm_nullifierExists(foreignSiloedNullifier) {
|
|
641
|
+
const siloedNullifier = fromSingle(foreignSiloedNullifier);
|
|
642
|
+
const exists = await this.handlerAsAvm().nullifierExists(siloedNullifier);
|
|
550
643
|
return toForeignCallResult([
|
|
551
644
|
toSingle(new Fr(exists))
|
|
552
645
|
]);
|
|
553
646
|
}
|
|
554
|
-
|
|
555
|
-
|
|
647
|
+
// eslint-disable-next-line camelcase
|
|
648
|
+
async aztec_avm_address() {
|
|
649
|
+
const contractAddress = await this.handlerAsAvm().address();
|
|
556
650
|
return toForeignCallResult([
|
|
557
651
|
toSingle(contractAddress.toField())
|
|
558
652
|
]);
|
|
559
653
|
}
|
|
560
|
-
|
|
561
|
-
|
|
654
|
+
// eslint-disable-next-line camelcase
|
|
655
|
+
async aztec_avm_blockNumber() {
|
|
656
|
+
const blockNumber = await this.handlerAsAvm().blockNumber();
|
|
562
657
|
return toForeignCallResult([
|
|
563
658
|
toSingle(new Fr(blockNumber))
|
|
564
659
|
]);
|
|
565
660
|
}
|
|
566
|
-
|
|
567
|
-
|
|
661
|
+
// eslint-disable-next-line camelcase
|
|
662
|
+
async aztec_avm_timestamp() {
|
|
663
|
+
const timestamp = await this.handlerAsAvm().timestamp();
|
|
568
664
|
return toForeignCallResult([
|
|
569
665
|
toSingle(new Fr(timestamp))
|
|
570
666
|
]);
|
|
571
667
|
}
|
|
572
|
-
|
|
573
|
-
|
|
668
|
+
// eslint-disable-next-line camelcase
|
|
669
|
+
async aztec_avm_isStaticCall() {
|
|
670
|
+
const isStaticCall = await this.handlerAsAvm().isStaticCall();
|
|
574
671
|
return toForeignCallResult([
|
|
575
672
|
toSingle(new Fr(isStaticCall ? 1 : 0))
|
|
576
673
|
]);
|
|
577
674
|
}
|
|
578
|
-
|
|
579
|
-
|
|
675
|
+
// eslint-disable-next-line camelcase
|
|
676
|
+
async aztec_avm_chainId() {
|
|
677
|
+
const chainId = await this.handlerAsAvm().chainId();
|
|
580
678
|
return toForeignCallResult([
|
|
581
679
|
toSingle(chainId)
|
|
582
680
|
]);
|
|
583
681
|
}
|
|
584
|
-
|
|
585
|
-
|
|
682
|
+
// eslint-disable-next-line camelcase
|
|
683
|
+
async aztec_avm_version() {
|
|
684
|
+
const version = await this.handlerAsAvm().version();
|
|
586
685
|
return toForeignCallResult([
|
|
587
686
|
toSingle(version)
|
|
588
687
|
]);
|
|
589
688
|
}
|
|
590
|
-
|
|
689
|
+
// eslint-disable-next-line camelcase
|
|
690
|
+
aztec_avm_returndataSize() {
|
|
591
691
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
592
692
|
}
|
|
593
|
-
|
|
693
|
+
// eslint-disable-next-line camelcase
|
|
694
|
+
aztec_avm_returndataCopy(_foreignRdOffset, _foreignCopySize) {
|
|
594
695
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
595
696
|
}
|
|
596
|
-
|
|
697
|
+
// eslint-disable-next-line camelcase
|
|
698
|
+
aztec_avm_call(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
|
|
597
699
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
598
700
|
}
|
|
599
|
-
|
|
701
|
+
// eslint-disable-next-line camelcase
|
|
702
|
+
aztec_avm_staticCall(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
|
|
600
703
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
601
704
|
}
|
|
602
|
-
|
|
705
|
+
// eslint-disable-next-line camelcase
|
|
706
|
+
aztec_avm_successCopy() {
|
|
603
707
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
604
708
|
}
|
|
605
|
-
|
|
709
|
+
// eslint-disable-next-line camelcase
|
|
710
|
+
async aztec_txe_privateCallNewFlow(foreignFrom, foreignTargetContractAddress, foreignFunctionSelector, foreignArgs, foreignArgsHash, foreignIsStaticCall) {
|
|
606
711
|
const from = addressFromSingle(foreignFrom);
|
|
607
712
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
608
713
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
609
714
|
const args = fromArray(foreignArgs);
|
|
610
715
|
const argsHash = fromSingle(foreignArgsHash);
|
|
611
716
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
612
|
-
const returnValues = await this.handlerAsTxe().
|
|
717
|
+
const returnValues = await this.handlerAsTxe().privateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, this.stateHandler.getCurrentJob());
|
|
718
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
719
|
+
await this.stateHandler.cycleJob();
|
|
613
720
|
return toForeignCallResult([
|
|
614
721
|
toArray(returnValues)
|
|
615
722
|
]);
|
|
616
723
|
}
|
|
617
|
-
|
|
724
|
+
// eslint-disable-next-line camelcase
|
|
725
|
+
async aztec_txe_executeUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
|
|
618
726
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
619
727
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
620
728
|
const args = fromArray(foreignArgs);
|
|
621
|
-
const returnValues = await this.handlerAsTxe().
|
|
729
|
+
const returnValues = await this.handlerAsTxe().executeUtilityFunction(targetContractAddress, functionSelector, args, this.stateHandler.getCurrentJob());
|
|
730
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
731
|
+
await this.stateHandler.cycleJob();
|
|
622
732
|
return toForeignCallResult([
|
|
623
733
|
toArray(returnValues)
|
|
624
734
|
]);
|
|
625
735
|
}
|
|
626
|
-
|
|
736
|
+
// eslint-disable-next-line camelcase
|
|
737
|
+
async aztec_txe_publicCallNewFlow(foreignFrom, foreignAddress, foreignCalldata, foreignIsStaticCall) {
|
|
627
738
|
const from = addressFromSingle(foreignFrom);
|
|
628
739
|
const address = addressFromSingle(foreignAddress);
|
|
629
740
|
const calldata = fromArray(foreignCalldata);
|
|
630
741
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
631
|
-
const returnValues = await this.handlerAsTxe().
|
|
742
|
+
const returnValues = await this.handlerAsTxe().publicCallNewFlow(from, address, calldata, isStaticCall);
|
|
743
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
744
|
+
await this.stateHandler.cycleJob();
|
|
632
745
|
return toForeignCallResult([
|
|
633
746
|
toArray(returnValues)
|
|
634
747
|
]);
|
|
635
748
|
}
|
|
636
|
-
|
|
637
|
-
|
|
749
|
+
// eslint-disable-next-line camelcase
|
|
750
|
+
async aztec_prv_getSenderForTags() {
|
|
751
|
+
const sender = await this.handlerAsPrivate().getSenderForTags();
|
|
638
752
|
// Return a Noir Option struct with `some` and `value` fields
|
|
639
753
|
if (sender === undefined) {
|
|
640
754
|
// No sender found, return Option with some=0 and value=0
|
|
@@ -650,15 +764,17 @@ export class RPCTranslator {
|
|
|
650
764
|
]);
|
|
651
765
|
}
|
|
652
766
|
}
|
|
653
|
-
|
|
767
|
+
// eslint-disable-next-line camelcase
|
|
768
|
+
async aztec_prv_setSenderForTags(foreignSenderForTags) {
|
|
654
769
|
const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
|
|
655
|
-
await this.handlerAsPrivate().
|
|
770
|
+
await this.handlerAsPrivate().setSenderForTags(senderForTags);
|
|
656
771
|
return toForeignCallResult([]);
|
|
657
772
|
}
|
|
658
|
-
|
|
773
|
+
// eslint-disable-next-line camelcase
|
|
774
|
+
async aztec_prv_getNextAppTagAsSender(foreignSender, foreignRecipient) {
|
|
659
775
|
const sender = AztecAddress.fromField(fromSingle(foreignSender));
|
|
660
776
|
const recipient = AztecAddress.fromField(fromSingle(foreignRecipient));
|
|
661
|
-
const nextAppTag = await this.handlerAsPrivate().
|
|
777
|
+
const nextAppTag = await this.handlerAsPrivate().getNextAppTagAsSender(sender, recipient);
|
|
662
778
|
return toForeignCallResult([
|
|
663
779
|
toSingle(nextAppTag.value)
|
|
664
780
|
]);
|