@aztec/txe 0.0.1-commit.6d63667d → 0.0.1-commit.72dcdcda8
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 +4 -3
- package/dest/oracle/interfaces.d.ts.map +1 -1
- 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 +95 -33
- package/dest/rpc_translator.d.ts +5 -5
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +19 -7
- 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 +1 -1
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +1 -1
- 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 +74 -18
- package/dest/util/txe_public_contract_data_source.d.ts +2 -3
- package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.js +5 -22
- package/package.json +15 -15
- package/src/index.ts +83 -49
- package/src/oracle/interfaces.ts +6 -1
- package/src/oracle/txe_oracle_top_level_context.ts +97 -80
- package/src/rpc_translator.ts +21 -6
- package/src/state_machine/dummy_p2p_client.ts +40 -22
- package/src/state_machine/index.ts +1 -0
- package/src/state_machine/mock_epoch_cache.ts +5 -0
- package/src/txe_session.ts +77 -68
- package/src/util/txe_public_contract_data_source.ts +10 -36
- package/dest/util/txe_contract_store.d.ts +0 -12
- package/dest/util/txe_contract_store.d.ts.map +0 -1
- package/dest/util/txe_contract_store.js +0 -22
- package/src/util/txe_contract_store.ts +0 -36
package/dest/index.d.ts
CHANGED
|
@@ -5,4 +5,4 @@ import type { Logger } from '@aztec/foundation/log';
|
|
|
5
5
|
* @returns A TXE RPC server.
|
|
6
6
|
*/
|
|
7
7
|
export declare function createTXERpcServer(logger: Logger): import("@aztec/foundation/json-rpc/server").SafeJsonRpcServer;
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWtRcEQ7Ozs7R0FJRztBQUNILHdCQUFnQixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxpRUFJaEQifQ==
|
package/dest/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAkQpD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,iEAIhD"}
|
package/dest/index.js
CHANGED
|
@@ -5,8 +5,10 @@ import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/cont
|
|
|
5
5
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
6
6
|
import { PublicKeys, deriveKeys } from '@aztec/aztec.js/keys';
|
|
7
7
|
import { createSafeJsonRpcServer } from '@aztec/foundation/json-rpc/server';
|
|
8
|
+
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
8
9
|
import { protocolContractNames } from '@aztec/protocol-contracts';
|
|
9
10
|
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
|
|
11
|
+
import { ContractStore } from '@aztec/pxe/server';
|
|
10
12
|
import { computeArtifactHash } from '@aztec/stdlib/contract';
|
|
11
13
|
import { zodFor } from '@aztec/stdlib/schemas';
|
|
12
14
|
import { createHash } from 'crypto';
|
|
@@ -19,8 +21,12 @@ import { ForeignCallArgsSchema, ForeignCallResultSchema, fromArray, fromSingle,
|
|
|
19
21
|
const sessions = new Map();
|
|
20
22
|
/*
|
|
21
23
|
* TXE typically has to load the same contract artifacts over and over again for multiple tests,
|
|
22
|
-
* so we cache them here to avoid
|
|
24
|
+
* so we cache them here to avoid loading from disk repeatedly.
|
|
25
|
+
*
|
|
26
|
+
* The in-flight map coalesces concurrent requests for the same cache key so that
|
|
27
|
+
* computeArtifactHash (very expensive) is only run once even under parallelism.
|
|
23
28
|
*/ const TXEArtifactsCache = new Map();
|
|
29
|
+
const TXEArtifactsCacheInFlight = new Map();
|
|
24
30
|
const TXEForeignCallInputSchema = zodFor()(z.object({
|
|
25
31
|
// eslint-disable-next-line camelcase
|
|
26
32
|
session_id: z.number().int().nonnegative(),
|
|
@@ -33,7 +39,7 @@ const TXEForeignCallInputSchema = zodFor()(z.object({
|
|
|
33
39
|
}));
|
|
34
40
|
class TXEDispatcher {
|
|
35
41
|
logger;
|
|
36
|
-
|
|
42
|
+
contractStore;
|
|
37
43
|
constructor(logger){
|
|
38
44
|
this.logger = logger;
|
|
39
45
|
}
|
|
@@ -85,28 +91,37 @@ class TXEDispatcher {
|
|
|
85
91
|
this.logger.debug(`Using cached artifact for ${cacheKey}`);
|
|
86
92
|
({ artifact, instance } = TXEArtifactsCache.get(cacheKey));
|
|
87
93
|
} else {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
94
|
+
if (!TXEArtifactsCacheInFlight.has(cacheKey)) {
|
|
95
|
+
this.logger.debug(`Loading compiled artifact ${artifactPath}`);
|
|
96
|
+
const compute = async ()=>{
|
|
97
|
+
const artifactJSON = JSON.parse(await readFile(artifactPath, 'utf-8'));
|
|
98
|
+
const artifactWithoutHash = loadContractArtifact(artifactJSON);
|
|
99
|
+
const computedArtifact = {
|
|
100
|
+
...artifactWithoutHash,
|
|
101
|
+
// Artifact hash is *very* expensive to compute, so we do it here once
|
|
102
|
+
// and the TXE contract data provider can cache it
|
|
103
|
+
artifactHash: await computeArtifactHash(artifactWithoutHash)
|
|
104
|
+
};
|
|
105
|
+
this.logger.debug(`Deploy ${computedArtifact.name} with initializer ${initializer}(${decodedArgs}) and public keys hash ${publicKeysHash.toString()}`);
|
|
106
|
+
const computedInstance = await getContractInstanceFromInstantiationParams(computedArtifact, {
|
|
107
|
+
constructorArgs: decodedArgs,
|
|
108
|
+
skipArgsDecoding: true,
|
|
109
|
+
salt: Fr.ONE,
|
|
110
|
+
publicKeys,
|
|
111
|
+
constructorArtifact: initializer ? initializer : undefined,
|
|
112
|
+
deployer: AztecAddress.ZERO
|
|
113
|
+
});
|
|
114
|
+
const result = {
|
|
115
|
+
artifact: computedArtifact,
|
|
116
|
+
instance: computedInstance
|
|
117
|
+
};
|
|
118
|
+
TXEArtifactsCache.set(cacheKey, result);
|
|
119
|
+
TXEArtifactsCacheInFlight.delete(cacheKey);
|
|
120
|
+
return result;
|
|
121
|
+
};
|
|
122
|
+
TXEArtifactsCacheInFlight.set(cacheKey, compute());
|
|
123
|
+
}
|
|
124
|
+
({ artifact, instance } = await TXEArtifactsCacheInFlight.get(cacheKey));
|
|
110
125
|
}
|
|
111
126
|
inputs.splice(0, 1, artifact, instance, toSingle(secret));
|
|
112
127
|
}
|
|
@@ -119,29 +134,38 @@ class TXEDispatcher {
|
|
|
119
134
|
this.logger.debug(`Using cached artifact for ${cacheKey}`);
|
|
120
135
|
({ artifact, instance } = TXEArtifactsCache.get(cacheKey));
|
|
121
136
|
} else {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
137
|
+
if (!TXEArtifactsCacheInFlight.has(cacheKey)) {
|
|
138
|
+
const compute = async ()=>{
|
|
139
|
+
const keys = await deriveKeys(secret);
|
|
140
|
+
const args = [
|
|
141
|
+
keys.publicKeys.masterIncomingViewingPublicKey.x,
|
|
142
|
+
keys.publicKeys.masterIncomingViewingPublicKey.y
|
|
143
|
+
];
|
|
144
|
+
const computedArtifact = {
|
|
145
|
+
...SchnorrAccountContractArtifact,
|
|
146
|
+
// Artifact hash is *very* expensive to compute, so we do it here once
|
|
147
|
+
// and the TXE contract data provider can cache it
|
|
148
|
+
artifactHash: await computeArtifactHash(SchnorrAccountContractArtifact)
|
|
149
|
+
};
|
|
150
|
+
const computedInstance = await getContractInstanceFromInstantiationParams(computedArtifact, {
|
|
151
|
+
constructorArgs: args,
|
|
152
|
+
skipArgsDecoding: true,
|
|
153
|
+
salt: Fr.ONE,
|
|
154
|
+
publicKeys: keys.publicKeys,
|
|
155
|
+
constructorArtifact: 'constructor',
|
|
156
|
+
deployer: AztecAddress.ZERO
|
|
157
|
+
});
|
|
158
|
+
const result = {
|
|
159
|
+
artifact: computedArtifact,
|
|
160
|
+
instance: computedInstance
|
|
161
|
+
};
|
|
162
|
+
TXEArtifactsCache.set(cacheKey, result);
|
|
163
|
+
TXEArtifactsCacheInFlight.delete(cacheKey);
|
|
164
|
+
return result;
|
|
165
|
+
};
|
|
166
|
+
TXEArtifactsCacheInFlight.set(cacheKey, compute());
|
|
167
|
+
}
|
|
168
|
+
({ artifact, instance } = await TXEArtifactsCacheInFlight.get(cacheKey));
|
|
145
169
|
}
|
|
146
170
|
inputs.splice(0, 0, artifact, instance);
|
|
147
171
|
}
|
|
@@ -151,10 +175,18 @@ class TXEDispatcher {
|
|
|
151
175
|
this.logger.debug(`Calling ${functionName} on session ${sessionId}`);
|
|
152
176
|
if (!sessions.has(sessionId)) {
|
|
153
177
|
this.logger.debug(`Creating new session ${sessionId}`);
|
|
154
|
-
if (!this.
|
|
155
|
-
|
|
178
|
+
if (!this.contractStore) {
|
|
179
|
+
const kvStore = await openTmpStore('txe-contracts');
|
|
180
|
+
this.contractStore = new ContractStore(kvStore);
|
|
181
|
+
const provider = new BundledProtocolContractsProvider();
|
|
182
|
+
for (const name of protocolContractNames){
|
|
183
|
+
const { instance, artifact } = await provider.getProtocolContractArtifact(name);
|
|
184
|
+
await this.contractStore.addContractArtifact(artifact);
|
|
185
|
+
await this.contractStore.addContractInstance(instance);
|
|
186
|
+
}
|
|
187
|
+
this.logger.debug('Registered protocol contracts in shared contract store');
|
|
156
188
|
}
|
|
157
|
-
sessions.set(sessionId, await TXESession.init(this.
|
|
189
|
+
sessions.set(sessionId, await TXESession.init(this.contractStore));
|
|
158
190
|
}
|
|
159
191
|
switch(functionName){
|
|
160
192
|
case 'txeDeploy':
|
|
@@ -50,8 +50,9 @@ export interface ITxeExecutionOracle {
|
|
|
50
50
|
nullifiers: Fr[];
|
|
51
51
|
}>;
|
|
52
52
|
txeGetPrivateEvents(selector: EventSelector, contractAddress: AztecAddress, scope: AztecAddress): Promise<Fr[][]>;
|
|
53
|
-
txePrivateCallNewFlow(from: AztecAddress, targetContractAddress: AztecAddress, functionSelector: FunctionSelector, args: Fr[], argsHash: Fr, isStaticCall: boolean): Promise<Fr[]>;
|
|
54
|
-
|
|
53
|
+
txePrivateCallNewFlow(from: AztecAddress, targetContractAddress: AztecAddress, functionSelector: FunctionSelector, args: Fr[], argsHash: Fr, isStaticCall: boolean, jobId: string): Promise<Fr[]>;
|
|
54
|
+
txeExecuteUtilityFunction(targetContractAddress: AztecAddress, functionSelector: FunctionSelector, args: Fr[], jobId: string): Promise<Fr[]>;
|
|
55
55
|
txePublicCallNewFlow(from: AztecAddress, targetContractAddress: AztecAddress, calldata: Fr[], isStaticCall: boolean): Promise<Fr[]>;
|
|
56
|
+
syncContractNonOracleMethod(contractAddress: AztecAddress, scope: AztecAddress, jobId: string): Promise<void>;
|
|
56
57
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yYWNsZS9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVFsRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFdBQVcsbUJBQW1CO0lBQ2xDLEtBQUssRUFBRSxJQUFJLENBQUM7SUFFWixnQkFBZ0IsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsZUFBZSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6QyxvQkFBb0IsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0Msa0JBQWtCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELHFCQUFxQixDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELHdCQUF3QixDQUFDLGVBQWUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLHFCQUFxQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUQsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsWUFBWSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM1RTtBQUVEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLG1CQUFtQjtJQUNsQyxLQUFLLEVBQUUsSUFBSSxDQUFDO0lBRVosb0JBQW9CLElBQUksWUFBWSxDQUFDO0lBQ3JDLHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5Qyx3QkFBd0IsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQscUJBQXFCLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDOUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0csZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsYUFBYSxDQUNYLFFBQVEsRUFBRSxnQkFBZ0IsRUFDMUIsUUFBUSxFQUFFLDJCQUEyQixFQUNyQyxNQUFNLEVBQUUsRUFBRSxHQUNULE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM1QixpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pFLHdCQUF3QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxtQkFBbUIsSUFBSSxPQUFPLENBQUM7UUFDN0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUNmLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNqQixVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUM7S0FDbEIsQ0FBQyxDQUFDO0lBQ0gsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsSCxxQkFBcUIsQ0FDbkIsSUFBSSxFQUFFLFlBQVksRUFDbEIscUJBQXFCLEVBQUUsWUFBWSxFQUNuQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUNWLFFBQVEsRUFBRSxFQUFFLEVBQ1osWUFBWSxFQUFFLE9BQU8sRUFDckIsS0FBSyxFQUFFLE1BQU0sR0FDWixPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqQix5QkFBeUIsQ0FDdkIscUJBQXFCLEVBQUUsWUFBWSxFQUNuQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUNWLEtBQUssRUFBRSxNQUFNLEdBQ1osT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakIsb0JBQW9CLENBQ2xCLElBQUksRUFBRSxZQUFZLEVBQ2xCLHFCQUFxQixFQUFFLFlBQVksRUFDbkMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUNkLFlBQVksRUFBRSxPQUFPLEdBQ3BCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBR2pCLDJCQUEyQixDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMvRyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/oracle/interfaces.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/oracle/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { KeyStore } from '@aztec/key-store';
|
|
4
|
-
import { AddressStore, CapsuleStore, NoteStore, PrivateEventStore, RecipientTaggingStore, SenderAddressBookStore, SenderTaggingStore } from '@aztec/pxe/server';
|
|
4
|
+
import { AddressStore, CapsuleStore, type ContractStore, NoteStore, PrivateEventStore, RecipientTaggingStore, SenderAddressBookStore, SenderTaggingStore } from '@aztec/pxe/server';
|
|
5
5
|
import { type IMiscOracle } from '@aztec/pxe/simulator';
|
|
6
6
|
import { type ContractArtifact, EventSelector, FunctionSelector } from '@aztec/stdlib/abi';
|
|
7
7
|
import { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
@@ -11,7 +11,6 @@ import { TxHash } from '@aztec/stdlib/tx';
|
|
|
11
11
|
import type { UInt64 } from '@aztec/stdlib/types';
|
|
12
12
|
import type { TXEStateMachine } from '../state_machine/index.js';
|
|
13
13
|
import type { TXEAccountStore } from '../util/txe_account_store.js';
|
|
14
|
-
import type { TXEContractStore } from '../util/txe_contract_store.js';
|
|
15
14
|
import type { ITxeExecutionOracle } from './interfaces.js';
|
|
16
15
|
export declare class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracle {
|
|
17
16
|
private stateMachine;
|
|
@@ -25,7 +24,6 @@ export declare class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecut
|
|
|
25
24
|
private senderAddressBookStore;
|
|
26
25
|
private capsuleStore;
|
|
27
26
|
private privateEventStore;
|
|
28
|
-
private jobId;
|
|
29
27
|
private nextBlockTimestamp;
|
|
30
28
|
private version;
|
|
31
29
|
private chainId;
|
|
@@ -33,10 +31,10 @@ export declare class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecut
|
|
|
33
31
|
isMisc: true;
|
|
34
32
|
isTxe: true;
|
|
35
33
|
private logger;
|
|
36
|
-
constructor(stateMachine: TXEStateMachine, contractStore:
|
|
34
|
+
constructor(stateMachine: TXEStateMachine, contractStore: ContractStore, noteStore: NoteStore, keyStore: KeyStore, addressStore: AddressStore, accountStore: TXEAccountStore, senderTaggingStore: SenderTaggingStore, recipientTaggingStore: RecipientTaggingStore, senderAddressBookStore: SenderAddressBookStore, capsuleStore: CapsuleStore, privateEventStore: PrivateEventStore, nextBlockTimestamp: bigint, version: Fr, chainId: Fr, authwits: Map<string, AuthWitness>);
|
|
37
35
|
utilityAssertCompatibleOracleVersion(version: number): void;
|
|
38
36
|
utilityGetRandomField(): Fr;
|
|
39
|
-
|
|
37
|
+
utilityLog(level: number, message: string, fields: Fr[]): Promise<void>;
|
|
40
38
|
txeGetDefaultAddress(): AztecAddress;
|
|
41
39
|
txeGetNextBlockNumber(): Promise<BlockNumber>;
|
|
42
40
|
txeGetNextBlockTimestamp(): Promise<bigint>;
|
|
@@ -46,6 +44,7 @@ export declare class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecut
|
|
|
46
44
|
noteHashes: Fr[];
|
|
47
45
|
nullifiers: Fr[];
|
|
48
46
|
}>;
|
|
47
|
+
syncContractNonOracleMethod(contractAddress: AztecAddress, scope: AztecAddress, jobId: string): Promise<void>;
|
|
49
48
|
txeGetPrivateEvents(selector: EventSelector, contractAddress: AztecAddress, scope: AztecAddress): Promise<Fr[][]>;
|
|
50
49
|
txeAdvanceBlocksBy(blocks: number): Promise<void>;
|
|
51
50
|
txeAdvanceTimestampBy(duration: UInt64): void;
|
|
@@ -56,11 +55,11 @@ export declare class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecut
|
|
|
56
55
|
mineBlock(options?: {
|
|
57
56
|
nullifiers?: Fr[];
|
|
58
57
|
}): Promise<void>;
|
|
59
|
-
txePrivateCallNewFlow(from: AztecAddress, targetContractAddress: AztecAddress | undefined, functionSelector: FunctionSelector | undefined, args: Fr[], argsHash
|
|
58
|
+
txePrivateCallNewFlow(from: AztecAddress, targetContractAddress: AztecAddress | undefined, functionSelector: FunctionSelector | undefined, args: Fr[], argsHash: Fr | undefined, isStaticCall: boolean | undefined, jobId: string): Promise<Fr[]>;
|
|
60
59
|
txePublicCallNewFlow(from: AztecAddress, targetContractAddress: AztecAddress, calldata: Fr[], isStaticCall: boolean): Promise<Fr[]>;
|
|
61
|
-
|
|
60
|
+
txeExecuteUtilityFunction(targetContractAddress: AztecAddress, functionSelector: FunctionSelector, args: Fr[], jobId: string): Promise<Fr[]>;
|
|
62
61
|
private executeUtilityCall;
|
|
63
62
|
close(): [bigint, Map<string, AuthWitness>];
|
|
64
63
|
private getLastBlockNumber;
|
|
65
64
|
}
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX29yYWNsZV90b3BfbGV2ZWxfY29udGV4dC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yYWNsZS90eGVfb3JhY2xlX3RvcF9sZXZlbF9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEQsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxhQUFhLEVBQ2xCLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFFbkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBSUwsS0FBSyxXQUFXLEVBTWpCLE1BQU0sc0JBQXNCLENBQUM7QUFnQjlCLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUFFLGFBQWEsRUFBZ0IsZ0JBQWdCLEVBQWdCLE1BQU0sbUJBQW1CLENBQUM7QUFDdkgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSywyQkFBMkIsRUFBeUIsTUFBTSx3QkFBd0IsQ0FBQztBQVlqRyxPQUFPLEVBU0wsTUFBTSxFQUVQLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJbEQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHcEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzRCxxQkFBYSx3QkFBeUIsWUFBVyxXQUFXLEVBQUUsbUJBQW1CO0lBTzdFLE9BQU8sQ0FBQyxZQUFZO0lBQ3BCLE9BQU8sQ0FBQyxhQUFhO0lBQ3JCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxRQUFRO0lBQ2hCLE9BQU8sQ0FBQyxZQUFZO0lBQ3BCLE9BQU8sQ0FBQyxZQUFZO0lBQ3BCLE9BQU8sQ0FBQyxrQkFBa0I7SUFDMUIsT0FBTyxDQUFDLHFCQUFxQjtJQUM3QixPQUFPLENBQUMsc0JBQXNCO0lBQzlCLE9BQU8sQ0FBQyxZQUFZO0lBQ3BCLE9BQU8sQ0FBQyxpQkFBaUI7SUFDekIsT0FBTyxDQUFDLGtCQUFrQjtJQUMxQixPQUFPLENBQUMsT0FBTztJQUNmLE9BQU8sQ0FBQyxPQUFPO0lBQ2YsT0FBTyxDQUFDLFFBQVE7SUFwQmxCLE1BQU0sT0FBaUI7SUFDdkIsS0FBSyxPQUFpQjtJQUV0QixPQUFPLENBQUMsTUFBTSxDQUFTO0lBRXZCLFlBQ1UsWUFBWSxFQUFFLGVBQWUsRUFDN0IsYUFBYSxFQUFFLGFBQWEsRUFDNUIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsUUFBUSxFQUFFLFFBQVEsRUFDbEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsWUFBWSxFQUFFLGVBQWUsRUFDN0Isa0JBQWtCLEVBQUUsa0JBQWtCLEVBQ3RDLHFCQUFxQixFQUFFLHFCQUFxQixFQUM1QyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsWUFBWSxFQUFFLFlBQVksRUFDMUIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3BDLGtCQUFrQixFQUFFLE1BQU0sRUFDMUIsT0FBTyxFQUFFLEVBQUUsRUFDWCxPQUFPLEVBQUUsRUFBRSxFQUNYLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUkzQztJQUVELG9DQUFvQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQU0xRDtJQUlELHFCQUFxQixJQUFJLEVBQUUsQ0FFMUI7SUFHRCxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBUXRFO0lBRUQsb0JBQW9CLElBQUksWUFBWSxDQUVuQztJQUVLLHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FFbEQ7SUFFRCx3QkFBd0IsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRTFDO0lBRUssd0JBQXdCLG9CQUU3QjtJQUVLLG1CQUFtQjs7OztPQVl4QjtJQUVLLDJCQUEyQixDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFpQmxHO0lBRUssbUJBQW1CLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLG1CQVNwRztJQUVLLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxNQUFNLGlCQU10QztJQUVELHFCQUFxQixDQUFDLFFBQVEsRUFBRSxNQUFNLFFBR3JDO0lBRUssU0FBUyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxFQUFFLEVBQUUsaUJBa0I1RjtJQUVLLGFBQWEsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLDJCQUEyQixFQUFFLE1BQU0sRUFBRSxFQUFFLDZEQWFoRztJQUVLLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLDZEQVFoQztJQUVLLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsaUJBVTdEO0lBRUssU0FBUyxDQUFDLE9BQU8sR0FBRTtRQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFBO0tBQU8saUJBdUJsRDtJQUVLLHFCQUFxQixDQUN6QixJQUFJLEVBQUUsWUFBWSxFQUNsQixxQkFBcUIsMEJBQW9DLEVBQ3pELGdCQUFnQiw4QkFBNkMsRUFDN0QsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUNWLFFBQVEsZ0JBQWdCLEVBQ3hCLFlBQVkscUJBQWlCLEVBQzdCLEtBQUssRUFBRSxNQUFNLGlCQTBOZDtJQUVLLG9CQUFvQixDQUN4QixJQUFJLEVBQUUsWUFBWSxFQUNsQixxQkFBcUIsRUFBRSxZQUFZLEVBQ25DLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFDZCxZQUFZLEVBQUUsT0FBTyxpQkFxSnRCO0lBRUsseUJBQXlCLENBQzdCLHFCQUFxQixFQUFFLFlBQVksRUFDbkMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFDVixLQUFLLEVBQUUsTUFBTSxpQkFnQ2Q7WUFFYSxrQkFBa0I7SUFvRGhDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBRzFDO1lBRWEsa0JBQWtCO0NBSWpDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txe_oracle_top_level_context.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_oracle_top_level_context.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"txe_oracle_top_level_context.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_oracle_top_level_context.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,24 @@ 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
|
}
|
|
209
|
-
// When `from` is the zero address (
|
|
210
|
-
//
|
|
211
|
-
|
|
212
|
-
const effectiveScopes = from.isZero() ? undefined : [
|
|
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() ? [] : [
|
|
213
223
|
from
|
|
214
224
|
];
|
|
215
225
|
// Sync notes before executing private function to discover notes from previous transactions
|
|
216
|
-
const utilityExecutor = async (call)=>{
|
|
217
|
-
await this.executeUtilityCall(call,
|
|
226
|
+
const utilityExecutor = async (call, execScopes)=>{
|
|
227
|
+
await this.executeUtilityCall(call, execScopes, jobId);
|
|
218
228
|
};
|
|
219
229
|
const blockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
|
|
220
|
-
await this.stateMachine.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, utilityExecutor, blockHeader,
|
|
230
|
+
await this.stateMachine.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, utilityExecutor, blockHeader, jobId, effectiveScopes);
|
|
221
231
|
const blockNumber = await this.txeGetNextBlockNumber();
|
|
222
232
|
const callContext = new CallContext(from, targetContractAddress, functionSelector, isStaticCall);
|
|
223
233
|
const gasLimits = new Gas(DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT);
|
|
@@ -233,12 +243,39 @@ export class TXEOracleTopLevelContext {
|
|
|
233
243
|
await noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
234
244
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
235
245
|
const simulator = new WASMSimulator();
|
|
236
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
+
});
|
|
242
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.
|
|
243
280
|
let result;
|
|
244
281
|
let executionResult;
|
|
@@ -262,7 +299,7 @@ export class TXEOracleTopLevelContext {
|
|
|
262
299
|
// According to the protocol rules, there must be at least one nullifier in the tx. The first nullifier is used as
|
|
263
300
|
// the nonce generator for the note hashes.
|
|
264
301
|
// We pass the non-zero minRevertibleSideEffectCounter to make sure the side effects are split correctly.
|
|
265
|
-
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);
|
|
266
303
|
const globals = makeGlobalVariables();
|
|
267
304
|
globals.blockNumber = blockNumber;
|
|
268
305
|
globals.timestamp = this.nextBlockTimestamp;
|
|
@@ -371,7 +408,7 @@ export class TXEOracleTopLevelContext {
|
|
|
371
408
|
revertibleAccumulatedData.publicCallRequests[0] = new PublicCallRequest(from, targetContractAddress, isStaticCall, calldataHash);
|
|
372
409
|
const inputsForPublic = new PartialPrivateTailPublicInputsForPublic(nonRevertibleAccumulatedData, revertibleAccumulatedData, PublicCallRequest.empty());
|
|
373
410
|
const constantData = new TxConstantData(anchorBlockHeader, txContext, Fr.zero(), Fr.zero());
|
|
374
|
-
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);
|
|
375
412
|
const tx = await Tx.create({
|
|
376
413
|
data: txData,
|
|
377
414
|
chonkProof: ChonkProof.empty(),
|
|
@@ -424,20 +461,29 @@ export class TXEOracleTopLevelContext {
|
|
|
424
461
|
await forkedWorldTrees.close();
|
|
425
462
|
return returnValues ?? [];
|
|
426
463
|
}
|
|
427
|
-
async
|
|
464
|
+
async txeExecuteUtilityFunction(targetContractAddress, functionSelector, args, jobId) {
|
|
428
465
|
const artifact = await this.contractStore.getFunctionArtifact(targetContractAddress, functionSelector);
|
|
429
466
|
if (!artifact) {
|
|
430
467
|
throw new Error(`Cannot call ${functionSelector} as there is no artifact found at ${targetContractAddress}.`);
|
|
431
468
|
}
|
|
432
469
|
// Sync notes before executing utility function to discover notes from previous transactions
|
|
433
470
|
const blockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
|
|
434
|
-
await this.stateMachine.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, async (call)=>{
|
|
435
|
-
await this.executeUtilityCall(call);
|
|
436
|
-
}, blockHeader,
|
|
437
|
-
const call =
|
|
438
|
-
|
|
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: []
|
|
483
|
+
});
|
|
484
|
+
return this.executeUtilityCall(call, 'ALL_SCOPES', jobId);
|
|
439
485
|
}
|
|
440
|
-
async executeUtilityCall(call, scopes) {
|
|
486
|
+
async executeUtilityCall(call, scopes, jobId) {
|
|
441
487
|
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
442
488
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
443
489
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
@@ -448,7 +494,23 @@ export class TXEOracleTopLevelContext {
|
|
|
448
494
|
});
|
|
449
495
|
try {
|
|
450
496
|
const anchorBlockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
|
|
451
|
-
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
|
+
});
|
|
452
514
|
const acirExecutionResult = await new WASMSimulator().executeUserCircuit(toACVMWitness(0, call.args), entryPointArtifact, new Oracle(oracle).toACIRCallback()).catch((err)=>{
|
|
453
515
|
err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
|
|
454
516
|
throw new ExecutionError(err.message, {
|
|
@@ -458,10 +520,10 @@ export class TXEOracleTopLevelContext {
|
|
|
458
520
|
cause: err
|
|
459
521
|
});
|
|
460
522
|
});
|
|
461
|
-
this.logger.verbose(`Utility
|
|
523
|
+
this.logger.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
|
|
462
524
|
return witnessMapToFields(acirExecutionResult.returnWitness);
|
|
463
525
|
} catch (err) {
|
|
464
|
-
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'));
|
|
465
527
|
}
|
|
466
528
|
}
|
|
467
529
|
close() {
|