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