@aztec/aztec 0.0.1-commit.c7c42ec → 0.0.1-commit.c949de6bc
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/bin/index.js +7 -1
- package/dest/cli/admin_api_key_store.d.ts +45 -0
- package/dest/cli/admin_api_key_store.d.ts.map +1 -0
- package/dest/cli/admin_api_key_store.js +98 -0
- package/dest/cli/aztec_start_action.d.ts +1 -1
- package/dest/cli/aztec_start_action.d.ts.map +1 -1
- package/dest/cli/aztec_start_action.js +50 -9
- package/dest/cli/aztec_start_options.d.ts +1 -1
- package/dest/cli/aztec_start_options.d.ts.map +1 -1
- package/dest/cli/aztec_start_options.js +27 -8
- package/dest/cli/cli.d.ts +1 -1
- package/dest/cli/cli.d.ts.map +1 -1
- package/dest/cli/cli.js +7 -52
- package/dest/cli/cmds/compile.d.ts +4 -0
- package/dest/cli/cmds/compile.d.ts.map +1 -0
- package/dest/cli/cmds/compile.js +160 -0
- package/dest/cli/cmds/migrate_ha_db.d.ts +3 -0
- package/dest/cli/cmds/migrate_ha_db.d.ts.map +1 -0
- package/dest/cli/cmds/migrate_ha_db.js +27 -0
- package/dest/cli/cmds/profile.d.ts +4 -0
- package/dest/cli/cmds/profile.d.ts.map +1 -0
- package/dest/cli/cmds/profile.js +8 -0
- package/dest/cli/cmds/profile_flamegraph.d.ts +4 -0
- package/dest/cli/cmds/profile_flamegraph.d.ts.map +1 -0
- package/dest/cli/cmds/profile_flamegraph.js +51 -0
- package/dest/cli/cmds/profile_gates.d.ts +4 -0
- package/dest/cli/cmds/profile_gates.d.ts.map +1 -0
- package/dest/cli/cmds/profile_gates.js +57 -0
- package/dest/cli/cmds/profile_utils.d.ts +18 -0
- package/dest/cli/cmds/profile_utils.d.ts.map +1 -0
- package/dest/cli/cmds/profile_utils.js +50 -0
- package/dest/cli/cmds/start_archiver.d.ts +1 -1
- package/dest/cli/cmds/start_archiver.d.ts.map +1 -1
- package/dest/cli/cmds/start_archiver.js +5 -7
- package/dest/cli/cmds/start_bot.d.ts +3 -3
- package/dest/cli/cmds/start_bot.d.ts.map +1 -1
- package/dest/cli/cmds/start_bot.js +9 -5
- package/dest/cli/cmds/start_node.d.ts +1 -1
- package/dest/cli/cmds/start_node.d.ts.map +1 -1
- package/dest/cli/cmds/start_node.js +62 -10
- package/dest/cli/cmds/start_p2p_bootstrap.d.ts +2 -2
- package/dest/cli/cmds/start_p2p_bootstrap.d.ts.map +1 -1
- package/dest/cli/cmds/start_p2p_bootstrap.js +1 -2
- package/dest/cli/cmds/start_prover_agent.d.ts +1 -1
- package/dest/cli/cmds/start_prover_agent.d.ts.map +1 -1
- package/dest/cli/cmds/start_prover_agent.js +3 -3
- package/dest/cli/cmds/start_prover_broker.d.ts +1 -1
- package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -1
- package/dest/cli/cmds/start_prover_broker.js +2 -2
- package/dest/cli/cmds/utils/artifacts.d.ts +21 -0
- package/dest/cli/cmds/utils/artifacts.d.ts.map +1 -0
- package/dest/cli/cmds/utils/artifacts.js +24 -0
- package/dest/cli/cmds/utils/spawn.d.ts +3 -0
- package/dest/cli/cmds/utils/spawn.d.ts.map +1 -0
- package/dest/cli/cmds/utils/spawn.js +16 -0
- package/dest/cli/util.d.ts +5 -14
- package/dest/cli/util.d.ts.map +1 -1
- package/dest/cli/util.js +14 -9
- package/dest/examples/token.js +5 -5
- package/dest/local-network/banana_fpc.d.ts +1 -1
- package/dest/local-network/banana_fpc.d.ts.map +1 -1
- package/dest/local-network/banana_fpc.js +2 -2
- package/dest/local-network/local-network.d.ts +4 -3
- package/dest/local-network/local-network.d.ts.map +1 -1
- package/dest/local-network/local-network.js +51 -20
- package/dest/testing/anvil_test_watcher.d.ts +9 -1
- package/dest/testing/anvil_test_watcher.d.ts.map +1 -1
- package/dest/testing/anvil_test_watcher.js +52 -15
- package/dest/testing/cheat_codes.d.ts +3 -1
- package/dest/testing/cheat_codes.d.ts.map +1 -1
- package/dest/testing/epoch_test_settler.d.ts +19 -0
- package/dest/testing/epoch_test_settler.d.ts.map +1 -0
- package/dest/testing/epoch_test_settler.js +62 -0
- package/dest/testing/index.d.ts +2 -1
- package/dest/testing/index.d.ts.map +1 -1
- package/dest/testing/index.js +1 -0
- package/package.json +37 -35
- package/scripts/aztec.sh +66 -0
- package/scripts/init.sh +45 -0
- package/scripts/new.sh +60 -0
- package/scripts/setup_workspace.sh +124 -0
- package/src/bin/index.ts +7 -1
- package/src/cli/admin_api_key_store.ts +128 -0
- package/src/cli/aztec_start_action.ts +53 -4
- package/src/cli/aztec_start_options.ts +28 -6
- package/src/cli/cli.ts +11 -56
- package/src/cli/cmds/compile.ts +184 -0
- package/src/cli/cmds/migrate_ha_db.ts +43 -0
- package/src/cli/cmds/profile.ts +25 -0
- package/src/cli/cmds/profile_flamegraph.ts +63 -0
- package/src/cli/cmds/profile_gates.ts +67 -0
- package/src/cli/cmds/profile_utils.ts +58 -0
- package/src/cli/cmds/start_archiver.ts +2 -13
- package/src/cli/cmds/start_bot.ts +8 -5
- package/src/cli/cmds/start_node.ts +51 -9
- package/src/cli/cmds/start_p2p_bootstrap.ts +2 -2
- package/src/cli/cmds/start_prover_agent.ts +3 -11
- package/src/cli/cmds/start_prover_broker.ts +5 -1
- package/src/cli/cmds/utils/artifacts.ts +44 -0
- package/src/cli/cmds/utils/spawn.ts +16 -0
- package/src/cli/util.ts +17 -22
- package/src/examples/token.ts +5 -7
- package/src/local-network/banana_fpc.ts +10 -6
- package/src/local-network/local-network.ts +72 -27
- package/src/testing/anvil_test_watcher.ts +59 -15
- package/src/testing/epoch_test_settler.ts +71 -0
- package/src/testing/index.ts +1 -0
- package/dest/cli/cmds/start_prover_node.d.ts +0 -7
- package/dest/cli/cmds/start_prover_node.d.ts.map +0 -1
- package/dest/cli/cmds/start_prover_node.js +0 -108
- package/src/cli/cmds/start_prover_node.ts +0 -124
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface CompiledArtifact {
|
|
2
|
+
noir_version: string;
|
|
3
|
+
file_map: unknown;
|
|
4
|
+
functions: ContractFunction[];
|
|
5
|
+
bytecode?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ContractFunction {
|
|
8
|
+
name: string;
|
|
9
|
+
abi: unknown;
|
|
10
|
+
bytecode: string;
|
|
11
|
+
debug_symbols: unknown;
|
|
12
|
+
is_unconstrained?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ArtifactFile {
|
|
15
|
+
name: string;
|
|
16
|
+
filePath: string;
|
|
17
|
+
content: CompiledArtifact;
|
|
18
|
+
}
|
|
19
|
+
/** Reads all JSON artifact files from a target directory and returns their parsed contents. */
|
|
20
|
+
export declare function readArtifactFiles(targetDir: string): Promise<ArtifactFile[]>;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpL2NtZHMvdXRpbHMvYXJ0aWZhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0IsWUFBWSxFQUFFLE1BQU0sQ0FBQztJQUNyQixRQUFRLEVBQUUsT0FBTyxDQUFDO0lBQ2xCLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzlCLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNuQjtBQUVELE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0IsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLEdBQUcsRUFBRSxPQUFPLENBQUM7SUFDYixRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLGFBQWEsRUFBRSxPQUFPLENBQUM7SUFDdkIsZ0JBQWdCLENBQUMsRUFBRSxPQUFPLENBQUM7Q0FDNUI7QUFFRCxNQUFNLFdBQVcsWUFBWTtJQUMzQixJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNqQixPQUFPLEVBQUUsZ0JBQWdCLENBQUM7Q0FDM0I7QUFFRCwrRkFBK0Y7QUFDL0Ysd0JBQXNCLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBa0JsRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../../src/cli/cmds/utils/artifacts.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,+FAA+F;AAC/F,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAkBlF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { readFile, readdir } from 'fs/promises';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
/** Reads all JSON artifact files from a target directory and returns their parsed contents. */ export async function readArtifactFiles(targetDir) {
|
|
4
|
+
let entries;
|
|
5
|
+
try {
|
|
6
|
+
entries = (await readdir(targetDir)).filter((f)=>f.endsWith('.json'));
|
|
7
|
+
} catch (err) {
|
|
8
|
+
if (err?.code === 'ENOENT') {
|
|
9
|
+
throw new Error(`Target directory '${targetDir}' does not exist. Compile first with 'aztec compile'.`);
|
|
10
|
+
}
|
|
11
|
+
throw err;
|
|
12
|
+
}
|
|
13
|
+
const artifacts = [];
|
|
14
|
+
for (const file of entries){
|
|
15
|
+
const filePath = join(targetDir, file);
|
|
16
|
+
const content = JSON.parse(await readFile(filePath, 'utf-8'));
|
|
17
|
+
artifacts.push({
|
|
18
|
+
name: file.replace('.json', ''),
|
|
19
|
+
filePath,
|
|
20
|
+
content
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return artifacts;
|
|
24
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Spawns a command with inherited stdio and rejects on non-zero exit. */
|
|
2
|
+
export declare function run(cmd: string, args: string[]): Promise<void>;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bhd24uZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGkvY21kcy91dGlscy9zcGF3bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSwwRUFBMEU7QUFDMUUsd0JBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBWTlEIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../../src/cli/cmds/utils/spawn.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
/** Spawns a command with inherited stdio and rejects on non-zero exit. */ export function run(cmd, args) {
|
|
3
|
+
return new Promise((resolve, reject)=>{
|
|
4
|
+
const child = spawn(cmd, args, {
|
|
5
|
+
stdio: 'inherit'
|
|
6
|
+
});
|
|
7
|
+
child.on('error', reject);
|
|
8
|
+
child.on('close', (code)=>{
|
|
9
|
+
if (code !== 0) {
|
|
10
|
+
reject(new Error(`${cmd} exited with code ${code}`));
|
|
11
|
+
} else {
|
|
12
|
+
resolve();
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
}
|
package/dest/cli/util.d.ts
CHANGED
|
@@ -2,12 +2,11 @@ import type { AztecNodeConfig } from '@aztec/aztec-node';
|
|
|
2
2
|
import type { AccountManager } from '@aztec/aztec.js/wallet';
|
|
3
3
|
import type { ViemClient } from '@aztec/ethereum/types';
|
|
4
4
|
import type { ConfigMappingsType } from '@aztec/foundation/config';
|
|
5
|
-
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
6
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
6
|
import { type LogFn } from '@aztec/foundation/log';
|
|
8
7
|
import type { SharedNodeConfig } from '@aztec/node-lib/config';
|
|
9
8
|
import type { ProverConfig } from '@aztec/stdlib/interfaces/server';
|
|
10
|
-
import type {
|
|
9
|
+
import type { EmbeddedWallet } from '@aztec/wallets/embedded';
|
|
11
10
|
import type { Command } from 'commander';
|
|
12
11
|
import { type AztecStartOption } from './aztec_start_options.js';
|
|
13
12
|
export declare const enum ExitCode {
|
|
@@ -26,19 +25,10 @@ export declare const installSignalHandlers: (logFn: LogFn, cb?: (() => Promise<v
|
|
|
26
25
|
/**
|
|
27
26
|
* Creates logs for the initial accounts
|
|
28
27
|
* @param accounts - The initial accounts
|
|
29
|
-
* @param wallet - A
|
|
28
|
+
* @param wallet - A EmbeddedWallet instance to get the registered accounts
|
|
30
29
|
* @returns A string array containing the initial accounts details
|
|
31
30
|
*/
|
|
32
|
-
export declare function createAccountLogs(
|
|
33
|
-
/**
|
|
34
|
-
* The account object
|
|
35
|
-
*/
|
|
36
|
-
account: AccountManager;
|
|
37
|
-
/**
|
|
38
|
-
* The secret key of the account
|
|
39
|
-
*/
|
|
40
|
-
secretKey: Fr;
|
|
41
|
-
}[], wallet: TestWallet): Promise<string[]>;
|
|
31
|
+
export declare function createAccountLogs(accountManagers: AccountManager[], wallet: EmbeddedWallet): Promise<string[]>;
|
|
42
32
|
export declare function getMaxLengths(sections: {
|
|
43
33
|
[key: string]: AztecStartOption[];
|
|
44
34
|
}): [number, number];
|
|
@@ -74,4 +64,5 @@ export declare function preloadCrsDataForVerifying({ realProofs }: Pick<AztecNod
|
|
|
74
64
|
*/
|
|
75
65
|
export declare function preloadCrsDataForServerSideProving({ realProofs }: Pick<ProverConfig, 'realProofs'>, log: LogFn): Promise<void>;
|
|
76
66
|
export declare function setupUpdateMonitor(autoUpdateMode: SharedNodeConfig['autoUpdate'], updatesLocation: URL, followsCanonicalRollup: boolean, publicClient: ViemClient, registryContractAddress: EthAddress, signalHandlers: Array<() => Promise<void>>, updateNodeConfig?: (config: object) => Promise<void>): Promise<void>;
|
|
77
|
-
|
|
67
|
+
export declare function stringifyConfig(config: object): string;
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXBFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBcUIsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRiwwQkFBa0IsUUFBUTtJQUN4QixPQUFPLElBQUk7SUFDWCxLQUFLLElBQUk7SUFDVCxjQUFjLEtBQUs7SUFDbkIsZUFBZSxLQUFLO0lBRXBCLE1BQU0sTUFBTTtJQUNaLE1BQU0sTUFBTTtJQUNaLE9BQU8sTUFBTTtJQUNiLE9BQU8sTUFBTTtDQUNkO0FBR0Qsd0JBQWdCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQWdCMUc7QUFFRCx3QkFBZ0IsY0FBYyxJQUFJLE9BQU8sQ0FFeEM7QUFFRCxlQUFPLE1BQU0scUJBQXFCLGtFQWFqQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCx3QkFBc0IsaUJBQWlCLENBQUMsZUFBZSxFQUFFLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLHFCQXlCaEc7QUFFRCx3QkFBZ0IsYUFBYSxDQUFDLFFBQVEsRUFBRTtJQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFBO0NBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FpQi9GO0FBRUQsd0JBQWdCLGNBQWMsQ0FDNUIsTUFBTSxFQUFFLE1BQU0sRUFDZCxZQUFZLEVBQUUsTUFBTSxFQUNwQixNQUFNLEVBQUUsTUFBTSxFQUNkLGVBQWUsRUFBRSxNQUFNLEVBQ3ZCLGdCQUFnQixFQUFFLE1BQU0sR0FDdkIsTUFBTSxDQUtSO0FBaUNELGVBQU8sTUFBTSxVQUFVLHFEQVN0QixDQUFDO0FBRUYsZUFBTyxNQUFNLHVCQUF1QixjQXlCbkMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsZUFBTyxNQUFNLHdCQUF3QiwwRUFTcEMsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxlQUFPLE1BQU0sc0JBQXNCLEdBQUksQ0FBQyx3RkFrQ3ZDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsd0JBQXNCLDBCQUEwQixDQUM5QyxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLEVBQ25ELEdBQUcsRUFBRSxLQUFLLEdBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUtmO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFzQixrQ0FBa0MsQ0FDdEQsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxFQUNoRCxHQUFHLEVBQUUsS0FBSyxHQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FLZjtBQUVELHdCQUFzQixrQkFBa0IsQ0FDdEMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUM5QyxlQUFlLEVBQUUsR0FBRyxFQUNwQixzQkFBc0IsRUFBRSxPQUFPLEVBQy9CLFlBQVksRUFBRSxVQUFVLEVBQ3hCLHVCQUF1QixFQUFFLFVBQVUsRUFDbkMsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMxQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQStFckQ7QUFFRCx3QkFBZ0IsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUl0RCJ9
|
package/dest/cli/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/cli/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/cli/util.ts"],"names":[],"mappings":"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"}
|
package/dest/cli/util.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { jsonStringify } from '@aztec/foundation/json-rpc';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { getTelemetryClient } from '@aztec/telemetry-client/start';
|
|
3
4
|
import chalk from 'chalk';
|
|
@@ -24,7 +25,7 @@ export function shutdown(logFn, exitCode, cb) {
|
|
|
24
25
|
exitCode
|
|
25
26
|
});
|
|
26
27
|
if (cb) {
|
|
27
|
-
shutdownPromise = Promise.allSettled(cb).then(()=>process.exit(exitCode));
|
|
28
|
+
shutdownPromise = Promise.allSettled(cb.map((fn)=>fn())).then(()=>process.exit(exitCode));
|
|
28
29
|
} else {
|
|
29
30
|
// synchronously shuts down the process
|
|
30
31
|
// no need to set shutdownPromise on this branch of the if statement because no more code will be executed
|
|
@@ -63,19 +64,20 @@ export const installSignalHandlers = (logFn, cb)=>{
|
|
|
63
64
|
/**
|
|
64
65
|
* Creates logs for the initial accounts
|
|
65
66
|
* @param accounts - The initial accounts
|
|
66
|
-
* @param wallet - A
|
|
67
|
+
* @param wallet - A EmbeddedWallet instance to get the registered accounts
|
|
67
68
|
* @returns A string array containing the initial accounts details
|
|
68
|
-
*/ export async function createAccountLogs(
|
|
69
|
+
*/ export async function createAccountLogs(accountManagers, wallet) {
|
|
69
70
|
const registeredAccounts = await wallet.getAccounts();
|
|
70
71
|
const accountLogStrings = [
|
|
71
72
|
`Initial Accounts:\n\n`
|
|
72
73
|
];
|
|
73
|
-
for (const
|
|
74
|
-
const
|
|
74
|
+
for (const accountManager of accountManagers){
|
|
75
|
+
const account = await accountManager.getAccount();
|
|
76
|
+
const completeAddress = account.getCompleteAddress();
|
|
75
77
|
if (registeredAccounts.find((a)=>a.item.equals(completeAddress.address))) {
|
|
76
78
|
accountLogStrings.push(` Address: ${completeAddress.address.toString()}\n`);
|
|
77
79
|
accountLogStrings.push(` Partial Address: ${completeAddress.partialAddress.toString()}\n`);
|
|
78
|
-
accountLogStrings.push(` Secret Key: ${
|
|
80
|
+
accountLogStrings.push(` Secret Key: ${account.getSecretKey().toString()}\n`);
|
|
79
81
|
accountLogStrings.push(` Master nullifier public key: ${completeAddress.publicKeys.masterNullifierPublicKey.toString()}\n`);
|
|
80
82
|
accountLogStrings.push(` Master incoming viewing public key: ${completeAddress.publicKeys.masterIncomingViewingPublicKey.toString()}\n\n`);
|
|
81
83
|
accountLogStrings.push(` Master outgoing viewing public key: ${completeAddress.publicKeys.masterOutgoingViewingPublicKey.toString()}\n\n`);
|
|
@@ -218,7 +220,7 @@ export const printAztecStartHelpText = ()=>{
|
|
|
218
220
|
const { Crs, GrumpkinCrs } = await import('@aztec/bb.js');
|
|
219
221
|
await Promise.all([
|
|
220
222
|
Crs.new(2 ** 1, undefined, log),
|
|
221
|
-
GrumpkinCrs.new(2 ** 16
|
|
223
|
+
GrumpkinCrs.new(2 ** 16, undefined, log)
|
|
222
224
|
]);
|
|
223
225
|
}
|
|
224
226
|
}
|
|
@@ -230,8 +232,8 @@ export const printAztecStartHelpText = ()=>{
|
|
|
230
232
|
if (realProofs) {
|
|
231
233
|
const { Crs, GrumpkinCrs } = await import('@aztec/bb.js');
|
|
232
234
|
await Promise.all([
|
|
233
|
-
Crs.new(2 ** 25
|
|
234
|
-
GrumpkinCrs.new(2 ** 18
|
|
235
|
+
Crs.new(2 ** 25, undefined, log),
|
|
236
|
+
GrumpkinCrs.new(2 ** 18, undefined, log)
|
|
235
237
|
]);
|
|
236
238
|
}
|
|
237
239
|
}
|
|
@@ -322,3 +324,6 @@ export async function setupUpdateMonitor(autoUpdateMode, updatesLocation, follow
|
|
|
322
324
|
});
|
|
323
325
|
checker.start();
|
|
324
326
|
}
|
|
327
|
+
export function stringifyConfig(config) {
|
|
328
|
+
return Object.entries(config).map(([key, value])=>`${key}=${jsonStringify(value)}`).join(' ');
|
|
329
|
+
}
|
package/dest/examples/token.js
CHANGED
|
@@ -2,7 +2,7 @@ import { getInitialTestAccountsData } from '@aztec/accounts/testing';
|
|
|
2
2
|
import { createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
5
|
-
import {
|
|
5
|
+
import { EmbeddedWallet } from '@aztec/wallets/embedded';
|
|
6
6
|
const logger = createLogger('example:token');
|
|
7
7
|
const nodeUrl = 'http://localhost:8080';
|
|
8
8
|
const node = createAztecNodeClient(nodeUrl);
|
|
@@ -12,7 +12,7 @@ const TRANSFER_AMOUNT = 33n;
|
|
|
12
12
|
* Main function.
|
|
13
13
|
*/ async function main() {
|
|
14
14
|
logger.info('Running token contract test on HTTP interface.');
|
|
15
|
-
const wallet = await
|
|
15
|
+
const wallet = await EmbeddedWallet.create(node);
|
|
16
16
|
// During local network setup we deploy a few accounts. Below we add them to our wallet.
|
|
17
17
|
const [aliceInitialAccountData, bobInitialAccountData] = await getInitialTestAccountsData();
|
|
18
18
|
await wallet.createSchnorrAccount(aliceInitialAccountData.secret, aliceInitialAccountData.salt);
|
|
@@ -23,13 +23,13 @@ const TRANSFER_AMOUNT = 33n;
|
|
|
23
23
|
logger.info('Deploying Token...');
|
|
24
24
|
const token = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18).send({
|
|
25
25
|
from: alice
|
|
26
|
-
})
|
|
26
|
+
});
|
|
27
27
|
logger.info('Token deployed');
|
|
28
28
|
// Mint tokens to Alice
|
|
29
29
|
logger.info(`Minting ${ALICE_MINT_BALANCE} more coins to Alice...`);
|
|
30
30
|
await token.methods.mint_to_private(alice, ALICE_MINT_BALANCE).send({
|
|
31
31
|
from: alice
|
|
32
|
-
})
|
|
32
|
+
});
|
|
33
33
|
logger.info(`${ALICE_MINT_BALANCE} tokens were successfully minted by Alice and transferred to private`);
|
|
34
34
|
const balanceAfterMint = await token.methods.balance_of_private(alice).simulate({
|
|
35
35
|
from: alice
|
|
@@ -39,7 +39,7 @@ const TRANSFER_AMOUNT = 33n;
|
|
|
39
39
|
logger.info(`Transferring ${TRANSFER_AMOUNT} tokens from Alice to Bob...`);
|
|
40
40
|
await token.methods.transfer(bob, TRANSFER_AMOUNT).send({
|
|
41
41
|
from: alice
|
|
42
|
-
})
|
|
42
|
+
});
|
|
43
43
|
// Check the new balances
|
|
44
44
|
const aliceBalance = await token.methods.balance_of_private(alice).simulate({
|
|
45
45
|
from: alice
|
|
@@ -7,4 +7,4 @@ export declare function getBananaFPCAddress(initialAccounts: InitialAccountData[
|
|
|
7
7
|
export declare function setupBananaFPC(initialAccounts: InitialAccountData[], wallet: Wallet, log: LogFn): Promise<void>;
|
|
8
8
|
export declare function registerDeployedBananaCoinInWalletAndGetAddress(wallet: Wallet): Promise<AztecAddress>;
|
|
9
9
|
export declare function registerDeployedBananaFPCInWalletAndGetAddress(wallet: Wallet): Promise<AztecAddress>;
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuYW5hX2ZwYy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvYmFuYW5hX2ZwYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBOEIsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUF3QjNELHdCQUFzQixvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUseUJBRS9FO0FBV0Qsd0JBQXNCLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSx5QkFFOUU7QUFFRCx3QkFBc0IsY0FBYyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssaUJBa0JyRztBQUVELHdCQUFzQiwrQ0FBK0MsQ0FBQyxNQUFNLEVBQUUsTUFBTSx5QkFNbkY7QUFFRCx3QkFBc0IsOENBQThDLENBQUMsTUFBTSxFQUFFLE1BQU0seUJBTWxGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banana_fpc.d.ts","sourceRoot":"","sources":["../../src/local-network/banana_fpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAwB3D,wBAAsB,oBAAoB,CAAC,eAAe,EAAE,kBAAkB,EAAE,yBAE/E;AAWD,wBAAsB,mBAAmB,CAAC,eAAe,EAAE,kBAAkB,EAAE,yBAE9E;AAED,wBAAsB,cAAc,CAAC,eAAe,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"banana_fpc.d.ts","sourceRoot":"","sources":["../../src/local-network/banana_fpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAwB3D,wBAAsB,oBAAoB,CAAC,eAAe,EAAE,kBAAkB,EAAE,yBAE/E;AAWD,wBAAsB,mBAAmB,CAAC,eAAe,EAAE,kBAAkB,EAAE,yBAE9E;AAED,wBAAsB,cAAc,CAAC,eAAe,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,iBAkBrG;AAED,wBAAsB,+CAA+C,CAAC,MAAM,EAAE,MAAM,yBAMnF;AAED,wBAAsB,8CAA8C,CAAC,MAAM,EAAE,MAAM,yBAMlF"}
|
|
@@ -51,12 +51,12 @@ export async function setupBananaFPC(initialAccounts, wallet, log) {
|
|
|
51
51
|
from: admin,
|
|
52
52
|
contractAddressSalt: BANANA_COIN_SALT,
|
|
53
53
|
universalDeploy: true
|
|
54
|
-
})
|
|
54
|
+
}),
|
|
55
55
|
FPCContract.deploy(wallet, bananaCoinAddress, admin).send({
|
|
56
56
|
from: admin,
|
|
57
57
|
contractAddressSalt: BANANA_FPC_SALT,
|
|
58
58
|
universalDeploy: true
|
|
59
|
-
})
|
|
59
|
+
})
|
|
60
60
|
]);
|
|
61
61
|
log(`BananaCoin: ${bananaCoin.address}`);
|
|
62
62
|
log(`FPC: ${fpc.address}`);
|
|
@@ -6,6 +6,7 @@ import { type BlobClientInterface } from '@aztec/blob-client/client';
|
|
|
6
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
7
|
import type { LogFn } from '@aztec/foundation/log';
|
|
8
8
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
9
|
+
import type { ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
|
|
9
10
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
10
11
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
11
12
|
import { type Hex } from 'viem';
|
|
@@ -15,7 +16,6 @@ import { type Hex } from 'viem';
|
|
|
15
16
|
* @param hdAccount - Account for publishing L1 contracts
|
|
16
17
|
*/
|
|
17
18
|
export declare function deployContractsToL1(aztecNodeConfig: AztecNodeConfig, privateKey: Hex, opts?: {
|
|
18
|
-
assumeProvenThroughBlockNumber?: number;
|
|
19
19
|
genesisArchiveRoot?: Fr;
|
|
20
20
|
feeJuicePortalInitialBalance?: bigint;
|
|
21
21
|
}): Promise<{
|
|
@@ -39,7 +39,7 @@ export declare function deployContractsToL1(aztecNodeConfig: AztecNodeConfig, pr
|
|
|
39
39
|
dateGatedRelayerAddress?: EthAddress | undefined;
|
|
40
40
|
} & {
|
|
41
41
|
rollupAddress: EthAddress;
|
|
42
|
-
} & {
|
|
42
|
+
} & Pick<import("@aztec/ethereum/l1-contract-addresses").L1ContractAddresses, "rollupAddress"> & {
|
|
43
43
|
rollupAddress: EthAddress;
|
|
44
44
|
}>;
|
|
45
45
|
/** Local network settings. */
|
|
@@ -66,7 +66,8 @@ export declare function createAztecNode(config?: Partial<AztecNodeConfig>, deps?
|
|
|
66
66
|
telemetry?: TelemetryClient;
|
|
67
67
|
blobClient?: BlobClientInterface;
|
|
68
68
|
dateProvider?: DateProvider;
|
|
69
|
+
proverBroker?: ProvingJobBroker;
|
|
69
70
|
}, options?: {
|
|
70
71
|
prefilledPublicData?: PublicDataTreeLeaf[];
|
|
71
72
|
}): Promise<AztecNodeService>;
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQVN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUl6RSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBS2pDLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBMkQsTUFBTSxNQUFNLENBQUM7QUFlekY7Ozs7R0FJRztBQUNILHdCQUFzQixtQkFBbUIsQ0FDdkMsZUFBZSxFQUFFLGVBQWUsRUFDaEMsVUFBVSxFQUFFLEdBQUcsRUFDZixJQUFJLEdBQUU7SUFDSixrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4Qiw0QkFBNEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlA7QUFFRCw4QkFBOEI7QUFDOUIsTUFBTSxNQUFNLGtCQUFrQixHQUFHLGVBQWUsR0FBRztJQUNqRCwwREFBMEQ7SUFDMUQsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQiw2REFBNkQ7SUFDN0QsWUFBWSxFQUFFLE9BQU8sQ0FBQztDQUN2QixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILHdCQUFzQixrQkFBa0IsQ0FBQyxNQUFNLHlDQUFrQyxFQUFFLE9BQU8sRUFBRSxLQUFLOzs7R0FnSmhHO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLGVBQWUsQ0FDbkMsTUFBTSxHQUFFLE9BQU8sQ0FBQyxlQUFlLENBQU0sRUFDckMsSUFBSSxHQUFFO0lBQ0osU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQzVCLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixDQUFDO0lBQ2pDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQztJQUM1QixZQUFZLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztDQUM1QixFQUNOLE9BQU8sR0FBRTtJQUFFLG1CQUFtQixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQTtDQUFPLDZCQWU3RCJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,2BAA2B,CAAC;AASvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,2BAA2B,CAAC;AASvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AAIzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,KAAK,GAAG,EAA2D,MAAM,MAAM,CAAC;AAezF;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,GAAG,EACf,IAAI,GAAE;IACJ,kBAAkB,CAAC,EAAE,EAAE,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAC;CAClC;;;;;;;;;;;;;;;;;;;;;;;GAoBP;AAED,8BAA8B;AAC9B,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,yCAAkC,EAAE,OAAO,EAAE,KAAK;;;GAgJhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAC5B,EACN,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAO,6BAe7D"}
|
|
@@ -17,8 +17,10 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
17
17
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
18
18
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
19
19
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
20
|
+
import { SequencerState } from '@aztec/sequencer-client';
|
|
20
21
|
import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
21
|
-
import {
|
|
22
|
+
import { EmbeddedWallet } from '@aztec/wallets/embedded';
|
|
23
|
+
import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
|
|
22
24
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
23
25
|
import { createPublicClient, fallback, http as httpViemTransport } from 'viem';
|
|
24
26
|
import { mnemonicToAccount, privateKeyToAddress } from 'viem/accounts';
|
|
@@ -26,6 +28,7 @@ import { foundry } from 'viem/chains';
|
|
|
26
28
|
import { createAccountLogs } from '../cli/util.js';
|
|
27
29
|
import { DefaultMnemonic } from '../mnemonic.js';
|
|
28
30
|
import { AnvilTestWatcher } from '../testing/anvil_test_watcher.js';
|
|
31
|
+
import { EpochTestSettler } from '../testing/epoch_test_settler.js';
|
|
29
32
|
import { getBananaFPCAddress, setupBananaFPC } from './banana_fpc.js';
|
|
30
33
|
import { getSponsoredFPCAddress } from './sponsored_fpc.js';
|
|
31
34
|
const logger = createLogger('local-network');
|
|
@@ -69,9 +72,9 @@ const localAnvil = foundry;
|
|
|
69
72
|
...config
|
|
70
73
|
};
|
|
71
74
|
const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic);
|
|
72
|
-
if (aztecNodeConfig.
|
|
75
|
+
if (aztecNodeConfig.sequencerPublisherPrivateKeys == undefined || !aztecNodeConfig.sequencerPublisherPrivateKeys.length || aztecNodeConfig.sequencerPublisherPrivateKeys[0].getValue() === NULL_KEY) {
|
|
73
76
|
const privKey = hdAccount.getHdKey().privateKey;
|
|
74
|
-
aztecNodeConfig.
|
|
77
|
+
aztecNodeConfig.sequencerPublisherPrivateKeys = [
|
|
75
78
|
new SecretValue(`0x${Buffer.from(privKey).toString('hex')}`)
|
|
76
79
|
];
|
|
77
80
|
}
|
|
@@ -101,14 +104,15 @@ const localAnvil = foundry;
|
|
|
101
104
|
sponsoredFPC
|
|
102
105
|
] : [];
|
|
103
106
|
const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses);
|
|
104
|
-
let watcher = undefined;
|
|
105
107
|
const dateProvider = new TestDateProvider();
|
|
108
|
+
let cheatcodes;
|
|
109
|
+
let rollupAddress;
|
|
110
|
+
let watcher;
|
|
106
111
|
if (!aztecNodeConfig.p2pEnabled) {
|
|
107
|
-
|
|
108
|
-
assumeProvenThroughBlockNumber: Number.MAX_SAFE_INTEGER,
|
|
112
|
+
({ rollupAddress } = await deployContractsToL1(aztecNodeConfig, aztecNodeConfig.validatorPrivateKeys.getValue()[0], {
|
|
109
113
|
genesisArchiveRoot,
|
|
110
114
|
feeJuicePortalInitialBalance: fundingNeeded
|
|
111
|
-
});
|
|
115
|
+
}));
|
|
112
116
|
const chain = aztecNodeConfig.l1RpcUrls.length > 0 ? createEthereumChain([
|
|
113
117
|
l1RpcUrl
|
|
114
118
|
], aztecNodeConfig.l1ChainId) : {
|
|
@@ -120,10 +124,12 @@ const localAnvil = foundry;
|
|
|
120
124
|
httpViemTransport(l1RpcUrl)
|
|
121
125
|
])
|
|
122
126
|
});
|
|
123
|
-
|
|
127
|
+
cheatcodes = new EthCheatCodes([
|
|
124
128
|
l1RpcUrl
|
|
125
|
-
], dateProvider)
|
|
129
|
+
], dateProvider);
|
|
130
|
+
watcher = new AnvilTestWatcher(cheatcodes, rollupAddress, publicClient, dateProvider);
|
|
126
131
|
watcher.setisLocalNetwork(true);
|
|
132
|
+
watcher.setIsMarkingAsProven(false); // Do not mark as proven in the watcher. It's marked in the epochTestSettler after the out hash is set.
|
|
127
133
|
await watcher.start();
|
|
128
134
|
}
|
|
129
135
|
const telemetry = await initTelemetryClient(getTelemetryClientConfig());
|
|
@@ -136,18 +142,37 @@ const localAnvil = foundry;
|
|
|
136
142
|
}, {
|
|
137
143
|
prefilledPublicData
|
|
138
144
|
});
|
|
145
|
+
// Now that the node is up, let the watcher check for pending txs so it can skip unfilled slots faster when
|
|
146
|
+
// transactions are waiting in the mempool. Also let it check if the sequencer is actively building, to avoid
|
|
147
|
+
// warping time out from under an in-progress block.
|
|
148
|
+
watcher?.setGetPendingTxCount(()=>node.getPendingTxCount());
|
|
149
|
+
const sequencer = node.getSequencer()?.getSequencer();
|
|
150
|
+
if (sequencer) {
|
|
151
|
+
const idleStates = new Set([
|
|
152
|
+
SequencerState.STOPPED,
|
|
153
|
+
SequencerState.STOPPING,
|
|
154
|
+
SequencerState.IDLE,
|
|
155
|
+
SequencerState.SYNCHRONIZING
|
|
156
|
+
]);
|
|
157
|
+
watcher?.setIsSequencerBuilding(()=>!idleStates.has(sequencer.getState()));
|
|
158
|
+
}
|
|
159
|
+
let epochTestSettler;
|
|
160
|
+
if (!aztecNodeConfig.p2pEnabled) {
|
|
161
|
+
epochTestSettler = new EpochTestSettler(cheatcodes, rollupAddress, node.getBlockSource(), logger.createChild('epoch-settler'), {
|
|
162
|
+
pollingIntervalMs: 200
|
|
163
|
+
});
|
|
164
|
+
await epochTestSettler.start();
|
|
165
|
+
}
|
|
139
166
|
if (initialAccounts.length) {
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
167
|
+
const wallet = await EmbeddedWallet.create(node, {
|
|
168
|
+
pxeConfig: {
|
|
169
|
+
proverEnabled: aztecNodeConfig.realProofs
|
|
170
|
+
},
|
|
171
|
+
ephemeral: true
|
|
172
|
+
});
|
|
144
173
|
userLog('Setting up funded test accounts...');
|
|
145
|
-
const accountManagers = await deployFundedSchnorrAccounts(wallet,
|
|
146
|
-
const
|
|
147
|
-
account: manager,
|
|
148
|
-
secretKey: initialAccounts[i].secret
|
|
149
|
-
}));
|
|
150
|
-
const accLogs = await createAccountLogs(accountsWithSecrets, wallet);
|
|
174
|
+
const accountManagers = await deployFundedSchnorrAccounts(wallet, initialAccounts);
|
|
175
|
+
const accLogs = await createAccountLogs(accountManagers, wallet);
|
|
151
176
|
userLog(accLogs.join(''));
|
|
152
177
|
await setupBananaFPC(initialAccounts, wallet, userLog);
|
|
153
178
|
userLog(`SponsoredFPC: ${await getSponsoredFPCAddress()}`);
|
|
@@ -157,6 +182,7 @@ const localAnvil = foundry;
|
|
|
157
182
|
const stop = async ()=>{
|
|
158
183
|
await node.stop();
|
|
159
184
|
await watcher?.stop();
|
|
185
|
+
await epochTestSettler?.stop();
|
|
160
186
|
};
|
|
161
187
|
return {
|
|
162
188
|
node,
|
|
@@ -177,6 +203,11 @@ const localAnvil = foundry;
|
|
|
177
203
|
...config.l1Contracts
|
|
178
204
|
}
|
|
179
205
|
};
|
|
180
|
-
const node = await AztecNodeService.createAndSync(aztecNodeConfig,
|
|
206
|
+
const node = await AztecNodeService.createAndSync(aztecNodeConfig, {
|
|
207
|
+
...deps,
|
|
208
|
+
proverNodeDeps: {
|
|
209
|
+
broker: deps.proverBroker
|
|
210
|
+
}
|
|
211
|
+
}, options);
|
|
181
212
|
return node;
|
|
182
213
|
}
|
|
@@ -21,14 +21,22 @@ export declare class AnvilTestWatcher {
|
|
|
21
21
|
private markingAsProvenRunningPromise?;
|
|
22
22
|
private logger;
|
|
23
23
|
private isMarkingAsProven;
|
|
24
|
+
private getPendingTxCount?;
|
|
25
|
+
private isSequencerBuilding?;
|
|
26
|
+
private unfilledSlotFirstSeen?;
|
|
24
27
|
constructor(cheatcodes: EthCheatCodes, rollupAddress: EthAddress, l1Client: ViemClient, dateProvider?: TestDateProvider | undefined);
|
|
25
28
|
setIsMarkingAsProven(isMarkingAsProven: boolean): void;
|
|
26
29
|
setisLocalNetwork(isLocalNetwork: boolean): void;
|
|
30
|
+
/** Sets a callback to check for pending txs, used to skip unfilled slots faster when txs are waiting. */
|
|
31
|
+
setGetPendingTxCount(fn: () => Promise<number>): void;
|
|
32
|
+
/** Sets a callback to check if the sequencer is actively building, to avoid warping while it works. */
|
|
33
|
+
setIsSequencerBuilding(fn: () => boolean): void;
|
|
27
34
|
start(): Promise<void>;
|
|
28
35
|
stop(): Promise<void>;
|
|
29
36
|
trigger(): Promise<void>;
|
|
30
37
|
markAsProven(): Promise<void>;
|
|
31
38
|
syncDateProviderToL1IfBehind(): Promise<void>;
|
|
32
39
|
warpTimeIfNeeded(): Promise<void>;
|
|
40
|
+
private warpToTimestamp;
|
|
33
41
|
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW52aWxfdGVzdF93YXRjaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9hbnZpbF90ZXN0X3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hFOzs7Ozs7R0FNRztBQUNILHFCQUFhLGdCQUFnQjtJQXlCekIsT0FBTyxDQUFDLFVBQVU7SUFHbEIsT0FBTyxDQUFDLFlBQVksQ0FBQztJQTNCdkIsT0FBTyxDQUFDLGNBQWMsQ0FBa0I7SUFFeEMsT0FBTyxDQUFDLE1BQU0sQ0FBc0Q7SUFDcEUsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQUMsY0FBYyxDQUFVO0lBRWhDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFpQjtJQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBaUI7SUFDakQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQWlCO0lBRXZELE9BQU8sQ0FBQyxNQUFNLENBQWlEO0lBRS9ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUTtJQUdqQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBd0I7SUFHbEQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQWdCO0lBRzVDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFxQztJQUVuRSxZQUNVLFVBQVUsRUFBRSxhQUFhLEVBQ2pDLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLFFBQVEsRUFBRSxVQUFVLEVBQ1osWUFBWSxDQUFDLDhCQUFrQixFQWF4QztJQUVELG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sUUFHOUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxRQUV4QztJQUVELHlHQUF5RztJQUN6RyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBRTdDO0lBRUQsdUdBQXVHO0lBQ3ZHLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxNQUFNLE9BQU8sUUFFdkM7SUFFSyxLQUFLLGtCQXlCVjtJQUVLLElBQUksa0JBSVQ7SUFFSyxPQUFPLGtCQUlaO0lBRUssWUFBWSxrQkFLakI7SUFFSyw0QkFBNEIsa0JBZWpDO0lBRUssZ0JBQWdCLGtCQXlEckI7WUFFYSxlQUFlO0NBTzlCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anvil_test_watcher.d.ts","sourceRoot":"","sources":["../../src/testing/anvil_test_watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"anvil_test_watcher.d.ts","sourceRoot":"","sources":["../../src/testing/anvil_test_watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAyBzB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,YAAY,CAAC;IA3BvB,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,uBAAuB,CAAC,CAAiB;IACjD,OAAO,CAAC,6BAA6B,CAAC,CAAiB;IAEvD,OAAO,CAAC,MAAM,CAAiD;IAE/D,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,OAAO,CAAC,iBAAiB,CAAC,CAAwB;IAGlD,OAAO,CAAC,mBAAmB,CAAC,CAAgB;IAG5C,OAAO,CAAC,qBAAqB,CAAC,CAAqC;IAEnE,YACU,UAAU,EAAE,aAAa,EACjC,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,UAAU,EACZ,YAAY,CAAC,8BAAkB,EAaxC;IAED,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,QAG9C;IAED,iBAAiB,CAAC,cAAc,EAAE,OAAO,QAExC;IAED,yGAAyG;IACzG,oBAAoB,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,QAE7C;IAED,uGAAuG;IACvG,sBAAsB,CAAC,EAAE,EAAE,MAAM,OAAO,QAEvC;IAEK,KAAK,kBAyBV;IAEK,IAAI,kBAIT;IAEK,OAAO,kBAIZ;IAEK,YAAY,kBAKjB;IAEK,4BAA4B,kBAejC;IAEK,gBAAgB,kBAyDrB;YAEa,eAAe;CAO9B"}
|
|
@@ -22,6 +22,12 @@ import { getAddress, getContract } from 'viem';
|
|
|
22
22
|
markingAsProvenRunningPromise;
|
|
23
23
|
logger;
|
|
24
24
|
isMarkingAsProven;
|
|
25
|
+
// Optional callback to check if there are pending txs in the mempool.
|
|
26
|
+
getPendingTxCount;
|
|
27
|
+
// Optional callback to check if the sequencer is actively building a block.
|
|
28
|
+
isSequencerBuilding;
|
|
29
|
+
// Tracks when we first observed the current unfilled slot with pending txs (real wall time).
|
|
30
|
+
unfilledSlotFirstSeen;
|
|
25
31
|
constructor(cheatcodes, rollupAddress, l1Client, dateProvider){
|
|
26
32
|
this.cheatcodes = cheatcodes;
|
|
27
33
|
this.dateProvider = dateProvider;
|
|
@@ -45,6 +51,12 @@ import { getAddress, getContract } from 'viem';
|
|
|
45
51
|
setisLocalNetwork(isLocalNetwork) {
|
|
46
52
|
this.isLocalNetwork = isLocalNetwork;
|
|
47
53
|
}
|
|
54
|
+
/** Sets a callback to check for pending txs, used to skip unfilled slots faster when txs are waiting. */ setGetPendingTxCount(fn) {
|
|
55
|
+
this.getPendingTxCount = fn;
|
|
56
|
+
}
|
|
57
|
+
/** Sets a callback to check if the sequencer is actively building, to avoid warping while it works. */ setIsSequencerBuilding(fn) {
|
|
58
|
+
this.isSequencerBuilding = fn;
|
|
59
|
+
}
|
|
48
60
|
async start() {
|
|
49
61
|
if (this.filledRunningPromise) {
|
|
50
62
|
throw new Error('Watcher already watching for filled slot');
|
|
@@ -111,14 +123,8 @@ import { getAddress, getContract } from 'viem';
|
|
|
111
123
|
BigInt(nextSlot)
|
|
112
124
|
]));
|
|
113
125
|
if (BigInt(currentSlot) === checkpointLog.slotNumber) {
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
await this.cheatcodes.warp(nextSlotTimestamp, {
|
|
117
|
-
resetBlockInterval: true
|
|
118
|
-
});
|
|
119
|
-
} catch (e) {
|
|
120
|
-
this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
|
|
121
|
-
}
|
|
126
|
+
// The current slot has been filled, we should jump to the next slot.
|
|
127
|
+
await this.warpToTimestamp(nextSlotTimestamp);
|
|
122
128
|
this.logger.info(`Slot ${currentSlot} was filled, jumped to next slot`);
|
|
123
129
|
return;
|
|
124
130
|
}
|
|
@@ -126,19 +132,50 @@ import { getAddress, getContract } from 'viem';
|
|
|
126
132
|
if (!this.isLocalNetwork) {
|
|
127
133
|
return;
|
|
128
134
|
}
|
|
135
|
+
// If there are pending txs and the sequencer missed them, warp quickly (after a 2s real-time debounce) so the
|
|
136
|
+
// sequencer can retry in the next slot. Without this, we'd have to wait a full real-time slot duration (~36s) for
|
|
137
|
+
// the dateProvider to catch up to the next slot timestamp. We skip the warp if the sequencer is actively building
|
|
138
|
+
// to avoid invalidating its in-progress work.
|
|
139
|
+
if (this.getPendingTxCount) {
|
|
140
|
+
const pendingTxs = await this.getPendingTxCount();
|
|
141
|
+
if (pendingTxs > 0) {
|
|
142
|
+
if (this.isSequencerBuilding?.()) {
|
|
143
|
+
this.unfilledSlotFirstSeen = undefined;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const realNow = Date.now();
|
|
147
|
+
if (!this.unfilledSlotFirstSeen || this.unfilledSlotFirstSeen.slot !== currentSlot) {
|
|
148
|
+
this.unfilledSlotFirstSeen = {
|
|
149
|
+
slot: currentSlot,
|
|
150
|
+
realTime: realNow
|
|
151
|
+
};
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (realNow - this.unfilledSlotFirstSeen.realTime > 2000) {
|
|
155
|
+
await this.warpToTimestamp(nextSlotTimestamp);
|
|
156
|
+
this.unfilledSlotFirstSeen = undefined;
|
|
157
|
+
this.logger.info(`Slot ${currentSlot} was missed with pending txs, jumped to next slot`);
|
|
158
|
+
}
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Fallback: warp when the dateProvider time has passed the next slot timestamp.
|
|
129
163
|
const currentTimestamp = this.dateProvider?.now() ?? Date.now();
|
|
130
164
|
if (currentTimestamp > nextSlotTimestamp * 1000) {
|
|
131
|
-
|
|
132
|
-
await this.cheatcodes.warp(nextSlotTimestamp, {
|
|
133
|
-
resetBlockInterval: true
|
|
134
|
-
});
|
|
135
|
-
} catch (e) {
|
|
136
|
-
this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
|
|
137
|
-
}
|
|
165
|
+
await this.warpToTimestamp(nextSlotTimestamp);
|
|
138
166
|
this.logger.info(`Slot ${currentSlot} was missed, jumped to next slot`);
|
|
139
167
|
}
|
|
140
168
|
} catch {
|
|
141
169
|
this.logger.error('mineIfSlotFilled failed');
|
|
142
170
|
}
|
|
143
171
|
}
|
|
172
|
+
async warpToTimestamp(timestamp) {
|
|
173
|
+
try {
|
|
174
|
+
await this.cheatcodes.warp(timestamp, {
|
|
175
|
+
resetBlockInterval: true
|
|
176
|
+
});
|
|
177
|
+
} catch (e) {
|
|
178
|
+
this.logger.error(`Failed to warp to timestamp ${timestamp}: ${e}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
144
181
|
}
|