@aztec/end-to-end 0.0.1-commit.dbf9cec → 0.0.1-commit.ddcf04837
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 +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +19 -26
- 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 +3 -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 +15 -15
- package/dest/e2e_epochs/epochs_test.d.ts +3 -1
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +8 -5
- package/dest/e2e_fees/fees_test.d.ts +1 -1
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +13 -6
- 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 +8 -9
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +33 -29
- package/dest/e2e_p2p/reqresp/utils.d.ts +1 -1
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
- package/dest/e2e_p2p/reqresp/utils.js +16 -3
- package/dest/e2e_p2p/shared.d.ts +25 -7
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +49 -44
- package/dest/e2e_token_contract/token_contract_test.d.ts +1 -1
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +11 -11
- package/dest/fixtures/authwit_proxy.d.ts +3 -3
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
- package/dest/fixtures/authwit_proxy.js +4 -0
- package/dest/fixtures/e2e_prover_test.d.ts +4 -3
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +11 -16
- 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/setup.d.ts +17 -9
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +27 -21
- package/dest/fixtures/setup_p2p_test.d.ts +6 -6
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +8 -8
- package/dest/fixtures/token_utils.d.ts +1 -1
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +2 -5
- 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/jest_setup.js +32 -1
- package/dest/shared/submit-transactions.d.ts +1 -1
- 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 +14 -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 +2 -2
- package/dest/spartan/setup_test_wallets.d.ts +4 -2
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +69 -38
- package/dest/spartan/tx_metrics.js +1 -1
- package/dest/spartan/utils/config.d.ts +4 -1
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +1 -0
- package/dest/spartan/utils/index.d.ts +2 -1
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +2 -0
- 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 +24 -23
- package/dest/test-wallet/test_wallet.d.ts.map +1 -1
- package/dest/test-wallet/test_wallet.js +115 -80
- package/dest/test-wallet/worker_wallet.d.ts +4 -4
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet_schema.d.ts +10 -5
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -1
- package/package.json +43 -44
- package/src/bench/client_flows/client_flows_benchmark.ts +27 -10
- package/src/bench/utils.ts +7 -2
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +21 -20
- package/src/e2e_epochs/epochs_test.ts +17 -5
- package/src/e2e_fees/fees_test.ts +13 -6
- package/src/e2e_nested_contract/nested_contract_test.ts +6 -4
- package/src/e2e_p2p/inactivity_slash_test.ts +3 -3
- package/src/e2e_p2p/p2p_network.ts +47 -48
- package/src/e2e_p2p/reqresp/utils.ts +24 -3
- package/src/e2e_p2p/shared.ts +71 -59
- package/src/e2e_token_contract/token_contract_test.ts +16 -8
- package/src/fixtures/authwit_proxy.ts +4 -0
- package/src/fixtures/e2e_prover_test.ts +19 -18
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/setup.ts +43 -28
- package/src/fixtures/setup_p2p_test.ts +9 -9
- package/src/fixtures/token_utils.ts +1 -2
- 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/jest_setup.ts +36 -1
- package/src/shared/submit-transactions.ts +1 -4
- package/src/shared/uniswap_l1_l2.ts +35 -28
- package/src/simulators/lending_simulator.ts +8 -4
- package/src/simulators/token_simulator.ts +6 -2
- package/src/spartan/setup_test_wallets.ts +90 -35
- package/src/spartan/tx_metrics.ts +1 -1
- package/src/spartan/utils/config.ts +1 -0
- package/src/spartan/utils/index.ts +3 -0
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/test-wallet/test_wallet.ts +144 -99
- package/src/test-wallet/worker_wallet.ts +3 -2
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
1
2
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
3
|
import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
3
4
|
import { type FeePaymentMethod, PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
4
5
|
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
5
6
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
6
7
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
7
|
-
import { CheatCodes } from '@aztec/aztec/testing';
|
|
8
|
+
import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
|
|
8
9
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
9
10
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
10
11
|
import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
@@ -130,11 +131,14 @@ export class ClientFlowsBenchmark {
|
|
|
130
131
|
|
|
131
132
|
async setup() {
|
|
132
133
|
this.logger.info('Setting up subsystems from fresh');
|
|
134
|
+
// Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
135
|
+
const tokenAllowList = await getTokenAllowedSetupFunctions();
|
|
133
136
|
this.context = await setup(0, {
|
|
134
137
|
...this.setupOptions,
|
|
135
138
|
fundSponsoredFPC: true,
|
|
136
139
|
skipAccountDeployment: true,
|
|
137
140
|
l1ContractsArgs: this.setupOptions,
|
|
141
|
+
txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
|
|
138
142
|
});
|
|
139
143
|
await this.applyBaseSetup();
|
|
140
144
|
|
|
@@ -148,6 +152,7 @@ export class ClientFlowsBenchmark {
|
|
|
148
152
|
|
|
149
153
|
async teardown() {
|
|
150
154
|
await this.chainMonitor.stop();
|
|
155
|
+
await this.userWallet?.stop();
|
|
151
156
|
await teardown(this.context);
|
|
152
157
|
}
|
|
153
158
|
|
|
@@ -161,11 +166,15 @@ export class ClientFlowsBenchmark {
|
|
|
161
166
|
|
|
162
167
|
/** Admin mints bananaCoin tokens privately to the target address and redeems them. */
|
|
163
168
|
async mintPrivateBananas(amount: bigint, address: AztecAddress) {
|
|
164
|
-
const balanceBefore = await this.bananaCoin.methods
|
|
169
|
+
const { result: balanceBefore } = await this.bananaCoin.methods
|
|
170
|
+
.balance_of_private(address)
|
|
171
|
+
.simulate({ from: address });
|
|
165
172
|
|
|
166
173
|
await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
|
|
167
174
|
|
|
168
|
-
const balanceAfter = await this.bananaCoin.methods
|
|
175
|
+
const { result: balanceAfter } = await this.bananaCoin.methods
|
|
176
|
+
.balance_of_private(address)
|
|
177
|
+
.simulate({ from: address });
|
|
169
178
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
170
179
|
}
|
|
171
180
|
|
|
@@ -247,7 +256,9 @@ export class ClientFlowsBenchmark {
|
|
|
247
256
|
'BC',
|
|
248
257
|
'BC',
|
|
249
258
|
18n,
|
|
250
|
-
).send({
|
|
259
|
+
).send({
|
|
260
|
+
from: this.adminAddress,
|
|
261
|
+
});
|
|
251
262
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
252
263
|
this.bananaCoin = bananaCoin;
|
|
253
264
|
this.bananaCoinInstance = bananaCoinInstance;
|
|
@@ -261,7 +272,9 @@ export class ClientFlowsBenchmark {
|
|
|
261
272
|
'CBC',
|
|
262
273
|
'CBC',
|
|
263
274
|
18n,
|
|
264
|
-
).send({
|
|
275
|
+
).send({
|
|
276
|
+
from: this.adminAddress,
|
|
277
|
+
});
|
|
265
278
|
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
266
279
|
this.candyBarCoin = candyBarCoin;
|
|
267
280
|
this.candyBarCoinInstance = candyBarCoinInstance;
|
|
@@ -277,7 +290,9 @@ export class ClientFlowsBenchmark {
|
|
|
277
290
|
this.adminWallet,
|
|
278
291
|
bananaCoin.address,
|
|
279
292
|
this.adminAddress,
|
|
280
|
-
).send({
|
|
293
|
+
).send({
|
|
294
|
+
from: this.adminAddress,
|
|
295
|
+
});
|
|
281
296
|
|
|
282
297
|
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
283
298
|
|
|
@@ -326,7 +341,7 @@ export class ClientFlowsBenchmark {
|
|
|
326
341
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
|
|
327
342
|
const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
|
|
328
343
|
await behchysDeployMethod.send({
|
|
329
|
-
from:
|
|
344
|
+
from: NO_FROM,
|
|
330
345
|
fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
|
|
331
346
|
});
|
|
332
347
|
// Register benchy on the user's Wallet, where we're going to be interacting from
|
|
@@ -346,13 +361,15 @@ export class ClientFlowsBenchmark {
|
|
|
346
361
|
'LPT',
|
|
347
362
|
'LPT',
|
|
348
363
|
18n,
|
|
349
|
-
).send({
|
|
364
|
+
).send({
|
|
365
|
+
from: this.adminAddress,
|
|
366
|
+
});
|
|
350
367
|
const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
|
|
351
368
|
this.adminWallet,
|
|
352
369
|
this.bananaCoin.address,
|
|
353
370
|
this.candyBarCoin.address,
|
|
354
371
|
liquidityToken.address,
|
|
355
|
-
).send({ from: this.adminAddress
|
|
372
|
+
).send({ from: this.adminAddress });
|
|
356
373
|
this.logger.info(`AMM deployed at ${amm.address}`);
|
|
357
374
|
await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress });
|
|
358
375
|
this.liquidityToken = liquidityToken;
|
|
@@ -370,7 +387,7 @@ export class ClientFlowsBenchmark {
|
|
|
370
387
|
// The private fee paying method assembled on the app side requires knowledge of the maximum
|
|
371
388
|
// fee the user is willing to pay
|
|
372
389
|
const maxFeesPerGas = (await this.aztecNode.getCurrentMinFees()).mul(1.5);
|
|
373
|
-
const gasSettings = GasSettings.
|
|
390
|
+
const gasSettings = GasSettings.fallback({ maxFeesPerGas });
|
|
374
391
|
return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
|
|
375
392
|
}
|
|
376
393
|
|
package/src/bench/utils.ts
CHANGED
|
@@ -25,7 +25,7 @@ export async function benchmarkSetup(
|
|
|
25
25
|
) {
|
|
26
26
|
const context = await setup(1, { ...opts, telemetryConfig: { benchmark: true } });
|
|
27
27
|
const defaultAccountAddress = context.accounts[0];
|
|
28
|
-
const contract = await BenchmarkingContract.deploy(context.wallet).send({ from: defaultAccountAddress });
|
|
28
|
+
const { contract } = await BenchmarkingContract.deploy(context.wallet).send({ from: defaultAccountAddress });
|
|
29
29
|
context.logger.info(`Deployed benchmarking contract at ${contract.address}`);
|
|
30
30
|
const sequencer = (context.aztecNode as AztecNodeService).getSequencer()!;
|
|
31
31
|
const telemetry = context.telemetryClient as BenchmarkTelemetryClient;
|
|
@@ -149,7 +149,12 @@ export async function sendTxs(
|
|
|
149
149
|
context.logger.info(`Creating ${txCount} txs`);
|
|
150
150
|
const [from] = context.accounts;
|
|
151
151
|
context.logger.info(`Sending ${txCount} txs`);
|
|
152
|
-
return Promise.all(
|
|
152
|
+
return Promise.all(
|
|
153
|
+
calls.map(async call => {
|
|
154
|
+
const { txHash } = await call.send({ from, wait: NO_WAIT });
|
|
155
|
+
return txHash;
|
|
156
|
+
}),
|
|
157
|
+
);
|
|
153
158
|
}
|
|
154
159
|
|
|
155
160
|
export async function waitTxs(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
|
|
@@ -10,6 +10,7 @@ import { TokenBlacklistContract } from '@aztec/noir-contracts.js/TokenBlacklist'
|
|
|
10
10
|
import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
|
|
11
11
|
import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
|
|
12
12
|
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
13
|
+
import type { AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
|
|
13
14
|
|
|
14
15
|
import { jest } from '@jest/globals';
|
|
15
16
|
|
|
@@ -57,7 +58,7 @@ export class BlacklistTokenContractTest {
|
|
|
57
58
|
authwitProxy!: GenericProxyContract;
|
|
58
59
|
cheatCodes!: CheatCodes;
|
|
59
60
|
sequencer!: SequencerClient;
|
|
60
|
-
aztecNode!: AztecNode;
|
|
61
|
+
aztecNode!: AztecNode & AztecNodeDebug;
|
|
61
62
|
|
|
62
63
|
adminAddress!: AztecAddress;
|
|
63
64
|
otherAddress!: AztecAddress;
|
|
@@ -68,11 +69,7 @@ export class BlacklistTokenContractTest {
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
async crossTimestampOfChange() {
|
|
71
|
-
await this.cheatCodes.warpL2TimeAtLeastBy(
|
|
72
|
-
this.sequencer,
|
|
73
|
-
this.aztecNode,
|
|
74
|
-
BlacklistTokenContractTest.CHANGE_ROLES_DELAY,
|
|
75
|
-
);
|
|
72
|
+
await this.cheatCodes.warpL2TimeAtLeastBy(this.aztecNode, BlacklistTokenContractTest.CHANGE_ROLES_DELAY);
|
|
76
73
|
}
|
|
77
74
|
|
|
78
75
|
/**
|
|
@@ -107,20 +104,24 @@ export class BlacklistTokenContractTest {
|
|
|
107
104
|
await publicDeployAccounts(this.wallet, [this.adminAddress, this.otherAddress, this.blacklistedAddress]);
|
|
108
105
|
|
|
109
106
|
this.logger.verbose(`Deploying TokenContract...`);
|
|
110
|
-
this.asset = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
|
|
107
|
+
({ contract: this.asset } = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
|
|
111
108
|
from: this.adminAddress,
|
|
112
|
-
});
|
|
109
|
+
}));
|
|
113
110
|
this.logger.verbose(`Token deployed to ${this.asset.address}`);
|
|
114
111
|
|
|
115
112
|
this.logger.verbose(`Deploying bad account...`);
|
|
116
|
-
this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({
|
|
113
|
+
({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
|
|
114
|
+
from: this.adminAddress,
|
|
115
|
+
}));
|
|
117
116
|
this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
|
|
118
117
|
|
|
119
118
|
// Deploy a proxy contract for "on behalf of other" tests. The note owner must be the tx sender
|
|
120
119
|
// (so their notes are in scope), but msg_sender in the target must differ from the note owner
|
|
121
120
|
// to trigger authwit validation. The proxy forwards calls so that msg_sender != tx sender.
|
|
122
121
|
this.logger.verbose(`Deploying generic proxy...`);
|
|
123
|
-
this.authwitProxy = await GenericProxyContract.deploy(this.wallet).send({
|
|
122
|
+
({ contract: this.authwitProxy } = await GenericProxyContract.deploy(this.wallet).send({
|
|
123
|
+
from: this.adminAddress,
|
|
124
|
+
}));
|
|
124
125
|
this.logger.verbose(`Deployed to ${this.authwitProxy.address}.`);
|
|
125
126
|
|
|
126
127
|
await this.crossTimestampOfChange();
|
|
@@ -133,9 +134,9 @@ export class BlacklistTokenContractTest {
|
|
|
133
134
|
[this.adminAddress, this.otherAddress, this.blacklistedAddress],
|
|
134
135
|
);
|
|
135
136
|
|
|
136
|
-
expect(
|
|
137
|
-
|
|
138
|
-
);
|
|
137
|
+
expect(
|
|
138
|
+
(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
|
|
139
|
+
).toEqual(new Role().withAdmin().toNoirStruct());
|
|
139
140
|
}
|
|
140
141
|
|
|
141
142
|
async setup() {
|
|
@@ -189,9 +190,9 @@ export class BlacklistTokenContractTest {
|
|
|
189
190
|
|
|
190
191
|
await this.crossTimestampOfChange();
|
|
191
192
|
|
|
192
|
-
expect(
|
|
193
|
-
|
|
194
|
-
);
|
|
193
|
+
expect(
|
|
194
|
+
(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
|
|
195
|
+
).toEqual(adminMinterRole.toNoirStruct());
|
|
195
196
|
|
|
196
197
|
this.logger.verbose(`Minting ${amount} publicly...`);
|
|
197
198
|
await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress });
|
|
@@ -199,7 +200,7 @@ export class BlacklistTokenContractTest {
|
|
|
199
200
|
this.logger.verbose(`Minting ${amount} privately...`);
|
|
200
201
|
const secret = Fr.random();
|
|
201
202
|
const secretHash = await computeSecretHash(secret);
|
|
202
|
-
const receipt = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
|
|
203
|
+
const { receipt } = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
|
|
203
204
|
|
|
204
205
|
await this.addPendingShieldNoteToPXE(asset, this.adminAddress, amount, secretHash, receipt.txHash);
|
|
205
206
|
await asset.methods.redeem_shield(this.adminAddress, amount, secret).send({ from: this.adminAddress });
|
|
@@ -207,20 +208,20 @@ export class BlacklistTokenContractTest {
|
|
|
207
208
|
|
|
208
209
|
tokenSim.mintPublic(this.adminAddress, amount);
|
|
209
210
|
|
|
210
|
-
const publicBalance = await asset.methods
|
|
211
|
+
const { result: publicBalance } = await asset.methods
|
|
211
212
|
.balance_of_public(this.adminAddress)
|
|
212
213
|
.simulate({ from: this.adminAddress });
|
|
213
214
|
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
214
215
|
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(this.adminAddress));
|
|
215
216
|
|
|
216
217
|
tokenSim.mintPrivate(this.adminAddress, amount);
|
|
217
|
-
const privateBalance = await asset.methods
|
|
218
|
+
const { result: privateBalance } = await asset.methods
|
|
218
219
|
.balance_of_private(this.adminAddress)
|
|
219
220
|
.simulate({ from: this.adminAddress });
|
|
220
221
|
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
221
222
|
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(this.adminAddress));
|
|
222
223
|
|
|
223
|
-
const totalSupply = await asset.methods.total_supply().simulate({ from: this.adminAddress });
|
|
224
|
+
const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: this.adminAddress });
|
|
224
225
|
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
225
226
|
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
226
227
|
}
|
|
@@ -28,6 +28,7 @@ import { type SequencerClient, type SequencerEvents, SequencerState } from '@azt
|
|
|
28
28
|
import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
|
|
29
29
|
import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
30
30
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
31
|
+
import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
|
|
31
32
|
|
|
32
33
|
import { join } from 'path';
|
|
33
34
|
import type { Hex } from 'viem';
|
|
@@ -144,7 +145,7 @@ export class EpochsTestContext {
|
|
|
144
145
|
proverId: EthAddress.fromNumber(1),
|
|
145
146
|
worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
|
|
146
147
|
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
147
|
-
|
|
148
|
+
slasherEnabled: false,
|
|
148
149
|
l1PublishingTime,
|
|
149
150
|
...opts,
|
|
150
151
|
},
|
|
@@ -181,6 +182,7 @@ export class EpochsTestContext {
|
|
|
181
182
|
ethereumSlotDuration,
|
|
182
183
|
proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
|
|
183
184
|
targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
|
|
185
|
+
rollupManaLimit: Number(await this.rollup.getManaLimit()),
|
|
184
186
|
};
|
|
185
187
|
|
|
186
188
|
this.logger.info(
|
|
@@ -221,7 +223,7 @@ export class EpochsTestContext {
|
|
|
221
223
|
},
|
|
222
224
|
},
|
|
223
225
|
{
|
|
224
|
-
|
|
226
|
+
genesis: this.context.genesis,
|
|
225
227
|
dontStart: opts.dontStart,
|
|
226
228
|
},
|
|
227
229
|
),
|
|
@@ -237,13 +239,21 @@ export class EpochsTestContext {
|
|
|
237
239
|
|
|
238
240
|
public createValidatorNode(
|
|
239
241
|
privateKeys: `0x${string}`[],
|
|
240
|
-
opts: Partial<AztecNodeConfig> & {
|
|
242
|
+
opts: Partial<AztecNodeConfig> & {
|
|
243
|
+
dontStartSequencer?: boolean;
|
|
244
|
+
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
245
|
+
} = {},
|
|
241
246
|
) {
|
|
242
247
|
this.logger.warn('Creating and syncing a validator node...');
|
|
243
248
|
return this.createNode({ ...opts, disableValidator: false, validatorPrivateKeys: new SecretValue(privateKeys) });
|
|
244
249
|
}
|
|
245
250
|
|
|
246
|
-
private async createNode(
|
|
251
|
+
private async createNode(
|
|
252
|
+
opts: Partial<AztecNodeConfig> & {
|
|
253
|
+
dontStartSequencer?: boolean;
|
|
254
|
+
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
255
|
+
} = {},
|
|
256
|
+
) {
|
|
247
257
|
const nodeIndex = this.nodes.length + 1;
|
|
248
258
|
const actorPrefix = opts.disableValidator ? 'node' : 'validator';
|
|
249
259
|
const { mockGossipSubNetwork } = this.context;
|
|
@@ -256,6 +266,7 @@ export class EpochsTestContext {
|
|
|
256
266
|
...resolvedConfig,
|
|
257
267
|
dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
|
|
258
268
|
validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
|
|
269
|
+
nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
|
|
259
270
|
p2pEnabled,
|
|
260
271
|
p2pIp,
|
|
261
272
|
},
|
|
@@ -264,9 +275,10 @@ export class EpochsTestContext {
|
|
|
264
275
|
p2pClientDeps: {
|
|
265
276
|
p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
|
|
266
277
|
},
|
|
278
|
+
slashingProtectionDb: opts.slashingProtectionDb,
|
|
267
279
|
},
|
|
268
280
|
{
|
|
269
|
-
|
|
281
|
+
genesis: this.context.genesis,
|
|
270
282
|
...opts,
|
|
271
283
|
},
|
|
272
284
|
),
|
|
@@ -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';
|
|
@@ -104,12 +104,15 @@ 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);
|
|
@@ -157,11 +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
|
|
164
|
+
.balance_of_private(address)
|
|
165
|
+
.simulate({ from: address });
|
|
161
166
|
|
|
162
167
|
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
|
|
163
168
|
|
|
164
|
-
const balanceAfter = await this.bananaCoin.methods
|
|
169
|
+
const { result: balanceAfter } = await this.bananaCoin.methods
|
|
170
|
+
.balance_of_private(address)
|
|
171
|
+
.simulate({ from: address });
|
|
165
172
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
166
173
|
}
|
|
167
174
|
|
|
@@ -186,7 +193,7 @@ export class FeesTest {
|
|
|
186
193
|
this.wallet = this.context.wallet;
|
|
187
194
|
this.aztecNode = this.context.aztecNodeService;
|
|
188
195
|
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
189
|
-
this.gasSettings = GasSettings.
|
|
196
|
+
this.gasSettings = GasSettings.fallback({ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2) });
|
|
190
197
|
this.cheatCodes = this.context.cheatCodes;
|
|
191
198
|
this.accounts = deployedAccounts.map(a => a.address);
|
|
192
199
|
this.accounts.forEach((a, i) => this.logger.verbose(`Account ${i} address: ${a}`));
|
|
@@ -223,7 +230,7 @@ export class FeesTest {
|
|
|
223
230
|
async applyDeployBananaToken() {
|
|
224
231
|
this.logger.info('Applying deploy banana token setup');
|
|
225
232
|
|
|
226
|
-
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({
|
|
227
234
|
from: this.aliceAddress,
|
|
228
235
|
});
|
|
229
236
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
@@ -244,7 +251,7 @@ export class FeesTest {
|
|
|
244
251
|
expect((await this.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
245
252
|
|
|
246
253
|
const bananaCoin = this.bananaCoin;
|
|
247
|
-
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({
|
|
248
255
|
from: this.aliceAddress,
|
|
249
256
|
});
|
|
250
257
|
|
|
@@ -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,
|
|
@@ -108,7 +108,7 @@ export class P2PInactivityTest {
|
|
|
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),
|
|
@@ -122,7 +122,7 @@ export class P2PInactivityTest {
|
|
|
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,
|
|
@@ -3,12 +3,7 @@ import type { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
|
3
3
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
4
4
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
5
|
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
6
|
-
import {
|
|
7
|
-
type EmpireSlashingProposerContract,
|
|
8
|
-
GSEContract,
|
|
9
|
-
RollupContract,
|
|
10
|
-
type TallySlashingProposerContract,
|
|
11
|
-
} from '@aztec/ethereum/contracts';
|
|
6
|
+
import { GSEContract, RollupContract, type SlashingProposerContract } from '@aztec/ethereum/contracts';
|
|
12
7
|
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
13
8
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
14
9
|
import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
|
|
@@ -24,9 +19,9 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
|
24
19
|
import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
25
20
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
26
21
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
27
|
-
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
28
22
|
import { TopicType } from '@aztec/stdlib/p2p';
|
|
29
|
-
import
|
|
23
|
+
import { TxStatus } from '@aztec/stdlib/tx';
|
|
24
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
30
25
|
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
31
26
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
32
27
|
|
|
@@ -59,7 +54,7 @@ export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
|
|
|
59
54
|
export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
|
|
60
55
|
aztecSlotDuration: 12,
|
|
61
56
|
ethereumSlotDuration: 4,
|
|
62
|
-
|
|
57
|
+
aztecProofSubmissionEpochs: 640,
|
|
63
58
|
};
|
|
64
59
|
|
|
65
60
|
export class P2PNetworkTest {
|
|
@@ -77,7 +72,7 @@ export class P2PNetworkTest {
|
|
|
77
72
|
public validators: Operator[] = [];
|
|
78
73
|
|
|
79
74
|
public deployedAccounts: InitialAccountData[] = [];
|
|
80
|
-
public
|
|
75
|
+
public genesis: GenesisData | undefined;
|
|
81
76
|
|
|
82
77
|
// The re-execution test needs a wallet and a spam contract
|
|
83
78
|
public wallet?: TestWallet;
|
|
@@ -124,7 +119,7 @@ export class P2PNetworkTest {
|
|
|
124
119
|
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
125
120
|
slashingRoundSizeInEpochs:
|
|
126
121
|
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
127
|
-
|
|
122
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
128
123
|
aztecTargetCommitteeSize: numberOfValidators,
|
|
129
124
|
metricsPort: metricsPort,
|
|
130
125
|
numberOfInitialFundedAccounts: 2,
|
|
@@ -137,7 +132,7 @@ export class P2PNetworkTest {
|
|
|
137
132
|
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
138
133
|
slashingRoundSizeInEpochs:
|
|
139
134
|
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
140
|
-
|
|
135
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
141
136
|
|
|
142
137
|
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
143
138
|
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
@@ -305,10 +300,11 @@ export class P2PNetworkTest {
|
|
|
305
300
|
|
|
306
301
|
async setupAccount() {
|
|
307
302
|
this.logger.info('Setting up account');
|
|
308
|
-
const { deployedAccounts } = await deployAccounts(
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
303
|
+
const { deployedAccounts } = await deployAccounts(1, this.logger, {
|
|
304
|
+
wait: {
|
|
305
|
+
waitForStatus: TxStatus.CHECKPOINTED,
|
|
306
|
+
},
|
|
307
|
+
})({
|
|
312
308
|
wallet: this.context.wallet,
|
|
313
309
|
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
314
310
|
});
|
|
@@ -323,8 +319,9 @@ export class P2PNetworkTest {
|
|
|
323
319
|
throw new Error('Call setupAccount before deploying spam contract');
|
|
324
320
|
}
|
|
325
321
|
|
|
326
|
-
|
|
327
|
-
|
|
322
|
+
({ contract: this.spamContract } = await SpamContract.deploy(this.wallet).send({
|
|
323
|
+
from: this.defaultAccountAddress!,
|
|
324
|
+
}));
|
|
328
325
|
}
|
|
329
326
|
|
|
330
327
|
async removeInitialNode() {
|
|
@@ -359,7 +356,7 @@ export class P2PNetworkTest {
|
|
|
359
356
|
...this.setupOptions,
|
|
360
357
|
fundSponsoredFPC: true,
|
|
361
358
|
skipAccountDeployment: true,
|
|
362
|
-
|
|
359
|
+
slasherEnabled: this.setupOptions.slasherEnabled ?? this.deployL1ContractsArgs.slasherEnabled ?? false,
|
|
363
360
|
aztecTargetCommitteeSize: 0,
|
|
364
361
|
l1ContractsArgs: this.deployL1ContractsArgs,
|
|
365
362
|
},
|
|
@@ -371,8 +368,13 @@ export class P2PNetworkTest {
|
|
|
371
368
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
372
369
|
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
373
370
|
|
|
374
|
-
const {
|
|
375
|
-
|
|
371
|
+
const { genesis } = await getGenesisValues(
|
|
372
|
+
initialFundedAccounts,
|
|
373
|
+
undefined,
|
|
374
|
+
undefined,
|
|
375
|
+
this.context.genesis!.genesisTimestamp,
|
|
376
|
+
);
|
|
377
|
+
this.genesis = genesis;
|
|
376
378
|
|
|
377
379
|
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
378
380
|
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
|
|
@@ -407,6 +409,7 @@ export class P2PNetworkTest {
|
|
|
407
409
|
expectedNodeCount?: number,
|
|
408
410
|
timeoutSeconds = 30,
|
|
409
411
|
checkIntervalSeconds = 0.1,
|
|
412
|
+
topics: TopicType[] = [TopicType.tx],
|
|
410
413
|
) {
|
|
411
414
|
const nodeCount = expectedNodeCount ?? nodes.length;
|
|
412
415
|
const minPeerCount = nodeCount - 1;
|
|
@@ -433,26 +436,28 @@ export class P2PNetworkTest {
|
|
|
433
436
|
|
|
434
437
|
this.logger.warn('All nodes connected to P2P mesh');
|
|
435
438
|
|
|
436
|
-
// Wait for GossipSub mesh to form for
|
|
439
|
+
// Wait for GossipSub mesh to form for all specified topics.
|
|
437
440
|
// We only require at least 1 mesh peer per node because GossipSub
|
|
438
441
|
// stops grafting once it reaches Dlo peers and won't fill the mesh to all available peers.
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
442
|
+
for (const topic of topics) {
|
|
443
|
+
this.logger.warn(`Waiting for GossipSub mesh to form for ${topic} topic...`);
|
|
444
|
+
await Promise.all(
|
|
445
|
+
nodes.map(async (node, index) => {
|
|
446
|
+
const p2p = node.getP2P();
|
|
447
|
+
await retryUntil(
|
|
448
|
+
async () => {
|
|
449
|
+
const meshPeers = await p2p.getGossipMeshPeerCount(topic);
|
|
450
|
+
this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for ${topic} topic`);
|
|
451
|
+
return meshPeers >= 1 ? true : undefined;
|
|
452
|
+
},
|
|
453
|
+
`Node ${index} to have gossip mesh peers for ${topic} topic`,
|
|
454
|
+
timeoutSeconds,
|
|
455
|
+
checkIntervalSeconds,
|
|
456
|
+
);
|
|
457
|
+
}),
|
|
458
|
+
);
|
|
459
|
+
this.logger.warn(`All nodes have gossip mesh peers for ${topic} topic`);
|
|
460
|
+
}
|
|
456
461
|
}
|
|
457
462
|
|
|
458
463
|
async teardown() {
|
|
@@ -464,8 +469,7 @@ export class P2PNetworkTest {
|
|
|
464
469
|
async getContracts(): Promise<{
|
|
465
470
|
rollup: RollupContract;
|
|
466
471
|
slasherContract: GetContractReturnType<typeof SlasherAbi, ViemClient>;
|
|
467
|
-
slashingProposer:
|
|
468
|
-
slashFactory: SlashFactoryContract;
|
|
472
|
+
slashingProposer: SlashingProposerContract | undefined;
|
|
469
473
|
}> {
|
|
470
474
|
if (!this.ctx.deployL1ContractsValues) {
|
|
471
475
|
throw new Error('DeployAztecL1ContractsValues not set');
|
|
@@ -482,14 +486,9 @@ export class P2PNetworkTest {
|
|
|
482
486
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
483
487
|
});
|
|
484
488
|
|
|
485
|
-
// Get the actual slashing proposer from rollup
|
|
489
|
+
// Get the actual slashing proposer from rollup
|
|
486
490
|
const slashingProposer = await rollup.getSlashingProposer();
|
|
487
491
|
|
|
488
|
-
|
|
489
|
-
this.ctx.deployL1ContractsValues.l1Client,
|
|
490
|
-
getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress!.toString()),
|
|
491
|
-
);
|
|
492
|
-
|
|
493
|
-
return { rollup, slasherContract, slashingProposer, slashFactory };
|
|
492
|
+
return { rollup, slasherContract, slashingProposer };
|
|
494
493
|
}
|
|
495
494
|
}
|