@aztec/end-to-end 0.0.1-commit.e6bd8901 → 0.0.1-commit.ec7ac5448
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 +17 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +91 -44
- 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_l1_publisher/write_json.d.ts +3 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +1 -7
- 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 +22 -0
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/e2e_p2p/reqresp/utils.js +190 -0
- 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 +56 -47
- 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 +38 -50
- 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 +71 -0
- package/dest/fixtures/ha_setup.d.ts.map +1 -0
- package/dest/fixtures/ha_setup.js +116 -0
- package/dest/fixtures/index.d.ts +2 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +1 -0
- package/dest/fixtures/setup.d.ts +55 -31
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +97 -176
- package/dest/fixtures/setup_p2p_test.d.ts +18 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +43 -32
- 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.d.ts +35 -1
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +151 -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 +10 -1
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +4 -1
- package/dest/spartan/utils/index.d.ts +6 -4
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +6 -2
- package/dest/spartan/utils/k8s.d.ts +31 -1
- package/dest/spartan/utils/k8s.d.ts.map +1 -1
- package/dest/spartan/utils/k8s.js +124 -0
- package/dest/spartan/utils/nodes.d.ts +14 -5
- package/dest/spartan/utils/nodes.d.ts.map +1 -1
- package/dest/spartan/utils/nodes.js +204 -33
- 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/spartan/utils/scripts.d.ts +18 -4
- package/dest/spartan/utils/scripts.d.ts.map +1 -1
- package/dest/spartan/utils/scripts.js +19 -4
- 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 +274 -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 +46 -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 +115 -72
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +21 -29
- package/src/e2e_l1_publisher/write_json.ts +1 -6
- 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 +256 -0
- package/src/e2e_p2p/shared.ts +84 -62
- 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 +47 -56
- 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 +186 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/setup.ts +132 -239
- package/src/fixtures/setup_p2p_test.ts +48 -52
- 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 +127 -1
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/config.ts +3 -0
- package/src/spartan/utils/index.ts +10 -1
- package/src/spartan/utils/k8s.ts +160 -0
- package/src/spartan/utils/nodes.ts +251 -31
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +43 -7
- 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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Archiver } from '@aztec/archiver';
|
|
1
2
|
import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
2
3
|
import { getTimestampRangeForEpoch } from '@aztec/aztec.js/block';
|
|
3
4
|
import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
@@ -9,28 +10,25 @@ import { EpochCache } from '@aztec/epoch-cache';
|
|
|
9
10
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
10
11
|
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
11
12
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
12
|
-
import {
|
|
13
|
+
import { Delayer, createDelayer, waitUntilL1Timestamp, wrapClientWithDelayer } from '@aztec/ethereum/l1-tx-utils';
|
|
14
|
+
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
13
15
|
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
14
16
|
import { BlockNumber, CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
15
17
|
import { SecretValue } from '@aztec/foundation/config';
|
|
16
18
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
17
|
-
import {
|
|
19
|
+
import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
18
20
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
19
21
|
import { sleep } from '@aztec/foundation/sleep';
|
|
20
22
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
23
|
+
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
21
24
|
import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
22
|
-
import {
|
|
23
|
-
import type {
|
|
24
|
-
import {
|
|
25
|
-
type SequencerClient,
|
|
26
|
-
type SequencerEvents,
|
|
27
|
-
type SequencerPublisher,
|
|
28
|
-
SequencerState,
|
|
29
|
-
} from '@aztec/sequencer-client';
|
|
30
|
-
import type { TestSequencerClient } from '@aztec/sequencer-client/test';
|
|
25
|
+
import type { ProverNodeConfig } from '@aztec/prover-node';
|
|
26
|
+
import type { PXEConfig } from '@aztec/pxe/config';
|
|
27
|
+
import { type SequencerClient, type SequencerEvents, SequencerState } from '@aztec/sequencer-client';
|
|
31
28
|
import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
|
|
32
29
|
import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
33
30
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
31
|
+
import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
|
|
34
32
|
|
|
35
33
|
import { join } from 'path';
|
|
36
34
|
import type { Hex } from 'viem';
|
|
@@ -44,12 +42,16 @@ import {
|
|
|
44
42
|
setup,
|
|
45
43
|
} from '../fixtures/utils.js';
|
|
46
44
|
|
|
47
|
-
export const
|
|
45
|
+
export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
|
|
48
46
|
export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
|
|
49
47
|
export const ARCHIVER_POLL_INTERVAL = 50;
|
|
50
48
|
export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
51
49
|
|
|
52
|
-
export type EpochsTestOpts = Partial<SetupOptions> & {
|
|
50
|
+
export type EpochsTestOpts = Partial<SetupOptions> & {
|
|
51
|
+
numberOfAccounts?: number;
|
|
52
|
+
pxeOpts?: Partial<PXEConfig>;
|
|
53
|
+
aztecSlotDurationInL1Slots?: number;
|
|
54
|
+
};
|
|
53
55
|
|
|
54
56
|
export type TrackedSequencerEvent = {
|
|
55
57
|
[K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
|
|
@@ -75,7 +77,7 @@ export class EpochsTestContext {
|
|
|
75
77
|
public proverDelayer!: Delayer;
|
|
76
78
|
public sequencerDelayer!: Delayer;
|
|
77
79
|
|
|
78
|
-
public proverNodes:
|
|
80
|
+
public proverNodes: AztecNodeService[] = [];
|
|
79
81
|
public nodes: AztecNodeService[] = [];
|
|
80
82
|
|
|
81
83
|
public epochDuration!: number;
|
|
@@ -94,7 +96,7 @@ export class EpochsTestContext {
|
|
|
94
96
|
? parseInt(process.env.L1_BLOCK_TIME)
|
|
95
97
|
: DEFAULT_L1_BLOCK_TIME;
|
|
96
98
|
const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
|
|
97
|
-
const aztecSlotDuration = opts.aztecSlotDuration ??
|
|
99
|
+
const aztecSlotDuration = opts.aztecSlotDuration ?? (opts.aztecSlotDurationInL1Slots ?? 2) * ethereumSlotDuration;
|
|
98
100
|
const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
|
|
99
101
|
const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
|
|
100
102
|
const l1PublishingTime = opts.l1PublishingTime ?? 1;
|
|
@@ -141,14 +143,15 @@ export class EpochsTestContext {
|
|
|
141
143
|
// using the prover's eth address if the proverId is used for something in the rollup contract
|
|
142
144
|
// Use numeric EthAddress for deterministic prover id
|
|
143
145
|
proverId: EthAddress.fromNumber(1),
|
|
144
|
-
|
|
146
|
+
worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
|
|
145
147
|
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
146
|
-
|
|
148
|
+
slasherEnabled: false,
|
|
147
149
|
l1PublishingTime,
|
|
148
150
|
...opts,
|
|
149
151
|
},
|
|
150
|
-
// Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
151
|
-
|
|
152
|
+
// Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
153
|
+
// Can be overridden via opts.pxeOpts.
|
|
154
|
+
{ syncChainTip: 'checkpointed', ...opts.pxeOpts },
|
|
152
155
|
);
|
|
153
156
|
|
|
154
157
|
this.context = context;
|
|
@@ -162,17 +165,8 @@ export class EpochsTestContext {
|
|
|
162
165
|
// Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
|
|
163
166
|
this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
|
|
164
167
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
this.proverDelayer = context.proverNode
|
|
168
|
-
? (((context.proverNode as TestProverNode).publisher as ProverNodePublisher).l1TxUtils as DelayedTxUtils).delayer!
|
|
169
|
-
: undefined!;
|
|
170
|
-
this.sequencerDelayer = context.sequencer
|
|
171
|
-
? (
|
|
172
|
-
((context.sequencer as TestSequencerClient).sequencer.publisher as SequencerPublisher)
|
|
173
|
-
.l1TxUtils as DelayedTxUtils
|
|
174
|
-
).delayer!
|
|
175
|
-
: undefined!;
|
|
168
|
+
this.proverDelayer = context.proverDelayer!;
|
|
169
|
+
this.sequencerDelayer = context.sequencerDelayer!;
|
|
176
170
|
|
|
177
171
|
if ((context.proverNode && !this.proverDelayer) || (context.sequencer && !this.sequencerDelayer)) {
|
|
178
172
|
throw new Error(`Could not find prover or sequencer delayer`);
|
|
@@ -187,6 +181,8 @@ export class EpochsTestContext {
|
|
|
187
181
|
l1GenesisTime: await this.rollup.getL1GenesisTime(),
|
|
188
182
|
ethereumSlotDuration,
|
|
189
183
|
proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
|
|
184
|
+
targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
|
|
185
|
+
rollupManaLimit: Number(await this.rollup.getManaLimit()),
|
|
190
186
|
};
|
|
191
187
|
|
|
192
188
|
this.logger.info(
|
|
@@ -204,20 +200,32 @@ export class EpochsTestContext {
|
|
|
204
200
|
public async createProverNode(opts: { dontStart?: boolean } & Partial<ProverNodeConfig> = {}) {
|
|
205
201
|
this.logger.warn('Creating and syncing a simulated prover node...');
|
|
206
202
|
const proverNodePrivateKey = this.getNextPrivateKey();
|
|
207
|
-
const
|
|
208
|
-
const
|
|
203
|
+
const proverIndex = this.proverNodes.length + 1;
|
|
204
|
+
const { mockGossipSubNetwork } = this.context;
|
|
205
|
+
const { proverNode } = await withLoggerBindings({ actor: `prover-${proverIndex}` }, () =>
|
|
209
206
|
createAndSyncProverNode(
|
|
210
207
|
proverNodePrivateKey,
|
|
211
|
-
{ ...this.context.config },
|
|
212
208
|
{
|
|
213
|
-
|
|
214
|
-
|
|
209
|
+
...this.context.config,
|
|
210
|
+
p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
|
|
211
|
+
proverId: EthAddress.fromNumber(proverIndex),
|
|
215
212
|
dontStart: opts.dontStart,
|
|
216
213
|
...opts,
|
|
217
214
|
},
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
215
|
+
{
|
|
216
|
+
dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
dateProvider: this.context.dateProvider,
|
|
220
|
+
p2pClientDeps: {
|
|
221
|
+
p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
|
|
222
|
+
rpcTxProviders: [this.context.aztecNode],
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
genesis: this.context.genesis,
|
|
227
|
+
dontStart: opts.dontStart,
|
|
228
|
+
},
|
|
221
229
|
),
|
|
222
230
|
);
|
|
223
231
|
this.proverNodes.push(proverNode);
|
|
@@ -231,26 +239,34 @@ export class EpochsTestContext {
|
|
|
231
239
|
|
|
232
240
|
public createValidatorNode(
|
|
233
241
|
privateKeys: `0x${string}`[],
|
|
234
|
-
opts: Partial<AztecNodeConfig> & {
|
|
242
|
+
opts: Partial<AztecNodeConfig> & {
|
|
243
|
+
dontStartSequencer?: boolean;
|
|
244
|
+
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
245
|
+
} = {},
|
|
235
246
|
) {
|
|
236
247
|
this.logger.warn('Creating and syncing a validator node...');
|
|
237
248
|
return this.createNode({ ...opts, disableValidator: false, validatorPrivateKeys: new SecretValue(privateKeys) });
|
|
238
249
|
}
|
|
239
250
|
|
|
240
251
|
private async createNode(
|
|
241
|
-
opts: Partial<AztecNodeConfig> & {
|
|
252
|
+
opts: Partial<AztecNodeConfig> & {
|
|
253
|
+
dontStartSequencer?: boolean;
|
|
254
|
+
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
255
|
+
} = {},
|
|
242
256
|
) {
|
|
243
|
-
const
|
|
257
|
+
const nodeIndex = this.nodes.length + 1;
|
|
258
|
+
const actorPrefix = opts.disableValidator ? 'node' : 'validator';
|
|
244
259
|
const { mockGossipSubNetwork } = this.context;
|
|
245
260
|
const resolvedConfig = { ...this.context.config, ...opts };
|
|
246
261
|
const p2pEnabled = resolvedConfig.p2pEnabled || mockGossipSubNetwork !== undefined;
|
|
247
262
|
const p2pIp = resolvedConfig.p2pIp ?? (p2pEnabled ? '127.0.0.1' : undefined);
|
|
248
|
-
const node = await
|
|
263
|
+
const node = await withLoggerBindings({ actor: `${actorPrefix}-${nodeIndex}` }, () =>
|
|
249
264
|
AztecNodeService.createAndSync(
|
|
250
265
|
{
|
|
251
266
|
...resolvedConfig,
|
|
252
267
|
dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
|
|
253
268
|
validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
|
|
269
|
+
nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
|
|
254
270
|
p2pEnabled,
|
|
255
271
|
p2pIp,
|
|
256
272
|
},
|
|
@@ -259,34 +275,15 @@ export class EpochsTestContext {
|
|
|
259
275
|
p2pClientDeps: {
|
|
260
276
|
p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
|
|
261
277
|
},
|
|
278
|
+
slashingProtectionDb: opts.slashingProtectionDb,
|
|
262
279
|
},
|
|
263
280
|
{
|
|
264
|
-
|
|
281
|
+
genesis: this.context.genesis,
|
|
265
282
|
...opts,
|
|
266
283
|
},
|
|
267
284
|
),
|
|
268
285
|
);
|
|
269
286
|
|
|
270
|
-
// REFACTOR: We're getting too much into the internals of the sequencer here.
|
|
271
|
-
// We should have a single method for constructing an aztec node that returns a TestAztecNodeService
|
|
272
|
-
// which directly exposes the delayer and sets any test config.
|
|
273
|
-
if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
|
|
274
|
-
this.logger.info(
|
|
275
|
-
`Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`,
|
|
276
|
-
);
|
|
277
|
-
// Here we reach into the sequencer and hook in a tx delayer. The problem is that the sequencer's l1 utils only uses a public client, not a wallet.
|
|
278
|
-
// The delayer needs a wallet (a client that can sign), so we have to create one here.
|
|
279
|
-
const l1Client = createExtendedL1Client(
|
|
280
|
-
resolvedConfig.l1RpcUrls!,
|
|
281
|
-
resolvedConfig.publisherPrivateKeys![0]!.getValue(),
|
|
282
|
-
);
|
|
283
|
-
const sequencer = node.getSequencer() as TestSequencerClient;
|
|
284
|
-
const publisher = sequencer.sequencer.publisher;
|
|
285
|
-
const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
|
|
286
|
-
delayed.delayer!.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
|
|
287
|
-
publisher.l1TxUtils = delayed;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
287
|
this.nodes.push(node);
|
|
291
288
|
return node;
|
|
292
289
|
}
|
|
@@ -338,7 +335,10 @@ export class EpochsTestContext {
|
|
|
338
335
|
this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
|
|
339
336
|
oneSlotBefore,
|
|
340
337
|
});
|
|
341
|
-
|
|
338
|
+
// Use a timeout that accounts for the full proof submission window
|
|
339
|
+
const proofSubmissionWindowDuration =
|
|
340
|
+
this.constants.proofSubmissionEpochs * this.epochDuration * this.L2_SLOT_DURATION_IN_S;
|
|
341
|
+
await waitUntilL1Timestamp(this.l1Client, oneSlotBefore, undefined, proofSubmissionWindowDuration * 2);
|
|
342
342
|
}
|
|
343
343
|
|
|
344
344
|
/** Waits for the aztec node to sync to the target block number. */
|
|
@@ -375,17 +375,28 @@ export class EpochsTestContext {
|
|
|
375
375
|
return SpamContract.at(instance.address, wallet);
|
|
376
376
|
}
|
|
377
377
|
|
|
378
|
+
/** Registers the TestContract on the given wallet. */
|
|
379
|
+
public async registerTestContract(wallet: Wallet, salt = Fr.ZERO) {
|
|
380
|
+
const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
|
|
381
|
+
constructorArgs: [],
|
|
382
|
+
constructorArtifact: undefined,
|
|
383
|
+
salt,
|
|
384
|
+
publicKeys: undefined,
|
|
385
|
+
deployer: undefined,
|
|
386
|
+
});
|
|
387
|
+
await wallet.registerContract(instance, TestContract.artifact);
|
|
388
|
+
return TestContract.at(instance.address, wallet);
|
|
389
|
+
}
|
|
390
|
+
|
|
378
391
|
/** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
|
|
379
392
|
public async createL1Client() {
|
|
380
|
-
const
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
this.l1Client.chain,
|
|
385
|
-
),
|
|
386
|
-
this.context.dateProvider!,
|
|
387
|
-
{ ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S },
|
|
393
|
+
const rawClient = createExtendedL1Client(
|
|
394
|
+
[...this.l1Client.chain.rpcUrls.default.http],
|
|
395
|
+
privateKeyToAccount(this.getNextPrivateKey()),
|
|
396
|
+
this.l1Client.chain,
|
|
388
397
|
);
|
|
398
|
+
const delayer = createDelayer(this.context.dateProvider, { ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S }, {});
|
|
399
|
+
const client = wrapClientWithDelayer(rawClient, delayer);
|
|
389
400
|
expect(await client.getBalance({ address: client.account.address })).toBeGreaterThan(0n);
|
|
390
401
|
return { client, delayer };
|
|
391
402
|
}
|
|
@@ -402,6 +413,38 @@ export class EpochsTestContext {
|
|
|
402
413
|
expect(result).toBe(expectedSuccess);
|
|
403
414
|
}
|
|
404
415
|
|
|
416
|
+
/** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */
|
|
417
|
+
public async assertMultipleBlocksPerSlot(targetBlockCount: number) {
|
|
418
|
+
const archiver = (this.context.aztecNode as AztecNodeService).getBlockSource() as Archiver;
|
|
419
|
+
const checkpoints = await archiver.getCheckpoints(CheckpointNumber(1), 50);
|
|
420
|
+
|
|
421
|
+
this.logger.warn(`Retrieved ${checkpoints.length} checkpoints from archiver`, {
|
|
422
|
+
checkpoints: checkpoints.map(pc => pc.checkpoint.getStats()),
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
|
|
426
|
+
let targetFound = false;
|
|
427
|
+
|
|
428
|
+
for (const checkpoint of checkpoints) {
|
|
429
|
+
const blockCount = checkpoint.checkpoint.blocks.length;
|
|
430
|
+
targetFound = targetFound || blockCount >= targetBlockCount;
|
|
431
|
+
|
|
432
|
+
this.logger.verbose(`Checkpoint ${checkpoint.checkpoint.number} has ${blockCount} blocks`, {
|
|
433
|
+
checkpoint: checkpoint.checkpoint.getStats(),
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
for (let i = 0; i < blockCount; i++) {
|
|
437
|
+
const block = checkpoint.checkpoint.blocks[i];
|
|
438
|
+
expect(block.indexWithinCheckpoint).toBe(i);
|
|
439
|
+
expect(block.checkpointNumber).toBe(checkpoint.checkpoint.number);
|
|
440
|
+
expect(block.number).toBe(expectedBlockNumber);
|
|
441
|
+
expectedBlockNumber++;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
expect(targetFound).toBe(true);
|
|
446
|
+
}
|
|
447
|
+
|
|
405
448
|
public watchSequencerEvents(
|
|
406
449
|
sequencers: SequencerClient[],
|
|
407
450
|
getMetadata: (i: number) => Record<string, any> = () => ({}),
|
|
@@ -4,11 +4,11 @@ import type { Logger } from '@aztec/aztec.js/log';
|
|
|
4
4
|
import { Fq } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { sleep } from '@aztec/foundation/sleep';
|
|
6
6
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
8
7
|
|
|
9
8
|
import { jest } from '@jest/globals';
|
|
10
9
|
import type { Hex } from 'viem';
|
|
11
10
|
|
|
11
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
12
12
|
import { FeesTest } from './fees_test.js';
|
|
13
13
|
|
|
14
14
|
jest.setTimeout(300_000);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
3
3
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
4
|
-
import { CheatCodes } from '@aztec/aztec/testing';
|
|
4
|
+
import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
|
|
5
5
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
6
6
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
7
7
|
import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
@@ -20,7 +20,6 @@ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
|
20
20
|
import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
21
21
|
import { GasSettings } from '@aztec/stdlib/gas';
|
|
22
22
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
23
|
-
import { TestWallet } from '@aztec/test-wallet/server';
|
|
24
23
|
|
|
25
24
|
import { getContract } from 'viem';
|
|
26
25
|
|
|
@@ -36,6 +35,7 @@ import {
|
|
|
36
35
|
import { mintTokensToPrivate } from '../fixtures/token_utils.js';
|
|
37
36
|
import { type BalancesFn, getBalancesFn, setupSponsoredFPC } from '../fixtures/utils.js';
|
|
38
37
|
import { FeeJuicePortalTestingHarnessFactory, type GasBridgingTestHarness } from '../shared/gas_portal_test_harness.js';
|
|
38
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* Test fixture for testing fees. Provides the following setup steps:
|
|
@@ -104,16 +104,19 @@ export class FeesTest {
|
|
|
104
104
|
|
|
105
105
|
async setup() {
|
|
106
106
|
this.logger.verbose('Setting up fresh context...');
|
|
107
|
+
// Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
108
|
+
const tokenAllowList = await getTokenAllowedSetupFunctions();
|
|
107
109
|
this.context = await setup(0, {
|
|
108
110
|
startProverNode: true,
|
|
109
111
|
...this.setupOptions,
|
|
110
112
|
fundSponsoredFPC: true,
|
|
111
113
|
skipAccountDeployment: true,
|
|
112
114
|
l1ContractsArgs: { ...this.setupOptions },
|
|
115
|
+
txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
|
|
113
116
|
});
|
|
114
117
|
|
|
115
118
|
this.rollupContract = RollupContract.getFromConfig(this.context.config);
|
|
116
|
-
this.chainMonitor = new ChainMonitor(this.rollupContract, this.context.dateProvider
|
|
119
|
+
this.chainMonitor = new ChainMonitor(this.rollupContract, this.context.dateProvider, this.logger, 200).start();
|
|
117
120
|
|
|
118
121
|
await this.applyBaseSetup();
|
|
119
122
|
|
|
@@ -126,7 +129,7 @@ export class FeesTest {
|
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
setIsMarkingAsProven(b: boolean) {
|
|
129
|
-
this.context.watcher
|
|
132
|
+
this.context.watcher.setIsMarkingAsProven(b);
|
|
130
133
|
}
|
|
131
134
|
|
|
132
135
|
async catchUpProvenChain() {
|
|
@@ -157,15 +160,15 @@ export class FeesTest {
|
|
|
157
160
|
|
|
158
161
|
/** Alice mints bananaCoin tokens privately to the target address and redeems them. */
|
|
159
162
|
async mintPrivateBananas(amount: bigint, address: AztecAddress) {
|
|
160
|
-
const balanceBefore = await this.bananaCoin.methods
|
|
163
|
+
const { result: balanceBefore } = await this.bananaCoin.methods
|
|
161
164
|
.balance_of_private(address)
|
|
162
|
-
.simulate({ from:
|
|
165
|
+
.simulate({ from: address });
|
|
163
166
|
|
|
164
167
|
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
|
|
165
168
|
|
|
166
|
-
const balanceAfter = await this.bananaCoin.methods
|
|
169
|
+
const { result: balanceAfter } = await this.bananaCoin.methods
|
|
167
170
|
.balance_of_private(address)
|
|
168
|
-
.simulate({ from:
|
|
171
|
+
.simulate({ from: address });
|
|
169
172
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
170
173
|
}
|
|
171
174
|
|
|
@@ -188,9 +191,9 @@ export class FeesTest {
|
|
|
188
191
|
});
|
|
189
192
|
|
|
190
193
|
this.wallet = this.context.wallet;
|
|
191
|
-
this.aztecNode = this.context.aztecNodeService
|
|
192
|
-
this.aztecNodeAdmin = this.context.aztecNodeService
|
|
193
|
-
this.gasSettings = GasSettings.
|
|
194
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
195
|
+
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
196
|
+
this.gasSettings = GasSettings.fallback({ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2) });
|
|
194
197
|
this.cheatCodes = this.context.cheatCodes;
|
|
195
198
|
this.accounts = deployedAccounts.map(a => a.address);
|
|
196
199
|
this.accounts.forEach((a, i) => this.logger.verbose(`Account ${i} address: ${a}`));
|
|
@@ -213,16 +216,11 @@ export class FeesTest {
|
|
|
213
216
|
|
|
214
217
|
this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
|
|
215
218
|
|
|
216
|
-
this.getGasBalanceFn = getBalancesFn(
|
|
217
|
-
'⛽',
|
|
218
|
-
this.feeJuiceContract.methods.balance_of_public,
|
|
219
|
-
this.aliceAddress,
|
|
220
|
-
this.logger,
|
|
221
|
-
);
|
|
219
|
+
this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.logger);
|
|
222
220
|
|
|
223
221
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
224
|
-
aztecNode: this.context.aztecNodeService
|
|
225
|
-
aztecNodeAdmin: this.context.aztecNodeService
|
|
222
|
+
aztecNode: this.context.aztecNodeService,
|
|
223
|
+
aztecNodeAdmin: this.context.aztecNodeService,
|
|
226
224
|
l1Client: this.context.deployL1ContractsValues.l1Client,
|
|
227
225
|
wallet: this.wallet,
|
|
228
226
|
logger: this.logger,
|
|
@@ -232,22 +230,16 @@ export class FeesTest {
|
|
|
232
230
|
async applyDeployBananaToken() {
|
|
233
231
|
this.logger.info('Applying deploy banana token setup');
|
|
234
232
|
|
|
235
|
-
const bananaCoin = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
|
|
233
|
+
const { contract: bananaCoin } = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
|
|
236
234
|
from: this.aliceAddress,
|
|
237
235
|
});
|
|
238
236
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
239
237
|
|
|
240
238
|
this.bananaCoin = bananaCoin;
|
|
241
|
-
this.getBananaPublicBalanceFn = getBalancesFn(
|
|
242
|
-
'🍌.public',
|
|
243
|
-
this.bananaCoin.methods.balance_of_public,
|
|
244
|
-
this.aliceAddress,
|
|
245
|
-
this.logger,
|
|
246
|
-
);
|
|
239
|
+
this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.logger);
|
|
247
240
|
this.getBananaPrivateBalanceFn = getBalancesFn(
|
|
248
241
|
'🍌.private',
|
|
249
242
|
this.bananaCoin.methods.balance_of_private,
|
|
250
|
-
this.aliceAddress,
|
|
251
243
|
this.logger,
|
|
252
244
|
);
|
|
253
245
|
}
|
|
@@ -259,7 +251,7 @@ export class FeesTest {
|
|
|
259
251
|
expect((await this.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
260
252
|
|
|
261
253
|
const bananaCoin = this.bananaCoin;
|
|
262
|
-
const bananaFPC = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
|
|
254
|
+
const { contract: bananaFPC } = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
|
|
263
255
|
from: this.aliceAddress,
|
|
264
256
|
});
|
|
265
257
|
|
|
@@ -290,7 +282,7 @@ export class FeesTest {
|
|
|
290
282
|
|
|
291
283
|
// @todo @lherskind As we deal with #13601
|
|
292
284
|
// Right now the value is from `FeeLib.sol`
|
|
293
|
-
const L1_GAS_PER_EPOCH_VERIFIED =
|
|
285
|
+
const L1_GAS_PER_EPOCH_VERIFIED = 3600000n;
|
|
294
286
|
|
|
295
287
|
// We round up
|
|
296
288
|
const mulDiv = (a: bigint, b: bigint, c: bigint) => (a * b) / c + ((a * b) % c > 0n ? 1n : 0n);
|
|
@@ -15,6 +15,7 @@ const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
|
|
|
15
15
|
*/
|
|
16
16
|
export async function writeJson(
|
|
17
17
|
fileName: string,
|
|
18
|
+
checkpointHeader: CheckpointHeader,
|
|
18
19
|
block: L2Block,
|
|
19
20
|
l1ToL2Content: Fr[],
|
|
20
21
|
blobs: Blob[],
|
|
@@ -33,12 +34,6 @@ export async function writeJson(
|
|
|
33
34
|
return `0x${buffer.toString('hex').padStart(size, '0')}`;
|
|
34
35
|
};
|
|
35
36
|
|
|
36
|
-
// Create a checkpoint header for this block
|
|
37
|
-
const checkpointHeader = CheckpointHeader.random({
|
|
38
|
-
slotNumber: block.slot,
|
|
39
|
-
timestamp: block.timestamp,
|
|
40
|
-
});
|
|
41
|
-
|
|
42
37
|
const jsonObject = {
|
|
43
38
|
populate: {
|
|
44
39
|
l1ToL2Content: l1ToL2Content.map(value => asHex(value)),
|
|
@@ -44,7 +44,7 @@ export class NestedContractTest {
|
|
|
44
44
|
});
|
|
45
45
|
this.wallet = this.context.wallet;
|
|
46
46
|
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
47
|
-
this.aztecNode = this.context.aztecNodeService
|
|
47
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
48
48
|
|
|
49
49
|
this.logger.info('Public deploy accounts');
|
|
50
50
|
await publicDeployAccounts(this.wallet, [this.defaultAccountAddress]);
|
|
@@ -65,9 +65,11 @@ export class NestedContractTest {
|
|
|
65
65
|
|
|
66
66
|
async applyManual() {
|
|
67
67
|
this.logger.info('Deploying parent and child contracts');
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.childContract =
|
|
68
|
+
({ contract: this.parentContract } = await ParentContract.deploy(this.wallet).send({
|
|
69
|
+
from: this.defaultAccountAddress,
|
|
70
|
+
}));
|
|
71
|
+
({ contract: this.childContract } = await ChildContract.deploy(this.wallet).send({
|
|
72
|
+
from: this.defaultAccountAddress,
|
|
73
|
+
}));
|
|
72
74
|
}
|
|
73
75
|
}
|
|
@@ -58,6 +58,7 @@ export class P2PInactivityTest {
|
|
|
58
58
|
basePort: BOOT_NODE_UDP_PORT,
|
|
59
59
|
startProverNode: true,
|
|
60
60
|
initialConfig: {
|
|
61
|
+
anvilSlotsInAnEpoch: 4,
|
|
61
62
|
proverNodeConfig: { proverNodeEpochProvingDelayMs: AZTEC_SLOT_DURATION * 1000 },
|
|
62
63
|
aztecTargetCommitteeSize: COMMITTEE_SIZE,
|
|
63
64
|
aztecSlotDuration: AZTEC_SLOT_DURATION,
|
|
@@ -66,7 +67,6 @@ export class P2PInactivityTest {
|
|
|
66
67
|
listenAddress: '127.0.0.1',
|
|
67
68
|
minTxsPerBlock: 0,
|
|
68
69
|
aztecEpochDuration: EPOCH_DURATION,
|
|
69
|
-
validatorReexecute: false,
|
|
70
70
|
sentinelEnabled: true,
|
|
71
71
|
slashingQuorum: SLASHING_QUORUM,
|
|
72
72
|
slashingRoundSizeInEpochs: SLASHING_ROUND_SIZE_IN_EPOCHS,
|
|
@@ -98,17 +98,17 @@ export class P2PInactivityTest {
|
|
|
98
98
|
this.rollup = rollup;
|
|
99
99
|
|
|
100
100
|
if (!this.keepInitialNode) {
|
|
101
|
-
await this.test.ctx.aztecNodeService
|
|
101
|
+
await this.test.ctx.aztecNodeService.stop();
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
// Create all active nodes
|
|
105
105
|
this.activeNodes = await createNodes(
|
|
106
106
|
this.test.ctx.aztecNodeConfig,
|
|
107
|
-
this.test.ctx.dateProvider
|
|
107
|
+
this.test.ctx.dateProvider,
|
|
108
108
|
this.test.bootstrapNodeEnr,
|
|
109
109
|
NUM_NODES - this.inactiveNodeCount - Number(this.keepInitialNode),
|
|
110
110
|
BOOT_NODE_UDP_PORT,
|
|
111
|
-
this.test.
|
|
111
|
+
this.test.genesis,
|
|
112
112
|
this.dataDir,
|
|
113
113
|
undefined,
|
|
114
114
|
Number(this.keepInitialNode),
|
|
@@ -118,18 +118,18 @@ export class P2PInactivityTest {
|
|
|
118
118
|
const inactiveConfig = { ...this.test.ctx.aztecNodeConfig, dontStartSequencer: true };
|
|
119
119
|
this.inactiveNodes = await createNodes(
|
|
120
120
|
inactiveConfig,
|
|
121
|
-
this.test.ctx.dateProvider
|
|
121
|
+
this.test.ctx.dateProvider,
|
|
122
122
|
this.test.bootstrapNodeEnr,
|
|
123
123
|
this.inactiveNodeCount,
|
|
124
124
|
BOOT_NODE_UDP_PORT,
|
|
125
|
-
this.test.
|
|
125
|
+
this.test.genesis,
|
|
126
126
|
this.dataDir,
|
|
127
127
|
undefined,
|
|
128
128
|
NUM_NODES - this.inactiveNodeCount,
|
|
129
129
|
);
|
|
130
130
|
|
|
131
131
|
this.nodes = [
|
|
132
|
-
...(this.keepInitialNode ? [this.test.ctx.aztecNodeService
|
|
132
|
+
...(this.keepInitialNode ? [this.test.ctx.aztecNodeService] : []),
|
|
133
133
|
...this.activeNodes,
|
|
134
134
|
...this.inactiveNodes,
|
|
135
135
|
];
|