@aztec/end-to-end 0.0.1-commit.ee80a48 → 0.0.1-commit.f103f88
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/README.md +27 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +2 -2
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +22 -29
- package/dest/bench/client_flows/config.d.ts +2 -2
- package/dest/bench/client_flows/config.d.ts.map +1 -1
- package/dest/bench/client_flows/config.js +18 -0
- package/dest/bench/utils.d.ts +1 -1
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +6 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +23 -13
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +2 -2
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +3 -2
- package/dest/e2e_deploy_contract/deploy_test.d.ts +2 -2
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.d.ts +11 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +64 -36
- package/dest/e2e_fees/fees_test.d.ts +2 -2
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +19 -12
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +4 -6
- package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
- package/dest/e2e_p2p/p2p_network.d.ts +9 -10
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +38 -20
- package/dest/e2e_p2p/reqresp/utils.d.ts +3 -3
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
- package/dest/e2e_p2p/reqresp/utils.js +46 -9
- package/dest/e2e_p2p/shared.d.ts +26 -8
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +54 -45
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
- package/dest/e2e_token_contract/token_contract_test.d.ts +4 -2
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +19 -9
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +34 -0
- package/dest/fixtures/e2e_prover_test.d.ts +7 -6
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +37 -49
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +5 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +6 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +1 -1
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +3 -1
- package/dest/fixtures/setup.d.ts +53 -29
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +79 -163
- package/dest/fixtures/setup_p2p_test.d.ts +18 -10
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +23 -17
- package/dest/fixtures/token_utils.d.ts +2 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +5 -7
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/shared/cross_chain_test_harness.d.ts +1 -1
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +13 -13
- package/dest/shared/gas_portal_test_harness.js +2 -2
- package/dest/shared/index.d.ts +2 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.js +41 -1
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +2 -2
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +16 -17
- package/dest/simulators/lending_simulator.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +4 -4
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +3 -24
- package/dest/spartan/setup_test_wallets.d.ts +12 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +100 -39
- package/dest/spartan/tx_metrics.js +1 -1
- package/dest/spartan/utils/bot.d.ts +3 -2
- package/dest/spartan/utils/bot.d.ts.map +1 -1
- package/dest/spartan/utils/bot.js +2 -1
- package/dest/spartan/utils/config.d.ts +7 -1
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +3 -1
- package/dest/spartan/utils/index.d.ts +4 -2
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +5 -1
- package/dest/spartan/utils/k8s.d.ts +3 -1
- package/dest/spartan/utils/k8s.d.ts.map +1 -1
- package/dest/spartan/utils/k8s.js +6 -0
- package/dest/spartan/utils/nodes.d.ts +4 -5
- package/dest/spartan/utils/nodes.d.ts.map +1 -1
- package/dest/spartan/utils/nodes.js +9 -9
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/test-wallet/test_wallet.d.ts +84 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +249 -0
- package/dest/test-wallet/utils.d.ts +41 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +71 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +48 -0
- package/dest/test-wallet/worker_wallet.d.ts +52 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +151 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +279 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +10 -0
- package/package.json +43 -43
- package/src/bench/client_flows/client_flows_benchmark.ts +31 -18
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +8 -3
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +31 -21
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +7 -8
- package/src/e2e_deploy_contract/deploy_test.ts +3 -3
- package/src/e2e_epochs/epochs_test.ts +85 -63
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +21 -29
- package/src/e2e_nested_contract/nested_contract_test.ts +7 -5
- package/src/e2e_p2p/inactivity_slash_test.ts +7 -7
- package/src/e2e_p2p/p2p_network.ts +58 -37
- package/src/e2e_p2p/reqresp/utils.ts +62 -13
- package/src/e2e_p2p/shared.ts +74 -60
- package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
- package/src/e2e_token_contract/token_contract_test.ts +26 -9
- package/src/fixtures/authwit_proxy.ts +54 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +46 -55
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +10 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +3 -1
- package/src/fixtures/setup.ts +124 -231
- package/src/fixtures/setup_p2p_test.ts +33 -32
- package/src/fixtures/token_utils.ts +3 -3
- package/src/guides/up_quick_start.sh +3 -3
- package/src/legacy-jest-resolver.cjs +135 -0
- package/src/shared/cross_chain_test_harness.ts +13 -9
- package/src/shared/gas_portal_test_harness.ts +1 -1
- package/src/shared/index.ts +1 -0
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +3 -2
- package/src/shared/uniswap_l1_l2.ts +38 -33
- package/src/simulators/lending_simulator.ts +8 -4
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/setup_test_wallets.ts +141 -32
- package/src/spartan/tx_metrics.ts +1 -1
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/config.ts +2 -0
- package/src/spartan/utils/index.ts +7 -0
- package/src/spartan/utils/k8s.ts +8 -0
- package/src/spartan/utils/nodes.ts +15 -10
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/test-wallet/test_wallet.ts +351 -0
- package/src/test-wallet/utils.ts +112 -0
- package/src/test-wallet/wallet_worker_script.ts +60 -0
- package/src/test-wallet/worker_wallet.ts +214 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
package/dest/fixtures/setup.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
|
|
2
|
-
import { generateSchnorrAccounts
|
|
3
|
-
import { createArchiver } from '@aztec/archiver';
|
|
2
|
+
import { generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
4
3
|
import { AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node';
|
|
5
|
-
import {
|
|
4
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
5
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
6
6
|
import { BatchCall, getContractClassFromArtifact, waitForProven } from '@aztec/aztec.js/contracts';
|
|
7
7
|
import { publishContractClass, publishInstance } from '@aztec/aztec.js/deployment';
|
|
8
8
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
9
9
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
10
|
-
import { createAztecNodeClient, waitForNode } from '@aztec/aztec.js/node';
|
|
11
10
|
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
12
|
-
import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
|
|
13
11
|
import { SPONSORED_FPC_SALT } from '@aztec/constants';
|
|
14
12
|
import { isAnvilTestChain } from '@aztec/ethereum/chain';
|
|
15
13
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
@@ -17,7 +15,7 @@ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
|
17
15
|
import { NULL_KEY } from '@aztec/ethereum/constants';
|
|
18
16
|
import { deployMulticall3 } from '@aztec/ethereum/contracts';
|
|
19
17
|
import { deployAztecL1Contracts } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
20
|
-
import {
|
|
18
|
+
import { EthCheatCodesWithState, startAnvil } from '@aztec/ethereum/test';
|
|
21
19
|
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
22
20
|
import { SecretValue } from '@aztec/foundation/config';
|
|
23
21
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
@@ -25,32 +23,30 @@ import { tryRmDir } from '@aztec/foundation/fs';
|
|
|
25
23
|
import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
26
24
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
27
25
|
import { sleep } from '@aztec/foundation/sleep';
|
|
28
|
-
import {
|
|
26
|
+
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
29
27
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
30
28
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
31
29
|
import { MockGossipSubNetwork, getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
32
30
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
33
|
-
import { createProverNode } from '@aztec/prover-node';
|
|
34
31
|
import { getPXEConfig } from '@aztec/pxe/server';
|
|
35
32
|
import { getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
36
33
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
37
34
|
import { getConfigEnvVars as getTelemetryConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
38
35
|
import { BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
|
|
39
|
-
import {
|
|
36
|
+
import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
|
|
40
37
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
41
38
|
import fs from 'fs/promises';
|
|
42
39
|
import { tmpdir } from 'os';
|
|
43
40
|
import path from 'path';
|
|
44
41
|
import { generatePrivateKey, mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
|
|
45
42
|
import { foundry } from 'viem/chains';
|
|
43
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
46
44
|
import { MNEMONIC, TEST_MAX_PENDING_TX_POOL_COUNT, TEST_PEER_CHECK_INTERVAL_MS } from './fixtures.js';
|
|
47
45
|
import { getACVMConfig } from './get_acvm_config.js';
|
|
48
46
|
import { getBBConfig } from './get_bb_config.js';
|
|
49
47
|
import { isMetricsLoggingRequested, setupMetricsLogger } from './logging.js';
|
|
50
48
|
import { getEndToEndTestTelemetryClient } from './with_telemetry_utils.js';
|
|
51
49
|
export { startAnvil };
|
|
52
|
-
const { AZTEC_NODE_URL = '' } = process.env;
|
|
53
|
-
const getAztecUrl = ()=>AZTEC_NODE_URL;
|
|
54
50
|
let telemetry = undefined;
|
|
55
51
|
async function getTelemetryClient(partialConfig = {}) {
|
|
56
52
|
if (!telemetry) {
|
|
@@ -110,65 +106,6 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
110
106
|
teardown
|
|
111
107
|
};
|
|
112
108
|
}
|
|
113
|
-
/**
|
|
114
|
-
* Function to setup the test against a remote deployment. It is assumed that L1 contract are already deployed
|
|
115
|
-
*/ async function setupWithRemoteEnvironment(account, config, logger, numberOfAccounts) {
|
|
116
|
-
const aztecNodeUrl = getAztecUrl();
|
|
117
|
-
logger.verbose(`Creating Aztec Node client to remote host ${aztecNodeUrl}`);
|
|
118
|
-
const aztecNode = createAztecNodeClient(aztecNodeUrl);
|
|
119
|
-
await waitForNode(aztecNode, logger);
|
|
120
|
-
logger.verbose('JSON RPC client connected to Aztec Node');
|
|
121
|
-
logger.verbose(`Retrieving contract addresses from ${aztecNodeUrl}`);
|
|
122
|
-
const { l1ContractAddresses, rollupVersion } = await aztecNode.getNodeInfo();
|
|
123
|
-
const l1Client = createExtendedL1Client(config.l1RpcUrls, account, foundry);
|
|
124
|
-
const deployL1ContractsValues = {
|
|
125
|
-
l1ContractAddresses,
|
|
126
|
-
l1Client,
|
|
127
|
-
rollupVersion
|
|
128
|
-
};
|
|
129
|
-
const ethCheatCodes = new EthCheatCodes(config.l1RpcUrls, new DateProvider());
|
|
130
|
-
const wallet = await TestWallet.create(aztecNode);
|
|
131
|
-
if (config.walletMinFeePadding !== undefined) {
|
|
132
|
-
wallet.setMinFeePadding(config.walletMinFeePadding);
|
|
133
|
-
}
|
|
134
|
-
const cheatCodes = await CheatCodes.create(config.l1RpcUrls, aztecNode, new DateProvider());
|
|
135
|
-
const teardown = ()=>Promise.resolve();
|
|
136
|
-
logger.verbose('Populating wallet from already registered accounts...');
|
|
137
|
-
const initialFundedAccounts = await getInitialTestAccountsData();
|
|
138
|
-
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
139
|
-
throw new Error(`Required ${numberOfAccounts} accounts. Found ${initialFundedAccounts.length}.`);
|
|
140
|
-
}
|
|
141
|
-
const testAccounts = await Promise.all(initialFundedAccounts.slice(0, numberOfAccounts).map(async (account)=>{
|
|
142
|
-
const accountManager = await wallet.createSchnorrAccount(account.secret, account.salt, account.signingKey);
|
|
143
|
-
return accountManager.address;
|
|
144
|
-
}));
|
|
145
|
-
return {
|
|
146
|
-
anvil: undefined,
|
|
147
|
-
aztecNode,
|
|
148
|
-
aztecNodeService: undefined,
|
|
149
|
-
aztecNodeAdmin: undefined,
|
|
150
|
-
sequencer: undefined,
|
|
151
|
-
proverNode: undefined,
|
|
152
|
-
deployL1ContractsValues,
|
|
153
|
-
config,
|
|
154
|
-
aztecNodeConfig: config,
|
|
155
|
-
initialFundedAccounts,
|
|
156
|
-
wallet,
|
|
157
|
-
accounts: testAccounts,
|
|
158
|
-
logger,
|
|
159
|
-
cheatCodes,
|
|
160
|
-
ethCheatCodes,
|
|
161
|
-
prefilledPublicData: undefined,
|
|
162
|
-
mockGossipSubNetwork: undefined,
|
|
163
|
-
watcher: undefined,
|
|
164
|
-
dateProvider: undefined,
|
|
165
|
-
telemetryClient: undefined,
|
|
166
|
-
acvmConfig: undefined,
|
|
167
|
-
bbConfig: undefined,
|
|
168
|
-
directoryToCleanup: undefined,
|
|
169
|
-
teardown
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
109
|
/**
|
|
173
110
|
* Sets up the environment for the end-to-end tests.
|
|
174
111
|
* @param numberOfAccounts - The number of new accounts to be created once the PXE is initiated.
|
|
@@ -178,7 +115,7 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
178
115
|
let anvil;
|
|
179
116
|
try {
|
|
180
117
|
opts.aztecTargetCommitteeSize ??= 0;
|
|
181
|
-
opts.
|
|
118
|
+
opts.slasherEnabled ??= false;
|
|
182
119
|
const config = {
|
|
183
120
|
...getConfigEnvVars(),
|
|
184
121
|
...opts
|
|
@@ -191,7 +128,10 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
191
128
|
config.realProofs = !!opts.realProofs;
|
|
192
129
|
// Only enforce the time table if requested
|
|
193
130
|
config.enforceTimeTable = !!opts.enforceTimeTable;
|
|
131
|
+
// Enable the tx delayer for tests (default config has it disabled, so we force-enable it here)
|
|
132
|
+
config.enableDelayer = true;
|
|
194
133
|
config.listenAddress = '127.0.0.1';
|
|
134
|
+
config.minTxPoolAgeMs = opts.minTxPoolAgeMs ?? 0;
|
|
195
135
|
const logger = getLogger();
|
|
196
136
|
// Create a temp directory for any services that need it and cleanup later
|
|
197
137
|
const directoryToCleanup = path.join(tmpdir(), randomBytes(8).toString('hex'));
|
|
@@ -201,17 +141,17 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
201
141
|
if (!config.dataDirectory) {
|
|
202
142
|
config.dataDirectory = directoryToCleanup;
|
|
203
143
|
}
|
|
144
|
+
const dateProvider = new TestDateProvider();
|
|
204
145
|
if (!config.l1RpcUrls?.length) {
|
|
205
146
|
if (!isAnvilTestChain(chain.id)) {
|
|
206
147
|
throw new Error(`No ETHEREUM_HOSTS set but non anvil chain requested`);
|
|
207
148
|
}
|
|
208
|
-
if (AZTEC_NODE_URL) {
|
|
209
|
-
throw new Error(`AZTEC_NODE_URL provided but no ETHEREUM_HOSTS set. Refusing to run, please set both variables so tests can deploy L1 contracts to the same Anvil instance`);
|
|
210
|
-
}
|
|
211
149
|
const res = await startAnvil({
|
|
212
150
|
l1BlockTime: opts.ethereumSlotDuration,
|
|
213
151
|
accounts: opts.anvilAccounts,
|
|
214
|
-
port: opts.anvilPort ?? (process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT) : undefined)
|
|
152
|
+
port: opts.anvilPort ?? (process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT) : undefined),
|
|
153
|
+
slotsInAnEpoch: opts.anvilSlotsInAnEpoch,
|
|
154
|
+
dateProvider
|
|
215
155
|
});
|
|
216
156
|
anvil = res.anvil;
|
|
217
157
|
config.l1RpcUrls = [
|
|
@@ -224,7 +164,6 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
224
164
|
logger.info(`Logging metrics to ${filename}`);
|
|
225
165
|
setupMetricsLogger(filename);
|
|
226
166
|
}
|
|
227
|
-
const dateProvider = new TestDateProvider();
|
|
228
167
|
const ethCheatCodes = new EthCheatCodesWithState(config.l1RpcUrls, dateProvider);
|
|
229
168
|
if (opts.stateLoad) {
|
|
230
169
|
await ethCheatCodes.loadChainState(opts.stateLoad);
|
|
@@ -239,8 +178,8 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
239
178
|
if (opts.l1PublisherKey && opts.l1PublisherKey.getValue() && opts.l1PublisherKey.getValue() != NULL_KEY) {
|
|
240
179
|
publisherPrivKeyHex = opts.l1PublisherKey.getValue();
|
|
241
180
|
publisherHdAccount = privateKeyToAccount(publisherPrivKeyHex);
|
|
242
|
-
} else if (config.
|
|
243
|
-
publisherPrivKeyHex = config.
|
|
181
|
+
} else if (config.sequencerPublisherPrivateKeys && config.sequencerPublisherPrivateKeys.length > 0 && config.sequencerPublisherPrivateKeys[0].getValue() != NULL_KEY) {
|
|
182
|
+
publisherPrivKeyHex = config.sequencerPublisherPrivateKeys[0].getValue();
|
|
244
183
|
publisherHdAccount = privateKeyToAccount(publisherPrivKeyHex);
|
|
245
184
|
} else if (!MNEMONIC) {
|
|
246
185
|
throw new Error(`Mnemonic not provided and no publisher private key`);
|
|
@@ -251,17 +190,13 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
251
190
|
const publisherPrivKeyRaw = publisherHdAccount.getHdKey().privateKey;
|
|
252
191
|
const publisherPrivKey = publisherPrivKeyRaw === null ? null : Buffer.from(publisherPrivKeyRaw);
|
|
253
192
|
publisherPrivKeyHex = `0x${publisherPrivKey.toString('hex')}`;
|
|
254
|
-
config.
|
|
193
|
+
config.sequencerPublisherPrivateKeys = [
|
|
255
194
|
new SecretValue(publisherPrivKeyHex)
|
|
256
195
|
];
|
|
257
196
|
}
|
|
258
197
|
if (config.coinbase === undefined) {
|
|
259
198
|
config.coinbase = EthAddress.fromString(publisherHdAccount.address);
|
|
260
199
|
}
|
|
261
|
-
if (AZTEC_NODE_URL) {
|
|
262
|
-
// we are setting up against a remote environment, l1 contracts are assumed to already be deployed
|
|
263
|
-
return await setupWithRemoteEnvironment(publisherHdAccount, config, logger, numberOfAccounts);
|
|
264
|
-
}
|
|
265
200
|
// Determine which addresses to fund in genesis
|
|
266
201
|
const initialFundedAccounts = opts.initialFundedAccounts ?? await generateSchnorrAccounts(opts.numberOfInitialFundedAccounts ?? Math.max(numberOfAccounts, 10));
|
|
267
202
|
const addressesToFund = initialFundedAccounts.map((a)=>a.address);
|
|
@@ -270,7 +205,8 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
270
205
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
271
206
|
addressesToFund.push(sponsoredFPCAddress);
|
|
272
207
|
}
|
|
273
|
-
const
|
|
208
|
+
const genesisTimestamp = BigInt(Math.floor(Date.now() / 1000));
|
|
209
|
+
const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(addressesToFund, opts.initialAccountFeeJuice, opts.genesisPublicData, genesisTimestamp);
|
|
274
210
|
const wasAutomining = await ethCheatCodes.isAutoMining();
|
|
275
211
|
const enableAutomine = opts.automineL1Setup && !wasAutomining && isAnvilTestChain(chain.id);
|
|
276
212
|
if (enableAutomine) {
|
|
@@ -300,7 +236,12 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
300
236
|
if (enableAutomine) {
|
|
301
237
|
await ethCheatCodes.setAutomine(false);
|
|
302
238
|
await ethCheatCodes.setIntervalMining(config.ethereumSlotDuration);
|
|
303
|
-
|
|
239
|
+
}
|
|
240
|
+
// In compose mode (no local anvil), sync dateProvider to L1 time since it may have drifted
|
|
241
|
+
// ahead of system time due to the local-network watcher warping time forward on each filled slot.
|
|
242
|
+
// When running with a local anvil, the dateProvider is kept in sync via the stdout listener.
|
|
243
|
+
if (!anvil) {
|
|
244
|
+
dateProvider.setTime(await ethCheatCodes.lastBlockTimestamp() * 1000);
|
|
304
245
|
}
|
|
305
246
|
if (opts.l2StartTime) {
|
|
306
247
|
await ethCheatCodes.warp(opts.l2StartTime, {
|
|
@@ -328,7 +269,7 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
328
269
|
let mockGossipSubNetwork;
|
|
329
270
|
let p2pClientDeps = undefined;
|
|
330
271
|
if (opts.mockGossipSubNetwork) {
|
|
331
|
-
mockGossipSubNetwork = new MockGossipSubNetwork();
|
|
272
|
+
mockGossipSubNetwork = new MockGossipSubNetwork(opts.mockGossipSubNetworkLatency);
|
|
332
273
|
p2pClientDeps = {
|
|
333
274
|
p2pServiceFactory: getMockPubSubP2PServiceFactory(mockGossipSubNetwork)
|
|
334
275
|
};
|
|
@@ -362,26 +303,34 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
362
303
|
telemetry: telemetryClient,
|
|
363
304
|
p2pClientDeps
|
|
364
305
|
}, {
|
|
365
|
-
|
|
306
|
+
genesis
|
|
366
307
|
}));
|
|
367
308
|
const sequencerClient = aztecNodeService.getSequencer();
|
|
368
|
-
if (sequencerClient) {
|
|
369
|
-
const publisher = sequencerClient.sequencer.publisher;
|
|
370
|
-
publisher.l1TxUtils = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, config.ethereumSlotDuration, l1Client);
|
|
371
|
-
}
|
|
372
309
|
let proverNode = undefined;
|
|
373
310
|
if (opts.startProverNode) {
|
|
374
311
|
logger.verbose('Creating and syncing a simulated prover node...');
|
|
375
312
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
376
313
|
const proverNodePrivateKeyHex = `0x${proverNodePrivateKey.toString('hex')}`;
|
|
377
314
|
const proverNodeDataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
378
|
-
const
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
315
|
+
const p2pClientDeps = {
|
|
316
|
+
p2pServiceFactory: mockGossipSubNetwork && getMockPubSubP2PServiceFactory(mockGossipSubNetwork),
|
|
317
|
+
rpcTxProviders: [
|
|
318
|
+
aztecNodeService
|
|
319
|
+
]
|
|
382
320
|
};
|
|
383
|
-
proverNode = await createAndSyncProverNode(proverNodePrivateKeyHex, config,
|
|
321
|
+
({ proverNode } = await createAndSyncProverNode(proverNodePrivateKeyHex, config, {
|
|
322
|
+
...config.proverNodeConfig,
|
|
323
|
+
dataDirectory: proverNodeDataDirectory
|
|
324
|
+
}, {
|
|
325
|
+
dateProvider,
|
|
326
|
+
p2pClientDeps,
|
|
327
|
+
telemetry: telemetryClient
|
|
328
|
+
}, {
|
|
329
|
+
genesis
|
|
330
|
+
}));
|
|
384
331
|
}
|
|
332
|
+
const sequencerDelayer = sequencerClient?.getDelayer();
|
|
333
|
+
const proverDelayer = proverNode?.getProverNode()?.getDelayer();
|
|
385
334
|
logger.verbose('Creating a pxe...');
|
|
386
335
|
const pxeConfig = {
|
|
387
336
|
...getPXEConfig(),
|
|
@@ -443,7 +392,7 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
443
392
|
logger.error(`Error during e2e test teardown`, err);
|
|
444
393
|
} finally{
|
|
445
394
|
try {
|
|
446
|
-
await telemetryClient
|
|
395
|
+
await telemetryClient.stop();
|
|
447
396
|
} catch (err) {
|
|
448
397
|
logger.error(`Error during telemetry client stop`, err);
|
|
449
398
|
}
|
|
@@ -463,8 +412,10 @@ export const getPrivateKeyFromIndex = (index)=>{
|
|
|
463
412
|
initialFundedAccounts,
|
|
464
413
|
logger,
|
|
465
414
|
mockGossipSubNetwork,
|
|
466
|
-
|
|
415
|
+
genesis,
|
|
467
416
|
proverNode,
|
|
417
|
+
sequencerDelayer,
|
|
418
|
+
proverDelayer,
|
|
468
419
|
sequencer: sequencerClient,
|
|
469
420
|
teardown,
|
|
470
421
|
telemetryClient,
|
|
@@ -525,77 +476,41 @@ export async function waitForProvenChain(node, targetBlock, timeoutSec = 60, int
|
|
|
525
476
|
targetBlock ??= await node.getBlockNumber();
|
|
526
477
|
await retryUntil(async ()=>await node.getProvenBlockNumber() >= targetBlock, 'proven chain status', timeoutSec, intervalSec);
|
|
527
478
|
}
|
|
528
|
-
|
|
479
|
+
/**
|
|
480
|
+
* Creates an AztecNodeService with the prover node enabled as a subsystem.
|
|
481
|
+
* Returns both the aztec node service (for lifecycle management) and the prover node (for test internals access).
|
|
482
|
+
*/ export function createAndSyncProverNode(proverNodePrivateKey, baseConfig, configOverrides, deps, options) {
|
|
529
483
|
return withLoggerBindings({
|
|
530
484
|
actor: 'prover-0'
|
|
531
485
|
}, async ()=>{
|
|
532
|
-
const
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
...aztecNodeConfig,
|
|
540
|
-
dataDirectory: proverNodeConfig.dataDirectory
|
|
541
|
-
};
|
|
542
|
-
const archiver = await createArchiver(archiverConfig, {
|
|
543
|
-
blobClient,
|
|
544
|
-
dateProvider: proverNodeDeps.dateProvider
|
|
545
|
-
}, {
|
|
546
|
-
blockUntilSync: true
|
|
547
|
-
});
|
|
548
|
-
const proverConfig = {
|
|
549
|
-
...aztecNodeConfig,
|
|
550
|
-
txCollectionNodeRpcUrls: [],
|
|
551
|
-
realProofs: false,
|
|
552
|
-
proverAgentCount: 2,
|
|
553
|
-
publisherPrivateKeys: [
|
|
486
|
+
const proverNode = await AztecNodeService.createAndSync({
|
|
487
|
+
...baseConfig,
|
|
488
|
+
...configOverrides,
|
|
489
|
+
p2pPort: 0,
|
|
490
|
+
enableProverNode: true,
|
|
491
|
+
disableValidator: true,
|
|
492
|
+
proverPublisherPrivateKeys: [
|
|
554
493
|
new SecretValue(proverNodePrivateKey)
|
|
555
|
-
]
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
txGatheringIntervalMs: 1000,
|
|
560
|
-
txGatheringBatchSize: 10,
|
|
561
|
-
txGatheringMaxParallelRequestsPerNode: 10,
|
|
562
|
-
txGatheringTimeoutMs: 24_000,
|
|
563
|
-
proverNodeFailedEpochStore: undefined,
|
|
564
|
-
proverId: EthAddress.fromNumber(1),
|
|
565
|
-
proverNodeEpochProvingDelayMs: undefined,
|
|
566
|
-
...proverNodeConfig
|
|
567
|
-
};
|
|
568
|
-
const l1TxUtils = createDelayedL1TxUtils(aztecNodeConfig, proverNodePrivateKey, 'prover-node', proverNodeDeps.dateProvider);
|
|
569
|
-
const proverNode = await createProverNode(proverConfig, {
|
|
570
|
-
...proverNodeDeps,
|
|
571
|
-
aztecNodeTxProvider,
|
|
572
|
-
archiver: archiver,
|
|
573
|
-
l1TxUtils
|
|
574
|
-
}, {
|
|
575
|
-
prefilledPublicData
|
|
494
|
+
]
|
|
495
|
+
}, deps, {
|
|
496
|
+
genesis: options.genesis,
|
|
497
|
+
dontStartProverNode: options.dontStart
|
|
576
498
|
});
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
});
|
|
580
|
-
if (!proverNodeConfig.dontStart) {
|
|
581
|
-
await proverNode.start();
|
|
499
|
+
if (!proverNode.getProverNode()) {
|
|
500
|
+
throw new Error('Prover node subsystem was not created despite enableProverNode being set');
|
|
582
501
|
}
|
|
583
|
-
|
|
502
|
+
getLogger().info(`Created and synced prover node`);
|
|
503
|
+
return {
|
|
504
|
+
proverNode
|
|
505
|
+
};
|
|
584
506
|
});
|
|
585
507
|
}
|
|
586
|
-
function
|
|
587
|
-
const l1Client = createExtendedL1Client(aztecNodeConfig.l1RpcUrls, privateKey, foundry);
|
|
588
|
-
const log = createLogger(logName);
|
|
589
|
-
const l1TxUtils = createDelayedL1TxUtilsFromViemWallet(l1Client, log, dateProvider, aztecNodeConfig);
|
|
590
|
-
l1TxUtils.enableDelayer(aztecNodeConfig.ethereumSlotDuration);
|
|
591
|
-
return l1TxUtils;
|
|
592
|
-
}
|
|
593
|
-
export function getBalancesFn(symbol, method, from, logger) {
|
|
508
|
+
export function getBalancesFn(symbol, method, logger) {
|
|
594
509
|
const balances = async (...addressLikes)=>{
|
|
595
510
|
const addresses = addressLikes.map((addressLike)=>'address' in addressLike ? addressLike.address : addressLike);
|
|
596
|
-
const b = await Promise.all(addresses.map((address)=>method(address).simulate({
|
|
597
|
-
from
|
|
598
|
-
})));
|
|
511
|
+
const b = await Promise.all(addresses.map(async (address)=>(await method(address).simulate({
|
|
512
|
+
from: address
|
|
513
|
+
})).result));
|
|
599
514
|
const debugString = `${symbol} balances: ${addresses.map((address, i)=>`${address}: ${b[i]}`).join(', ')}`;
|
|
600
515
|
logger.verbose(debugString);
|
|
601
516
|
return b;
|
|
@@ -639,7 +554,7 @@ export async function expectMappingDelta(initialValues, fn, inputs, expectedDiff
|
|
|
639
554
|
/**
|
|
640
555
|
* Helper function to deploy accounts.
|
|
641
556
|
* Returns deployed account data that can be used by tests.
|
|
642
|
-
*/ export const deployAccounts = (numberOfAccounts, logger)=>async ({ wallet, initialFundedAccounts })=>{
|
|
557
|
+
*/ export const deployAccounts = (numberOfAccounts, logger, deployOptions)=>async ({ wallet, initialFundedAccounts })=>{
|
|
643
558
|
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
644
559
|
throw new Error(`Cannot deploy more than ${initialFundedAccounts.length} initial accounts.`);
|
|
645
560
|
}
|
|
@@ -650,8 +565,9 @@ export async function expectMappingDelta(initialValues, fn, inputs, expectedDiff
|
|
|
650
565
|
const accountManager = await wallet.createSchnorrAccount(deployedAccounts[i].secret, deployedAccounts[i].salt, deployedAccounts[i].signingKey);
|
|
651
566
|
const deployMethod = await accountManager.getDeployMethod();
|
|
652
567
|
await deployMethod.send({
|
|
653
|
-
from:
|
|
654
|
-
skipClassPublication: i !== 0
|
|
568
|
+
from: NO_FROM,
|
|
569
|
+
skipClassPublication: i !== 0,
|
|
570
|
+
...deployOptions
|
|
655
571
|
});
|
|
656
572
|
}
|
|
657
573
|
return {
|
|
@@ -672,7 +588,7 @@ export async function expectMappingDelta(initialValues, fn, inputs, expectedDiff
|
|
|
672
588
|
...instances.map((instance)=>publishInstance(wallet, instance))
|
|
673
589
|
]);
|
|
674
590
|
const batch = new BatchCall(wallet, calls);
|
|
675
|
-
const txReceipt = await batch.send({
|
|
591
|
+
const { receipt: txReceipt } = await batch.send({
|
|
676
592
|
from: accountsToDeploy[0]
|
|
677
593
|
});
|
|
678
594
|
if (waitUntilProven) {
|
|
@@ -3,20 +3,28 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
5
5
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
6
|
-
import type {
|
|
7
|
-
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
6
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
8
7
|
export declare const ATTESTER_PRIVATE_KEYS_START_INDEX = 3;
|
|
9
8
|
export declare function generatePrivateKeys(startIndex: number, numberOfKeys: number): `0x${string}`[];
|
|
10
9
|
export declare function createNodes(config: AztecNodeConfig & {
|
|
11
10
|
dontStartSequencer?: boolean;
|
|
12
|
-
}, dateProvider: DateProvider, bootstrapNodeEnr: string, numNodes: number, bootNodePort: number,
|
|
13
|
-
/**
|
|
14
|
-
export
|
|
11
|
+
}, dateProvider: DateProvider, bootstrapNodeEnr: string, numNodes: number, bootNodePort: number, genesis?: GenesisData, dataDirectory?: string, metricsPort?: number, indexOffset?: number, validatorsPerNode?: number): Promise<AztecNodeService[]>;
|
|
12
|
+
/** Extended config type for createNode with test-specific overrides. */
|
|
13
|
+
export type CreateNodeConfig = AztecNodeConfig & {
|
|
14
|
+
/** Whether to skip starting the sequencer. */
|
|
15
15
|
dontStartSequencer?: boolean;
|
|
16
|
-
|
|
16
|
+
/** Override the private key (instead of deriving from addressIndex). */
|
|
17
|
+
validatorPrivateKey?: `0x${string}`;
|
|
18
|
+
};
|
|
19
|
+
/** Creates a P2P enabled instance of Aztec Node Service with a validator. */
|
|
20
|
+
export declare function createNode(config: CreateNodeConfig, dateProvider: DateProvider, tcpPort: number, bootstrapNode: string | undefined, addressIndex: number | number[], genesis?: GenesisData, dataDirectory?: string, metricsPort?: number): Promise<AztecNodeService>;
|
|
17
21
|
/** Creates a P2P enabled instance of Aztec Node Service without a validator */
|
|
18
|
-
export declare function createNonValidatorNode(baseConfig: AztecNodeConfig, dateProvider: DateProvider, tcpPort: number, bootstrapNode: string | undefined,
|
|
19
|
-
export declare function createProverNode(config: AztecNodeConfig, tcpPort: number, bootstrapNode: string | undefined, addressIndex: number,
|
|
22
|
+
export declare function createNonValidatorNode(baseConfig: AztecNodeConfig, dateProvider: DateProvider, tcpPort: number, bootstrapNode: string | undefined, genesis?: GenesisData, dataDirectory?: string, metricsPort?: number): Promise<AztecNodeService>;
|
|
23
|
+
export declare function createProverNode(config: AztecNodeConfig, tcpPort: number, bootstrapNode: string | undefined, addressIndex: number, deps: {
|
|
24
|
+
dateProvider: DateProvider;
|
|
25
|
+
}, genesis?: GenesisData, dataDirectory?: string, metricsPort?: number): Promise<{
|
|
26
|
+
proverNode: AztecNodeService;
|
|
27
|
+
}>;
|
|
20
28
|
export declare function createP2PConfig(config: AztecNodeConfig, bootstrapNodeEnr?: string, port?: number, dataDirectory?: string): Promise<AztecNodeConfig>;
|
|
21
|
-
export declare function createValidatorConfig(config:
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
export declare function createValidatorConfig(config: CreateNodeConfig, bootstrapNodeEnr?: string, port?: number, addressIndex?: number | number[], dataDirectory?: string): Promise<AztecNodeConfig>;
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBfcDJwX3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9zZXR1cF9wMnBfdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSzNFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBVzdELGVBQU8sTUFBTSxpQ0FBaUMsSUFBSSxDQUFDO0FBT25ELHdCQUFnQixtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsS0FBSyxNQUFNLEVBQUUsRUFBRSxDQU83RjtBQUVELHdCQUFzQixXQUFXLENBQy9CLE1BQU0sRUFBRSxlQUFlLEdBQUc7SUFBRSxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtDQUFFLEVBQzFELFlBQVksRUFBRSxZQUFZLEVBQzFCLGdCQUFnQixFQUFFLE1BQU0sRUFDeEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsWUFBWSxFQUFFLE1BQU0sRUFDcEIsT0FBTyxDQUFDLEVBQUUsV0FBVyxFQUNyQixhQUFhLENBQUMsRUFBRSxNQUFNLEVBQ3RCLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFDcEIsV0FBVyxTQUFJLEVBQ2YsaUJBQWlCLFNBQUksR0FDcEIsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FtQzdCO0FBRUQsd0VBQXdFO0FBQ3hFLE1BQU0sTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLEdBQUc7SUFDL0MsOENBQThDO0lBQzlDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQzdCLHdFQUF3RTtJQUN4RSxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7Q0FDckMsQ0FBQztBQUVGLDZFQUE2RTtBQUM3RSx3QkFBc0IsVUFBVSxDQUM5QixNQUFNLEVBQUUsZ0JBQWdCLEVBQ3hCLFlBQVksRUFBRSxZQUFZLEVBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsYUFBYSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQ2pDLFlBQVksRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQy9CLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFDckIsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUN0QixXQUFXLENBQUMsRUFBRSxNQUFNLDZCQVlyQjtBQUVELCtFQUErRTtBQUMvRSx3QkFBc0Isc0JBQXNCLENBQzFDLFVBQVUsRUFBRSxlQUFlLEVBQzNCLFlBQVksRUFBRSxZQUFZLEVBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsYUFBYSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQ2pDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFDckIsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUN0QixXQUFXLENBQUMsRUFBRSxNQUFNLDZCQWNyQjtBQUVELHdCQUFzQixnQkFBZ0IsQ0FDcEMsTUFBTSxFQUFFLGVBQWUsRUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFDZixhQUFhLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDakMsWUFBWSxFQUFFLE1BQU0sRUFDcEIsSUFBSSxFQUFFO0lBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQTtDQUFFLEVBQ3BDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFDckIsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUN0QixXQUFXLENBQUMsRUFBRSxNQUFNLEdBQ25CLE9BQU8sQ0FBQztJQUFFLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQTtDQUFFLENBQUMsQ0FnQjNDO0FBRUQsd0JBQXNCLGVBQWUsQ0FDbkMsTUFBTSxFQUFFLGVBQWUsRUFDdkIsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQ3pCLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFDYixhQUFhLENBQUMsRUFBRSxNQUFNLDRCQWdCdkI7QUFFRCx3QkFBc0IscUJBQXFCLENBQ3pDLE1BQU0sRUFBRSxnQkFBZ0IsRUFDeEIsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQ3pCLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFDYixZQUFZLEdBQUUsTUFBTSxHQUFHLE1BQU0sRUFBTSxFQUNuQyxhQUFhLENBQUMsRUFBRSxNQUFNLDRCQW9CdkIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup_p2p_test.d.ts","sourceRoot":"","sources":["../../src/fixtures/setup_p2p_test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"setup_p2p_test.d.ts","sourceRoot":"","sources":["../../src/fixtures/setup_p2p_test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAW7D,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAOnD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,EAAE,CAO7F;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,eAAe,GAAG;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1D,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,WAAW,EACrB,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,SAAI,EACf,iBAAiB,SAAI,GACpB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmC7B;AAED,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,wEAAwE;IACxE,mBAAmB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,6EAA6E;AAC7E,wBAAsB,UAAU,CAC9B,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,EAC/B,OAAO,CAAC,EAAE,WAAW,EACrB,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,6BAYrB;AAED,+EAA+E;AAC/E,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,eAAe,EAC3B,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,OAAO,CAAC,EAAE,WAAW,EACrB,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,6BAcrB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IAAE,YAAY,EAAE,YAAY,CAAA;CAAE,EACpC,OAAO,CAAC,EAAE,WAAW,EACrB,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,UAAU,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAgB3C;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,gBAAgB,CAAC,EAAE,MAAM,EACzB,IAAI,CAAC,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,4BAgBvB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,CAAC,EAAE,MAAM,EACzB,IAAI,CAAC,EAAE,MAAM,EACb,YAAY,GAAE,MAAM,GAAG,MAAM,EAAM,EACnC,aAAa,CAAC,EAAE,MAAM,4BAoBvB"}
|
|
@@ -25,7 +25,7 @@ export function generatePrivateKeys(startIndex, numberOfKeys) {
|
|
|
25
25
|
}
|
|
26
26
|
return privateKeys;
|
|
27
27
|
}
|
|
28
|
-
export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNodes, bootNodePort,
|
|
28
|
+
export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNodes, bootNodePort, genesis, dataDirectory, metricsPort, indexOffset = 0, validatorsPerNode = 1) {
|
|
29
29
|
const nodePromises = [];
|
|
30
30
|
for(let i = 0; i < numNodes; i++){
|
|
31
31
|
const index = indexOffset + i;
|
|
@@ -35,7 +35,7 @@ export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNod
|
|
|
35
35
|
const validatorIndices = validatorsPerNode === 1 ? index : range(validatorsPerNode, validatorsPerNode * index);
|
|
36
36
|
// Assign data directory
|
|
37
37
|
const dataDir = dataDirectory ? `${dataDirectory}-${index}` : undefined;
|
|
38
|
-
const nodePromise = createNode(config, dateProvider, port, bootstrapNodeEnr, validatorIndices,
|
|
38
|
+
const nodePromise = createNode(config, dateProvider, port, bootstrapNodeEnr, validatorIndices, genesis, dataDir, metricsPort);
|
|
39
39
|
nodePromises.push(nodePromise);
|
|
40
40
|
}
|
|
41
41
|
const nodes = await Promise.all(nodePromises);
|
|
@@ -46,7 +46,7 @@ export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNod
|
|
|
46
46
|
}
|
|
47
47
|
return nodes;
|
|
48
48
|
}
|
|
49
|
-
/** Creates a P2P enabled instance of Aztec Node Service with a validator */ export async function createNode(config, dateProvider, tcpPort, bootstrapNode, addressIndex,
|
|
49
|
+
/** Creates a P2P enabled instance of Aztec Node Service with a validator. */ export async function createNode(config, dateProvider, tcpPort, bootstrapNode, addressIndex, genesis, dataDirectory, metricsPort) {
|
|
50
50
|
const actorIndex = validatorCounter++;
|
|
51
51
|
return await withLoggerBindings({
|
|
52
52
|
actor: `validator-${actorIndex}`
|
|
@@ -57,12 +57,12 @@ export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNod
|
|
|
57
57
|
telemetry,
|
|
58
58
|
dateProvider
|
|
59
59
|
}, {
|
|
60
|
-
|
|
60
|
+
genesis,
|
|
61
61
|
dontStartSequencer: config.dontStartSequencer
|
|
62
62
|
});
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
|
-
/** Creates a P2P enabled instance of Aztec Node Service without a validator */ export async function createNonValidatorNode(baseConfig, dateProvider, tcpPort, bootstrapNode,
|
|
65
|
+
/** Creates a P2P enabled instance of Aztec Node Service without a validator */ export async function createNonValidatorNode(baseConfig, dateProvider, tcpPort, bootstrapNode, genesis, dataDirectory, metricsPort) {
|
|
66
66
|
const actorIndex = nodeCounter++;
|
|
67
67
|
return await withLoggerBindings({
|
|
68
68
|
actor: `node-${actorIndex}`
|
|
@@ -72,32 +72,35 @@ export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNod
|
|
|
72
72
|
...p2pConfig,
|
|
73
73
|
disableValidator: true,
|
|
74
74
|
validatorPrivateKeys: undefined,
|
|
75
|
-
|
|
75
|
+
sequencerPublisherPrivateKeys: []
|
|
76
76
|
};
|
|
77
77
|
const telemetry = await getEndToEndTestTelemetryClient(metricsPort);
|
|
78
78
|
return await AztecNodeService.createAndSync(config, {
|
|
79
79
|
telemetry,
|
|
80
80
|
dateProvider
|
|
81
81
|
}, {
|
|
82
|
-
|
|
82
|
+
genesis
|
|
83
83
|
});
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
|
-
export async function createProverNode(config, tcpPort, bootstrapNode, addressIndex,
|
|
86
|
+
export async function createProverNode(config, tcpPort, bootstrapNode, addressIndex, deps, genesis, dataDirectory, metricsPort) {
|
|
87
87
|
const actorIndex = proverCounter++;
|
|
88
88
|
return await withLoggerBindings({
|
|
89
89
|
actor: `prover-${actorIndex}`
|
|
90
90
|
}, async ()=>{
|
|
91
91
|
const proverNodePrivateKey = getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + addressIndex);
|
|
92
92
|
const telemetry = await getEndToEndTestTelemetryClient(metricsPort);
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
...
|
|
93
|
+
const p2pConfig = await createP2PConfig(config, bootstrapNode, tcpPort, dataDirectory);
|
|
94
|
+
return await createAndSyncProverNode(bufferToHex(proverNodePrivateKey), {
|
|
95
|
+
...config,
|
|
96
|
+
...p2pConfig
|
|
97
|
+
}, {
|
|
97
98
|
dataDirectory
|
|
98
|
-
},
|
|
99
|
-
...
|
|
99
|
+
}, {
|
|
100
|
+
...deps,
|
|
100
101
|
telemetry
|
|
102
|
+
}, {
|
|
103
|
+
genesis
|
|
101
104
|
});
|
|
102
105
|
});
|
|
103
106
|
}
|
|
@@ -121,16 +124,19 @@ export async function createValidatorConfig(config, bootstrapNodeEnr, port, addr
|
|
|
121
124
|
const addressIndices = Array.isArray(addressIndex) ? addressIndex : [
|
|
122
125
|
addressIndex
|
|
123
126
|
];
|
|
124
|
-
if (addressIndices.length === 0) {
|
|
127
|
+
if (addressIndices.length === 0 && !config.validatorPrivateKey) {
|
|
125
128
|
throw new Error('At least one address index must be provided to create a validator config');
|
|
126
129
|
}
|
|
127
|
-
|
|
130
|
+
// Use override private key if provided, otherwise derive from address indices
|
|
131
|
+
const attesterPrivateKeys = config.validatorPrivateKey ? [
|
|
132
|
+
config.validatorPrivateKey
|
|
133
|
+
] : addressIndices.map((index)=>bufferToHex(getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + index)));
|
|
128
134
|
const p2pConfig = await createP2PConfig(config, bootstrapNodeEnr, port, dataDirectory);
|
|
129
135
|
const nodeConfig = {
|
|
130
136
|
...config,
|
|
131
137
|
...p2pConfig,
|
|
132
138
|
validatorPrivateKeys: new SecretValue(attesterPrivateKeys),
|
|
133
|
-
|
|
139
|
+
sequencerPublisherPrivateKeys: [
|
|
134
140
|
new SecretValue(attesterPrivateKeys[0])
|
|
135
141
|
]
|
|
136
142
|
};
|
|
@@ -6,7 +6,7 @@ export declare function deployToken(wallet: Wallet, admin: AztecAddress, initial
|
|
|
6
6
|
contract: TokenContract;
|
|
7
7
|
instance: import("@aztec/aztec.js/contracts").ContractInstanceWithAddress;
|
|
8
8
|
}>;
|
|
9
|
-
export declare function mintTokensToPrivate(token: TokenContract, minter: AztecAddress, recipient: AztecAddress, amount: bigint): Promise<void>;
|
|
9
|
+
export declare function mintTokensToPrivate(token: TokenContract, minter: AztecAddress, recipient: AztecAddress, amount: bigint, additionalScopes?: AztecAddress[]): Promise<void>;
|
|
10
10
|
export declare function expectTokenBalance(wallet: Wallet, token: TokenContract, owner: AztecAddress, expectedBalance: bigint, logger: Logger): Promise<void>;
|
|
11
11
|
export declare function mintNotes(wallet: Wallet, minter: AztecAddress, recipient: AztecAddress, asset: TokenContract, noteAmounts: bigint[]): Promise<bigint>;
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fdXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy90b2tlbl91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0Qsd0JBQXNCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNOzs7R0Fhakg7QUFFRCx3QkFBc0IsbUJBQW1CLENBQ3ZDLEtBQUssRUFBRSxhQUFhLEVBQ3BCLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLFNBQVMsRUFBRSxZQUFZLEVBQ3ZCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsZ0JBQWdCLENBQUMsRUFBRSxZQUFZLEVBQUUsaUJBR2xDO0FBRUQsd0JBQXNCLGtCQUFrQixDQUN0QyxNQUFNLEVBQUUsTUFBTSxFQUNkLEtBQUssRUFBRSxhQUFhLEVBQ3BCLEtBQUssRUFBRSxZQUFZLEVBQ25CLGVBQWUsRUFBRSxNQUFNLEVBQ3ZCLE1BQU0sRUFBRSxNQUFNLGlCQU9mO0FBRUQsd0JBQXNCLFNBQVMsQ0FDN0IsTUFBTSxFQUFFLE1BQU0sRUFDZCxNQUFNLEVBQUUsWUFBWSxFQUNwQixTQUFTLEVBQUUsWUFBWSxFQUN2QixLQUFLLEVBQUUsYUFBYSxFQUNwQixXQUFXLEVBQUUsTUFBTSxFQUFFLEdBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FXakIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token_utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/token_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;
|
|
1
|
+
{"version":3,"file":"token_utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/token_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;GAajH;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,YAAY,EAAE,iBAGlC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,iBAOf;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,CAAC,CAWjB"}
|