@aztec/end-to-end 0.0.1-commit.6d63667d → 0.0.1-commit.733c4a3
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/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 +3 -3
- 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/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +4 -2
- 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 +10 -0
- 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_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 +9 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +58 -33
- 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 +6 -6
- package/dest/e2e_p2p/p2p_network.d.ts +2 -2
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +16 -2
- 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 +32 -8
- package/dest/e2e_p2p/shared.d.ts +2 -2
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +5 -1
- 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 +10 -0
- 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 +30 -0
- package/dest/fixtures/e2e_prover_test.d.ts +4 -4
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +27 -34
- 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/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 +39 -22
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +59 -149
- package/dest/fixtures/setup_p2p_test.d.ts +15 -7
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +18 -12
- 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 +3 -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 +10 -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/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 +1 -1
- 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 +2 -23
- package/dest/spartan/setup_test_wallets.d.ts +9 -2
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +31 -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/index.d.ts +2 -2
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +1 -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 +8 -8
- package/dest/test-wallet/test_wallet.d.ts +83 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +214 -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 +40 -39
- package/src/bench/client_flows/client_flows_benchmark.ts +8 -12
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +1 -1
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +11 -2
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +4 -4
- package/src/e2e_deploy_contract/deploy_test.ts +3 -3
- package/src/e2e_epochs/epochs_test.ts +73 -63
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +12 -27
- package/src/e2e_nested_contract/nested_contract_test.ts +1 -1
- package/src/e2e_p2p/inactivity_slash_test.ts +4 -4
- package/src/e2e_p2p/p2p_network.ts +29 -7
- package/src/e2e_p2p/reqresp/utils.ts +40 -12
- package/src/e2e_p2p/shared.ts +3 -1
- 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 +11 -2
- package/src/fixtures/authwit_proxy.ts +50 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +28 -38
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +10 -0
- package/src/fixtures/ha_setup.ts +3 -1
- package/src/fixtures/setup.ts +89 -210
- package/src/fixtures/setup_p2p_test.ts +25 -24
- package/src/fixtures/token_utils.ts +2 -1
- package/src/guides/up_quick_start.sh +3 -3
- package/src/shared/index.ts +1 -0
- package/src/shared/jest_setup.ts +16 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +6 -2
- package/src/shared/uniswap_l1_l2.ts +2 -2
- package/src/simulators/token_simulator.ts +1 -29
- package/src/spartan/setup_test_wallets.ts +58 -4
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/index.ts +1 -0
- package/src/spartan/utils/k8s.ts +8 -0
- package/src/spartan/utils/nodes.ts +14 -9
- package/src/test-wallet/test_wallet.ts +306 -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 +213 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
|
@@ -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:
|
|
@@ -113,7 +113,7 @@ export class FeesTest {
|
|
|
113
113
|
});
|
|
114
114
|
|
|
115
115
|
this.rollupContract = RollupContract.getFromConfig(this.context.config);
|
|
116
|
-
this.chainMonitor = new ChainMonitor(this.rollupContract, this.context.dateProvider
|
|
116
|
+
this.chainMonitor = new ChainMonitor(this.rollupContract, this.context.dateProvider, this.logger, 200).start();
|
|
117
117
|
|
|
118
118
|
await this.applyBaseSetup();
|
|
119
119
|
|
|
@@ -126,7 +126,7 @@ export class FeesTest {
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
setIsMarkingAsProven(b: boolean) {
|
|
129
|
-
this.context.watcher
|
|
129
|
+
this.context.watcher.setIsMarkingAsProven(b);
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
async catchUpProvenChain() {
|
|
@@ -157,15 +157,11 @@ export class FeesTest {
|
|
|
157
157
|
|
|
158
158
|
/** Alice mints bananaCoin tokens privately to the target address and redeems them. */
|
|
159
159
|
async mintPrivateBananas(amount: bigint, address: AztecAddress) {
|
|
160
|
-
const balanceBefore = await this.bananaCoin.methods
|
|
161
|
-
.balance_of_private(address)
|
|
162
|
-
.simulate({ from: this.aliceAddress });
|
|
160
|
+
const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
|
|
163
161
|
|
|
164
162
|
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
|
|
165
163
|
|
|
166
|
-
const balanceAfter = await this.bananaCoin.methods
|
|
167
|
-
.balance_of_private(address)
|
|
168
|
-
.simulate({ from: this.aliceAddress });
|
|
164
|
+
const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
|
|
169
165
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
170
166
|
}
|
|
171
167
|
|
|
@@ -188,8 +184,8 @@ export class FeesTest {
|
|
|
188
184
|
});
|
|
189
185
|
|
|
190
186
|
this.wallet = this.context.wallet;
|
|
191
|
-
this.aztecNode = this.context.aztecNodeService
|
|
192
|
-
this.aztecNodeAdmin = this.context.aztecNodeService
|
|
187
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
188
|
+
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
193
189
|
this.gasSettings = GasSettings.default({ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2) });
|
|
194
190
|
this.cheatCodes = this.context.cheatCodes;
|
|
195
191
|
this.accounts = deployedAccounts.map(a => a.address);
|
|
@@ -213,16 +209,11 @@ export class FeesTest {
|
|
|
213
209
|
|
|
214
210
|
this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
|
|
215
211
|
|
|
216
|
-
this.getGasBalanceFn = getBalancesFn(
|
|
217
|
-
'⛽',
|
|
218
|
-
this.feeJuiceContract.methods.balance_of_public,
|
|
219
|
-
this.aliceAddress,
|
|
220
|
-
this.logger,
|
|
221
|
-
);
|
|
212
|
+
this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.logger);
|
|
222
213
|
|
|
223
214
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
224
|
-
aztecNode: this.context.aztecNodeService
|
|
225
|
-
aztecNodeAdmin: this.context.aztecNodeService
|
|
215
|
+
aztecNode: this.context.aztecNodeService,
|
|
216
|
+
aztecNodeAdmin: this.context.aztecNodeService,
|
|
226
217
|
l1Client: this.context.deployL1ContractsValues.l1Client,
|
|
227
218
|
wallet: this.wallet,
|
|
228
219
|
logger: this.logger,
|
|
@@ -238,16 +229,10 @@ export class FeesTest {
|
|
|
238
229
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
239
230
|
|
|
240
231
|
this.bananaCoin = bananaCoin;
|
|
241
|
-
this.getBananaPublicBalanceFn = getBalancesFn(
|
|
242
|
-
'🍌.public',
|
|
243
|
-
this.bananaCoin.methods.balance_of_public,
|
|
244
|
-
this.aliceAddress,
|
|
245
|
-
this.logger,
|
|
246
|
-
);
|
|
232
|
+
this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.logger);
|
|
247
233
|
this.getBananaPrivateBalanceFn = getBalancesFn(
|
|
248
234
|
'🍌.private',
|
|
249
235
|
this.bananaCoin.methods.balance_of_private,
|
|
250
|
-
this.aliceAddress,
|
|
251
236
|
this.logger,
|
|
252
237
|
);
|
|
253
238
|
}
|
|
@@ -290,7 +275,7 @@ export class FeesTest {
|
|
|
290
275
|
|
|
291
276
|
// @todo @lherskind As we deal with #13601
|
|
292
277
|
// Right now the value is from `FeeLib.sol`
|
|
293
|
-
const L1_GAS_PER_EPOCH_VERIFIED =
|
|
278
|
+
const L1_GAS_PER_EPOCH_VERIFIED = 3600000n;
|
|
294
279
|
|
|
295
280
|
// We round up
|
|
296
281
|
const mulDiv = (a: bigint, b: bigint, c: bigint) => (a * b) / c + ((a * b) % c > 0n ? 1n : 0n);
|
|
@@ -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]);
|
|
@@ -98,13 +98,13 @@ 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,
|
|
@@ -118,7 +118,7 @@ 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,
|
|
@@ -129,7 +129,7 @@ export class P2PInactivityTest {
|
|
|
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
|
];
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
13
13
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
14
14
|
import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
|
|
15
|
-
import {
|
|
15
|
+
import { createL1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
16
16
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
17
17
|
import type { ExtendedViemWalletClient, ViemClient } from '@aztec/ethereum/types';
|
|
18
18
|
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
@@ -25,9 +25,9 @@ import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
|
25
25
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
26
26
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
27
27
|
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
28
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
28
29
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
29
30
|
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
30
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
31
31
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
32
32
|
|
|
33
33
|
import getPort from 'get-port';
|
|
@@ -49,6 +49,7 @@ import {
|
|
|
49
49
|
generatePrivateKeys,
|
|
50
50
|
} from '../fixtures/setup_p2p_test.js';
|
|
51
51
|
import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
|
|
52
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
52
53
|
|
|
53
54
|
// Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
|
|
54
55
|
const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
|
|
@@ -333,9 +334,9 @@ export class P2PNetworkTest {
|
|
|
333
334
|
const block = await this.context.deployL1ContractsValues.l1Client.getBlock({
|
|
334
335
|
blockNumber: receipt.blockNumber,
|
|
335
336
|
});
|
|
336
|
-
this.context.dateProvider
|
|
337
|
+
this.context.dateProvider.setTime(Number(block.timestamp) * 1000);
|
|
337
338
|
|
|
338
|
-
await this.context.aztecNodeService
|
|
339
|
+
await this.context.aztecNodeService.stop();
|
|
339
340
|
}
|
|
340
341
|
|
|
341
342
|
async sendDummyTx() {
|
|
@@ -343,7 +344,7 @@ export class P2PNetworkTest {
|
|
|
343
344
|
}
|
|
344
345
|
|
|
345
346
|
private async _sendDummyTx(l1Client: ExtendedViemWalletClient) {
|
|
346
|
-
const l1TxUtils =
|
|
347
|
+
const l1TxUtils = createL1TxUtils(l1Client);
|
|
347
348
|
return await l1TxUtils.sendAndMonitorTransaction({
|
|
348
349
|
to: l1Client.account!.address,
|
|
349
350
|
value: 1n,
|
|
@@ -374,8 +375,8 @@ export class P2PNetworkTest {
|
|
|
374
375
|
this.prefilledPublicData = prefilledPublicData;
|
|
375
376
|
|
|
376
377
|
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
377
|
-
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider
|
|
378
|
-
this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider
|
|
378
|
+
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
|
|
379
|
+
this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider.setTime(Number(timestamp) * 1000));
|
|
379
380
|
}
|
|
380
381
|
|
|
381
382
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -431,6 +432,27 @@ export class P2PNetworkTest {
|
|
|
431
432
|
);
|
|
432
433
|
|
|
433
434
|
this.logger.warn('All nodes connected to P2P mesh');
|
|
435
|
+
|
|
436
|
+
// Wait for GossipSub mesh to form for the tx topic.
|
|
437
|
+
// We only require at least 1 mesh peer per node because GossipSub
|
|
438
|
+
// stops grafting once it reaches Dlo peers and won't fill the mesh to all available peers.
|
|
439
|
+
this.logger.warn('Waiting for GossipSub mesh to form for tx topic...');
|
|
440
|
+
await Promise.all(
|
|
441
|
+
nodes.map(async (node, index) => {
|
|
442
|
+
const p2p = node.getP2P();
|
|
443
|
+
await retryUntil(
|
|
444
|
+
async () => {
|
|
445
|
+
const meshPeers = await p2p.getGossipMeshPeerCount(TopicType.tx);
|
|
446
|
+
this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for tx topic`);
|
|
447
|
+
return meshPeers >= 1 ? true : undefined;
|
|
448
|
+
},
|
|
449
|
+
`Node ${index} to have gossip mesh peers for tx topic`,
|
|
450
|
+
timeoutSeconds,
|
|
451
|
+
checkIntervalSeconds,
|
|
452
|
+
);
|
|
453
|
+
}),
|
|
454
|
+
);
|
|
455
|
+
this.logger.warn('All nodes have gossip mesh peers for tx topic');
|
|
434
456
|
}
|
|
435
457
|
|
|
436
458
|
async teardown() {
|
|
@@ -3,24 +3,24 @@ import { createLogger } from '@aztec/aztec.js/log';
|
|
|
3
3
|
import { waitForTx } from '@aztec/aztec.js/node';
|
|
4
4
|
import { Tx } from '@aztec/aztec.js/tx';
|
|
5
5
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
6
|
-
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
6
|
+
import { CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
7
7
|
import { timesAsync } from '@aztec/foundation/collection';
|
|
8
8
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
9
9
|
|
|
10
|
-
import { jest } from '@jest/globals';
|
|
10
|
+
import { expect, jest } from '@jest/globals';
|
|
11
11
|
import fs from 'fs';
|
|
12
12
|
import os from 'os';
|
|
13
13
|
import path from 'path';
|
|
14
14
|
|
|
15
|
-
import { shouldCollectMetrics } from '../../fixtures/fixtures.js';
|
|
15
|
+
import { getBootNodeUdpPort, shouldCollectMetrics } from '../../fixtures/fixtures.js';
|
|
16
16
|
import { createNodes } from '../../fixtures/setup_p2p_test.js';
|
|
17
|
-
import { P2PNetworkTest,
|
|
17
|
+
import { P2PNetworkTest, WAIT_FOR_TX_TIMEOUT } from '../p2p_network.js';
|
|
18
18
|
import { prepareTransactions } from '../shared.js';
|
|
19
19
|
|
|
20
20
|
// Don't set this to a higher value than 9 because each node will use a different L1 publisher account and anvil seeds
|
|
21
21
|
export const NUM_VALIDATORS = 6;
|
|
22
|
-
export const NUM_TXS_PER_NODE =
|
|
23
|
-
export const BOOT_NODE_UDP_PORT =
|
|
22
|
+
export const NUM_TXS_PER_NODE = 4;
|
|
23
|
+
export const BOOT_NODE_UDP_PORT = getBootNodeUdpPort();
|
|
24
24
|
|
|
25
25
|
export const createReqrespDataDir = () => fs.mkdtempSync(path.join(os.tmpdir(), 'reqresp-'));
|
|
26
26
|
|
|
@@ -38,8 +38,14 @@ export async function createReqrespTest(options: ReqrespOptions = {}): Promise<P
|
|
|
38
38
|
// To collect metrics - run in aztec-packages `docker compose --profile metrics up`
|
|
39
39
|
metricsPort: shouldCollectMetrics(),
|
|
40
40
|
initialConfig: {
|
|
41
|
-
|
|
42
|
-
aztecSlotDuration:
|
|
41
|
+
ethereumSlotDuration: 8,
|
|
42
|
+
aztecSlotDuration: 36,
|
|
43
|
+
blockDurationMs: 6000,
|
|
44
|
+
l1PublishingTime: 8,
|
|
45
|
+
minTxsPerBlock: 1,
|
|
46
|
+
maxTxsPerBlock: 2,
|
|
47
|
+
enforceTimeTable: true,
|
|
48
|
+
aztecProofSubmissionEpochs: 1024, // effectively do not reorg
|
|
43
49
|
...(disableStatusHandshake ? { p2pDisableStatusHandshake: true } : {}),
|
|
44
50
|
listenAddress: '127.0.0.1',
|
|
45
51
|
aztecEpochDuration: 64, // stable committee
|
|
@@ -81,7 +87,7 @@ export async function runReqrespTxTest(params: {
|
|
|
81
87
|
|
|
82
88
|
const nodes = await createNodes(
|
|
83
89
|
aztecNodeConfig,
|
|
84
|
-
t.ctx.dateProvider
|
|
90
|
+
t.ctx.dateProvider,
|
|
85
91
|
t.bootstrapNodeEnr,
|
|
86
92
|
NUM_VALIDATORS,
|
|
87
93
|
BOOT_NODE_UDP_PORT,
|
|
@@ -95,7 +101,7 @@ export async function runReqrespTxTest(params: {
|
|
|
95
101
|
|
|
96
102
|
await t.setupAccount();
|
|
97
103
|
|
|
98
|
-
const targetBlockNumber = await t.ctx.aztecNodeService
|
|
104
|
+
const targetBlockNumber = await t.ctx.aztecNodeService.getBlockNumber();
|
|
99
105
|
await retryUntil(
|
|
100
106
|
async () => {
|
|
101
107
|
const blockNumbers = await Promise.all(nodes.map(node => node.getBlockNumber()));
|
|
@@ -108,7 +114,7 @@ export async function runReqrespTxTest(params: {
|
|
|
108
114
|
|
|
109
115
|
t.logger.info('Preparing transactions to send');
|
|
110
116
|
const txBatches = await timesAsync(2, () =>
|
|
111
|
-
prepareTransactions(t.logger, t.ctx.aztecNodeService
|
|
117
|
+
prepareTransactions(t.logger, t.ctx.aztecNodeService, NUM_TXS_PER_NODE, t.fundedAccount),
|
|
112
118
|
);
|
|
113
119
|
|
|
114
120
|
t.logger.info('Removing initial node');
|
|
@@ -116,7 +122,7 @@ export async function runReqrespTxTest(params: {
|
|
|
116
122
|
|
|
117
123
|
t.logger.info('Starting fresh slot');
|
|
118
124
|
const [timestamp] = await t.ctx.cheatCodes.rollup.advanceToNextSlot();
|
|
119
|
-
t.ctx.dateProvider
|
|
125
|
+
t.ctx.dateProvider.setTime(Number(timestamp) * 1000);
|
|
120
126
|
const startSlotTimestamp = BigInt(timestamp);
|
|
121
127
|
|
|
122
128
|
const { proposerIndexes, nodesToTurnOffTxGossip } = await getProposerIndexes(t, startSlotTimestamp);
|
|
@@ -170,6 +176,28 @@ export async function runReqrespTxTest(params: {
|
|
|
170
176
|
|
|
171
177
|
t.logger.info('All transactions mined');
|
|
172
178
|
|
|
179
|
+
// Assert that multiple blocks were built for at least one slot
|
|
180
|
+
t.logger.info('Verifying multiple blocks for at least one checkpoint');
|
|
181
|
+
const checkpoints = await nodes[0].getCheckpoints(CheckpointNumber(1), 50);
|
|
182
|
+
expect(checkpoints.length).toBeGreaterThan(0);
|
|
183
|
+
|
|
184
|
+
let mbpsFound = false;
|
|
185
|
+
let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
|
|
186
|
+
|
|
187
|
+
for (const published of checkpoints) {
|
|
188
|
+
const blockCount = published.checkpoint.blocks.length;
|
|
189
|
+
mbpsFound = mbpsFound || blockCount >= 2;
|
|
190
|
+
|
|
191
|
+
for (let i = 0; i < blockCount; i++) {
|
|
192
|
+
const block = published.checkpoint.blocks[i];
|
|
193
|
+
expect(block.indexWithinCheckpoint).toBe(i);
|
|
194
|
+
expect(block.checkpointNumber).toBe(published.checkpoint.number);
|
|
195
|
+
expect(block.number).toBe(expectedBlockNumber);
|
|
196
|
+
expectedBlockNumber++;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
expect(mbpsFound).toBe(true);
|
|
173
201
|
return nodes;
|
|
174
202
|
}
|
|
175
203
|
|
package/src/e2e_p2p/shared.ts
CHANGED
|
@@ -22,9 +22,10 @@ import { getPXEConfig, getPXEConfig as getRpcConfig } from '@aztec/pxe/server';
|
|
|
22
22
|
import { getRoundForOffense } from '@aztec/slasher';
|
|
23
23
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
24
24
|
import type { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
25
|
-
import { type ProvenTx, TestWallet, proveInteraction } from '@aztec/test-wallet/server';
|
|
26
25
|
|
|
27
26
|
import { submitTxsTo } from '../shared/submit-transactions.js';
|
|
27
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
28
|
+
import { type ProvenTx, proveInteraction } from '../test-wallet/utils.js';
|
|
28
29
|
|
|
29
30
|
// submits a set of transactions to the provided Private eXecution Environment (PXE)
|
|
30
31
|
export const submitComplexTxsTo = async (
|
|
@@ -145,6 +146,7 @@ export async function awaitCommitteeExists({
|
|
|
145
146
|
'non-empty committee',
|
|
146
147
|
60,
|
|
147
148
|
);
|
|
149
|
+
logger.warn(`Committee has been formed`, { committee: committee!.map(c => c.toString()) });
|
|
148
150
|
return committee!.map(c => c.toString() as `0x${string}`);
|
|
149
151
|
}
|
|
150
152
|
|