@aztec/txe 0.0.1-commit.993d240 → 0.0.1-commit.9a89641
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/AuthRegistry-QVGDDH5X.js +3 -0
- package/dest/AuthRegistry-QVGDDH5X.js.map +7 -0
- package/dest/ContractClassRegistry-PVNCKGG7.js +3 -0
- package/dest/ContractClassRegistry-PVNCKGG7.js.map +7 -0
- package/dest/ContractInstanceRegistry-WLOZKTR6.js +3 -0
- package/dest/ContractInstanceRegistry-WLOZKTR6.js.map +7 -0
- package/dest/FeeJuice-MAQJU53K.js +3 -0
- package/dest/FeeJuice-MAQJU53K.js.map +7 -0
- package/dest/HandshakeRegistry-GY5CPEPS.js +3 -0
- package/dest/HandshakeRegistry-GY5CPEPS.js.map +7 -0
- package/dest/MultiCallEntrypoint-QG5H33ZZ.js +3 -0
- package/dest/MultiCallEntrypoint-QG5H33ZZ.js.map +7 -0
- package/dest/SchnorrAccount-ADD65DYA.js +3 -0
- package/dest/SchnorrAccount-ADD65DYA.js.map +7 -0
- package/dest/SchnorrInitializerlessAccount-TWGKRUSY.js +3 -0
- package/dest/SchnorrInitializerlessAccount-TWGKRUSY.js.map +7 -0
- package/dest/bin/check_txe_oracle_version.js +9 -19
- package/dest/bin/index.js +1 -1
- package/dest/bin/oracle_test_server.d.ts +3 -0
- package/dest/bin/oracle_test_server.d.ts.map +1 -0
- package/dest/bin/oracle_test_server.js +41 -0
- package/dest/chunk-32UHX7YY.js +3 -0
- package/dest/{chunk-DF6RMOC6.js → chunk-RVEPNDEP.js} +2 -2
- package/dest/{chunk-DF6RMOC6.js.map → chunk-RVEPNDEP.js.map} +3 -3
- package/dest/chunk-XWIMXLKD.js +258 -0
- package/dest/chunk-XWIMXLKD.js.map +7 -0
- package/dest/constants.d.ts +3 -1
- package/dest/constants.d.ts.map +1 -1
- package/dest/constants.js +5 -2
- package/dest/dispatcher_pool.d.ts +2 -2
- package/dest/dispatcher_pool.d.ts.map +1 -1
- package/dest/dispatcher_pool.js +5 -3
- package/dest/index.d.ts +6 -143
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +12 -169
- package/dest/metafile.json +10267 -9581
- package/dest/oracle/interfaces.d.ts +38 -11
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
- package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
- package/dest/oracle/tagging_secret_strategy.js +12 -0
- package/dest/oracle/test-resolver/default_fixtures.d.ts +16 -0
- package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
- package/dest/oracle/test-resolver/default_fixtures.js +200 -0
- package/dest/oracle/test-resolver/index.d.ts +9 -0
- package/dest/oracle/test-resolver/index.d.ts.map +1 -0
- package/dest/oracle/test-resolver/index.js +32 -0
- package/dest/oracle/test-resolver/resolver.d.ts +48 -0
- package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
- package/dest/oracle/test-resolver/resolver.js +181 -0
- package/dest/oracle/txe_oracle_public_context.d.ts +25 -6
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +34 -1
- package/dest/oracle/txe_oracle_registry.d.ts +172 -0
- package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_registry.js +767 -0
- package/dest/oracle/txe_oracle_top_level_context.d.ts +39 -14
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +489 -289
- package/dest/{txe_oracle_version.d.ts → oracle/txe_oracle_version.d.ts} +5 -5
- package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
- package/dest/{txe_oracle_version.js → oracle/txe_oracle_version.js} +4 -4
- package/dest/rpc_translator.d.ts +116 -284
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +809 -860
- package/dest/server.bundle.js +1 -1
- package/dest/state_machine/archiver.d.ts +3 -2
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +9 -3
- package/dest/state_machine/dummy_p2p_client.d.ts +5 -2
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +9 -0
- package/dest/state_machine/global_variable_builder.d.ts +3 -4
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
- package/dest/state_machine/global_variable_builder.js +0 -3
- package/dest/state_machine/index.d.ts +8 -6
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +41 -19
- package/dest/state_machine/mock_epoch_cache.d.ts +2 -3
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +3 -6
- package/dest/state_machine/synchronizer.d.ts +10 -2
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/state_machine/synchronizer.js +18 -5
- package/dest/txe_session.d.ts +43 -28
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +183 -47
- package/dest/utils/block_creation.d.ts +2 -2
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +2 -2
- package/dest/utils/encoding.d.ts +8 -5
- package/dest/utils/encoding.d.ts.map +1 -1
- package/dest/utils/tx_effect_creation.d.ts +1 -1
- package/dest/utils/tx_effect_creation.d.ts.map +1 -1
- package/dest/utils/tx_effect_creation.js +0 -1
- package/dest/utils/txe_artifact_resolver.d.ts +37 -0
- package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
- package/dest/utils/txe_artifact_resolver.js +161 -0
- package/dest/utils/txe_public_contract_data_source.d.ts +1 -1
- package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/utils/txe_public_contract_data_source.js +7 -4
- package/dest/worker.bundle.js +1 -1
- package/package.json +18 -17
- package/src/bin/check_txe_oracle_version.ts +11 -17
- package/src/bin/oracle_test_server.ts +51 -0
- package/src/constants.ts +6 -2
- package/src/dispatcher_pool.ts +4 -3
- package/src/index.ts +21 -198
- package/src/oracle/interfaces.ts +35 -9
- package/src/oracle/tagging_secret_strategy.ts +25 -0
- package/src/oracle/test-resolver/default_fixtures.ts +271 -0
- package/src/oracle/test-resolver/index.ts +44 -0
- package/src/oracle/test-resolver/resolver.ts +245 -0
- package/src/oracle/txe_oracle_public_context.ts +36 -4
- package/src/oracle/txe_oracle_registry.ts +556 -0
- package/src/oracle/txe_oracle_top_level_context.ts +249 -66
- package/src/{txe_oracle_version.ts → oracle/txe_oracle_version.ts} +4 -4
- package/src/rpc_translator.ts +850 -1065
- package/src/state_machine/archiver.ts +9 -3
- package/src/state_machine/dummy_p2p_client.ts +13 -0
- package/src/state_machine/global_variable_builder.ts +2 -16
- package/src/state_machine/index.ts +50 -34
- package/src/state_machine/mock_epoch_cache.ts +4 -8
- package/src/state_machine/synchronizer.ts +26 -5
- package/src/txe_session.ts +325 -56
- package/src/utils/block_creation.ts +2 -1
- package/src/utils/tx_effect_creation.ts +0 -2
- package/src/utils/txe_artifact_resolver.ts +217 -0
- package/src/utils/txe_public_contract_data_source.ts +6 -4
- package/dest/ContractClassRegistry-KKNT527R.js +0 -3
- package/dest/ContractClassRegistry-KKNT527R.js.map +0 -7
- package/dest/ContractInstanceRegistry-GSKBNL3Q.js +0 -3
- package/dest/ContractInstanceRegistry-GSKBNL3Q.js.map +0 -7
- package/dest/FeeJuice-GUJ5O6GB.js +0 -3
- package/dest/FeeJuice-GUJ5O6GB.js.map +0 -7
- package/dest/MultiCallEntrypoint-ZQPCKVKL.js +0 -3
- package/dest/MultiCallEntrypoint-ZQPCKVKL.js.map +0 -7
- package/dest/SchnorrAccount-QIXE5DXA.js +0 -3
- package/dest/SchnorrAccount-QIXE5DXA.js.map +0 -7
- package/dest/chunk-BJVAAXNA.js +0 -3
- package/dest/chunk-PPJTNNUG.js +0 -265
- package/dest/chunk-PPJTNNUG.js.map +0 -7
- package/dest/txe_oracle_version.d.ts.map +0 -1
- /package/dest/{chunk-BJVAAXNA.js.map → chunk-32UHX7YY.js.map} +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type ContractInstanceWithAddress } from '@aztec/aztec.js/contracts';
|
|
3
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
|
+
import type { ContractStore } from '@aztec/pxe/client/lazy';
|
|
5
|
+
import type { ContractArtifactWithHash } from '@aztec/stdlib/contract';
|
|
6
|
+
export interface ResolvedArtifact {
|
|
7
|
+
artifact: ContractArtifactWithHash;
|
|
8
|
+
instance: ContractInstanceWithAddress;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Resolves and caches contract artifacts and their associated instances.
|
|
12
|
+
*
|
|
13
|
+
* Artifact hash computation is expensive, so this service deduplicates both completed and in-flight computations.
|
|
14
|
+
* Two cache levels are kept: full deploys (artifact + computed instance) keyed by the full deploy context, and loaded +
|
|
15
|
+
* hashed artifacts keyed by the compiled-bytecode hash so deploys of the same contract with different args / salt /
|
|
16
|
+
* deployer reuse the same `ContractArtifactWithHash`.
|
|
17
|
+
*/
|
|
18
|
+
export declare class TXEArtifactResolver {
|
|
19
|
+
#private;
|
|
20
|
+
private readonly contractStore;
|
|
21
|
+
private readonly schnorrClassId;
|
|
22
|
+
constructor(contractStore: ContractStore, schnorrClassId: Fr);
|
|
23
|
+
/** Resolves the Schnorr account contract artifact and instance for the given secret, caching the result. */
|
|
24
|
+
resolveAccountArtifact(secret: Fr): Promise<ResolvedArtifact>;
|
|
25
|
+
/** Resolves a contract artifact from disk by path, computes its instance, and caches the result. */
|
|
26
|
+
resolveDeployArtifact({ rootPath, packageName, contractPath, initializer, args, secret, salt, deployer }: {
|
|
27
|
+
rootPath: string;
|
|
28
|
+
packageName: string;
|
|
29
|
+
contractPath: string;
|
|
30
|
+
initializer: string;
|
|
31
|
+
args: Fr[];
|
|
32
|
+
secret: Fr;
|
|
33
|
+
salt: Fr;
|
|
34
|
+
deployer: AztecAddress;
|
|
35
|
+
}): Promise<ResolvedArtifact>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX2FydGlmYWN0X3Jlc29sdmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHhlX2FydGlmYWN0X3Jlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsS0FBSywyQkFBMkIsRUFFakMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHNUMsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVF2RSxNQUFNLFdBQVcsZ0JBQWdCO0lBQy9CLFFBQVEsRUFBRSx3QkFBd0IsQ0FBQztJQUNuQyxRQUFRLEVBQUUsMkJBQTJCLENBQUM7Q0FDdkM7QUFpQ0Q7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLG1CQUFtQjs7SUFNNUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhO0lBQzlCLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYztJQUZqQyxZQUNtQixhQUFhLEVBQUUsYUFBYSxFQUM1QixjQUFjLEVBQUUsRUFBRSxFQUNqQztJQUVKLDRHQUE0RztJQUM1RyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUk1RDtJQUVELG9HQUFvRztJQUM5RixxQkFBcUIsQ0FBQyxFQUMxQixRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixXQUFXLEVBQ1gsSUFBSSxFQUNKLE1BQU0sRUFDTixJQUFJLEVBQ0osUUFBUSxFQUNULEVBQUU7UUFDRCxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ2pCLFdBQVcsRUFBRSxNQUFNLENBQUM7UUFDcEIsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUNyQixXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQ3BCLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNYLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDWCxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ1QsUUFBUSxFQUFFLFlBQVksQ0FBQztLQUN4QixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXdCNUI7Q0E4RkYifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txe_artifact_resolver.d.ts","sourceRoot":"","sources":["../../src/utils/txe_artifact_resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACL,KAAK,2BAA2B,EAEjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAG5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAQvE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,wBAAwB,CAAC;IACnC,QAAQ,EAAE,2BAA2B,CAAC;CACvC;AAiCD;;;;;;;GAOG;AACH,qBAAa,mBAAmB;;IAM5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAFjC,YACmB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,EAAE,EACjC;IAEJ,4GAA4G;IAC5G,sBAAsB,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAI5D;IAED,oGAAoG;IAC9F,qBAAqB,CAAC,EAC1B,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,QAAQ,EACT,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,EAAE,EAAE,CAAC;QACX,MAAM,EAAE,EAAE,CAAC;QACX,IAAI,EAAE,EAAE,CAAC;QACT,QAAQ,EAAE,YAAY,CAAC;KACxB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwB5B;CA8FF"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { loadContractArtifact } from '@aztec/aztec.js/abi';
|
|
2
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
+
import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
4
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
|
+
import { PublicKeys, deriveKeys } from '@aztec/aztec.js/keys';
|
|
6
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
7
|
+
import { computeArtifactHash } from '@aztec/stdlib/contract';
|
|
8
|
+
import { createHash } from 'crypto';
|
|
9
|
+
import { createReadStream } from 'fs';
|
|
10
|
+
import { readFile, readdir } from 'fs/promises';
|
|
11
|
+
import { join, parse } from 'path';
|
|
12
|
+
/**
|
|
13
|
+
* Cache + in-flight map pair. Lookup hits the cache, then awaits an in-flight `compute()` if one
|
|
14
|
+
* exists, otherwise starts one and stores it. Guarantees `compute()` runs at most once per `key`
|
|
15
|
+
* across concurrent callers, which matters because `computeArtifactHash` is expensive.
|
|
16
|
+
*/ class AsyncCache {
|
|
17
|
+
#cache = new Map();
|
|
18
|
+
#inFlight = new Map();
|
|
19
|
+
getOrCompute(key, compute) {
|
|
20
|
+
const cached = this.#cache.get(key);
|
|
21
|
+
if (cached !== undefined) {
|
|
22
|
+
return Promise.resolve(cached);
|
|
23
|
+
}
|
|
24
|
+
let pending = this.#inFlight.get(key);
|
|
25
|
+
if (!pending) {
|
|
26
|
+
pending = (async ()=>{
|
|
27
|
+
try {
|
|
28
|
+
const value = await compute();
|
|
29
|
+
this.#cache.set(key, value);
|
|
30
|
+
return value;
|
|
31
|
+
} finally{
|
|
32
|
+
this.#inFlight.delete(key);
|
|
33
|
+
}
|
|
34
|
+
})();
|
|
35
|
+
this.#inFlight.set(key, pending);
|
|
36
|
+
}
|
|
37
|
+
return pending;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolves and caches contract artifacts and their associated instances.
|
|
42
|
+
*
|
|
43
|
+
* Artifact hash computation is expensive, so this service deduplicates both completed and in-flight computations.
|
|
44
|
+
* Two cache levels are kept: full deploys (artifact + computed instance) keyed by the full deploy context, and loaded +
|
|
45
|
+
* hashed artifacts keyed by the compiled-bytecode hash so deploys of the same contract with different args / salt /
|
|
46
|
+
* deployer reuse the same `ContractArtifactWithHash`.
|
|
47
|
+
*/ export class TXEArtifactResolver {
|
|
48
|
+
contractStore;
|
|
49
|
+
schnorrClassId;
|
|
50
|
+
#deployments;
|
|
51
|
+
#artifacts;
|
|
52
|
+
#logger;
|
|
53
|
+
constructor(contractStore, schnorrClassId){
|
|
54
|
+
this.contractStore = contractStore;
|
|
55
|
+
this.schnorrClassId = schnorrClassId;
|
|
56
|
+
this.#deployments = new AsyncCache();
|
|
57
|
+
this.#artifacts = new AsyncCache();
|
|
58
|
+
this.#logger = createLogger('txe:artifact_resolver');
|
|
59
|
+
}
|
|
60
|
+
/** Resolves the Schnorr account contract artifact and instance for the given secret, caching the result. */ resolveAccountArtifact(secret) {
|
|
61
|
+
return this.#deployments.getOrCompute(`SchnorrAccountContract-${secret}`, ()=>this.#computeAccountArtifact(secret));
|
|
62
|
+
}
|
|
63
|
+
/** Resolves a contract artifact from disk by path, computes its instance, and caches the result. */ async resolveDeployArtifact({ rootPath, packageName, contractPath, initializer, args, secret, salt, deployer }) {
|
|
64
|
+
const publicKeys = secret.equals(Fr.ZERO) ? PublicKeys.default() : (await deriveKeys(secret)).publicKeys;
|
|
65
|
+
const publicKeysHash = await publicKeys.hash();
|
|
66
|
+
const artifactPath = await this.#resolveArtifactPath(rootPath, packageName, contractPath);
|
|
67
|
+
const fileHash = await this.#fastHashFile(artifactPath);
|
|
68
|
+
const { dir: contractDirectory, base: contractFilename } = parse(contractPath);
|
|
69
|
+
const cacheKey = `${contractDirectory ?? ''}-${contractFilename}-${initializer}-${args.map((arg)=>arg.toString()).join('-')}-${publicKeysHash}-${salt}-${deployer}-${fileHash}`;
|
|
70
|
+
return this.#deployments.getOrCompute(cacheKey, ()=>this.#computeDeployArtifact(artifactPath, fileHash, initializer, args, salt, publicKeys, publicKeysHash, deployer));
|
|
71
|
+
}
|
|
72
|
+
async #resolveArtifactPath(rootPath, packageName, contractPath) {
|
|
73
|
+
const { dir: contractDirectory, base: contractFilename } = parse(contractPath);
|
|
74
|
+
if (contractDirectory) {
|
|
75
|
+
if (contractDirectory.includes('@')) {
|
|
76
|
+
// env.deploy("../path/to/workspace/root@packageName/contractName")
|
|
77
|
+
const [workspace, pkg] = contractDirectory.split('@');
|
|
78
|
+
const targetPath = join(rootPath, workspace, '/target');
|
|
79
|
+
this.#logger.debug(`Looking for compiled artifact in workspace ${targetPath}`);
|
|
80
|
+
return join(targetPath, `${pkg}-${contractFilename}.json`);
|
|
81
|
+
} else {
|
|
82
|
+
// env.deploy("../path/to/contract/root/contractName")
|
|
83
|
+
const targetPath = join(rootPath, contractDirectory, '/target');
|
|
84
|
+
this.#logger.debug(`Looking for compiled artifact in ${targetPath}`);
|
|
85
|
+
const [artifactPath] = (await readdir(targetPath)).filter((file)=>file.endsWith(`-${contractFilename}.json`));
|
|
86
|
+
return artifactPath;
|
|
87
|
+
}
|
|
88
|
+
} else {
|
|
89
|
+
// env.deploy("contractName")
|
|
90
|
+
return join(rootPath, './target', `${packageName}-${contractFilename}.json`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async #computeAccountArtifact(secret) {
|
|
94
|
+
const [artifactFromStore, classWithPreimage] = await Promise.all([
|
|
95
|
+
this.contractStore.getContractArtifact(this.schnorrClassId),
|
|
96
|
+
this.contractStore.getContractClassWithPreimage(this.schnorrClassId)
|
|
97
|
+
]);
|
|
98
|
+
if (!artifactFromStore || !classWithPreimage) {
|
|
99
|
+
throw new Error(`SchnorrAccount not found in shared contract store at class id ${this.schnorrClassId.toString()}`);
|
|
100
|
+
}
|
|
101
|
+
const artifact = {
|
|
102
|
+
...artifactFromStore,
|
|
103
|
+
artifactHash: classWithPreimage.artifactHash
|
|
104
|
+
};
|
|
105
|
+
const keys = await deriveKeys(secret);
|
|
106
|
+
const args = [
|
|
107
|
+
keys.publicKeys.ivpkM.x,
|
|
108
|
+
keys.publicKeys.ivpkM.y
|
|
109
|
+
];
|
|
110
|
+
const instance = await getContractInstanceFromInstantiationParams(artifact, {
|
|
111
|
+
constructorArgs: args,
|
|
112
|
+
skipArgsDecoding: true,
|
|
113
|
+
salt: Fr.ONE,
|
|
114
|
+
publicKeys: keys.publicKeys,
|
|
115
|
+
constructorArtifact: 'constructor',
|
|
116
|
+
deployer: AztecAddress.ZERO
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
artifact,
|
|
120
|
+
instance
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
async #computeDeployArtifact(artifactPath, fileHash, initializer, args, salt, publicKeys, publicKeysHash, deployer) {
|
|
124
|
+
// Inner cache: artifact load + hash depends only on the compiled bytecode (`fileHash`), so subsequent deploys of
|
|
125
|
+
// the same contract — regardless of constructor args / deployer / salt — reuse the same `ContractArtifactWithHash`.
|
|
126
|
+
const artifact = await this.#artifacts.getOrCompute(fileHash, async ()=>{
|
|
127
|
+
this.#logger.debug(`Loading compiled artifact ${artifactPath}`);
|
|
128
|
+
const artifactJSON = JSON.parse(await readFile(artifactPath, 'utf-8'));
|
|
129
|
+
const artifactWithoutHash = loadContractArtifact(artifactJSON);
|
|
130
|
+
return {
|
|
131
|
+
...artifactWithoutHash,
|
|
132
|
+
artifactHash: await computeArtifactHash(artifactWithoutHash)
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
this.#logger.debug(`Deploy ${artifact.name} with initializer ${initializer}(${args}) and public keys hash ${publicKeysHash}`);
|
|
136
|
+
const instance = await getContractInstanceFromInstantiationParams(artifact, {
|
|
137
|
+
constructorArgs: args,
|
|
138
|
+
skipArgsDecoding: true,
|
|
139
|
+
salt,
|
|
140
|
+
publicKeys,
|
|
141
|
+
constructorArtifact: initializer || undefined,
|
|
142
|
+
deployer
|
|
143
|
+
});
|
|
144
|
+
return {
|
|
145
|
+
artifact,
|
|
146
|
+
instance
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
#fastHashFile(path) {
|
|
150
|
+
return new Promise((resolve)=>{
|
|
151
|
+
const fd = createReadStream(path);
|
|
152
|
+
const hash = createHash('sha1');
|
|
153
|
+
hash.setEncoding('hex');
|
|
154
|
+
fd.on('end', function() {
|
|
155
|
+
hash.end();
|
|
156
|
+
resolve(hash.read());
|
|
157
|
+
});
|
|
158
|
+
fd.pipe(hash);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
@@ -17,4 +17,4 @@ export declare class TXEPublicContractDataSource implements ContractDataSource {
|
|
|
17
17
|
getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined>;
|
|
18
18
|
registerContractFunctionSignatures(_signatures: []): Promise<void>;
|
|
19
19
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX3B1YmxpY19jb250cmFjdF9kYXRhX3NvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3R4ZV9wdWJsaWNfY29udHJhY3RfZGF0YV9zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkgscUJBQWEsMkJBQTRCLFlBQVcsa0JBQWtCO0lBRWxFLE9BQU8sQ0FBQyxXQUFXO0lBQ25CLE9BQU8sQ0FBQyxhQUFhO0lBRnZCLFlBQ1UsV0FBVyxFQUFFLFdBQVcsRUFDeEIsYUFBYSxFQUFFLGFBQWEsRUFDbEM7SUFFSixjQUFjLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUVyQztJQUVLLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxDQVl2RTtJQUVLLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FHM0Q7SUFFSyxXQUFXLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsMkJBQTJCLEdBQUcsU0FBUyxDQUFDLENBSXpGO0lBRUQsbUJBQW1CLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5DO0lBRUssbUJBQW1CLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLENBR3RGO0lBRUssb0JBQW9CLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FHekc7SUFFRCxrQ0FBa0MsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFakU7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txe_public_contract_data_source.d.ts","sourceRoot":"","sources":["../../src/utils/txe_public_contract_data_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAEnH,qBAAa,2BAA4B,YAAW,kBAAkB;IAElE,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,aAAa;IAFvB,YACU,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAClC;IAEJ,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAErC;IAEK,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAYvE;IAEK,qBAAqB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAG3D;IAEK,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"txe_public_contract_data_source.d.ts","sourceRoot":"","sources":["../../src/utils/txe_public_contract_data_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAEnH,qBAAa,2BAA4B,YAAW,kBAAkB;IAElE,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,aAAa;IAFvB,YACU,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAClC;IAEJ,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAErC;IAEK,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAYvE;IAEK,qBAAqB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAG3D;IAEK,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAIzF;IAED,mBAAmB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnC;IAEK,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAGtF;IAEK,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGzG;IAED,kCAAkC,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE;CACF"}
|
|
@@ -27,20 +27,23 @@ export class TXEPublicContractDataSource {
|
|
|
27
27
|
}
|
|
28
28
|
async getContract(address) {
|
|
29
29
|
const instance = await this.contractStore.getContractInstance(address);
|
|
30
|
+
// TXE has no contract updates, so the current class always equals the original.
|
|
30
31
|
return instance && {
|
|
31
32
|
...instance,
|
|
32
|
-
address
|
|
33
|
+
address,
|
|
34
|
+
currentContractClassId: instance.originalContractClassId
|
|
33
35
|
};
|
|
34
36
|
}
|
|
35
37
|
getContractClassIds() {
|
|
36
38
|
throw new Error('Method not implemented.');
|
|
37
39
|
}
|
|
38
40
|
async getContractArtifact(address) {
|
|
39
|
-
const instance = await this.
|
|
40
|
-
return instance && this.contractStore.getContractArtifact(instance.
|
|
41
|
+
const instance = await this.getContract(address);
|
|
42
|
+
return instance && this.contractStore.getContractArtifact(instance.originalContractClassId);
|
|
41
43
|
}
|
|
42
44
|
async getDebugFunctionName(address, selector) {
|
|
43
|
-
|
|
45
|
+
const instance = await this.getContract(address);
|
|
46
|
+
return instance && this.contractStore.getDebugFunctionName(instance.originalContractClassId, selector);
|
|
44
47
|
}
|
|
45
48
|
registerContractFunctionSignatures(_signatures) {
|
|
46
49
|
return Promise.resolve();
|
package/dest/worker.bundle.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire as __txeCreateRequire } from 'node:module';
|
|
2
2
|
const require = __txeCreateRequire(import.meta.url);
|
|
3
|
-
import{TXEDispatcher,activeSessionCount,createLogger}from"./chunk-
|
|
3
|
+
import{TXEDispatcher,activeSessionCount,createLogger}from"./chunk-XWIMXLKD.js";import{__name}from"./chunk-32UHX7YY.js";import{BackendType,Barretenberg,BarretenbergSync}from"@aztec/bb.js";import{parentPort,workerData}from"node:worker_threads";Barretenberg.initSingleton({backend:BackendType.Wasm,skipSrsInit:!0,threads:1});BarretenbergSync.initSingleton({backend:BackendType.Wasm});if(!parentPort)throw new Error("worker.ts must be loaded as a worker_thread");var port=parentPort,logger=createLogger("txe:worker"),dispatcherOpts={contractStoreSourceDir:workerData.contractStoreSourceDir,schnorrClassId:workerData.schnorrClassId},dispatcher=new TXEDispatcher(logger,dispatcherOpts);function serializeError(err){return err instanceof Error?{message:err.message,name:err.name,stack:err.stack}:{message:String(err)}}__name(serializeError,"serializeError");process.env.TXE_WORKER_MEMSTAT==="1"&&setInterval(()=>{let m=process.memoryUsage();port.postMessage({type:"memstat",sessions:activeSessionCount(),rss:m.rss,heapTotal:m.heapTotal,heapUsed:m.heapUsed,external:m.external,arrayBuffers:m.arrayBuffers})},2e3).unref();port.on("message",msg=>{switch(msg.type){case"foreign-call":(async()=>{try{let value=await dispatcher.resolve_foreign_call(msg.callData);port.postMessage({type:"result",requestId:msg.requestId,ok:!0,value})}catch(err){port.postMessage({type:"result",requestId:msg.requestId,ok:!1,error:serializeError(err)})}})();return;case"dispose-session":dispatcher.disposeSession(msg.sessionId).catch(err=>logger.warn("disposeSession failed",err));return}});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/txe",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.9a89641",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./server": {
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
24
24
|
"dev": "LOG_LEVEL=\"debug; trace: simulator:state_manager; info: json-rpc:proxy\" node ./dest/bin/index.js",
|
|
25
25
|
"start": "node --no-warnings ./dest/bin/index.js",
|
|
26
|
+
"start:oracle-test-resolver": "node --no-warnings ./dest/bin/oracle_test_server.js",
|
|
26
27
|
"check_txe_oracle_version": "node ./dest/bin/check_txe_oracle_version.js"
|
|
27
28
|
},
|
|
28
29
|
"inherits": [
|
|
@@ -68,22 +69,22 @@
|
|
|
68
69
|
]
|
|
69
70
|
},
|
|
70
71
|
"dependencies": {
|
|
71
|
-
"@aztec/accounts": "0.0.1-commit.
|
|
72
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
73
|
-
"@aztec/aztec-node": "0.0.1-commit.
|
|
74
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
75
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
76
|
-
"@aztec/bb.js": "0.0
|
|
77
|
-
"@aztec/constants": "0.0.1-commit.
|
|
78
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
79
|
-
"@aztec/key-store": "0.0.1-commit.
|
|
80
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
81
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
82
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
83
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
84
|
-
"@aztec/standard-contracts": "0.0.1-commit.
|
|
85
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
86
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
72
|
+
"@aztec/accounts": "0.0.1-commit.9a89641",
|
|
73
|
+
"@aztec/archiver": "0.0.1-commit.9a89641",
|
|
74
|
+
"@aztec/aztec-node": "0.0.1-commit.9a89641",
|
|
75
|
+
"@aztec/aztec.js": "0.0.1-commit.9a89641",
|
|
76
|
+
"@aztec/bb-prover": "0.0.1-commit.9a89641",
|
|
77
|
+
"@aztec/bb.js": "6.0.0-nightly.20260807",
|
|
78
|
+
"@aztec/constants": "0.0.1-commit.9a89641",
|
|
79
|
+
"@aztec/foundation": "0.0.1-commit.9a89641",
|
|
80
|
+
"@aztec/key-store": "0.0.1-commit.9a89641",
|
|
81
|
+
"@aztec/kv-store": "0.0.1-commit.9a89641",
|
|
82
|
+
"@aztec/protocol-contracts": "0.0.1-commit.9a89641",
|
|
83
|
+
"@aztec/pxe": "0.0.1-commit.9a89641",
|
|
84
|
+
"@aztec/simulator": "0.0.1-commit.9a89641",
|
|
85
|
+
"@aztec/standard-contracts": "0.0.1-commit.9a89641",
|
|
86
|
+
"@aztec/stdlib": "0.0.1-commit.9a89641",
|
|
87
|
+
"@aztec/world-state": "0.0.1-commit.9a89641",
|
|
87
88
|
"msgpackr": "^1.11.2",
|
|
88
89
|
"zod": "^4"
|
|
89
90
|
},
|
|
@@ -1,35 +1,29 @@
|
|
|
1
1
|
import { keccak256String } from '@aztec/foundation/crypto/keccak';
|
|
2
|
-
import {
|
|
2
|
+
import { getOracleRegistrySignature } from '@aztec/pxe/bin';
|
|
3
|
+
import { ORACLE_REGISTRY, type OracleRegistryEntry } from '@aztec/pxe/simulator';
|
|
3
4
|
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
import { TXE_ORACLE_INTERFACE_HASH } from '../txe_oracle_version.js';
|
|
5
|
+
import { TXE_ORACLE_REGISTRY } from '../oracle/txe_oracle_registry.js';
|
|
6
|
+
import { TXE_ORACLE_INTERFACE_HASH } from '../oracle/txe_oracle_version.js';
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* Verifies that the TXE oracle interfaces match the expected interface hash.
|
|
11
10
|
*
|
|
12
11
|
* The TXE oracle interfaces need to be versioned to ensure compatibility between Aztec.nr tests and TXE. This function
|
|
13
|
-
* computes a hash of the TXE
|
|
12
|
+
* computes a hash of the TXE-specific entries in `TXE_ORACLE_REGISTRY` (the shared PXE entries are covered by the PXE
|
|
13
|
+
* oracle version check) and compares it against a known hash. If they don't match, it means an
|
|
14
14
|
* interface has changed and the TXE oracle version needs to be bumped:
|
|
15
15
|
* - If the change is backward-breaking (e.g. removing/renaming an oracle), bump TXE_ORACLE_VERSION_MAJOR.
|
|
16
16
|
* - If the change is an oracle addition (non-breaking), bump TXE_ORACLE_VERSION_MINOR.
|
|
17
17
|
*/
|
|
18
18
|
function assertTxeOracleInterfaceMatches(): void {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const targets = ['IAvmExecutionOracle', 'ITxeExecutionOracle'];
|
|
24
|
-
// Not an oracle foreign call handler (see TODO(F-335) in interfaces.ts).
|
|
25
|
-
const excludedMembers = ['syncContractNonOracleMethod'];
|
|
26
|
-
|
|
27
|
-
const txeOracleInterfaceSignature = getOracleInterfaceSignature(interfacesSourcePath, targets, excludedMembers);
|
|
19
|
+
const txeOnlyEntries: Record<string, OracleRegistryEntry> = Object.fromEntries(
|
|
20
|
+
Object.entries(TXE_ORACLE_REGISTRY).filter(([name]) => !(name in ORACLE_REGISTRY)),
|
|
21
|
+
);
|
|
28
22
|
|
|
29
|
-
const txeOracleInterfaceHash = keccak256String(
|
|
23
|
+
const txeOracleInterfaceHash = keccak256String(getOracleRegistrySignature(txeOnlyEntries));
|
|
30
24
|
if (txeOracleInterfaceHash !== TXE_ORACLE_INTERFACE_HASH) {
|
|
31
25
|
throw new Error(
|
|
32
|
-
`The TXE oracle interface has changed. Update TXE_ORACLE_INTERFACE_HASH to ${txeOracleInterfaceHash} in txe/src/txe_oracle_version.ts and bump the TXE oracle version (TXE_ORACLE_VERSION_MAJOR for breaking changes, TXE_ORACLE_VERSION_MINOR for oracle additions).`,
|
|
26
|
+
`The TXE oracle interface has changed. Update TXE_ORACLE_INTERFACE_HASH to ${txeOracleInterfaceHash} in txe/src/oracle/txe_oracle_version.ts and bump the TXE oracle version (TXE_ORACLE_VERSION_MAJOR for breaking changes, TXE_ORACLE_VERSION_MINOR for oracle additions).`,
|
|
33
27
|
);
|
|
34
28
|
}
|
|
35
29
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings
|
|
2
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
3
|
+
import { startHttpRpcServer } from '@aztec/foundation/json-rpc/server';
|
|
4
|
+
|
|
5
|
+
import { createOracleTestRpcServer } from '../oracle/test-resolver/index.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Starts an HTTP RPC server that resolves oracle foreign calls using auto-synthesized fixture scenarios. Used by
|
|
9
|
+
* `nargo test --oracle-resolver` to run `#[generate_oracle_tests]` serialization tests against a dedicated resolver.
|
|
10
|
+
* Logs fixture coverage on shutdown.
|
|
11
|
+
*/
|
|
12
|
+
async function main() {
|
|
13
|
+
const { ORACLE_TEST_PORT = 14830 } = process.env;
|
|
14
|
+
|
|
15
|
+
const logger = createLogger('txe:oracle-test');
|
|
16
|
+
|
|
17
|
+
logger.info('Setting up oracle test resolver...');
|
|
18
|
+
const { server, resolver } = createOracleTestRpcServer(logger);
|
|
19
|
+
|
|
20
|
+
function logCoverageAndExit() {
|
|
21
|
+
const uncalled = resolver.getUncalledFixtures();
|
|
22
|
+
const missing = resolver.getMissingFixtures();
|
|
23
|
+
if (uncalled.length > 0) {
|
|
24
|
+
logger.warn(`Fixtures never called by any test: ${uncalled.join(', ')}`);
|
|
25
|
+
}
|
|
26
|
+
if (missing.length > 0) {
|
|
27
|
+
logger.debug(`Oracles with no fixture defined: ${missing.join(', ')}`);
|
|
28
|
+
}
|
|
29
|
+
if (uncalled.length === 0) {
|
|
30
|
+
logger.info('All fixture oracles were called.');
|
|
31
|
+
}
|
|
32
|
+
process.exit(0);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
process.on('SIGTERM', logCoverageAndExit);
|
|
36
|
+
process.on('SIGINT', logCoverageAndExit);
|
|
37
|
+
|
|
38
|
+
const { port } = await startHttpRpcServer(server, {
|
|
39
|
+
host: '127.0.0.1',
|
|
40
|
+
port: ORACLE_TEST_PORT,
|
|
41
|
+
timeoutMs: 1e3 * 60 * 5,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
logger.info(`Oracle test resolver listening on port ${port}`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
main().catch(err => {
|
|
48
|
+
// eslint-disable-next-line no-console
|
|
49
|
+
console.error(err);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
});
|
package/src/constants.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { PRIVATE_LOG_CIPHERTEXT_LEN } from '@aztec/constants';
|
|
2
2
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
|
|
4
|
-
export const DEFAULT_ADDRESS = AztecAddress.
|
|
4
|
+
export const DEFAULT_ADDRESS = AztecAddress.fromNumberUnsafe(42);
|
|
5
|
+
|
|
6
|
+
// This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN
|
|
7
|
+
export const MAX_PRIVATE_EVENT_LEN = 10;
|
|
8
|
+
export const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
|
|
5
9
|
|
|
6
10
|
// Arbitrarily set at 64 because we need a bound. Nothing inherent about it.
|
|
7
11
|
export const MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY = 64;
|
|
8
|
-
// Must match MAX_OFFCHAIN_EFFECT_LEN in noir-projects/aztec-nr/aztec/src/test/helpers/txe_oracles.nr.
|
|
12
|
+
// Must match MAX_OFFCHAIN_EFFECT_LEN in noir-projects/labs/aztec-nr/aztec/src/test/helpers/txe_oracles.nr.
|
|
9
13
|
export const MAX_OFFCHAIN_EFFECT_LEN = 2 + PRIVATE_LOG_CIPHERTEXT_LEN;
|
package/src/dispatcher_pool.ts
CHANGED
|
@@ -4,7 +4,8 @@ import type { Logger } from '@aztec/foundation/log';
|
|
|
4
4
|
import { openEphemeralStore } from '@aztec/kv-store/lmdb-v2';
|
|
5
5
|
import { LazyProtocolContractsProvider } from '@aztec/protocol-contracts/providers/lazy';
|
|
6
6
|
import { ContractStore } from '@aztec/pxe/client/lazy';
|
|
7
|
-
import { getStandardAuthRegistry } from '@aztec/standard-contracts/auth-registry';
|
|
7
|
+
import { getStandardAuthRegistry } from '@aztec/standard-contracts/auth-registry/lazy';
|
|
8
|
+
import { getStandardHandshakeRegistry } from '@aztec/standard-contracts/handshake-registry/lazy';
|
|
8
9
|
import { getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
9
10
|
|
|
10
11
|
import { existsSync } from 'node:fs';
|
|
@@ -21,7 +22,7 @@ void BarretenbergSync.initSingleton({ backend: BackendType.Wasm });
|
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* Opens a fresh LMDB in a tmp dir and writes the protocol contracts in
|
|
24
|
-
* {@link TXE_REQUIRED_PROTOCOL_CONTRACTS} plus the standard AuthRegistry and the SchnorrAccount artifact,
|
|
25
|
+
* {@link TXE_REQUIRED_PROTOCOL_CONTRACTS} plus the standard AuthRegistry, HandshakeRegistry, and the SchnorrAccount artifact,
|
|
25
26
|
* returning the directory path and the SchnorrAccount class id (hex). The store handle is intentionally kept
|
|
26
27
|
* alive: closing it would trigger the ephemeral-store cleanup hook and remove the tmp
|
|
27
28
|
* directory, so any worker that has not yet cloned would find it missing.
|
|
@@ -33,7 +34,7 @@ export async function buildSharedContractStore(): Promise<{ dataDir: string; sch
|
|
|
33
34
|
const provider = new LazyProtocolContractsProvider();
|
|
34
35
|
const [protocolContracts, standardContracts, schnorrArtifact] = await Promise.all([
|
|
35
36
|
Promise.all(TXE_REQUIRED_PROTOCOL_CONTRACTS.map(name => provider.getProtocolContractArtifact(name))),
|
|
36
|
-
Promise.all([getStandardAuthRegistry()]),
|
|
37
|
+
Promise.all([getStandardAuthRegistry(), getStandardHandshakeRegistry()]),
|
|
37
38
|
getSchnorrAccountContractArtifact(),
|
|
38
39
|
]);
|
|
39
40
|
const schnorrClass = await getContractClassFromArtifact(schnorrArtifact);
|