@aztec/end-to-end 0.0.1-commit.e2b2873ed → 0.0.1-commit.e304674f1
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 +2 -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 +16 -16
- package/dest/e2e_epochs/epochs_test.d.ts +11 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +60 -38
- 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 +14 -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 +8 -9
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +32 -19
- package/dest/e2e_p2p/reqresp/utils.d.ts +3 -3
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
- package/dest/e2e_p2p/reqresp/utils.js +46 -9
- package/dest/e2e_p2p/shared.d.ts +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 +2 -2
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +13 -13
- 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 +6 -5
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +37 -49
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +5 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +6 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +1 -1
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +3 -1
- package/dest/fixtures/setup.d.ts +33 -11
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +68 -89
- package/dest/fixtures/setup_p2p_test.d.ts +10 -7
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +18 -15
- 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.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 +11 -2
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +97 -38
- package/dest/spartan/tx_metrics.js +1 -1
- package/dest/spartan/utils/bot.d.ts +3 -2
- package/dest/spartan/utils/bot.d.ts.map +1 -1
- package/dest/spartan/utils/bot.js +2 -1
- package/dest/spartan/utils/config.d.ts +7 -1
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +3 -1
- package/dest/spartan/utils/index.d.ts +4 -2
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +5 -1
- package/dest/spartan/utils/k8s.d.ts +3 -1
- package/dest/spartan/utils/k8s.d.ts.map +1 -1
- package/dest/spartan/utils/k8s.js +6 -0
- package/dest/spartan/utils/nodes.d.ts +4 -5
- package/dest/spartan/utils/nodes.d.ts.map +1 -1
- package/dest/spartan/utils/nodes.js +9 -9
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/test-wallet/test_wallet.d.ts +16 -23
- package/dest/test-wallet/test_wallet.d.ts.map +1 -1
- package/dest/test-wallet/test_wallet.js +73 -65
- 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 +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 +20 -16
- package/src/e2e_epochs/epochs_test.ts +78 -66
- package/src/e2e_fees/fees_test.ts +14 -7
- 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 -28
- package/src/e2e_p2p/reqresp/utils.ts +58 -9
- package/src/e2e_p2p/shared.ts +71 -59
- package/src/e2e_token_contract/token_contract_test.ts +18 -10
- 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 +43 -52
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +10 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +3 -1
- package/src/fixtures/setup.ts +97 -124
- package/src/fixtures/setup_p2p_test.ts +17 -25
- package/src/fixtures/token_utils.ts +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 +1 -1
- 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 +138 -31
- package/src/spartan/tx_metrics.ts +1 -1
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/config.ts +2 -0
- package/src/spartan/utils/index.ts +7 -0
- package/src/spartan/utils/k8s.ts +8 -0
- package/src/spartan/utils/nodes.ts +15 -10
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/test-wallet/test_wallet.ts +101 -80
- 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
|
@@ -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) {
|
|
@@ -54,7 +54,7 @@ export class BlacklistTokenContractTest {
|
|
|
54
54
|
asset!: TokenBlacklistContract;
|
|
55
55
|
tokenSim!: TokenSimulator;
|
|
56
56
|
badAccount!: InvalidAccountContract;
|
|
57
|
-
|
|
57
|
+
authwitProxy!: GenericProxyContract;
|
|
58
58
|
cheatCodes!: CheatCodes;
|
|
59
59
|
sequencer!: SequencerClient;
|
|
60
60
|
aztecNode!: AztecNode;
|
|
@@ -107,21 +107,25 @@ export class BlacklistTokenContractTest {
|
|
|
107
107
|
await publicDeployAccounts(this.wallet, [this.adminAddress, this.otherAddress, this.blacklistedAddress]);
|
|
108
108
|
|
|
109
109
|
this.logger.verbose(`Deploying TokenContract...`);
|
|
110
|
-
this.asset = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
|
|
110
|
+
({ contract: this.asset } = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
|
|
111
111
|
from: this.adminAddress,
|
|
112
|
-
});
|
|
112
|
+
}));
|
|
113
113
|
this.logger.verbose(`Token deployed to ${this.asset.address}`);
|
|
114
114
|
|
|
115
115
|
this.logger.verbose(`Deploying bad account...`);
|
|
116
|
-
this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({
|
|
116
|
+
({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
|
|
117
|
+
from: this.adminAddress,
|
|
118
|
+
}));
|
|
117
119
|
this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
|
|
118
120
|
|
|
119
121
|
// Deploy a proxy contract for "on behalf of other" tests. The note owner must be the tx sender
|
|
120
122
|
// (so their notes are in scope), but msg_sender in the target must differ from the note owner
|
|
121
123
|
// to trigger authwit validation. The proxy forwards calls so that msg_sender != tx sender.
|
|
122
124
|
this.logger.verbose(`Deploying generic proxy...`);
|
|
123
|
-
this.
|
|
124
|
-
|
|
125
|
+
({ contract: this.authwitProxy } = await GenericProxyContract.deploy(this.wallet).send({
|
|
126
|
+
from: this.adminAddress,
|
|
127
|
+
}));
|
|
128
|
+
this.logger.verbose(`Deployed to ${this.authwitProxy.address}.`);
|
|
125
129
|
|
|
126
130
|
await this.crossTimestampOfChange();
|
|
127
131
|
|
|
@@ -133,9 +137,9 @@ export class BlacklistTokenContractTest {
|
|
|
133
137
|
[this.adminAddress, this.otherAddress, this.blacklistedAddress],
|
|
134
138
|
);
|
|
135
139
|
|
|
136
|
-
expect(
|
|
137
|
-
|
|
138
|
-
);
|
|
140
|
+
expect(
|
|
141
|
+
(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
|
|
142
|
+
).toEqual(new Role().withAdmin().toNoirStruct());
|
|
139
143
|
}
|
|
140
144
|
|
|
141
145
|
async setup() {
|
|
@@ -189,9 +193,9 @@ export class BlacklistTokenContractTest {
|
|
|
189
193
|
|
|
190
194
|
await this.crossTimestampOfChange();
|
|
191
195
|
|
|
192
|
-
expect(
|
|
193
|
-
|
|
194
|
-
);
|
|
196
|
+
expect(
|
|
197
|
+
(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
|
|
198
|
+
).toEqual(adminMinterRole.toNoirStruct());
|
|
195
199
|
|
|
196
200
|
this.logger.verbose(`Minting ${amount} publicly...`);
|
|
197
201
|
await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress });
|
|
@@ -199,7 +203,7 @@ export class BlacklistTokenContractTest {
|
|
|
199
203
|
this.logger.verbose(`Minting ${amount} privately...`);
|
|
200
204
|
const secret = Fr.random();
|
|
201
205
|
const secretHash = await computeSecretHash(secret);
|
|
202
|
-
const receipt = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
|
|
206
|
+
const { receipt } = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
|
|
203
207
|
|
|
204
208
|
await this.addPendingShieldNoteToPXE(asset, this.adminAddress, amount, secretHash, receipt.txHash);
|
|
205
209
|
await asset.methods.redeem_shield(this.adminAddress, amount, secret).send({ from: this.adminAddress });
|
|
@@ -207,20 +211,20 @@ export class BlacklistTokenContractTest {
|
|
|
207
211
|
|
|
208
212
|
tokenSim.mintPublic(this.adminAddress, amount);
|
|
209
213
|
|
|
210
|
-
const publicBalance = await asset.methods
|
|
214
|
+
const { result: publicBalance } = await asset.methods
|
|
211
215
|
.balance_of_public(this.adminAddress)
|
|
212
216
|
.simulate({ from: this.adminAddress });
|
|
213
217
|
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
214
218
|
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(this.adminAddress));
|
|
215
219
|
|
|
216
220
|
tokenSim.mintPrivate(this.adminAddress, amount);
|
|
217
|
-
const privateBalance = await asset.methods
|
|
221
|
+
const { result: privateBalance } = await asset.methods
|
|
218
222
|
.balance_of_private(this.adminAddress)
|
|
219
223
|
.simulate({ from: this.adminAddress });
|
|
220
224
|
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
221
225
|
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(this.adminAddress));
|
|
222
226
|
|
|
223
|
-
const totalSupply = await asset.methods.total_supply().simulate({ from: this.adminAddress });
|
|
227
|
+
const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: this.adminAddress });
|
|
224
228
|
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
225
229
|
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
226
230
|
}
|
|
@@ -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,7 +10,8 @@ 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';
|
|
@@ -20,19 +22,13 @@ import { sleep } from '@aztec/foundation/sleep';
|
|
|
20
22
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
21
23
|
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
22
24
|
import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
23
|
-
import {
|
|
24
|
-
import type { TestProverNode } from '@aztec/prover-node/test';
|
|
25
|
+
import type { ProverNodeConfig } from '@aztec/prover-node';
|
|
25
26
|
import type { PXEConfig } from '@aztec/pxe/config';
|
|
26
|
-
import {
|
|
27
|
-
type SequencerClient,
|
|
28
|
-
type SequencerEvents,
|
|
29
|
-
type SequencerPublisher,
|
|
30
|
-
SequencerState,
|
|
31
|
-
} from '@aztec/sequencer-client';
|
|
32
|
-
import type { TestSequencerClient } from '@aztec/sequencer-client/test';
|
|
27
|
+
import { type SequencerClient, type SequencerEvents, SequencerState } from '@aztec/sequencer-client';
|
|
33
28
|
import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
|
|
34
29
|
import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
35
30
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
31
|
+
import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
|
|
36
32
|
|
|
37
33
|
import { join } from 'path';
|
|
38
34
|
import type { Hex } from 'viem';
|
|
@@ -46,7 +42,7 @@ import {
|
|
|
46
42
|
setup,
|
|
47
43
|
} from '../fixtures/utils.js';
|
|
48
44
|
|
|
49
|
-
export const
|
|
45
|
+
export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
|
|
50
46
|
export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
|
|
51
47
|
export const ARCHIVER_POLL_INTERVAL = 50;
|
|
52
48
|
export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
@@ -81,7 +77,7 @@ export class EpochsTestContext {
|
|
|
81
77
|
public proverDelayer!: Delayer;
|
|
82
78
|
public sequencerDelayer!: Delayer;
|
|
83
79
|
|
|
84
|
-
public proverNodes:
|
|
80
|
+
public proverNodes: AztecNodeService[] = [];
|
|
85
81
|
public nodes: AztecNodeService[] = [];
|
|
86
82
|
|
|
87
83
|
public epochDuration!: number;
|
|
@@ -147,9 +143,9 @@ export class EpochsTestContext {
|
|
|
147
143
|
// using the prover's eth address if the proverId is used for something in the rollup contract
|
|
148
144
|
// Use numeric EthAddress for deterministic prover id
|
|
149
145
|
proverId: EthAddress.fromNumber(1),
|
|
150
|
-
|
|
146
|
+
worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
|
|
151
147
|
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
152
|
-
|
|
148
|
+
slasherEnabled: false,
|
|
153
149
|
l1PublishingTime,
|
|
154
150
|
...opts,
|
|
155
151
|
},
|
|
@@ -169,17 +165,8 @@ export class EpochsTestContext {
|
|
|
169
165
|
// Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
|
|
170
166
|
this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
|
|
171
167
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
this.proverDelayer = context.proverNode
|
|
175
|
-
? (((context.proverNode as TestProverNode).publisher as ProverNodePublisher).l1TxUtils as DelayedTxUtils).delayer!
|
|
176
|
-
: undefined!;
|
|
177
|
-
this.sequencerDelayer = context.sequencer
|
|
178
|
-
? (
|
|
179
|
-
((context.sequencer as TestSequencerClient).sequencer.publisher as SequencerPublisher)
|
|
180
|
-
.l1TxUtils as DelayedTxUtils
|
|
181
|
-
).delayer!
|
|
182
|
-
: undefined!;
|
|
168
|
+
this.proverDelayer = context.proverDelayer!;
|
|
169
|
+
this.sequencerDelayer = context.sequencerDelayer!;
|
|
183
170
|
|
|
184
171
|
if ((context.proverNode && !this.proverDelayer) || (context.sequencer && !this.sequencerDelayer)) {
|
|
185
172
|
throw new Error(`Could not find prover or sequencer delayer`);
|
|
@@ -195,6 +182,7 @@ export class EpochsTestContext {
|
|
|
195
182
|
ethereumSlotDuration,
|
|
196
183
|
proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
|
|
197
184
|
targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
|
|
185
|
+
rollupManaLimit: Number(await this.rollup.getManaLimit()),
|
|
198
186
|
};
|
|
199
187
|
|
|
200
188
|
this.logger.info(
|
|
@@ -214,26 +202,29 @@ export class EpochsTestContext {
|
|
|
214
202
|
const proverNodePrivateKey = this.getNextPrivateKey();
|
|
215
203
|
const proverIndex = this.proverNodes.length + 1;
|
|
216
204
|
const { mockGossipSubNetwork } = this.context;
|
|
217
|
-
const proverNode = await withLoggerBindings({ actor: `prover-${proverIndex}` }, () =>
|
|
205
|
+
const { proverNode } = await withLoggerBindings({ actor: `prover-${proverIndex}` }, () =>
|
|
218
206
|
createAndSyncProverNode(
|
|
219
207
|
proverNodePrivateKey,
|
|
220
208
|
{
|
|
221
209
|
...this.context.config,
|
|
222
210
|
p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
|
|
226
211
|
proverId: EthAddress.fromNumber(proverIndex),
|
|
227
212
|
dontStart: opts.dontStart,
|
|
228
213
|
...opts,
|
|
229
214
|
},
|
|
230
|
-
|
|
231
|
-
|
|
215
|
+
{
|
|
216
|
+
dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
|
|
217
|
+
},
|
|
232
218
|
{
|
|
233
219
|
dateProvider: this.context.dateProvider,
|
|
234
|
-
p2pClientDeps:
|
|
235
|
-
|
|
236
|
-
:
|
|
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,
|
|
237
228
|
},
|
|
238
229
|
),
|
|
239
230
|
);
|
|
@@ -248,14 +239,20 @@ export class EpochsTestContext {
|
|
|
248
239
|
|
|
249
240
|
public createValidatorNode(
|
|
250
241
|
privateKeys: `0x${string}`[],
|
|
251
|
-
opts: Partial<AztecNodeConfig> & {
|
|
242
|
+
opts: Partial<AztecNodeConfig> & {
|
|
243
|
+
dontStartSequencer?: boolean;
|
|
244
|
+
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
245
|
+
} = {},
|
|
252
246
|
) {
|
|
253
247
|
this.logger.warn('Creating and syncing a validator node...');
|
|
254
248
|
return this.createNode({ ...opts, disableValidator: false, validatorPrivateKeys: new SecretValue(privateKeys) });
|
|
255
249
|
}
|
|
256
250
|
|
|
257
251
|
private async createNode(
|
|
258
|
-
opts: Partial<AztecNodeConfig> & {
|
|
252
|
+
opts: Partial<AztecNodeConfig> & {
|
|
253
|
+
dontStartSequencer?: boolean;
|
|
254
|
+
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
255
|
+
} = {},
|
|
259
256
|
) {
|
|
260
257
|
const nodeIndex = this.nodes.length + 1;
|
|
261
258
|
const actorPrefix = opts.disableValidator ? 'node' : 'validator';
|
|
@@ -269,6 +266,7 @@ export class EpochsTestContext {
|
|
|
269
266
|
...resolvedConfig,
|
|
270
267
|
dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
|
|
271
268
|
validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
|
|
269
|
+
nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
|
|
272
270
|
p2pEnabled,
|
|
273
271
|
p2pIp,
|
|
274
272
|
},
|
|
@@ -277,34 +275,15 @@ export class EpochsTestContext {
|
|
|
277
275
|
p2pClientDeps: {
|
|
278
276
|
p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
|
|
279
277
|
},
|
|
278
|
+
slashingProtectionDb: opts.slashingProtectionDb,
|
|
280
279
|
},
|
|
281
280
|
{
|
|
282
|
-
|
|
281
|
+
genesis: this.context.genesis,
|
|
283
282
|
...opts,
|
|
284
283
|
},
|
|
285
284
|
),
|
|
286
285
|
);
|
|
287
286
|
|
|
288
|
-
// REFACTOR: We're getting too much into the internals of the sequencer here.
|
|
289
|
-
// We should have a single method for constructing an aztec node that returns a TestAztecNodeService
|
|
290
|
-
// which directly exposes the delayer and sets any test config.
|
|
291
|
-
if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
|
|
292
|
-
this.logger.info(
|
|
293
|
-
`Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`,
|
|
294
|
-
);
|
|
295
|
-
// 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.
|
|
296
|
-
// The delayer needs a wallet (a client that can sign), so we have to create one here.
|
|
297
|
-
const l1Client = createExtendedL1Client(
|
|
298
|
-
resolvedConfig.l1RpcUrls!,
|
|
299
|
-
resolvedConfig.publisherPrivateKeys![0]!.getValue(),
|
|
300
|
-
);
|
|
301
|
-
const sequencer = node.getSequencer() as TestSequencerClient;
|
|
302
|
-
const publisher = sequencer.sequencer.publisher;
|
|
303
|
-
const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
|
|
304
|
-
delayed.delayer!.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
|
|
305
|
-
publisher.l1TxUtils = delayed;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
287
|
this.nodes.push(node);
|
|
309
288
|
return node;
|
|
310
289
|
}
|
|
@@ -356,7 +335,10 @@ export class EpochsTestContext {
|
|
|
356
335
|
this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
|
|
357
336
|
oneSlotBefore,
|
|
358
337
|
});
|
|
359
|
-
|
|
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);
|
|
360
342
|
}
|
|
361
343
|
|
|
362
344
|
/** Waits for the aztec node to sync to the target block number. */
|
|
@@ -408,15 +390,13 @@ export class EpochsTestContext {
|
|
|
408
390
|
|
|
409
391
|
/** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
|
|
410
392
|
public async createL1Client() {
|
|
411
|
-
const
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
this.l1Client.chain,
|
|
416
|
-
),
|
|
417
|
-
this.context.dateProvider,
|
|
418
|
-
{ 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,
|
|
419
397
|
);
|
|
398
|
+
const delayer = createDelayer(this.context.dateProvider, { ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S }, {});
|
|
399
|
+
const client = wrapClientWithDelayer(rawClient, delayer);
|
|
420
400
|
expect(await client.getBalance({ address: client.account.address })).toBeGreaterThan(0n);
|
|
421
401
|
return { client, delayer };
|
|
422
402
|
}
|
|
@@ -433,6 +413,38 @@ export class EpochsTestContext {
|
|
|
433
413
|
expect(result).toBe(expectedSuccess);
|
|
434
414
|
}
|
|
435
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
|
+
|
|
436
448
|
public watchSequencerEvents(
|
|
437
449
|
sequencers: SequencerClient[],
|
|
438
450
|
getMetadata: (i: number) => Record<string, any> = () => ({}),
|
|
@@ -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
|
|
|
@@ -275,7 +282,7 @@ export class FeesTest {
|
|
|
275
282
|
|
|
276
283
|
// @todo @lherskind As we deal with #13601
|
|
277
284
|
// Right now the value is from `FeeLib.sol`
|
|
278
|
-
const L1_GAS_PER_EPOCH_VERIFIED =
|
|
285
|
+
const L1_GAS_PER_EPOCH_VERIFIED = 3600000n;
|
|
279
286
|
|
|
280
287
|
// We round up
|
|
281
288
|
const mulDiv = (a: bigint, b: bigint, c: bigint) => (a * b) / c + ((a * b) % c > 0n ? 1n : 0n);
|
|
@@ -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,
|