@aztec/aztec 0.0.1-commit.03f7ef2 → 0.0.1-commit.0b941701
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 +2 -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 +6 -1
- 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 +4 -2
- package/dest/cli/cli.d.ts +1 -1
- package/dest/cli/cli.d.ts.map +1 -1
- package/dest/cli/cli.js +5 -37
- 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/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_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 +1 -1
- package/dest/cli/util.js +1 -1
- package/dest/examples/token.js +3 -3
- 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 +1 -2
- package/dest/local-network/local-network.d.ts.map +1 -1
- package/dest/local-network/local-network.js +19 -7
- 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 +35 -34
- package/scripts/aztec.sh +14 -7
- package/src/bin/index.ts +2 -0
- package/src/cli/aztec_start_action.ts +5 -0
- package/src/cli/aztec_start_options.ts +3 -1
- package/src/cli/cli.ts +5 -37
- package/src/cli/cmds/migrate_ha_db.ts +43 -0
- package/src/cli/cmds/start_archiver.ts +2 -13
- package/src/cli/cmds/start_prover_agent.ts +1 -9
- package/src/cli/util.ts +1 -1
- package/src/examples/token.ts +3 -5
- package/src/local-network/banana_fpc.ts +10 -6
- package/src/local-network/local-network.ts +31 -13
- package/src/testing/epoch_test_settler.ts +71 -0
- package/src/testing/index.ts +1 -0
package/dest/bin/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import { injectCommands as injectValidatorKeysCommands } from '@aztec/cli/valida
|
|
|
12
12
|
import { getActiveNetworkName } from '@aztec/foundation/config';
|
|
13
13
|
import { createConsoleLogger, createLogger } from '@aztec/foundation/log';
|
|
14
14
|
import { Command } from 'commander';
|
|
15
|
+
import { injectMigrateCommand } from '../cli/cmds/migrate_ha_db.js';
|
|
15
16
|
import { injectAztecCommands } from '../cli/index.js';
|
|
16
17
|
import { getCliVersion } from '../cli/release_version.js';
|
|
17
18
|
const NETWORK_FLAG = 'network';
|
|
@@ -44,6 +45,7 @@ const debugLogger = createLogger('cli');
|
|
|
44
45
|
program = injectAztecNodeCommands(program, userLog, debugLogger);
|
|
45
46
|
program = injectMiscCommands(program, userLog);
|
|
46
47
|
program = injectValidatorKeysCommands(program, userLog);
|
|
48
|
+
program = injectMigrateCommand(program, userLog);
|
|
47
49
|
await program.parseAsync(process.argv);
|
|
48
50
|
}
|
|
49
51
|
main().catch((err)=>{
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
2
2
|
export declare function aztecStart(options: any, userLog: LogFn, debugLogger: Logger): Promise<void>;
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfc3RhcnRfYWN0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2F6dGVjX3N0YXJ0X2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFZM0Qsd0JBQXNCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBOEZqRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aztec_start_action.d.ts","sourceRoot":"","sources":["../../src/cli/aztec_start_action.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAY3D,wBAAsB,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"aztec_start_action.d.ts","sourceRoot":"","sources":["../../src/cli/aztec_start_action.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAY3D,wBAAsB,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBA8FjF"}
|
|
@@ -23,7 +23,12 @@ export async function aztecStart(options, userLog, debugLogger) {
|
|
|
23
23
|
l1Mnemonic: localNetwork.l1Mnemonic,
|
|
24
24
|
l1RpcUrls: options.l1RpcUrls,
|
|
25
25
|
testAccounts: localNetwork.testAccounts,
|
|
26
|
-
realProofs: false
|
|
26
|
+
realProofs: false,
|
|
27
|
+
// Setting the epoch duration to 4 by default for local network. This allows the epoch to be "proven" faster, so
|
|
28
|
+
// the users can consume out hash without having to wait for a long time.
|
|
29
|
+
// Note: We are not proving anything in the local network (realProofs == false). But in `createLocalNetwork`,
|
|
30
|
+
// the EpochTestSettler will set the out hash to the outbox when an epoch is complete.
|
|
31
|
+
aztecEpochDuration: 4
|
|
27
32
|
}, userLog);
|
|
28
33
|
// Start Node and PXE JSON-RPC server
|
|
29
34
|
signalHandlers.push(stop);
|
|
@@ -14,4 +14,4 @@ export declare const NETWORK_FLAG = "network";
|
|
|
14
14
|
export declare const aztecStartOptions: {
|
|
15
15
|
[key: string]: AztecStartOption[];
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfc3RhcnRfb3B0aW9ucy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9henRlY19zdGFydF9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxNQUFNLEVBSVosTUFBTSwwQkFBMEIsQ0FBQztBQWVsQyxNQUFNLFdBQVcsZ0JBQWdCO0lBQy9CLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLFlBQVksRUFBRSxHQUFHLENBQUM7SUFDbEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLE1BQU0sQ0FBQztJQUNwQyxHQUFHLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUN4QixRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNwQixRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxDQUFDO0NBQ2pDO0FBRUQsZUFBTyxNQUFNLFVBQVUsMEZBb0J0QixDQUFDO0FBdUJGLGVBQU8sTUFBTSxnQkFBZ0IsVUFZNUIsQ0FBQztBQUVGLGVBQU8sTUFBTSxZQUFZLFlBQVksQ0FBQztBQUd0QyxlQUFPLE1BQU0saUJBQWlCLEVBQUU7SUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQTtDQW1ObEUsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aztec_start_options.d.ts","sourceRoot":"","sources":["../../src/cli/aztec_start_options.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,MAAM,EAIZ,MAAM,0BAA0B,CAAC;AAelC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,GAAG,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;IACpC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;CACjC;AAED,eAAO,MAAM,UAAU,0FAoBtB,CAAC;AAuBF,eAAO,MAAM,gBAAgB,UAY5B,CAAC;AAEF,eAAO,MAAM,YAAY,YAAY,CAAC;AAGtC,eAAO,MAAM,iBAAiB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"aztec_start_options.d.ts","sourceRoot":"","sources":["../../src/cli/aztec_start_options.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,MAAM,EAIZ,MAAM,0BAA0B,CAAC;AAelC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,GAAG,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;IACpC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;CACjC;AAED,eAAO,MAAM,UAAU,0FAoBtB,CAAC;AAuBF,eAAO,MAAM,gBAAgB,UAY5B,CAAC;AAEF,eAAO,MAAM,YAAY,YAAY,CAAC;AAGtC,eAAO,MAAM,iBAAiB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;CAmNlE,CAAC"}
|
|
@@ -13,7 +13,7 @@ import { proverAgentConfigMappings, proverBrokerConfigMappings } from '@aztec/pr
|
|
|
13
13
|
import { proverNodeConfigMappings } from '@aztec/prover-node/config';
|
|
14
14
|
import { allPxeConfigMappings } from '@aztec/pxe/config';
|
|
15
15
|
import { sequencerClientConfigMappings } from '@aztec/sequencer-client/config';
|
|
16
|
-
import { chainConfigMappings } from '@aztec/stdlib/config';
|
|
16
|
+
import { chainConfigMappings, nodeRpcConfigMappings } from '@aztec/stdlib/config';
|
|
17
17
|
import { telemetryClientConfigMappings } from '@aztec/telemetry-client/config';
|
|
18
18
|
import { worldStateConfigMappings } from '@aztec/world-state/config';
|
|
19
19
|
import { DefaultMnemonic } from '../mnemonic.js';
|
|
@@ -116,7 +116,9 @@ export const aztecStartOptions = {
|
|
|
116
116
|
description: 'Prefix for API routes on any service that is started',
|
|
117
117
|
defaultValue: '',
|
|
118
118
|
env: 'API_PREFIX'
|
|
119
|
-
}
|
|
119
|
+
},
|
|
120
|
+
configToFlag('--rpcMaxBatchSize', nodeRpcConfigMappings.rpcMaxBatchSize),
|
|
121
|
+
configToFlag('--rpcMaxBodySize', nodeRpcConfigMappings.rpcMaxBodySize)
|
|
120
122
|
],
|
|
121
123
|
ETHEREUM: [
|
|
122
124
|
configToFlag('--l1-chain-id', l1ReaderConfigMappings.l1ChainId),
|
package/dest/cli/cli.d.ts
CHANGED
|
@@ -6,4 +6,4 @@ import { Command } from 'commander';
|
|
|
6
6
|
* @param debugLogger - logger for logging debug messages.
|
|
7
7
|
*/
|
|
8
8
|
export declare function injectAztecCommands(program: Command, userLog: LogFn, debugLogger: Logger): Command;
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUtwQzs7OztHQUlHO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0E0Q2xHIn0=
|
package/dest/cli/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CA4ClG"}
|
package/dest/cli/cli.js
CHANGED
|
@@ -22,44 +22,12 @@ import { addOptions, printAztecStartHelpText } from './util.js';
|
|
|
22
22
|
});
|
|
23
23
|
if (process.env.AZTEC_SHELL_WRAPPER) {
|
|
24
24
|
program.addHelpText('after', `
|
|
25
|
+
Additional commands:
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
--name <name> Name of the package
|
|
31
|
-
--contract Use a contract template (default)
|
|
32
|
-
--lib Use a library template
|
|
33
|
-
--bin Use a binary template
|
|
34
|
-
Examples:
|
|
35
|
-
$ aztec init # creates a contract project in current directory
|
|
36
|
-
$ aztec init --lib # creates a library project
|
|
37
|
-
|
|
38
|
-
new <path> [options]: creates a new Noir project in a new directory
|
|
39
|
-
Options:
|
|
40
|
-
--name <name> Name of the package
|
|
41
|
-
--contract Use a contract template (default)
|
|
42
|
-
--lib Use a library template
|
|
43
|
-
--bin Use a binary template
|
|
44
|
-
Examples:
|
|
45
|
-
$ aztec new my-project # creates a contract project in ./my-project
|
|
46
|
-
$ aztec new my-lib --lib # creates a library project in ./my-lib
|
|
47
|
-
|
|
48
|
-
compile [options]: compiles Aztec Noir contracts
|
|
49
|
-
Compiles contracts with nargo compile and then postprocesses them to generate Aztec-specific artifacts including:
|
|
50
|
-
- Transpiled contract artifacts
|
|
51
|
-
- Verification keys
|
|
52
|
-
The compiled contracts will be placed in the target/ directory by default.
|
|
53
|
-
Supports standard nargo compile options.
|
|
54
|
-
|
|
55
|
-
test [options]: starts a dockerized TXE node via
|
|
56
|
-
$ aztec start --txe
|
|
57
|
-
then runs
|
|
58
|
-
$ aztec test --silence-warnings --oracle-resolver=<TXE_ADDRESS> [options]
|
|
59
|
-
|
|
60
|
-
preload-crs: Downloads and caches the Common Reference String (CRS) data required for zero-knowledge proofs.
|
|
61
|
-
Example:
|
|
62
|
-
$ aztec preload-crs # preloads CRS data
|
|
27
|
+
init [folder] [options] creates a new Aztec Noir project.
|
|
28
|
+
new <path> [options] creates a new Aztec Noir project in a new directory.
|
|
29
|
+
compile [options] compiles Aztec Noir contracts.
|
|
30
|
+
test [options] starts a TXE and runs "nargo test" using it as the oracle resolver.
|
|
63
31
|
`);
|
|
64
32
|
}
|
|
65
33
|
program.command('preload-crs').description('Preload the points data needed for proving and verifying').action(async (options)=>{
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
export declare function injectMigrateCommand(program: Command, log: (msg: string) => void): Command;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0ZV9oYV9kYi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL21pZ3JhdGVfaGFfZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpDLHdCQUFnQixvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssSUFBSSxHQUFHLE9BQU8sQ0FzQzFGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate_ha_db.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/migrate_ha_db.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAsC1F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { runMigrations } from '@aztec/validator-ha-signer/migrations';
|
|
2
|
+
export function injectMigrateCommand(program, log) {
|
|
3
|
+
const migrateCommand = program.command('migrate-ha-db').description('Run validator-ha-signer database migrations');
|
|
4
|
+
migrateCommand.command('up').description('Apply pending migrations').requiredOption('--database-url <string>', 'PostgreSQL connection string', process.env.DATABASE_URL).option('--verbose', 'Enable verbose output', false).action(async (options)=>{
|
|
5
|
+
const migrations = await runMigrations(options.databaseUrl, {
|
|
6
|
+
direction: 'up',
|
|
7
|
+
verbose: options.verbose
|
|
8
|
+
});
|
|
9
|
+
if (migrations.length > 0) {
|
|
10
|
+
log(`Applied migrations: ${migrations.join(', ')}`);
|
|
11
|
+
} else {
|
|
12
|
+
log('No migrations to apply - schema is up to date');
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
migrateCommand.command('down').description('Rollback the last migration').requiredOption('--database-url <string>', 'PostgreSQL connection string', process.env.DATABASE_URL).option('--verbose', 'Enable verbose output', false).action(async (options)=>{
|
|
16
|
+
const migrations = await runMigrations(options.databaseUrl, {
|
|
17
|
+
direction: 'down',
|
|
18
|
+
verbose: options.verbose
|
|
19
|
+
});
|
|
20
|
+
if (migrations.length > 0) {
|
|
21
|
+
log(`Rolled back migrations: ${migrations.join(', ')}`);
|
|
22
|
+
} else {
|
|
23
|
+
log('No migrations to rollback');
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return program;
|
|
27
|
+
}
|
|
@@ -6,4 +6,4 @@ export type { ArchiverConfig, DataStoreConfig };
|
|
|
6
6
|
export declare function startArchiver(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers): Promise<{
|
|
7
7
|
config: ArchiverConfig & DataStoreConfig;
|
|
8
8
|
}>;
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfYXJjaGl2ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvY21kcy9zdGFydF9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQW9FLE1BQU0saUJBQWlCLENBQUM7QUFJeEgsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFNbEYsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsQ0FBQztBQUVoRCxvQ0FBb0M7QUFDcEMsd0JBQXNCLGFBQWEsQ0FDakMsT0FBTyxFQUFFLEdBQUcsRUFDWixjQUFjLEVBQUUsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQ3ZDLFFBQVEsRUFBRSxxQkFBcUIsR0FDOUIsT0FBTyxDQUFDO0lBQUUsTUFBTSxFQUFFLGNBQWMsR0FBRyxlQUFlLENBQUE7Q0FBRSxDQUFDLENBK0J2RCJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start_archiver.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"start_archiver.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAoE,MAAM,iBAAiB,CAAC;AAIxH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAMlF,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAEhD,oCAAoC;AACpC,wBAAsB,aAAa,CACjC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,GAAG,eAAe,CAAA;CAAE,CAAC,CA+BvD"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { archiverConfigMappings, createArchiver, getArchiverConfigFromEnv } from '@aztec/archiver';
|
|
2
2
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
3
3
|
import { blobClientConfigMapping, createBlobClient } from '@aztec/blob-client/client';
|
|
4
4
|
import { getL1Config } from '@aztec/cli/config';
|
|
5
5
|
import { dataConfigMappings } from '@aztec/kv-store/config';
|
|
6
|
-
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
7
6
|
import { ArchiverApiSchema } from '@aztec/stdlib/interfaces/server';
|
|
8
7
|
import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
9
8
|
import { extractRelevantOptions } from '../util.js';
|
|
@@ -28,17 +27,16 @@ import { extractRelevantOptions } from '../util.js';
|
|
|
28
27
|
...archiverConfig,
|
|
29
28
|
...l1Config
|
|
30
29
|
};
|
|
31
|
-
const storeLog = createLogger('archiver:lmdb');
|
|
32
|
-
const store = await createStore('archiver', KVArchiverDataStore.SCHEMA_VERSION, archiverConfig, storeLog);
|
|
33
|
-
const archiverStore = new KVArchiverDataStore(store, archiverConfig.maxLogs);
|
|
34
30
|
const telemetry = await initTelemetryClient(getTelemetryClientConfig());
|
|
35
31
|
const blobClient = createBlobClient(archiverConfig, {
|
|
36
32
|
logger: createLogger('archiver:blob-client:client')
|
|
37
33
|
});
|
|
38
|
-
const archiver = await
|
|
34
|
+
const archiver = await createArchiver(archiverConfig, {
|
|
39
35
|
telemetry,
|
|
40
36
|
blobClient
|
|
41
|
-
},
|
|
37
|
+
}, {
|
|
38
|
+
blockUntilSync: true
|
|
39
|
+
});
|
|
42
40
|
services.archiver = [
|
|
43
41
|
archiver,
|
|
44
42
|
ArchiverApiSchema
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
|
|
2
2
|
import type { LogFn } from '@aztec/foundation/log';
|
|
3
3
|
export declare function startProverAgent(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers, userLog: LogFn): Promise<void>;
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfcHJvdmVyX2FnZW50LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NtZHMvc3RhcnRfcHJvdmVyX2FnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFL0UsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFnQm5ELHdCQUFzQixnQkFBZ0IsQ0FDcEMsT0FBTyxFQUFFLEdBQUcsRUFDWixjQUFjLEVBQUUsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQ3ZDLFFBQVEsRUFBRSxxQkFBcUIsRUFDL0IsT0FBTyxFQUFFLEtBQUssaUJBd0RmIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start_prover_agent.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_prover_agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAgBnD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"start_prover_agent.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_prover_agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAgBnD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,KAAK,iBAwDf"}
|
|
@@ -45,7 +45,7 @@ export async function startProverAgent(options, signalHandlers, services, userLo
|
|
|
45
45
|
const telemetry = await initTelemetryClient(extractRelevantOptions(options, telemetryClientConfigMappings, 'tel'));
|
|
46
46
|
const prover = await buildServerCircuitProver(config, telemetry);
|
|
47
47
|
const proofStore = new InlineProofStore();
|
|
48
|
-
const agents = times(config.proverAgentCount, ()=>new ProvingAgent(broker, proofStore, prover, config.proverAgentProofTypes, config.proverAgentPollIntervalMs
|
|
48
|
+
const agents = times(config.proverAgentCount, ()=>new ProvingAgent(broker, proofStore, prover, config.proverAgentProofTypes, config.proverAgentPollIntervalMs));
|
|
49
49
|
// expose all agents as individual services
|
|
50
50
|
for(let i = 0; i < agents.length; i++){
|
|
51
51
|
services[`agent${i}`] = [
|
package/dest/cli/util.js
CHANGED
|
@@ -24,7 +24,7 @@ export function shutdown(logFn, exitCode, cb) {
|
|
|
24
24
|
exitCode
|
|
25
25
|
});
|
|
26
26
|
if (cb) {
|
|
27
|
-
shutdownPromise = Promise.allSettled(cb).then(()=>process.exit(exitCode));
|
|
27
|
+
shutdownPromise = Promise.allSettled(cb.map((fn)=>fn())).then(()=>process.exit(exitCode));
|
|
28
28
|
} else {
|
|
29
29
|
// synchronously shuts down the process
|
|
30
30
|
// no need to set shutdownPromise on this branch of the if statement because no more code will be executed
|
package/dest/examples/token.js
CHANGED
|
@@ -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}`);
|
|
@@ -15,7 +15,6 @@ import { type Hex } from 'viem';
|
|
|
15
15
|
* @param hdAccount - Account for publishing L1 contracts
|
|
16
16
|
*/
|
|
17
17
|
export declare function deployContractsToL1(aztecNodeConfig: AztecNodeConfig, privateKey: Hex, opts?: {
|
|
18
|
-
assumeProvenThroughBlockNumber?: number;
|
|
19
18
|
genesisArchiveRoot?: Fr;
|
|
20
19
|
feeJuicePortalInitialBalance?: bigint;
|
|
21
20
|
}): Promise<{
|
|
@@ -69,4 +68,4 @@ export declare function createAztecNode(config?: Partial<AztecNodeConfig>, deps?
|
|
|
69
68
|
}, options?: {
|
|
70
69
|
prefilledPublicData?: PublicDataTreeLeaf[];
|
|
71
70
|
}): Promise<AztecNodeService>;
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQVN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUd6RSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFHckIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQTJELE1BQU0sTUFBTSxDQUFDO0FBZXpGOzs7O0dBSUc7QUFDSCx3QkFBc0IsbUJBQW1CLENBQ3ZDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFVBQVUsRUFBRSxHQUFHLEVBQ2YsSUFBSSxHQUFFO0lBQ0osa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDeEIsNEJBQTRCLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JQO0FBRUQsOEJBQThCO0FBQzlCLE1BQU0sTUFBTSxrQkFBa0IsR0FBRyxlQUFlLEdBQUc7SUFDakQsMERBQTBEO0lBQzFELFVBQVUsRUFBRSxNQUFNLENBQUM7SUFDbkIsNkRBQTZEO0lBQzdELFlBQVksRUFBRSxPQUFPLENBQUM7Q0FDdkIsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCx3QkFBc0Isa0JBQWtCLENBQUMsTUFBTSx5Q0FBa0MsRUFBRSxPQUFPLEVBQUUsS0FBSzs7O0dBaUloRztBQUVEOzs7R0FHRztBQUNILHdCQUFzQixlQUFlLENBQ25DLE1BQU0sR0FBRSxPQUFPLENBQUMsZUFBZSxDQUFNLEVBQ3JDLElBQUksR0FBRTtJQUFFLFNBQVMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztJQUFDLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixDQUFDO0lBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFBO0NBQU8sRUFDekcsT0FBTyxHQUFFO0lBQUUsbUJBQW1CLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFBO0NBQU8sNkJBVzdEIn0=
|
|
@@ -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;AAGzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,KAAK,GAAG,EAA2D,MAAM,MAAM,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;AAGzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAIjC,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;;;GAiIhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,eAAe,CAAC;IAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAO,EACzG,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAO,6BAW7D"}
|
|
@@ -26,6 +26,7 @@ import { foundry } from 'viem/chains';
|
|
|
26
26
|
import { createAccountLogs } from '../cli/util.js';
|
|
27
27
|
import { DefaultMnemonic } from '../mnemonic.js';
|
|
28
28
|
import { AnvilTestWatcher } from '../testing/anvil_test_watcher.js';
|
|
29
|
+
import { EpochTestSettler } from '../testing/epoch_test_settler.js';
|
|
29
30
|
import { getBananaFPCAddress, setupBananaFPC } from './banana_fpc.js';
|
|
30
31
|
import { getSponsoredFPCAddress } from './sponsored_fpc.js';
|
|
31
32
|
const logger = createLogger('local-network');
|
|
@@ -101,14 +102,15 @@ const localAnvil = foundry;
|
|
|
101
102
|
sponsoredFPC
|
|
102
103
|
] : [];
|
|
103
104
|
const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses);
|
|
104
|
-
let watcher = undefined;
|
|
105
105
|
const dateProvider = new TestDateProvider();
|
|
106
|
+
let cheatcodes;
|
|
107
|
+
let rollupAddress;
|
|
108
|
+
let watcher;
|
|
106
109
|
if (!aztecNodeConfig.p2pEnabled) {
|
|
107
|
-
|
|
108
|
-
assumeProvenThroughBlockNumber: Number.MAX_SAFE_INTEGER,
|
|
110
|
+
({ rollupAddress } = await deployContractsToL1(aztecNodeConfig, aztecNodeConfig.validatorPrivateKeys.getValue()[0], {
|
|
109
111
|
genesisArchiveRoot,
|
|
110
112
|
feeJuicePortalInitialBalance: fundingNeeded
|
|
111
|
-
});
|
|
113
|
+
}));
|
|
112
114
|
const chain = aztecNodeConfig.l1RpcUrls.length > 0 ? createEthereumChain([
|
|
113
115
|
l1RpcUrl
|
|
114
116
|
], aztecNodeConfig.l1ChainId) : {
|
|
@@ -120,10 +122,12 @@ const localAnvil = foundry;
|
|
|
120
122
|
httpViemTransport(l1RpcUrl)
|
|
121
123
|
])
|
|
122
124
|
});
|
|
123
|
-
|
|
125
|
+
cheatcodes = new EthCheatCodes([
|
|
124
126
|
l1RpcUrl
|
|
125
|
-
], dateProvider)
|
|
127
|
+
], dateProvider);
|
|
128
|
+
watcher = new AnvilTestWatcher(cheatcodes, rollupAddress, publicClient, dateProvider);
|
|
126
129
|
watcher.setisLocalNetwork(true);
|
|
130
|
+
watcher.setIsMarkingAsProven(false); // Do not mark as proven in the watcher. It's marked in the epochTestSettler after the out hash is set.
|
|
127
131
|
await watcher.start();
|
|
128
132
|
}
|
|
129
133
|
const telemetry = await initTelemetryClient(getTelemetryClientConfig());
|
|
@@ -136,13 +140,20 @@ const localAnvil = foundry;
|
|
|
136
140
|
}, {
|
|
137
141
|
prefilledPublicData
|
|
138
142
|
});
|
|
143
|
+
let epochTestSettler;
|
|
144
|
+
if (!aztecNodeConfig.p2pEnabled) {
|
|
145
|
+
epochTestSettler = new EpochTestSettler(cheatcodes, rollupAddress, node.getBlockSource(), logger.createChild('epoch-settler'), {
|
|
146
|
+
pollingIntervalMs: 200
|
|
147
|
+
});
|
|
148
|
+
await epochTestSettler.start();
|
|
149
|
+
}
|
|
139
150
|
if (initialAccounts.length) {
|
|
140
151
|
const PXEConfig = {
|
|
141
152
|
proverEnabled: aztecNodeConfig.realProofs
|
|
142
153
|
};
|
|
143
154
|
const wallet = await TestWallet.create(node, PXEConfig);
|
|
144
155
|
userLog('Setting up funded test accounts...');
|
|
145
|
-
const accountManagers = await deployFundedSchnorrAccounts(wallet,
|
|
156
|
+
const accountManagers = await deployFundedSchnorrAccounts(wallet, initialAccounts);
|
|
146
157
|
const accountsWithSecrets = accountManagers.map((manager, i)=>({
|
|
147
158
|
account: manager,
|
|
148
159
|
secretKey: initialAccounts[i].secret
|
|
@@ -157,6 +168,7 @@ const localAnvil = foundry;
|
|
|
157
168
|
const stop = async ()=>{
|
|
158
169
|
await node.stop();
|
|
159
170
|
await watcher?.stop();
|
|
171
|
+
await epochTestSettler?.stop();
|
|
160
172
|
};
|
|
161
173
|
return {
|
|
162
174
|
node,
|
|
@@ -9,7 +9,9 @@ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
|
9
9
|
* codes, please consider whether it makes sense to just introduce new utils in your tests instead.
|
|
10
10
|
*/
|
|
11
11
|
export declare class CheatCodes {
|
|
12
|
+
/** Cheat codes for L1.*/
|
|
12
13
|
eth: EthCheatCodes;
|
|
14
|
+
/** Cheat codes for the Aztec Rollup contract on L1. */
|
|
13
15
|
rollup: RollupCheatCodes;
|
|
14
16
|
constructor(
|
|
15
17
|
/** Cheat codes for L1.*/
|
|
@@ -38,4 +40,4 @@ export declare class CheatCodes {
|
|
|
38
40
|
*/
|
|
39
41
|
warpL2TimeAtLeastBy(sequencerClient: SequencerClient, node: AztecNode, duration: bigint | number): Promise<void>;
|
|
40
42
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlYXRfY29kZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2NoZWF0X2NvZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUd2RSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRTs7Ozs7R0FLRztBQUNILHFCQUFhLFVBQVU7SUFFbkIseUJBQXlCO0lBQ2xCLEdBQUcsRUFBRSxhQUFhO0lBQ3pCLHVEQUF1RDtJQUNoRCxNQUFNLEVBQUUsZ0JBQWdCO0lBSmpDO0lBQ0UseUJBQXlCO0lBQ2xCLEdBQUcsRUFBRSxhQUFhO0lBQ3pCLHVEQUF1RDtJQUNoRCxNQUFNLEVBQUUsZ0JBQWdCLEVBQzdCO0lBRUosT0FBYSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBT3ZHO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDRyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sR0FBRyxNQUFNLGlCQXVCNUc7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLE1BQU0saUJBSXJHO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cheat_codes.d.ts","sourceRoot":"","sources":["../../src/testing/cheat_codes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE;;;;;GAKG;AACH,qBAAa,UAAU;
|
|
1
|
+
{"version":3,"file":"cheat_codes.d.ts","sourceRoot":"","sources":["../../src/testing/cheat_codes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE;;;;;GAKG;AACH,qBAAa,UAAU;IAEnB,yBAAyB;IAClB,GAAG,EAAE,aAAa;IACzB,uDAAuD;IAChD,MAAM,EAAE,gBAAgB;IAJjC;IACE,yBAAyB;IAClB,GAAG,EAAE,aAAa;IACzB,uDAAuD;IAChD,MAAM,EAAE,gBAAgB,EAC7B;IAEJ,OAAa,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAOvG;IAED;;;;;;;;OAQG;IACG,mBAAmB,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,iBAuB5G;IAED;;;;;;;;OAQG;IACG,mBAAmB,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,iBAIrG;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type EthCheatCodes } from '@aztec/ethereum/test';
|
|
2
|
+
import { type EpochNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
4
|
+
import type { EthAddress, L2BlockSource } from '@aztec/stdlib/block';
|
|
5
|
+
export declare class EpochTestSettler {
|
|
6
|
+
private l2BlockSource;
|
|
7
|
+
private log;
|
|
8
|
+
private options;
|
|
9
|
+
private rollupCheatCodes;
|
|
10
|
+
private epochMonitor?;
|
|
11
|
+
constructor(cheatcodes: EthCheatCodes, rollupAddress: EthAddress, l2BlockSource: L2BlockSource, log: Logger, options: {
|
|
12
|
+
pollingIntervalMs: number;
|
|
13
|
+
provingDelayMs?: number;
|
|
14
|
+
});
|
|
15
|
+
start(): Promise<void>;
|
|
16
|
+
stop(): Promise<void>;
|
|
17
|
+
handleEpochReadyToProve(epoch: EpochNumber): Promise<boolean>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hfdGVzdF9zZXR0bGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9lcG9jaF90ZXN0X3NldHRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssYUFBYSxFQUFvQixNQUFNLHNCQUFzQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBYyxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRSxxQkFBYSxnQkFBZ0I7SUFPekIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLEdBQUc7SUFDWCxPQUFPLENBQUMsT0FBTztJQVJqQixPQUFPLENBQUMsZ0JBQWdCLENBQW1CO0lBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBZTtJQUVwQyxZQUNFLFVBQVUsRUFBRSxhQUFhLEVBQ3pCLGFBQWEsRUFBRSxVQUFVLEVBQ2pCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLEdBQUcsRUFBRSxNQUFNLEVBQ1gsT0FBTyxFQUFFO1FBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFHeEU7SUFFSyxLQUFLLGtCQUlWO0lBRUssSUFBSSxrQkFFVDtJQUVLLHVCQUF1QixDQUFDLEtBQUssRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQXFDbEU7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epoch_test_settler.d.ts","sourceRoot":"","sources":["../../src/testing/epoch_test_settler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,iCAAiC,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGrE,qBAAa,gBAAgB;IAOzB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IARjB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,YACE,UAAU,EAAE,aAAa,EACzB,aAAa,EAAE,UAAU,EACjB,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAGxE;IAEK,KAAK,kBAIV;IAEK,IAAI,kBAET;IAEK,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAqClE;CACF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { RollupCheatCodes } from '@aztec/ethereum/test';
|
|
2
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { EpochMonitor } from '@aztec/prover-node';
|
|
4
|
+
import { computeL2ToL1MembershipWitnessFromMessagesInEpoch } from '@aztec/stdlib/messaging';
|
|
5
|
+
export class EpochTestSettler {
|
|
6
|
+
l2BlockSource;
|
|
7
|
+
log;
|
|
8
|
+
options;
|
|
9
|
+
rollupCheatCodes;
|
|
10
|
+
epochMonitor;
|
|
11
|
+
constructor(cheatcodes, rollupAddress, l2BlockSource, log, options){
|
|
12
|
+
this.l2BlockSource = l2BlockSource;
|
|
13
|
+
this.log = log;
|
|
14
|
+
this.options = options;
|
|
15
|
+
this.rollupCheatCodes = new RollupCheatCodes(cheatcodes, {
|
|
16
|
+
rollupAddress
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
async start() {
|
|
20
|
+
const { epochDuration } = await this.rollupCheatCodes.getConfig();
|
|
21
|
+
this.epochMonitor = new EpochMonitor(this.l2BlockSource, {
|
|
22
|
+
epochDuration: Number(epochDuration)
|
|
23
|
+
}, this.options);
|
|
24
|
+
this.epochMonitor.start(this);
|
|
25
|
+
}
|
|
26
|
+
async stop() {
|
|
27
|
+
await this.epochMonitor?.stop();
|
|
28
|
+
}
|
|
29
|
+
async handleEpochReadyToProve(epoch) {
|
|
30
|
+
const checkpointedBlocks = await this.l2BlockSource.getCheckpointedBlocksForEpoch(epoch);
|
|
31
|
+
const blocks = checkpointedBlocks.map((b)=>b.block);
|
|
32
|
+
this.log.info(`Settling epoch ${epoch} with blocks ${blocks[0]?.header.getBlockNumber()} to ${blocks.at(-1)?.header.getBlockNumber()}`, {
|
|
33
|
+
blocks: blocks.map((b)=>b.toBlockInfo())
|
|
34
|
+
});
|
|
35
|
+
const messagesInEpoch = [];
|
|
36
|
+
let previousSlotNumber = SlotNumber.ZERO;
|
|
37
|
+
let checkpointIndex = -1;
|
|
38
|
+
for (const block of blocks){
|
|
39
|
+
const slotNumber = block.header.globalVariables.slotNumber;
|
|
40
|
+
if (slotNumber !== previousSlotNumber) {
|
|
41
|
+
checkpointIndex++;
|
|
42
|
+
messagesInEpoch[checkpointIndex] = [];
|
|
43
|
+
previousSlotNumber = slotNumber;
|
|
44
|
+
}
|
|
45
|
+
messagesInEpoch[checkpointIndex].push(block.body.txEffects.map((txEffect)=>txEffect.l2ToL1Msgs));
|
|
46
|
+
}
|
|
47
|
+
const [firstMessage] = messagesInEpoch.flat(3);
|
|
48
|
+
if (firstMessage) {
|
|
49
|
+
const { root: outHash } = computeL2ToL1MembershipWitnessFromMessagesInEpoch(messagesInEpoch, firstMessage);
|
|
50
|
+
await this.rollupCheatCodes.insertOutbox(epoch, outHash.toBigInt());
|
|
51
|
+
} else {
|
|
52
|
+
this.log.info(`No L2 to L1 messages in epoch ${epoch}`);
|
|
53
|
+
}
|
|
54
|
+
const lastCheckpoint = checkpointedBlocks.at(-1)?.checkpointNumber;
|
|
55
|
+
if (lastCheckpoint !== undefined) {
|
|
56
|
+
await this.rollupCheatCodes.markAsProven(lastCheckpoint);
|
|
57
|
+
} else {
|
|
58
|
+
this.log.warn(`No checkpoint found for epoch ${epoch}`);
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
}
|
package/dest/testing/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { AnvilTestWatcher } from './anvil_test_watcher.js';
|
|
2
2
|
export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
|
|
3
3
|
export { CheatCodes } from './cheat_codes.js';
|
|
4
|
-
|
|
4
|
+
export { EpochTestSettler } from './epoch_test_settler.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dest/testing/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/aztec",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.0b941701",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -28,38 +28,39 @@
|
|
|
28
28
|
"../package.common.json"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@aztec/accounts": "0.0.1-commit.
|
|
32
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
33
|
-
"@aztec/aztec-faucet": "0.0.1-commit.
|
|
34
|
-
"@aztec/aztec-node": "0.0.1-commit.
|
|
35
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
36
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
37
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
38
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
39
|
-
"@aztec/bot": "0.0.1-commit.
|
|
40
|
-
"@aztec/builder": "0.0.1-commit.
|
|
41
|
-
"@aztec/cli": "0.0.1-commit.
|
|
42
|
-
"@aztec/constants": "0.0.1-commit.
|
|
43
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
44
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
45
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
46
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
47
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
48
|
-
"@aztec/node-lib": "0.0.1-commit.
|
|
49
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
50
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
51
|
-
"@aztec/p2p": "0.0.1-commit.
|
|
52
|
-
"@aztec/p2p-bootstrap": "0.0.1-commit.
|
|
53
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
54
|
-
"@aztec/prover-client": "0.0.1-commit.
|
|
55
|
-
"@aztec/prover-node": "0.0.1-commit.
|
|
56
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
57
|
-
"@aztec/sequencer-client": "0.0.1-commit.
|
|
58
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
59
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
60
|
-
"@aztec/test-wallet": "0.0.1-commit.
|
|
61
|
-
"@aztec/txe": "0.0.1-commit.
|
|
62
|
-
"@aztec/
|
|
31
|
+
"@aztec/accounts": "0.0.1-commit.0b941701",
|
|
32
|
+
"@aztec/archiver": "0.0.1-commit.0b941701",
|
|
33
|
+
"@aztec/aztec-faucet": "0.0.1-commit.0b941701",
|
|
34
|
+
"@aztec/aztec-node": "0.0.1-commit.0b941701",
|
|
35
|
+
"@aztec/aztec.js": "0.0.1-commit.0b941701",
|
|
36
|
+
"@aztec/bb-prover": "0.0.1-commit.0b941701",
|
|
37
|
+
"@aztec/bb.js": "0.0.1-commit.0b941701",
|
|
38
|
+
"@aztec/blob-client": "0.0.1-commit.0b941701",
|
|
39
|
+
"@aztec/bot": "0.0.1-commit.0b941701",
|
|
40
|
+
"@aztec/builder": "0.0.1-commit.0b941701",
|
|
41
|
+
"@aztec/cli": "0.0.1-commit.0b941701",
|
|
42
|
+
"@aztec/constants": "0.0.1-commit.0b941701",
|
|
43
|
+
"@aztec/entrypoints": "0.0.1-commit.0b941701",
|
|
44
|
+
"@aztec/ethereum": "0.0.1-commit.0b941701",
|
|
45
|
+
"@aztec/foundation": "0.0.1-commit.0b941701",
|
|
46
|
+
"@aztec/kv-store": "0.0.1-commit.0b941701",
|
|
47
|
+
"@aztec/l1-artifacts": "0.0.1-commit.0b941701",
|
|
48
|
+
"@aztec/node-lib": "0.0.1-commit.0b941701",
|
|
49
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.0b941701",
|
|
50
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.0b941701",
|
|
51
|
+
"@aztec/p2p": "0.0.1-commit.0b941701",
|
|
52
|
+
"@aztec/p2p-bootstrap": "0.0.1-commit.0b941701",
|
|
53
|
+
"@aztec/protocol-contracts": "0.0.1-commit.0b941701",
|
|
54
|
+
"@aztec/prover-client": "0.0.1-commit.0b941701",
|
|
55
|
+
"@aztec/prover-node": "0.0.1-commit.0b941701",
|
|
56
|
+
"@aztec/pxe": "0.0.1-commit.0b941701",
|
|
57
|
+
"@aztec/sequencer-client": "0.0.1-commit.0b941701",
|
|
58
|
+
"@aztec/stdlib": "0.0.1-commit.0b941701",
|
|
59
|
+
"@aztec/telemetry-client": "0.0.1-commit.0b941701",
|
|
60
|
+
"@aztec/test-wallet": "0.0.1-commit.0b941701",
|
|
61
|
+
"@aztec/txe": "0.0.1-commit.0b941701",
|
|
62
|
+
"@aztec/validator-ha-signer": "0.0.1-commit.0b941701",
|
|
63
|
+
"@aztec/world-state": "0.0.1-commit.0b941701",
|
|
63
64
|
"@types/chalk": "^2.2.0",
|
|
64
65
|
"abitype": "^0.8.11",
|
|
65
66
|
"chalk": "^5.3.0",
|
|
@@ -79,7 +80,7 @@
|
|
|
79
80
|
"@jest/globals": "^30.0.0",
|
|
80
81
|
"@types/jest": "^30.0.0",
|
|
81
82
|
"@types/koa": "^2.15.0",
|
|
82
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
83
|
+
"@typescript/native-preview": "7.0.0-dev.20260113.1",
|
|
83
84
|
"jest": "^30.0.0",
|
|
84
85
|
"ts-node": "^10.9.1",
|
|
85
86
|
"typescript": "^5.3.3"
|
package/scripts/aztec.sh
CHANGED
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
|
+
shopt -s inherit_errexit
|
|
4
|
+
|
|
5
|
+
# Re-execute using correct version if we have an .aztecrc file.
|
|
6
|
+
if [ "${AZTEC_VERSIONED:-0}" -eq 0 ] && [ -f .aztecrc ] && command -v aztec-up &>/dev/null; then
|
|
7
|
+
env_setup=$(aztec-up env)
|
|
8
|
+
eval "$env_setup"
|
|
9
|
+
AZTEC_VERSIONED=1 exec aztec "$@"
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
cmd=${1:-}
|
|
13
|
+
[ -n "$cmd" ] && shift
|
|
3
14
|
|
|
4
15
|
script_dir="$(dirname "$(realpath "$0")")"
|
|
5
16
|
|
|
6
17
|
function aztec {
|
|
18
|
+
export AZTEC_SHELL_WRAPPER=1
|
|
7
19
|
exec node --no-warnings $script_dir/../dest/bin/index.js "$@"
|
|
8
20
|
}
|
|
9
21
|
|
|
10
|
-
cmd=${1:-}
|
|
11
|
-
[ -n "$cmd" ] && shift
|
|
12
|
-
|
|
13
|
-
export AZTEC_SHELL_WRAPPER=1
|
|
14
|
-
|
|
15
22
|
case $cmd in
|
|
16
23
|
test)
|
|
17
|
-
export LOG_LEVEL="${LOG_LEVEL:-
|
|
24
|
+
export LOG_LEVEL="${LOG_LEVEL:-error}"
|
|
18
25
|
aztec start --txe --port 8081 &
|
|
19
26
|
server_pid=$!
|
|
20
27
|
trap 'kill $server_pid &>/dev/null || true' EXIT
|
|
21
28
|
while ! nc -z 127.0.0.1 8081 &>/dev/null; do sleep 0.2; done
|
|
22
29
|
export NARGO_FOREIGN_CALL_TIMEOUT=300000
|
|
23
|
-
nargo test --silence-warnings
|
|
30
|
+
nargo test --silence-warnings --oracle-resolver http://127.0.0.1:8081 "$@"
|
|
24
31
|
;;
|
|
25
32
|
start)
|
|
26
33
|
if [ "${1:-}" == "--local-network" ]; then
|
package/src/bin/index.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { createConsoleLogger, createLogger } from '@aztec/foundation/log';
|
|
|
14
14
|
|
|
15
15
|
import { Command } from 'commander';
|
|
16
16
|
|
|
17
|
+
import { injectMigrateCommand } from '../cli/cmds/migrate_ha_db.js';
|
|
17
18
|
import { injectAztecCommands } from '../cli/index.js';
|
|
18
19
|
import { getCliVersion } from '../cli/release_version.js';
|
|
19
20
|
|
|
@@ -55,6 +56,7 @@ async function main() {
|
|
|
55
56
|
program = injectAztecNodeCommands(program, userLog, debugLogger);
|
|
56
57
|
program = injectMiscCommands(program, userLog);
|
|
57
58
|
program = injectValidatorKeysCommands(program, userLog);
|
|
59
|
+
program = injectMigrateCommand(program, userLog);
|
|
58
60
|
|
|
59
61
|
await program.parseAsync(process.argv);
|
|
60
62
|
}
|
|
@@ -35,6 +35,11 @@ export async function aztecStart(options: any, userLog: LogFn, debugLogger: Logg
|
|
|
35
35
|
l1RpcUrls: options.l1RpcUrls,
|
|
36
36
|
testAccounts: localNetwork.testAccounts,
|
|
37
37
|
realProofs: false,
|
|
38
|
+
// Setting the epoch duration to 4 by default for local network. This allows the epoch to be "proven" faster, so
|
|
39
|
+
// the users can consume out hash without having to wait for a long time.
|
|
40
|
+
// Note: We are not proving anything in the local network (realProofs == false). But in `createLocalNetwork`,
|
|
41
|
+
// the EpochTestSettler will set the out hash to the outbox when an epoch is complete.
|
|
42
|
+
aztecEpochDuration: 4,
|
|
38
43
|
},
|
|
39
44
|
userLog,
|
|
40
45
|
);
|
|
@@ -19,7 +19,7 @@ import { proverAgentConfigMappings, proverBrokerConfigMappings } from '@aztec/pr
|
|
|
19
19
|
import { proverNodeConfigMappings } from '@aztec/prover-node/config';
|
|
20
20
|
import { allPxeConfigMappings } from '@aztec/pxe/config';
|
|
21
21
|
import { sequencerClientConfigMappings } from '@aztec/sequencer-client/config';
|
|
22
|
-
import { chainConfigMappings } from '@aztec/stdlib/config';
|
|
22
|
+
import { chainConfigMappings, nodeRpcConfigMappings } from '@aztec/stdlib/config';
|
|
23
23
|
import { telemetryClientConfigMappings } from '@aztec/telemetry-client/config';
|
|
24
24
|
import { worldStateConfigMappings } from '@aztec/world-state/config';
|
|
25
25
|
|
|
@@ -148,6 +148,8 @@ export const aztecStartOptions: { [key: string]: AztecStartOption[] } = {
|
|
|
148
148
|
defaultValue: '',
|
|
149
149
|
env: 'API_PREFIX',
|
|
150
150
|
},
|
|
151
|
+
configToFlag('--rpcMaxBatchSize', nodeRpcConfigMappings.rpcMaxBatchSize),
|
|
152
|
+
configToFlag('--rpcMaxBodySize', nodeRpcConfigMappings.rpcMaxBodySize),
|
|
151
153
|
],
|
|
152
154
|
ETHEREUM: [
|
|
153
155
|
configToFlag('--l1-chain-id', l1ReaderConfigMappings.l1ChainId),
|
package/src/cli/cli.ts
CHANGED
|
@@ -35,44 +35,12 @@ export function injectAztecCommands(program: Command, userLog: LogFn, debugLogge
|
|
|
35
35
|
program.addHelpText(
|
|
36
36
|
'after',
|
|
37
37
|
`
|
|
38
|
+
Additional commands:
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
--name <name> Name of the package
|
|
44
|
-
--contract Use a contract template (default)
|
|
45
|
-
--lib Use a library template
|
|
46
|
-
--bin Use a binary template
|
|
47
|
-
Examples:
|
|
48
|
-
$ aztec init # creates a contract project in current directory
|
|
49
|
-
$ aztec init --lib # creates a library project
|
|
50
|
-
|
|
51
|
-
new <path> [options]: creates a new Noir project in a new directory
|
|
52
|
-
Options:
|
|
53
|
-
--name <name> Name of the package
|
|
54
|
-
--contract Use a contract template (default)
|
|
55
|
-
--lib Use a library template
|
|
56
|
-
--bin Use a binary template
|
|
57
|
-
Examples:
|
|
58
|
-
$ aztec new my-project # creates a contract project in ./my-project
|
|
59
|
-
$ aztec new my-lib --lib # creates a library project in ./my-lib
|
|
60
|
-
|
|
61
|
-
compile [options]: compiles Aztec Noir contracts
|
|
62
|
-
Compiles contracts with nargo compile and then postprocesses them to generate Aztec-specific artifacts including:
|
|
63
|
-
- Transpiled contract artifacts
|
|
64
|
-
- Verification keys
|
|
65
|
-
The compiled contracts will be placed in the target/ directory by default.
|
|
66
|
-
Supports standard nargo compile options.
|
|
67
|
-
|
|
68
|
-
test [options]: starts a dockerized TXE node via
|
|
69
|
-
$ aztec start --txe
|
|
70
|
-
then runs
|
|
71
|
-
$ aztec test --silence-warnings --oracle-resolver=<TXE_ADDRESS> [options]
|
|
72
|
-
|
|
73
|
-
preload-crs: Downloads and caches the Common Reference String (CRS) data required for zero-knowledge proofs.
|
|
74
|
-
Example:
|
|
75
|
-
$ aztec preload-crs # preloads CRS data
|
|
40
|
+
init [folder] [options] creates a new Aztec Noir project.
|
|
41
|
+
new <path> [options] creates a new Aztec Noir project in a new directory.
|
|
42
|
+
compile [options] compiles Aztec Noir contracts.
|
|
43
|
+
test [options] starts a TXE and runs "nargo test" using it as the oracle resolver.
|
|
76
44
|
`,
|
|
77
45
|
);
|
|
78
46
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { runMigrations } from '@aztec/validator-ha-signer/migrations';
|
|
2
|
+
|
|
3
|
+
import type { Command } from 'commander';
|
|
4
|
+
|
|
5
|
+
export function injectMigrateCommand(program: Command, log: (msg: string) => void): Command {
|
|
6
|
+
const migrateCommand = program.command('migrate-ha-db').description('Run validator-ha-signer database migrations');
|
|
7
|
+
|
|
8
|
+
migrateCommand
|
|
9
|
+
.command('up')
|
|
10
|
+
.description('Apply pending migrations')
|
|
11
|
+
.requiredOption('--database-url <string>', 'PostgreSQL connection string', process.env.DATABASE_URL)
|
|
12
|
+
.option('--verbose', 'Enable verbose output', false)
|
|
13
|
+
.action(async options => {
|
|
14
|
+
const migrations = await runMigrations(options.databaseUrl, {
|
|
15
|
+
direction: 'up',
|
|
16
|
+
verbose: options.verbose,
|
|
17
|
+
});
|
|
18
|
+
if (migrations.length > 0) {
|
|
19
|
+
log(`Applied migrations: ${migrations.join(', ')}`);
|
|
20
|
+
} else {
|
|
21
|
+
log('No migrations to apply - schema is up to date');
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
migrateCommand
|
|
26
|
+
.command('down')
|
|
27
|
+
.description('Rollback the last migration')
|
|
28
|
+
.requiredOption('--database-url <string>', 'PostgreSQL connection string', process.env.DATABASE_URL)
|
|
29
|
+
.option('--verbose', 'Enable verbose output', false)
|
|
30
|
+
.action(async options => {
|
|
31
|
+
const migrations = await runMigrations(options.databaseUrl, {
|
|
32
|
+
direction: 'down',
|
|
33
|
+
verbose: options.verbose,
|
|
34
|
+
});
|
|
35
|
+
if (migrations.length > 0) {
|
|
36
|
+
log(`Rolled back migrations: ${migrations.join(', ')}`);
|
|
37
|
+
} else {
|
|
38
|
+
log('No migrations to rollback');
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
return program;
|
|
43
|
+
}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Archiver,
|
|
3
|
-
type ArchiverConfig,
|
|
4
|
-
KVArchiverDataStore,
|
|
5
|
-
archiverConfigMappings,
|
|
6
|
-
getArchiverConfigFromEnv,
|
|
7
|
-
} from '@aztec/archiver';
|
|
1
|
+
import { type ArchiverConfig, archiverConfigMappings, createArchiver, getArchiverConfigFromEnv } from '@aztec/archiver';
|
|
8
2
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
9
3
|
import { type BlobClientConfig, blobClientConfigMapping, createBlobClient } from '@aztec/blob-client/client';
|
|
10
4
|
import { getL1Config } from '@aztec/cli/config';
|
|
11
5
|
import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
|
|
12
6
|
import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
|
|
13
|
-
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
14
7
|
import { ArchiverApiSchema } from '@aztec/stdlib/interfaces/server';
|
|
15
8
|
import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
16
9
|
|
|
@@ -47,13 +40,9 @@ export async function startArchiver(
|
|
|
47
40
|
archiverConfig.l1Contracts = addresses;
|
|
48
41
|
archiverConfig = { ...archiverConfig, ...l1Config };
|
|
49
42
|
|
|
50
|
-
const storeLog = createLogger('archiver:lmdb');
|
|
51
|
-
const store = await createStore('archiver', KVArchiverDataStore.SCHEMA_VERSION, archiverConfig, storeLog);
|
|
52
|
-
const archiverStore = new KVArchiverDataStore(store, archiverConfig.maxLogs);
|
|
53
|
-
|
|
54
43
|
const telemetry = await initTelemetryClient(getTelemetryClientConfig());
|
|
55
44
|
const blobClient = createBlobClient(archiverConfig, { logger: createLogger('archiver:blob-client:client') });
|
|
56
|
-
const archiver = await
|
|
45
|
+
const archiver = await createArchiver(archiverConfig, { telemetry, blobClient }, { blockUntilSync: true });
|
|
57
46
|
services.archiver = [archiver, ArchiverApiSchema];
|
|
58
47
|
signalHandlers.push(archiver.stop);
|
|
59
48
|
|
|
@@ -58,15 +58,7 @@ export async function startProverAgent(
|
|
|
58
58
|
const proofStore = new InlineProofStore();
|
|
59
59
|
const agents = times(
|
|
60
60
|
config.proverAgentCount,
|
|
61
|
-
() =>
|
|
62
|
-
new ProvingAgent(
|
|
63
|
-
broker,
|
|
64
|
-
proofStore,
|
|
65
|
-
prover,
|
|
66
|
-
config.proverAgentProofTypes,
|
|
67
|
-
config.proverAgentPollIntervalMs,
|
|
68
|
-
telemetry,
|
|
69
|
-
),
|
|
61
|
+
() => new ProvingAgent(broker, proofStore, prover, config.proverAgentProofTypes, config.proverAgentPollIntervalMs),
|
|
70
62
|
);
|
|
71
63
|
|
|
72
64
|
// expose all agents as individual services
|
package/src/cli/util.ts
CHANGED
|
@@ -36,7 +36,7 @@ export function shutdown(logFn: LogFn, exitCode: ExitCode, cb?: Array<() => Prom
|
|
|
36
36
|
|
|
37
37
|
logFn('Shutting down...', { exitCode });
|
|
38
38
|
if (cb) {
|
|
39
|
-
shutdownPromise = Promise.allSettled(cb).then(() => process.exit(exitCode));
|
|
39
|
+
shutdownPromise = Promise.allSettled(cb.map(fn => fn())).then(() => process.exit(exitCode));
|
|
40
40
|
} else {
|
|
41
41
|
// synchronously shuts down the process
|
|
42
42
|
// no need to set shutdownPromise on this branch of the if statement because no more code will be executed
|
package/src/examples/token.ts
CHANGED
|
@@ -32,14 +32,12 @@ async function main() {
|
|
|
32
32
|
logger.info(`Fetched Alice and Bob accounts: ${alice.toString()}, ${bob.toString()}`);
|
|
33
33
|
|
|
34
34
|
logger.info('Deploying Token...');
|
|
35
|
-
const token = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18)
|
|
36
|
-
.send({ from: alice })
|
|
37
|
-
.deployed();
|
|
35
|
+
const token = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18).send({ from: alice });
|
|
38
36
|
logger.info('Token deployed');
|
|
39
37
|
|
|
40
38
|
// Mint tokens to Alice
|
|
41
39
|
logger.info(`Minting ${ALICE_MINT_BALANCE} more coins to Alice...`);
|
|
42
|
-
await token.methods.mint_to_private(alice, ALICE_MINT_BALANCE).send({ from: alice })
|
|
40
|
+
await token.methods.mint_to_private(alice, ALICE_MINT_BALANCE).send({ from: alice });
|
|
43
41
|
|
|
44
42
|
logger.info(`${ALICE_MINT_BALANCE} tokens were successfully minted by Alice and transferred to private`);
|
|
45
43
|
|
|
@@ -48,7 +46,7 @@ async function main() {
|
|
|
48
46
|
|
|
49
47
|
// We will now transfer tokens from Alice to Bob
|
|
50
48
|
logger.info(`Transferring ${TRANSFER_AMOUNT} tokens from Alice to Bob...`);
|
|
51
|
-
await token.methods.transfer(bob, TRANSFER_AMOUNT).send({ from: alice })
|
|
49
|
+
await token.methods.transfer(bob, TRANSFER_AMOUNT).send({ from: alice });
|
|
52
50
|
|
|
53
51
|
// Check the new balances
|
|
54
52
|
const aliceBalance = await token.methods.balance_of_private(alice).simulate({ from: alice });
|
|
@@ -49,12 +49,16 @@ export async function setupBananaFPC(initialAccounts: InitialAccountData[], wall
|
|
|
49
49
|
const bananaCoinAddress = await getBananaCoinAddress(initialAccounts);
|
|
50
50
|
const admin = getBananaAdmin(initialAccounts);
|
|
51
51
|
const [bananaCoin, fpc] = await Promise.all([
|
|
52
|
-
TokenContract.deploy(wallet, admin, bananaCoinArgs.name, bananaCoinArgs.symbol, bananaCoinArgs.decimal)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
52
|
+
TokenContract.deploy(wallet, admin, bananaCoinArgs.name, bananaCoinArgs.symbol, bananaCoinArgs.decimal).send({
|
|
53
|
+
from: admin,
|
|
54
|
+
contractAddressSalt: BANANA_COIN_SALT,
|
|
55
|
+
universalDeploy: true,
|
|
56
|
+
}),
|
|
57
|
+
FPCContract.deploy(wallet, bananaCoinAddress, admin).send({
|
|
58
|
+
from: admin,
|
|
59
|
+
contractAddressSalt: BANANA_FPC_SALT,
|
|
60
|
+
universalDeploy: true,
|
|
61
|
+
}),
|
|
58
62
|
]);
|
|
59
63
|
|
|
60
64
|
log(`BananaCoin: ${bananaCoin.address}`);
|
|
@@ -34,6 +34,7 @@ import { foundry } from 'viem/chains';
|
|
|
34
34
|
import { createAccountLogs } from '../cli/util.js';
|
|
35
35
|
import { DefaultMnemonic } from '../mnemonic.js';
|
|
36
36
|
import { AnvilTestWatcher } from '../testing/anvil_test_watcher.js';
|
|
37
|
+
import { EpochTestSettler } from '../testing/epoch_test_settler.js';
|
|
37
38
|
import { getBananaFPCAddress, setupBananaFPC } from './banana_fpc.js';
|
|
38
39
|
import { getSponsoredFPCAddress } from './sponsored_fpc.js';
|
|
39
40
|
|
|
@@ -50,7 +51,6 @@ export async function deployContractsToL1(
|
|
|
50
51
|
aztecNodeConfig: AztecNodeConfig,
|
|
51
52
|
privateKey: Hex,
|
|
52
53
|
opts: {
|
|
53
|
-
assumeProvenThroughBlockNumber?: number;
|
|
54
54
|
genesisArchiveRoot?: Fr;
|
|
55
55
|
feeJuicePortalInitialBalance?: bigint;
|
|
56
56
|
} = {},
|
|
@@ -97,7 +97,11 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
|
|
|
97
97
|
if ((config.l1RpcUrls?.length || 0) > 1) {
|
|
98
98
|
logger.warn(`Multiple L1 RPC URLs provided. Local networks will only use the first one: ${l1RpcUrl}`);
|
|
99
99
|
}
|
|
100
|
-
|
|
100
|
+
|
|
101
|
+
const aztecNodeConfig: AztecNodeConfig = {
|
|
102
|
+
...getConfigEnvVars(),
|
|
103
|
+
...config,
|
|
104
|
+
};
|
|
101
105
|
const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic);
|
|
102
106
|
if (
|
|
103
107
|
aztecNodeConfig.publisherPrivateKeys == undefined ||
|
|
@@ -134,18 +138,20 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
|
|
|
134
138
|
: [];
|
|
135
139
|
const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses);
|
|
136
140
|
|
|
137
|
-
let watcher: AnvilTestWatcher | undefined = undefined;
|
|
138
141
|
const dateProvider = new TestDateProvider();
|
|
142
|
+
|
|
143
|
+
let cheatcodes: EthCheatCodes | undefined;
|
|
144
|
+
let rollupAddress: EthAddress | undefined;
|
|
145
|
+
let watcher: AnvilTestWatcher | undefined;
|
|
139
146
|
if (!aztecNodeConfig.p2pEnabled) {
|
|
140
|
-
|
|
147
|
+
({ rollupAddress } = await deployContractsToL1(
|
|
141
148
|
aztecNodeConfig,
|
|
142
149
|
aztecNodeConfig.validatorPrivateKeys.getValue()[0],
|
|
143
150
|
{
|
|
144
|
-
assumeProvenThroughBlockNumber: Number.MAX_SAFE_INTEGER,
|
|
145
151
|
genesisArchiveRoot,
|
|
146
152
|
feeJuicePortalInitialBalance: fundingNeeded,
|
|
147
153
|
},
|
|
148
|
-
);
|
|
154
|
+
));
|
|
149
155
|
|
|
150
156
|
const chain =
|
|
151
157
|
aztecNodeConfig.l1RpcUrls.length > 0
|
|
@@ -157,13 +163,12 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
|
|
|
157
163
|
transport: fallback([httpViemTransport(l1RpcUrl)]) as any,
|
|
158
164
|
});
|
|
159
165
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
publicClient,
|
|
164
|
-
dateProvider,
|
|
165
|
-
);
|
|
166
|
+
cheatcodes = new EthCheatCodes([l1RpcUrl], dateProvider);
|
|
167
|
+
|
|
168
|
+
watcher = new AnvilTestWatcher(cheatcodes, rollupAddress, publicClient, dateProvider);
|
|
166
169
|
watcher.setisLocalNetwork(true);
|
|
170
|
+
watcher.setIsMarkingAsProven(false); // Do not mark as proven in the watcher. It's marked in the epochTestSettler after the out hash is set.
|
|
171
|
+
|
|
167
172
|
await watcher.start();
|
|
168
173
|
}
|
|
169
174
|
|
|
@@ -172,12 +177,24 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
|
|
|
172
177
|
const blobClient = createBlobClient();
|
|
173
178
|
const node = await createAztecNode(aztecNodeConfig, { telemetry, blobClient, dateProvider }, { prefilledPublicData });
|
|
174
179
|
|
|
180
|
+
let epochTestSettler: EpochTestSettler | undefined;
|
|
181
|
+
if (!aztecNodeConfig.p2pEnabled) {
|
|
182
|
+
epochTestSettler = new EpochTestSettler(
|
|
183
|
+
cheatcodes!,
|
|
184
|
+
rollupAddress!,
|
|
185
|
+
node.getBlockSource(),
|
|
186
|
+
logger.createChild('epoch-settler'),
|
|
187
|
+
{ pollingIntervalMs: 200 },
|
|
188
|
+
);
|
|
189
|
+
await epochTestSettler.start();
|
|
190
|
+
}
|
|
191
|
+
|
|
175
192
|
if (initialAccounts.length) {
|
|
176
193
|
const PXEConfig = { proverEnabled: aztecNodeConfig.realProofs };
|
|
177
194
|
const wallet = await TestWallet.create(node, PXEConfig);
|
|
178
195
|
|
|
179
196
|
userLog('Setting up funded test accounts...');
|
|
180
|
-
const accountManagers = await deployFundedSchnorrAccounts(wallet,
|
|
197
|
+
const accountManagers = await deployFundedSchnorrAccounts(wallet, initialAccounts);
|
|
181
198
|
const accountsWithSecrets = accountManagers.map((manager, i) => ({
|
|
182
199
|
account: manager,
|
|
183
200
|
secretKey: initialAccounts[i].secret,
|
|
@@ -196,6 +213,7 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
|
|
|
196
213
|
const stop = async () => {
|
|
197
214
|
await node.stop();
|
|
198
215
|
await watcher?.stop();
|
|
216
|
+
await epochTestSettler?.stop();
|
|
199
217
|
};
|
|
200
218
|
|
|
201
219
|
return { node, stop };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
2
|
+
import { type EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
|
|
3
|
+
import { type EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
5
|
+
import { EpochMonitor } from '@aztec/prover-node';
|
|
6
|
+
import type { EthAddress, L2BlockSource } from '@aztec/stdlib/block';
|
|
7
|
+
import { computeL2ToL1MembershipWitnessFromMessagesInEpoch } from '@aztec/stdlib/messaging';
|
|
8
|
+
|
|
9
|
+
export class EpochTestSettler {
|
|
10
|
+
private rollupCheatCodes: RollupCheatCodes;
|
|
11
|
+
private epochMonitor?: EpochMonitor;
|
|
12
|
+
|
|
13
|
+
constructor(
|
|
14
|
+
cheatcodes: EthCheatCodes,
|
|
15
|
+
rollupAddress: EthAddress,
|
|
16
|
+
private l2BlockSource: L2BlockSource,
|
|
17
|
+
private log: Logger,
|
|
18
|
+
private options: { pollingIntervalMs: number; provingDelayMs?: number },
|
|
19
|
+
) {
|
|
20
|
+
this.rollupCheatCodes = new RollupCheatCodes(cheatcodes, { rollupAddress });
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async start() {
|
|
24
|
+
const { epochDuration } = await this.rollupCheatCodes.getConfig();
|
|
25
|
+
this.epochMonitor = new EpochMonitor(this.l2BlockSource, { epochDuration: Number(epochDuration) }, this.options);
|
|
26
|
+
this.epochMonitor.start(this);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async stop() {
|
|
30
|
+
await this.epochMonitor?.stop();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async handleEpochReadyToProve(epoch: EpochNumber): Promise<boolean> {
|
|
34
|
+
const checkpointedBlocks = await this.l2BlockSource.getCheckpointedBlocksForEpoch(epoch);
|
|
35
|
+
const blocks = checkpointedBlocks.map(b => b.block);
|
|
36
|
+
this.log.info(
|
|
37
|
+
`Settling epoch ${epoch} with blocks ${blocks[0]?.header.getBlockNumber()} to ${blocks.at(-1)?.header.getBlockNumber()}`,
|
|
38
|
+
{ blocks: blocks.map(b => b.toBlockInfo()) },
|
|
39
|
+
);
|
|
40
|
+
const messagesInEpoch: Fr[][][][] = [];
|
|
41
|
+
let previousSlotNumber = SlotNumber.ZERO;
|
|
42
|
+
let checkpointIndex = -1;
|
|
43
|
+
|
|
44
|
+
for (const block of blocks) {
|
|
45
|
+
const slotNumber = block.header.globalVariables.slotNumber;
|
|
46
|
+
if (slotNumber !== previousSlotNumber) {
|
|
47
|
+
checkpointIndex++;
|
|
48
|
+
messagesInEpoch[checkpointIndex] = [];
|
|
49
|
+
previousSlotNumber = slotNumber;
|
|
50
|
+
}
|
|
51
|
+
messagesInEpoch[checkpointIndex].push(block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const [firstMessage] = messagesInEpoch.flat(3);
|
|
55
|
+
if (firstMessage) {
|
|
56
|
+
const { root: outHash } = computeL2ToL1MembershipWitnessFromMessagesInEpoch(messagesInEpoch, firstMessage);
|
|
57
|
+
await this.rollupCheatCodes.insertOutbox(epoch, outHash.toBigInt());
|
|
58
|
+
} else {
|
|
59
|
+
this.log.info(`No L2 to L1 messages in epoch ${epoch}`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const lastCheckpoint = checkpointedBlocks.at(-1)?.checkpointNumber;
|
|
63
|
+
if (lastCheckpoint !== undefined) {
|
|
64
|
+
await this.rollupCheatCodes.markAsProven(lastCheckpoint);
|
|
65
|
+
} else {
|
|
66
|
+
this.log.warn(`No checkpoint found for epoch ${epoch}`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
}
|
package/src/testing/index.ts
CHANGED