@aztec/txe 0.0.1-commit.e61ad554 → 0.0.1-commit.ec5f612
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 +82 -50
- package/dest/oracle/interfaces.d.ts +5 -4
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.d.ts +2 -2
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +3 -4
- package/dest/oracle/txe_oracle_top_level_context.d.ts +7 -8
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +106 -35
- package/dest/rpc_translator.d.ts +9 -9
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +57 -34
- package/dest/state_machine/archiver.d.ts +1 -1
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +2 -0
- 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 +15 -10
- package/dest/state_machine/mock_epoch_cache.d.ts +3 -1
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +4 -0
- package/dest/txe_session.d.ts +9 -6
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +80 -21
- package/dest/util/txe_public_contract_data_source.d.ts +2 -3
- package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.js +5 -22
- package/dest/utils/block_creation.d.ts +1 -1
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +3 -1
- package/package.json +15 -15
- package/src/index.ts +83 -49
- package/src/oracle/interfaces.ts +7 -2
- package/src/oracle/txe_oracle_public_context.ts +3 -5
- package/src/oracle/txe_oracle_top_level_context.ts +134 -82
- package/src/rpc_translator.ts +61 -28
- package/src/state_machine/archiver.ts +2 -0
- package/src/state_machine/dummy_p2p_client.ts +40 -22
- package/src/state_machine/index.ts +25 -9
- package/src/state_machine/mock_epoch_cache.ts +5 -0
- package/src/txe_session.ts +89 -81
- package/src/util/txe_public_contract_data_source.ts +10 -36
- package/src/utils/block_creation.ts +3 -1
- 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
|
@@ -4,7 +4,7 @@ import { Schnorr } from '@aztec/foundation/crypto/schnorr';
|
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { LogLevels, applyStringFormatting, createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
7
|
-
import { ORACLE_VERSION, enrichPublicSimulationError
|
|
7
|
+
import { ORACLE_VERSION, enrichPublicSimulationError } from '@aztec/pxe/server';
|
|
8
8
|
import { ExecutionNoteCache, ExecutionTaggingIndexCache, HashedValuesCache, Oracle, PrivateExecutionOracle, UtilityExecutionOracle, executePrivateFunction, generateSimulatedProvingResult } from '@aztec/pxe/simulator';
|
|
9
9
|
import { ExecutionError, WASMSimulator, createSimulationError, extractCallStack, resolveAssertionMessageFromError, toACVMWitness, witnessMapToFields } from '@aztec/simulator/client';
|
|
10
10
|
import { CppPublicTxSimulator, GuardedMerkleTreeOperations, PublicContractsDB, PublicProcessor } from '@aztec/simulator/server';
|
|
@@ -36,7 +36,6 @@ export class TXEOracleTopLevelContext {
|
|
|
36
36
|
senderAddressBookStore;
|
|
37
37
|
capsuleStore;
|
|
38
38
|
privateEventStore;
|
|
39
|
-
jobId;
|
|
40
39
|
nextBlockTimestamp;
|
|
41
40
|
version;
|
|
42
41
|
chainId;
|
|
@@ -44,7 +43,7 @@ export class TXEOracleTopLevelContext {
|
|
|
44
43
|
isMisc;
|
|
45
44
|
isTxe;
|
|
46
45
|
logger;
|
|
47
|
-
constructor(stateMachine, contractStore, noteStore, keyStore, addressStore, accountStore, senderTaggingStore, recipientTaggingStore, senderAddressBookStore, capsuleStore, privateEventStore,
|
|
46
|
+
constructor(stateMachine, contractStore, noteStore, keyStore, addressStore, accountStore, senderTaggingStore, recipientTaggingStore, senderAddressBookStore, capsuleStore, privateEventStore, nextBlockTimestamp, version, chainId, authwits){
|
|
48
47
|
this.stateMachine = stateMachine;
|
|
49
48
|
this.contractStore = contractStore;
|
|
50
49
|
this.noteStore = noteStore;
|
|
@@ -56,7 +55,6 @@ export class TXEOracleTopLevelContext {
|
|
|
56
55
|
this.senderAddressBookStore = senderAddressBookStore;
|
|
57
56
|
this.capsuleStore = capsuleStore;
|
|
58
57
|
this.privateEventStore = privateEventStore;
|
|
59
|
-
this.jobId = jobId;
|
|
60
58
|
this.nextBlockTimestamp = nextBlockTimestamp;
|
|
61
59
|
this.version = version;
|
|
62
60
|
this.chainId = chainId;
|
|
@@ -77,14 +75,15 @@ export class TXEOracleTopLevelContext {
|
|
|
77
75
|
return Fr.random();
|
|
78
76
|
}
|
|
79
77
|
// We instruct users to debug contracts via this oracle, so it makes sense that they'd expect it to also work in tests
|
|
80
|
-
|
|
78
|
+
utilityLog(level, message, fields) {
|
|
81
79
|
if (!LogLevels[level]) {
|
|
82
|
-
throw new Error(`Invalid
|
|
80
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
83
81
|
}
|
|
84
82
|
const levelName = LogLevels[level];
|
|
85
83
|
this.logger[levelName](`${applyStringFormatting(message, fields)}`, {
|
|
86
84
|
module: `${this.logger.module}:debug_log`
|
|
87
85
|
});
|
|
86
|
+
return Promise.resolve();
|
|
88
87
|
}
|
|
89
88
|
txeGetDefaultAddress() {
|
|
90
89
|
return DEFAULT_ADDRESS;
|
|
@@ -112,6 +111,18 @@ export class TXEOracleTopLevelContext {
|
|
|
112
111
|
nullifiers: txEffects.nullifiers
|
|
113
112
|
};
|
|
114
113
|
}
|
|
114
|
+
async syncContractNonOracleMethod(contractAddress, scope, jobId) {
|
|
115
|
+
if (contractAddress.equals(DEFAULT_ADDRESS)) {
|
|
116
|
+
this.logger.debug(`Skipping sync in txeGetPrivateEvents because the events correspond to the default address.`);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const blockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
|
|
120
|
+
await this.stateMachine.contractSyncService.ensureContractSynced(contractAddress, null, async (call, execScopes)=>{
|
|
121
|
+
await this.executeUtilityCall(call, execScopes, jobId);
|
|
122
|
+
}, blockHeader, jobId, [
|
|
123
|
+
scope
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
115
126
|
async txeGetPrivateEvents(selector, contractAddress, scope) {
|
|
116
127
|
return (await this.privateEventStore.getPrivateEvents(selector, {
|
|
117
128
|
contractAddress,
|
|
@@ -143,7 +154,7 @@ export class TXEOracleTopLevelContext {
|
|
|
143
154
|
await this.txeAddAccount(artifact, instance, secret);
|
|
144
155
|
} else {
|
|
145
156
|
await this.contractStore.addContractInstance(instance);
|
|
146
|
-
await this.contractStore.addContractArtifact(
|
|
157
|
+
await this.contractStore.addContractArtifact(artifact);
|
|
147
158
|
this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`);
|
|
148
159
|
}
|
|
149
160
|
}
|
|
@@ -151,7 +162,7 @@ export class TXEOracleTopLevelContext {
|
|
|
151
162
|
const partialAddress = await computePartialAddress(instance);
|
|
152
163
|
this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`);
|
|
153
164
|
await this.contractStore.addContractInstance(instance);
|
|
154
|
-
await this.contractStore.addContractArtifact(
|
|
165
|
+
await this.contractStore.addContractArtifact(artifact);
|
|
155
166
|
const completeAddress = await this.keyStore.addAccount(secret, partialAddress);
|
|
156
167
|
await this.accountStore.setAccount(completeAddress.address, completeAddress);
|
|
157
168
|
await this.addressStore.addCompleteAddress(completeAddress);
|
|
@@ -199,25 +210,30 @@ export class TXEOracleTopLevelContext {
|
|
|
199
210
|
this.logger.info(`Created block ${blockNumber} with timestamp ${block.header.globalVariables.timestamp}`);
|
|
200
211
|
await this.stateMachine.handleL2Block(block);
|
|
201
212
|
}
|
|
202
|
-
async txePrivateCallNewFlow(from, targetContractAddress = AztecAddress.zero(), functionSelector = FunctionSelector.empty(), args, argsHash = Fr.zero(), isStaticCall = false) {
|
|
213
|
+
async txePrivateCallNewFlow(from, targetContractAddress = AztecAddress.zero(), functionSelector = FunctionSelector.empty(), args, argsHash = Fr.zero(), isStaticCall = false, jobId) {
|
|
203
214
|
this.logger.verbose(`Executing external function ${await this.contractStore.getDebugFunctionName(targetContractAddress, functionSelector)}@${targetContractAddress} isStaticCall=${isStaticCall}`);
|
|
204
215
|
const artifact = await this.contractStore.getFunctionArtifact(targetContractAddress, functionSelector);
|
|
205
216
|
if (!artifact) {
|
|
206
217
|
const message = functionSelector.equals(await FunctionSelector.fromSignature('verify_private_authwit(Field)')) ? 'Found no account contract artifact for a private authwit check - use `create_contract_account` instead of `create_light_account` for authwit support.' : 'Function Artifact does not exist';
|
|
207
218
|
throw new Error(message);
|
|
208
219
|
}
|
|
220
|
+
// When `from` is the zero address (e.g. when deploying a new account contract), we return an
|
|
221
|
+
// empty scope list which acts as deny-all: no notes are visible and no keys are accessible.
|
|
222
|
+
const effectiveScopes = from.isZero() ? [] : [
|
|
223
|
+
from
|
|
224
|
+
];
|
|
209
225
|
// Sync notes before executing private function to discover notes from previous transactions
|
|
210
|
-
const utilityExecutor = async (call)=>{
|
|
211
|
-
await this.executeUtilityCall(call);
|
|
226
|
+
const utilityExecutor = async (call, execScopes)=>{
|
|
227
|
+
await this.executeUtilityCall(call, execScopes, jobId);
|
|
212
228
|
};
|
|
213
|
-
await
|
|
229
|
+
const blockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
|
|
230
|
+
await this.stateMachine.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, utilityExecutor, blockHeader, jobId, effectiveScopes);
|
|
214
231
|
const blockNumber = await this.txeGetNextBlockNumber();
|
|
215
232
|
const callContext = new CallContext(from, targetContractAddress, functionSelector, isStaticCall);
|
|
216
233
|
const gasLimits = new Gas(DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT);
|
|
217
234
|
const teardownGasLimits = new Gas(DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT);
|
|
218
235
|
const gasSettings = new GasSettings(gasLimits, teardownGasLimits, GasFees.empty(), GasFees.empty());
|
|
219
236
|
const txContext = new TxContext(this.chainId, this.version, gasSettings);
|
|
220
|
-
const blockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
|
|
221
237
|
const protocolNullifier = await computeProtocolNullifier(getSingleTxBlockRequestHash(blockNumber));
|
|
222
238
|
const noteCache = new ExecutionNoteCache(protocolNullifier);
|
|
223
239
|
// In production, the account contract sets the min revertible counter before calling the app function.
|
|
@@ -227,12 +243,39 @@ export class TXEOracleTopLevelContext {
|
|
|
227
243
|
await noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
228
244
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
229
245
|
const simulator = new WASMSimulator();
|
|
230
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
246
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
247
|
+
argsHash,
|
|
248
|
+
txContext,
|
|
249
|
+
callContext,
|
|
250
|
+
anchorBlockHeader: blockHeader,
|
|
251
|
+
utilityExecutor,
|
|
252
|
+
authWitnesses: Array.from(this.authwits.values()),
|
|
253
|
+
capsules: [],
|
|
254
|
+
executionCache: HashedValuesCache.create([
|
|
255
|
+
new HashedValues(args, argsHash)
|
|
256
|
+
]),
|
|
257
|
+
noteCache,
|
|
258
|
+
taggingIndexCache,
|
|
259
|
+
contractStore: this.contractStore,
|
|
260
|
+
noteStore: this.noteStore,
|
|
261
|
+
keyStore: this.keyStore,
|
|
262
|
+
addressStore: this.addressStore,
|
|
263
|
+
aztecNode: this.stateMachine.node,
|
|
264
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
265
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
266
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
267
|
+
capsuleStore: this.capsuleStore,
|
|
268
|
+
privateEventStore: this.privateEventStore,
|
|
269
|
+
contractSyncService: this.stateMachine.contractSyncService,
|
|
270
|
+
jobId,
|
|
271
|
+
totalPublicCalldataCount: 0,
|
|
272
|
+
sideEffectCounter: minRevertibleSideEffectCounter,
|
|
273
|
+
scopes: effectiveScopes,
|
|
274
|
+
// In TXE, the typical transaction entrypoint is skipped, so we need to simulate the actions that such a
|
|
275
|
+
// contract would perform, including setting senderForTags.
|
|
276
|
+
senderForTags: from,
|
|
277
|
+
simulator
|
|
278
|
+
});
|
|
236
279
|
// Note: This is a slight modification of simulator.run without any of the checks. Maybe we should modify simulator.run with a boolean value to skip checks.
|
|
237
280
|
let result;
|
|
238
281
|
let executionResult;
|
|
@@ -256,7 +299,7 @@ export class TXEOracleTopLevelContext {
|
|
|
256
299
|
// According to the protocol rules, there must be at least one nullifier in the tx. The first nullifier is used as
|
|
257
300
|
// the nonce generator for the note hashes.
|
|
258
301
|
// We pass the non-zero minRevertibleSideEffectCounter to make sure the side effects are split correctly.
|
|
259
|
-
const { publicInputs } = await generateSimulatedProvingResult(result, this.contractStore, minRevertibleSideEffectCounter);
|
|
302
|
+
const { publicInputs } = await generateSimulatedProvingResult(result, (addr, sel)=>this.contractStore.getDebugFunctionName(addr, sel), this.stateMachine.node, minRevertibleSideEffectCounter);
|
|
260
303
|
const globals = makeGlobalVariables();
|
|
261
304
|
globals.blockNumber = blockNumber;
|
|
262
305
|
globals.timestamp = this.nextBlockTimestamp;
|
|
@@ -264,7 +307,8 @@ export class TXEOracleTopLevelContext {
|
|
|
264
307
|
globals.version = this.version;
|
|
265
308
|
globals.gasFees = GasFees.empty();
|
|
266
309
|
const forkedWorldTrees = await this.stateMachine.synchronizer.nativeWorldStateService.fork();
|
|
267
|
-
const
|
|
310
|
+
const bindings = this.logger.getBindings();
|
|
311
|
+
const contractsDB = new PublicContractsDB(new TXEPublicContractDataSource(blockNumber, this.contractStore), bindings);
|
|
268
312
|
const guardedMerkleTrees = new GuardedMerkleTreeOperations(forkedWorldTrees);
|
|
269
313
|
const config = PublicSimulatorConfig.from({
|
|
270
314
|
skipFeeEnforcement: true,
|
|
@@ -273,7 +317,7 @@ export class TXEOracleTopLevelContext {
|
|
|
273
317
|
collectStatistics: false,
|
|
274
318
|
collectCallMetadata: true
|
|
275
319
|
});
|
|
276
|
-
const processor = new PublicProcessor(globals, guardedMerkleTrees, contractsDB, new CppPublicTxSimulator(guardedMerkleTrees, contractsDB, globals, config), new TestDateProvider());
|
|
320
|
+
const processor = new PublicProcessor(globals, guardedMerkleTrees, contractsDB, new CppPublicTxSimulator(guardedMerkleTrees, contractsDB, globals, config, bindings), new TestDateProvider(), undefined, createLogger('simulator:public-processor', bindings));
|
|
277
321
|
const tx = await Tx.create({
|
|
278
322
|
data: publicInputs,
|
|
279
323
|
chonkProof: ChonkProof.empty(),
|
|
@@ -340,7 +384,8 @@ export class TXEOracleTopLevelContext {
|
|
|
340
384
|
globals.version = this.version;
|
|
341
385
|
globals.gasFees = GasFees.empty();
|
|
342
386
|
const forkedWorldTrees = await this.stateMachine.synchronizer.nativeWorldStateService.fork();
|
|
343
|
-
const
|
|
387
|
+
const bindings2 = this.logger.getBindings();
|
|
388
|
+
const contractsDB = new PublicContractsDB(new TXEPublicContractDataSource(blockNumber, this.contractStore), bindings2);
|
|
344
389
|
const guardedMerkleTrees = new GuardedMerkleTreeOperations(forkedWorldTrees);
|
|
345
390
|
const config = PublicSimulatorConfig.from({
|
|
346
391
|
skipFeeEnforcement: true,
|
|
@@ -349,8 +394,8 @@ export class TXEOracleTopLevelContext {
|
|
|
349
394
|
collectStatistics: false,
|
|
350
395
|
collectCallMetadata: true
|
|
351
396
|
});
|
|
352
|
-
const simulator = new CppPublicTxSimulator(guardedMerkleTrees, contractsDB, globals, config);
|
|
353
|
-
const processor = new PublicProcessor(globals, guardedMerkleTrees, contractsDB, simulator, new TestDateProvider());
|
|
397
|
+
const simulator = new CppPublicTxSimulator(guardedMerkleTrees, contractsDB, globals, config, bindings2);
|
|
398
|
+
const processor = new PublicProcessor(globals, guardedMerkleTrees, contractsDB, simulator, new TestDateProvider(), undefined, createLogger('simulator:public-processor', bindings2));
|
|
354
399
|
// We're simulating a scenario in which private execution immediately enqueues a public call and halts. The private
|
|
355
400
|
// kernel init would in this case inject a nullifier with the transaction request hash as a non-revertible
|
|
356
401
|
// side-effect, which the AVM then expects to exist in order to use it as the nonce generator when siloing notes as
|
|
@@ -363,7 +408,7 @@ export class TXEOracleTopLevelContext {
|
|
|
363
408
|
revertibleAccumulatedData.publicCallRequests[0] = new PublicCallRequest(from, targetContractAddress, isStaticCall, calldataHash);
|
|
364
409
|
const inputsForPublic = new PartialPrivateTailPublicInputsForPublic(nonRevertibleAccumulatedData, revertibleAccumulatedData, PublicCallRequest.empty());
|
|
365
410
|
const constantData = new TxConstantData(anchorBlockHeader, txContext, Fr.zero(), Fr.zero());
|
|
366
|
-
const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ new Gas(0, 0), /*feePayer=*/ AztecAddress.zero(), /*
|
|
411
|
+
const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ new Gas(0, 0), /*feePayer=*/ AztecAddress.zero(), /*expirationTimestamp=*/ 0n, inputsForPublic, undefined);
|
|
367
412
|
const tx = await Tx.create({
|
|
368
413
|
data: txData,
|
|
369
414
|
chonkProof: ChonkProof.empty(),
|
|
@@ -416,19 +461,29 @@ export class TXEOracleTopLevelContext {
|
|
|
416
461
|
await forkedWorldTrees.close();
|
|
417
462
|
return returnValues ?? [];
|
|
418
463
|
}
|
|
419
|
-
async
|
|
464
|
+
async txeExecuteUtilityFunction(targetContractAddress, functionSelector, args, jobId) {
|
|
420
465
|
const artifact = await this.contractStore.getFunctionArtifact(targetContractAddress, functionSelector);
|
|
421
466
|
if (!artifact) {
|
|
422
467
|
throw new Error(`Cannot call ${functionSelector} as there is no artifact found at ${targetContractAddress}.`);
|
|
423
468
|
}
|
|
424
469
|
// Sync notes before executing utility function to discover notes from previous transactions
|
|
425
|
-
await
|
|
426
|
-
|
|
470
|
+
const blockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
|
|
471
|
+
await this.stateMachine.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, async (call, execScopes)=>{
|
|
472
|
+
await this.executeUtilityCall(call, execScopes, jobId);
|
|
473
|
+
}, blockHeader, jobId, 'ALL_SCOPES');
|
|
474
|
+
const call = FunctionCall.from({
|
|
475
|
+
name: artifact.name,
|
|
476
|
+
to: targetContractAddress,
|
|
477
|
+
selector: functionSelector,
|
|
478
|
+
type: FunctionType.UTILITY,
|
|
479
|
+
hideMsgSender: false,
|
|
480
|
+
isStatic: false,
|
|
481
|
+
args,
|
|
482
|
+
returnTypes: []
|
|
427
483
|
});
|
|
428
|
-
|
|
429
|
-
return this.executeUtilityCall(call);
|
|
484
|
+
return this.executeUtilityCall(call, 'ALL_SCOPES', jobId);
|
|
430
485
|
}
|
|
431
|
-
async executeUtilityCall(call) {
|
|
486
|
+
async executeUtilityCall(call, scopes, jobId) {
|
|
432
487
|
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
433
488
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
434
489
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
@@ -439,7 +494,23 @@ export class TXEOracleTopLevelContext {
|
|
|
439
494
|
});
|
|
440
495
|
try {
|
|
441
496
|
const anchorBlockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
|
|
442
|
-
const oracle = new UtilityExecutionOracle(
|
|
497
|
+
const oracle = new UtilityExecutionOracle({
|
|
498
|
+
contractAddress: call.to,
|
|
499
|
+
authWitnesses: [],
|
|
500
|
+
capsules: [],
|
|
501
|
+
anchorBlockHeader,
|
|
502
|
+
contractStore: this.contractStore,
|
|
503
|
+
noteStore: this.noteStore,
|
|
504
|
+
keyStore: this.keyStore,
|
|
505
|
+
addressStore: this.addressStore,
|
|
506
|
+
aztecNode: this.stateMachine.node,
|
|
507
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
508
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
509
|
+
capsuleStore: this.capsuleStore,
|
|
510
|
+
privateEventStore: this.privateEventStore,
|
|
511
|
+
jobId,
|
|
512
|
+
scopes
|
|
513
|
+
});
|
|
443
514
|
const acirExecutionResult = await new WASMSimulator().executeUserCircuit(toACVMWitness(0, call.args), entryPointArtifact, new Oracle(oracle).toACIRCallback()).catch((err)=>{
|
|
444
515
|
err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
|
|
445
516
|
throw new ExecutionError(err.message, {
|
|
@@ -449,10 +520,10 @@ export class TXEOracleTopLevelContext {
|
|
|
449
520
|
cause: err
|
|
450
521
|
});
|
|
451
522
|
});
|
|
452
|
-
this.logger.verbose(`Utility
|
|
523
|
+
this.logger.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
|
|
453
524
|
return witnessMapToFields(acirExecutionResult.returnWitness);
|
|
454
525
|
} catch (err) {
|
|
455
|
-
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during utility
|
|
526
|
+
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during utility execution'));
|
|
456
527
|
}
|
|
457
528
|
}
|
|
458
529
|
close() {
|
package/dest/rpc_translator.d.ts
CHANGED
|
@@ -85,9 +85,9 @@ export declare class RPCTranslator {
|
|
|
85
85
|
privateLoadFromExecutionCache(foreignHash: ForeignCallSingle): Promise<{
|
|
86
86
|
values: (string | ForeignCallArray)[];
|
|
87
87
|
}>;
|
|
88
|
-
|
|
88
|
+
utilityLog(foreignLevel: ForeignCallSingle, foreignMessage: ForeignCallArray, _foreignLength: ForeignCallSingle, foreignFields: ForeignCallArray): Promise<{
|
|
89
89
|
values: (string | ForeignCallArray)[];
|
|
90
|
-
}
|
|
90
|
+
}>;
|
|
91
91
|
utilityStorageRead(foreignBlockHash: ForeignCallSingle, foreignContractAddress: ForeignCallSingle, foreignStartStorageSlot: ForeignCallSingle, foreignNumberOfElements: ForeignCallSingle): Promise<{
|
|
92
92
|
values: (string | ForeignCallArray)[];
|
|
93
93
|
}>;
|
|
@@ -115,7 +115,7 @@ export declare class RPCTranslator {
|
|
|
115
115
|
utilityGetContractInstance(foreignAddress: ForeignCallSingle): Promise<{
|
|
116
116
|
values: (string | ForeignCallArray)[];
|
|
117
117
|
}>;
|
|
118
|
-
|
|
118
|
+
utilityTryGetPublicKeysAndPartialAddress(foreignAddress: ForeignCallSingle): Promise<{
|
|
119
119
|
values: (string | ForeignCallArray)[];
|
|
120
120
|
}>;
|
|
121
121
|
utilityGetKeyValidationRequest(foreignPkMHash: ForeignCallSingle): Promise<{
|
|
@@ -140,10 +140,10 @@ export declare class RPCTranslator {
|
|
|
140
140
|
utilityGetBlockHeader(foreignBlockNumber: ForeignCallSingle): Promise<{
|
|
141
141
|
values: (string | ForeignCallArray)[];
|
|
142
142
|
}>;
|
|
143
|
-
utilityGetNoteHashMembershipWitness(
|
|
143
|
+
utilityGetNoteHashMembershipWitness(foreignAnchorBlockHash: ForeignCallSingle, foreignNoteHash: ForeignCallSingle): Promise<{
|
|
144
144
|
values: (string | ForeignCallArray)[];
|
|
145
145
|
}>;
|
|
146
|
-
|
|
146
|
+
utilityGetBlockHashMembershipWitness(foreignAnchorBlockHash: ForeignCallSingle, foreignBlockHash: ForeignCallSingle): Promise<{
|
|
147
147
|
values: (string | ForeignCallArray)[];
|
|
148
148
|
}>;
|
|
149
149
|
utilityGetLowNullifierMembershipWitness(foreignBlockHash: ForeignCallSingle, foreignNullifier: ForeignCallSingle): Promise<{
|
|
@@ -177,7 +177,7 @@ export declare class RPCTranslator {
|
|
|
177
177
|
values: (string | ForeignCallArray)[];
|
|
178
178
|
}>;
|
|
179
179
|
emitOffchainEffect(_foreignData: ForeignCallArray): void;
|
|
180
|
-
|
|
180
|
+
avmOpcodeEmitPublicLog(_foreignMessage: ForeignCallArray): {
|
|
181
181
|
values: (string | ForeignCallArray)[];
|
|
182
182
|
};
|
|
183
183
|
avmOpcodeStorageRead(foreignSlot: ForeignCallSingle, foreignContractAddress: ForeignCallSingle): Promise<{
|
|
@@ -204,7 +204,7 @@ export declare class RPCTranslator {
|
|
|
204
204
|
avmOpcodeEmitNoteHash(foreignNoteHash: ForeignCallSingle): Promise<{
|
|
205
205
|
values: (string | ForeignCallArray)[];
|
|
206
206
|
}>;
|
|
207
|
-
avmOpcodeNullifierExists(
|
|
207
|
+
avmOpcodeNullifierExists(foreignSiloedNullifier: ForeignCallSingle): Promise<{
|
|
208
208
|
values: (string | ForeignCallArray)[];
|
|
209
209
|
}>;
|
|
210
210
|
avmOpcodeAddress(): Promise<{
|
|
@@ -233,7 +233,7 @@ export declare class RPCTranslator {
|
|
|
233
233
|
txePrivateCallNewFlow(foreignFrom: ForeignCallSingle, foreignTargetContractAddress: ForeignCallSingle, foreignFunctionSelector: ForeignCallSingle, foreignArgs: ForeignCallArray, foreignArgsHash: ForeignCallSingle, foreignIsStaticCall: ForeignCallSingle): Promise<{
|
|
234
234
|
values: (string | ForeignCallArray)[];
|
|
235
235
|
}>;
|
|
236
|
-
|
|
236
|
+
txeExecuteUtilityFunction(foreignTargetContractAddress: ForeignCallSingle, foreignFunctionSelector: ForeignCallSingle, foreignArgs: ForeignCallArray): Promise<{
|
|
237
237
|
values: (string | ForeignCallArray)[];
|
|
238
238
|
}>;
|
|
239
239
|
txePublicCallNewFlow(foreignFrom: ForeignCallSingle, foreignAddress: ForeignCallSingle, foreignCalldata: ForeignCallArray, foreignIsStaticCall: ForeignCallSingle): Promise<{
|
|
@@ -249,4 +249,4 @@ export declare class RPCTranslator {
|
|
|
249
249
|
values: (string | ForeignCallArray)[];
|
|
250
250
|
}>;
|
|
251
251
|
}
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnBjX3RyYW5zbGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ycGNfdHJhbnNsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTdFLE9BQU8sRUFDTCxLQUFLLFdBQVcsRUFDaEIsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyx1QkFBdUIsRUFFN0IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBaUQsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RyxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZGLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0QsT0FBTyxFQUNMLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssaUJBQWlCLEVBWXZCLE1BQU0sb0JBQW9CLENBQUM7QUFLNUIscUJBQWEsc0JBQXVCLFNBQVEsS0FBSztJQUMvQyxZQUFZLFVBQVUsRUFBRSxNQUFNLEVBRTdCO0NBQ0Y7QUFFRCxxQkFBYSxhQUFhO0lBV3RCLE9BQU8sQ0FBQyxZQUFZO0lBQ3BCLE9BQU8sQ0FBQyxhQUFhO0lBWHZCOzs7Ozs7OztPQVFHO0lBQ0gsWUFDVSxZQUFZLEVBQUUsc0JBQXNCLEVBQ3BDLGFBQWEsRUFDakIsV0FBVyxHQUNYLHVCQUF1QixHQUN2Qix1QkFBdUIsR0FDdkIsbUJBQW1CLEdBQ25CLG1CQUFtQixFQUNyQjtJQUtKLE9BQU8sQ0FBQyxhQUFhO0lBUXJCLE9BQU8sQ0FBQyxnQkFBZ0I7SUFReEIsT0FBTyxDQUFDLGdCQUFnQjtJQVF4QixPQUFPLENBQUMsWUFBWTtJQVFwQixPQUFPLENBQUMsWUFBWTtJQVVkLHdCQUF3Qjs7T0FJN0I7SUFFSyx1QkFBdUIsQ0FDM0IsNEJBQTRCLEVBQUUsaUJBQWlCLEVB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc_translator.d.ts","sourceRoot":"","sources":["../src/rpc_translator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAI7E,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAE7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,gBAAgB,EAAiD,MAAM,mBAAmB,CAAC;AAIzG,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAYvB,MAAM,oBAAoB,CAAC;AAK5B,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,UAAU,EAAE,MAAM,EAE7B;CACF;AAED,qBAAa,aAAa;IAWtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IAXvB;;;;;;;;OAQG;IACH,YACU,YAAY,EAAE,sBAAsB,EACpC,aAAa,EACjB,WAAW,GACX,uBAAuB,GACvB,uBAAuB,GACvB,mBAAmB,GACnB,mBAAmB,EACrB;IAKJ,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,YAAY;IAUd,wBAAwB;;OAI7B;IAEK,uBAAuB,CAC3B,4BAA4B,EAAE,iBAAiB,EAC/C,2BAA2B,EAAE,iBAAiB,EAC9C,8BAA8B,EAAE,iBAAiB,EACjD,6BAA6B,EAAE,iBAAiB;;OAajD;IAEK,sBAAsB,CAC1B,4BAA4B,EAAE,iBAAiB,EAC/C,2BAA2B,EAAE,iBAAiB;;OAS/C;IAEK,uBAAuB,CAC3B,4BAA4B,EAAE,iBAAiB,EAC/C,2BAA2B,EAAE,iBAAiB;;OAS/C;IAMD,oBAAoB;;MAInB;IAEK,qBAAqB;;OAI1B;IAEK,wBAAwB;;OAI7B;IAEK,kBAAkB,CAAC,aAAa,EAAE,iBAAiB;;OAMxD;IAED,qBAAqB,CAAC,eAAe,EAAE,iBAAiB;;MAMvD;IAEK,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,aAAa,EAAE,iBAAiB;;OAclH;IAEK,gBAAgB,CAAC,aAAa,EAAE,iBAAiB;;OAStD;IAEK,aAAa,CACjB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,2BAA2B,EACrC,aAAa,EAAE,iBAAiB;;OAUjC;IAEK,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB;;OAO/F;IAID,oCAAoC,CAAC,cAAc,EAAE,iBAAiB;;MAMrE;IAED,qBAAqB;;MAIpB;IAEK,wBAAwB;;OAI7B;IAEK,mBAAmB;;OAQxB;IAEK,mBAAmB,CACvB,eAAe,EAAE,iBAAiB,EAClC,sBAAsB,EAAE,iBAAiB,EACzC,YAAY,EAAE,iBAAiB;;
|
|
1
|
+
{"version":3,"file":"rpc_translator.d.ts","sourceRoot":"","sources":["../src/rpc_translator.ts"],"names":[],"mappings":"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"}
|
package/dest/rpc_translator.js
CHANGED
|
@@ -4,9 +4,9 @@ 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 {
|
|
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){
|
|
@@ -176,6 +176,12 @@ export class RPCTranslator {
|
|
|
176
176
|
const selector = EventSelector.fromField(fromSingle(foreignSelector));
|
|
177
177
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
178
178
|
const scope = addressFromSingle(foreignScope);
|
|
179
|
+
// TODO(F-335): Avoid doing the following 2 calls here.
|
|
180
|
+
{
|
|
181
|
+
await this.handlerAsTxe().syncContractNonOracleMethod(contractAddress, scope, this.stateHandler.getCurrentJob());
|
|
182
|
+
// We cycle job to commit the stores after the contract sync.
|
|
183
|
+
await this.stateHandler.cycleJob();
|
|
184
|
+
}
|
|
179
185
|
const events = await this.handlerAsTxe().txeGetPrivateEvents(selector, contractAddress, scope);
|
|
180
186
|
if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
|
|
181
187
|
throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
|
|
@@ -209,15 +215,15 @@ export class RPCTranslator {
|
|
|
209
215
|
}
|
|
210
216
|
// When the argument is a slice, noir automatically adds a length field to oracle call.
|
|
211
217
|
// When the argument is an array, we add the field length manually to the signature.
|
|
212
|
-
|
|
218
|
+
async utilityLog(foreignLevel, foreignMessage, _foreignLength, foreignFields) {
|
|
213
219
|
const level = fromSingle(foreignLevel).toNumber();
|
|
214
220
|
const message = fromArray(foreignMessage).map((field)=>String.fromCharCode(field.toNumber())).join('');
|
|
215
221
|
const fields = fromArray(foreignFields);
|
|
216
|
-
this.handlerAsMisc().
|
|
222
|
+
await this.handlerAsMisc().utilityLog(level, message, fields);
|
|
217
223
|
return toForeignCallResult([]);
|
|
218
224
|
}
|
|
219
225
|
async utilityStorageRead(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
|
|
220
|
-
const blockHash =
|
|
226
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
221
227
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
222
228
|
const startStorageSlot = fromSingle(foreignStartStorageSlot);
|
|
223
229
|
const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
|
|
@@ -227,7 +233,7 @@ export class RPCTranslator {
|
|
|
227
233
|
]);
|
|
228
234
|
}
|
|
229
235
|
async utilityGetPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
|
|
230
|
-
const blockHash =
|
|
236
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
231
237
|
const leafSlot = fromSingle(foreignLeafSlot);
|
|
232
238
|
const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(blockHash, leafSlot);
|
|
233
239
|
if (!witness) {
|
|
@@ -318,15 +324,27 @@ export class RPCTranslator {
|
|
|
318
324
|
...instance.publicKeys.toFields()
|
|
319
325
|
].map(toSingle));
|
|
320
326
|
}
|
|
321
|
-
async
|
|
327
|
+
async utilityTryGetPublicKeysAndPartialAddress(foreignAddress) {
|
|
322
328
|
const address = addressFromSingle(foreignAddress);
|
|
323
|
-
const
|
|
324
|
-
return
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
329
|
+
const result = await this.handlerAsUtility().utilityTryGetPublicKeysAndPartialAddress(address);
|
|
330
|
+
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
331
|
+
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
332
|
+
if (result === undefined) {
|
|
333
|
+
// No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
|
|
334
|
+
return toForeignCallResult([
|
|
335
|
+
toSingle(new Fr(0)),
|
|
336
|
+
toArray(Array(13).fill(new Fr(0)))
|
|
337
|
+
]);
|
|
338
|
+
} else {
|
|
339
|
+
// Data was found so we set `some` to 1 and return it along with `value`.
|
|
340
|
+
return toForeignCallResult([
|
|
341
|
+
toSingle(new Fr(1)),
|
|
342
|
+
toArray([
|
|
343
|
+
...result.publicKeys.toFields(),
|
|
344
|
+
result.partialAddress
|
|
345
|
+
])
|
|
346
|
+
]);
|
|
347
|
+
}
|
|
330
348
|
}
|
|
331
349
|
async utilityGetKeyValidationRequest(foreignPkMHash) {
|
|
332
350
|
const pkMHash = fromSingle(foreignPkMHash);
|
|
@@ -337,7 +355,7 @@ export class RPCTranslator {
|
|
|
337
355
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead');
|
|
338
356
|
}
|
|
339
357
|
async utilityGetNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
340
|
-
const blockHash =
|
|
358
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
341
359
|
const nullifier = fromSingle(foreignNullifier);
|
|
342
360
|
const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(blockHash, nullifier);
|
|
343
361
|
if (!witness) {
|
|
@@ -383,26 +401,26 @@ export class RPCTranslator {
|
|
|
383
401
|
}
|
|
384
402
|
return toForeignCallResult(header.toFields().map(toSingle));
|
|
385
403
|
}
|
|
386
|
-
async utilityGetNoteHashMembershipWitness(
|
|
387
|
-
const blockHash =
|
|
388
|
-
const
|
|
389
|
-
const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(blockHash,
|
|
404
|
+
async utilityGetNoteHashMembershipWitness(foreignAnchorBlockHash, foreignNoteHash) {
|
|
405
|
+
const blockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
406
|
+
const noteHash = fromSingle(foreignNoteHash);
|
|
407
|
+
const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(blockHash, noteHash);
|
|
390
408
|
if (!witness) {
|
|
391
|
-
throw new Error(`Note hash ${
|
|
409
|
+
throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
|
|
392
410
|
}
|
|
393
411
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
394
412
|
}
|
|
395
|
-
async
|
|
396
|
-
const
|
|
397
|
-
const
|
|
398
|
-
const witness = await this.handlerAsUtility().
|
|
413
|
+
async utilityGetBlockHashMembershipWitness(foreignAnchorBlockHash, foreignBlockHash) {
|
|
414
|
+
const anchorBlockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
415
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
416
|
+
const witness = await this.handlerAsUtility().utilityGetBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
399
417
|
if (!witness) {
|
|
400
|
-
throw new Error(`Block hash ${
|
|
418
|
+
throw new Error(`Block hash ${blockHash.toString()} not found in the archive tree at anchor block ${anchorBlockHash.toString()}.`);
|
|
401
419
|
}
|
|
402
420
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
403
421
|
}
|
|
404
422
|
async utilityGetLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
405
|
-
const blockHash =
|
|
423
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
406
424
|
const nullifier = fromSingle(foreignNullifier);
|
|
407
425
|
const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(blockHash, nullifier);
|
|
408
426
|
if (!witness) {
|
|
@@ -496,7 +514,7 @@ export class RPCTranslator {
|
|
|
496
514
|
throw new Error('Offchain effects are not yet supported in the TestEnvironment');
|
|
497
515
|
}
|
|
498
516
|
// AVM opcodes
|
|
499
|
-
|
|
517
|
+
avmOpcodeEmitPublicLog(_foreignMessage) {
|
|
500
518
|
// TODO(#8811): Implement
|
|
501
519
|
return toForeignCallResult([]);
|
|
502
520
|
}
|
|
@@ -557,10 +575,9 @@ export class RPCTranslator {
|
|
|
557
575
|
await this.handlerAsAvm().avmOpcodeEmitNoteHash(noteHash);
|
|
558
576
|
return toForeignCallResult([]);
|
|
559
577
|
}
|
|
560
|
-
async avmOpcodeNullifierExists(
|
|
561
|
-
const
|
|
562
|
-
const
|
|
563
|
-
const exists = await this.handlerAsAvm().avmOpcodeNullifierExists(innerNullifier, targetAddress);
|
|
578
|
+
async avmOpcodeNullifierExists(foreignSiloedNullifier) {
|
|
579
|
+
const siloedNullifier = fromSingle(foreignSiloedNullifier);
|
|
580
|
+
const exists = await this.handlerAsAvm().avmOpcodeNullifierExists(siloedNullifier);
|
|
564
581
|
return toForeignCallResult([
|
|
565
582
|
toSingle(new Fr(exists))
|
|
566
583
|
]);
|
|
@@ -623,16 +640,20 @@ export class RPCTranslator {
|
|
|
623
640
|
const args = fromArray(foreignArgs);
|
|
624
641
|
const argsHash = fromSingle(foreignArgsHash);
|
|
625
642
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
626
|
-
const returnValues = await this.handlerAsTxe().txePrivateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall);
|
|
643
|
+
const returnValues = await this.handlerAsTxe().txePrivateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, this.stateHandler.getCurrentJob());
|
|
644
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
645
|
+
await this.stateHandler.cycleJob();
|
|
627
646
|
return toForeignCallResult([
|
|
628
647
|
toArray(returnValues)
|
|
629
648
|
]);
|
|
630
649
|
}
|
|
631
|
-
async
|
|
650
|
+
async txeExecuteUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
|
|
632
651
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
633
652
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
634
653
|
const args = fromArray(foreignArgs);
|
|
635
|
-
const returnValues = await this.handlerAsTxe().
|
|
654
|
+
const returnValues = await this.handlerAsTxe().txeExecuteUtilityFunction(targetContractAddress, functionSelector, args, this.stateHandler.getCurrentJob());
|
|
655
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
656
|
+
await this.stateHandler.cycleJob();
|
|
636
657
|
return toForeignCallResult([
|
|
637
658
|
toArray(returnValues)
|
|
638
659
|
]);
|
|
@@ -643,6 +664,8 @@ export class RPCTranslator {
|
|
|
643
664
|
const calldata = fromArray(foreignCalldata);
|
|
644
665
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
645
666
|
const returnValues = await this.handlerAsTxe().txePublicCallNewFlow(from, address, calldata, isStaticCall);
|
|
667
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
668
|
+
await this.stateHandler.cycleJob();
|
|
646
669
|
return toForeignCallResult([
|
|
647
670
|
toArray(returnValues)
|
|
648
671
|
]);
|