@aztec/end-to-end 0.0.1-commit.e3c1de76 → 0.0.1-commit.e57c76e
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/benchmark.d.ts +15 -1
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +17 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +3 -3
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +36 -39
- package/dest/bench/client_flows/config.d.ts +2 -2
- package/dest/bench/client_flows/config.d.ts.map +1 -1
- package/dest/bench/client_flows/config.js +18 -0
- package/dest/bench/utils.d.ts +1 -1
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +8 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +8 -5
- 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 +36 -17
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +16 -5
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +42 -9
- package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -4
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +2 -1
- package/dest/e2e_epochs/epochs_test.d.ts +33 -8
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +143 -44
- package/dest/e2e_fees/fees_test.d.ts +6 -3
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +50 -17
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +3 -3
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +6 -7
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +4 -3
- package/dest/e2e_p2p/p2p_network.d.ts +14 -12
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +70 -34
- 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 +67 -14
- package/dest/e2e_p2p/shared.d.ts +37 -8
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +91 -51
- 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 +6 -4
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +23 -11
- 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 +9 -8
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +39 -50
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +74 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +71 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +71 -0
- package/dest/fixtures/ha_setup.d.ts.map +1 -0
- package/dest/fixtures/ha_setup.js +116 -0
- package/dest/fixtures/index.d.ts +2 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
- package/dest/fixtures/setup.d.ts +86 -32
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +209 -169
- package/dest/fixtures/setup_p2p_test.d.ts +22 -10
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +23 -17
- package/dest/fixtures/token_utils.d.ts +2 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +5 -7
- package/dest/fixtures/utils.d.ts +2 -2
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +1 -1
- package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/install_legacy_contracts.d.cts +10 -0
- package/dest/install_legacy_contracts.d.cts.map +1 -0
- 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 +4 -2
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +22 -18
- package/dest/shared/gas_portal_test_harness.d.ts +8 -5
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +19 -10
- package/dest/shared/index.d.ts +2 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.js +41 -1
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +2 -2
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +57 -40
- package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
- package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
- package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
- package/dest/simulators/lending_simulator.d.ts +10 -3
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +26 -14
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +3 -24
- package/dest/spartan/setup_test_wallets.d.ts +12 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +108 -41
- package/dest/spartan/tx_metrics.d.ts +18 -4
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +74 -21
- 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 +11 -28
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +4 -1
- package/dest/spartan/utils/index.d.ts +5 -3
- 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 +11 -11
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/spartan/utils/scripts.d.ts +18 -4
- package/dest/spartan/utils/scripts.d.ts.map +1 -1
- package/dest/spartan/utils/scripts.js +19 -4
- package/dest/test-wallet/test_wallet.d.ts +85 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +273 -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 +66 -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 +53 -0
- package/dest/test-wallet/worker_wallet.d.ts +53 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +155 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +160 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +22 -0
- package/package.json +52 -45
- package/src/bench/client_flows/benchmark.ts +19 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +64 -49
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +10 -4
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +52 -25
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +56 -19
- package/src/e2e_deploy_contract/deploy_test.ts +6 -5
- package/src/e2e_epochs/epochs_test.ts +166 -68
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +57 -32
- package/src/e2e_nested_contract/nested_contract_test.ts +10 -6
- package/src/e2e_p2p/inactivity_slash_test.ts +8 -7
- package/src/e2e_p2p/p2p_network.ts +93 -49
- package/src/e2e_p2p/reqresp/utils.ts +84 -17
- package/src/e2e_p2p/shared.ts +109 -65
- 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 +38 -11
- 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 +49 -56
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +93 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +188 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +272 -233
- package/src/fixtures/setup_p2p_test.ts +37 -32
- package/src/fixtures/token_utils.ts +3 -3
- package/src/fixtures/utils.ts +2 -0
- package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +104 -0
- package/src/guides/up_quick_start.sh +3 -5
- package/src/install_legacy_contracts.cjs +75 -0
- package/src/legacy-jest-resolver.cjs +112 -0
- package/src/shared/cross_chain_test_harness.ts +27 -13
- package/src/shared/gas_portal_test_harness.ts +21 -11
- package/src/shared/index.ts +1 -0
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +3 -2
- package/src/shared/uniswap_l1_l2.ts +103 -54
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +32 -14
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/setup_test_wallets.ts +146 -35
- package/src/spartan/tx_metrics.ts +82 -24
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/config.ts +3 -0
- package/src/spartan/utils/index.ts +8 -1
- package/src/spartan/utils/k8s.ts +8 -0
- package/src/spartan/utils/nodes.ts +17 -12
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +43 -7
- package/src/test-wallet/test_wallet.ts +376 -0
- package/src/test-wallet/utils.ts +108 -0
- package/src/test-wallet/wallet_worker_script.ts +63 -0
- package/src/test-wallet/worker_wallet.ts +218 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AztecNodeService } from '@aztec/aztec-node';
|
|
2
|
+
import { getAccountContractAddress } from '@aztec/aztec.js/account';
|
|
2
3
|
import { getTimestampRangeForEpoch } from '@aztec/aztec.js/block';
|
|
3
4
|
import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
4
5
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
@@ -7,8 +8,9 @@ import { EpochCache } from '@aztec/epoch-cache';
|
|
|
7
8
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
8
9
|
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
9
10
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
11
|
+
import { createDelayer, waitUntilL1Timestamp, wrapClientWithDelayer } from '@aztec/ethereum/l1-tx-utils';
|
|
12
|
+
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
13
|
+
import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
12
14
|
import { SecretValue } from '@aztec/foundation/config';
|
|
13
15
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
14
16
|
import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
@@ -23,8 +25,9 @@ import { getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers
|
|
|
23
25
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
24
26
|
import { join } from 'path';
|
|
25
27
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
28
|
+
import { SCHNORR_HARDCODED_PRIVATE_KEY, SchnorrHardcodedKeyAccountContract } from '../fixtures/schnorr_hardcoded_account_contract.js';
|
|
26
29
|
import { createAndSyncProverNode, getPrivateKeyFromIndex, setup } from '../fixtures/utils.js';
|
|
27
|
-
export const
|
|
30
|
+
export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
|
|
28
31
|
export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
|
|
29
32
|
export const ARCHIVER_POLL_INTERVAL = 50;
|
|
30
33
|
export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
@@ -71,9 +74,18 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
71
74
|
const { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs, l1PublishingTime } = EpochsTestContext.getSlotDurations(opts);
|
|
72
75
|
this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
|
|
73
76
|
this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
|
|
77
|
+
// Auto-create a hardcoded account funded via genesis when:
|
|
78
|
+
// - skipInitialSequencer is set (no sequencer to deploy on-chain), or
|
|
79
|
+
// - useHardcodedAccount is explicitly requested (e.g. tight per-block gas budgets that
|
|
80
|
+
// can't fit a full account-deploy tx).
|
|
81
|
+
const useHardcodedAccount = (opts.skipInitialSequencer || opts.useHardcodedAccount) && !opts.skipHardcodedAccount;
|
|
82
|
+
let hardcodedAccountData;
|
|
83
|
+
if (useHardcodedAccount) {
|
|
84
|
+
hardcodedAccountData = await EpochsTestContext.getHardcodedAccountData(Fr.random(), Fr.random());
|
|
85
|
+
}
|
|
74
86
|
// Set up system without any account nor protocol contracts
|
|
75
87
|
// and with faster block times and shorter epochs.
|
|
76
|
-
const context = await setup(opts.numberOfAccounts ?? 0, {
|
|
88
|
+
const context = await setup(useHardcodedAccount ? 0 : opts.numberOfAccounts ?? 0, {
|
|
77
89
|
automineL1Setup: true,
|
|
78
90
|
checkIntervalMs: 50,
|
|
79
91
|
archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
|
|
@@ -87,15 +99,18 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
87
99
|
realProofs: false,
|
|
88
100
|
startProverNode: true,
|
|
89
101
|
proverTestDelayMs: opts.proverTestDelayMs ?? 0,
|
|
90
|
-
// We use numeric incremental prover ids for simplicity, but we can switch to
|
|
91
|
-
// using the prover's eth address if the proverId is used for something in the rollup contract
|
|
92
|
-
// Use numeric EthAddress for deterministic prover id
|
|
93
102
|
proverId: EthAddress.fromNumber(1),
|
|
94
|
-
|
|
103
|
+
worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
|
|
95
104
|
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
96
|
-
|
|
105
|
+
slasherEnabled: false,
|
|
97
106
|
l1PublishingTime,
|
|
98
|
-
...opts
|
|
107
|
+
...opts,
|
|
108
|
+
...hardcodedAccountData ? {
|
|
109
|
+
initialFundedAccounts: [
|
|
110
|
+
hardcodedAccountData
|
|
111
|
+
],
|
|
112
|
+
numberOfAccounts: 0
|
|
113
|
+
} : {}
|
|
99
114
|
}, // Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
100
115
|
// Can be overridden via opts.pxeOpts.
|
|
101
116
|
{
|
|
@@ -103,6 +118,10 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
103
118
|
...opts.pxeOpts
|
|
104
119
|
});
|
|
105
120
|
this.context = context;
|
|
121
|
+
// Register the hardcoded account in PXE (local only, no on-chain deployment needed).
|
|
122
|
+
if (hardcodedAccountData) {
|
|
123
|
+
await this.registerHardcodedAccount(hardcodedAccountData);
|
|
124
|
+
}
|
|
106
125
|
this.proverNodes = context.proverNode ? [
|
|
107
126
|
context.proverNode
|
|
108
127
|
] : [];
|
|
@@ -117,10 +136,8 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
117
136
|
});
|
|
118
137
|
// Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
|
|
119
138
|
this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
this.proverDelayer = context.proverNode ? context.proverNode.publisher.l1TxUtils.delayer : undefined;
|
|
123
|
-
this.sequencerDelayer = context.sequencer ? context.sequencer.sequencer.publisher.l1TxUtils.delayer : undefined;
|
|
139
|
+
this.proverDelayer = context.proverDelayer;
|
|
140
|
+
this.sequencerDelayer = context.sequencerDelayer;
|
|
124
141
|
if (context.proverNode && !this.proverDelayer || context.sequencer && !this.sequencerDelayer) {
|
|
125
142
|
throw new Error(`Could not find prover or sequencer delayer`);
|
|
126
143
|
}
|
|
@@ -132,7 +149,9 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
132
149
|
l1StartBlock: await this.rollup.getL1StartBlock(),
|
|
133
150
|
l1GenesisTime: await this.rollup.getL1GenesisTime(),
|
|
134
151
|
ethereumSlotDuration,
|
|
135
|
-
proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs())
|
|
152
|
+
proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
|
|
153
|
+
targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
|
|
154
|
+
rollupManaLimit: Number(await this.rollup.getManaLimit())
|
|
136
155
|
};
|
|
137
156
|
this.logger.info(`L2 genesis at L1 block ${this.constants.l1StartBlock} (timestamp ${this.constants.l1GenesisTime})`);
|
|
138
157
|
}
|
|
@@ -142,21 +161,64 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
142
161
|
await Promise.all(this.nodes.map((node)=>tryStop(node, this.logger)));
|
|
143
162
|
await this.context.teardown();
|
|
144
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Computes InitialAccountData for a SchnorrHardcodedKeyAccountContract.
|
|
166
|
+
* This contract has a hardcoded signing key and no initializer, so it can be used without
|
|
167
|
+
* on-chain deployment. Pass the returned data in `initialFundedAccounts` so the address
|
|
168
|
+
* gets funded with fee juice in genesis.
|
|
169
|
+
*/ static async getHardcodedAccountData(secret, salt) {
|
|
170
|
+
const contract = new SchnorrHardcodedKeyAccountContract();
|
|
171
|
+
const address = await getAccountContractAddress(contract, secret, salt);
|
|
172
|
+
const signingKey = SCHNORR_HARDCODED_PRIVATE_KEY;
|
|
173
|
+
return {
|
|
174
|
+
secret,
|
|
175
|
+
salt,
|
|
176
|
+
signingKey,
|
|
177
|
+
address
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Registers a SchnorrHardcodedKeyAccountContract in PXE. The account must have been funded
|
|
182
|
+
* at genesis (via getHardcodedAccountData). No on-chain deployment or block mining needed.
|
|
183
|
+
*/ async registerHardcodedAccount(accountData) {
|
|
184
|
+
const contract = new SchnorrHardcodedKeyAccountContract();
|
|
185
|
+
const wallet = this.context.wallet;
|
|
186
|
+
const accountManager = await wallet.createAccount({
|
|
187
|
+
secret: accountData.secret,
|
|
188
|
+
salt: accountData.salt,
|
|
189
|
+
contract
|
|
190
|
+
});
|
|
191
|
+
this.context.accounts = [
|
|
192
|
+
accountManager.address
|
|
193
|
+
];
|
|
194
|
+
return accountManager.address;
|
|
195
|
+
}
|
|
145
196
|
async createProverNode(opts = {}) {
|
|
146
197
|
this.logger.warn('Creating and syncing a simulated prover node...');
|
|
147
198
|
const proverNodePrivateKey = this.getNextPrivateKey();
|
|
148
199
|
const proverIndex = this.proverNodes.length + 1;
|
|
149
|
-
const
|
|
200
|
+
const { mockGossipSubNetwork } = this.context;
|
|
201
|
+
const { proverNode } = await withLoggerBindings({
|
|
150
202
|
actor: `prover-${proverIndex}`
|
|
151
203
|
}, ()=>createAndSyncProverNode(proverNodePrivateKey, {
|
|
152
|
-
...this.context.config
|
|
153
|
-
|
|
154
|
-
dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
|
|
204
|
+
...this.context.config,
|
|
205
|
+
p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
|
|
155
206
|
proverId: EthAddress.fromNumber(proverIndex),
|
|
156
207
|
dontStart: opts.dontStart,
|
|
157
208
|
...opts
|
|
158
|
-
},
|
|
159
|
-
|
|
209
|
+
}, {
|
|
210
|
+
dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex'))
|
|
211
|
+
}, {
|
|
212
|
+
dateProvider: this.context.dateProvider,
|
|
213
|
+
p2pClientDeps: {
|
|
214
|
+
p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
|
|
215
|
+
rpcTxProviders: [
|
|
216
|
+
this.context.aztecNode
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
}, {
|
|
220
|
+
genesis: this.context.genesis,
|
|
221
|
+
dontStart: opts.dontStart
|
|
160
222
|
}));
|
|
161
223
|
this.proverNodes.push(proverNode);
|
|
162
224
|
return proverNode;
|
|
@@ -192,31 +254,19 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
192
254
|
...resolvedConfig,
|
|
193
255
|
dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
|
|
194
256
|
validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
|
|
257
|
+
nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
|
|
195
258
|
p2pEnabled,
|
|
196
259
|
p2pIp
|
|
197
260
|
}, {
|
|
198
261
|
dateProvider: this.context.dateProvider,
|
|
199
262
|
p2pClientDeps: {
|
|
200
263
|
p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined
|
|
201
|
-
}
|
|
264
|
+
},
|
|
265
|
+
slashingProtectionDb: opts.slashingProtectionDb
|
|
202
266
|
}, {
|
|
203
|
-
|
|
267
|
+
genesis: this.context.genesis,
|
|
204
268
|
...opts
|
|
205
269
|
}));
|
|
206
|
-
// REFACTOR: We're getting too much into the internals of the sequencer here.
|
|
207
|
-
// We should have a single method for constructing an aztec node that returns a TestAztecNodeService
|
|
208
|
-
// which directly exposes the delayer and sets any test config.
|
|
209
|
-
if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
|
|
210
|
-
this.logger.info(`Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`);
|
|
211
|
-
// 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.
|
|
212
|
-
// The delayer needs a wallet (a client that can sign), so we have to create one here.
|
|
213
|
-
const l1Client = createExtendedL1Client(resolvedConfig.l1RpcUrls, resolvedConfig.publisherPrivateKeys[0].getValue());
|
|
214
|
-
const sequencer = node.getSequencer();
|
|
215
|
-
const publisher = sequencer.sequencer.publisher;
|
|
216
|
-
const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
|
|
217
|
-
delayed.delayer.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
|
|
218
|
-
publisher.l1TxUtils = delayed;
|
|
219
|
-
}
|
|
220
270
|
this.nodes.push(node);
|
|
221
271
|
return node;
|
|
222
272
|
}
|
|
@@ -244,7 +294,9 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
244
294
|
this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
|
|
245
295
|
oneSlotBefore
|
|
246
296
|
});
|
|
247
|
-
|
|
297
|
+
// Use a timeout that accounts for the full proof submission window
|
|
298
|
+
const proofSubmissionWindowDuration = this.constants.proofSubmissionEpochs * this.epochDuration * this.L2_SLOT_DURATION_IN_S;
|
|
299
|
+
await waitUntilL1Timestamp(this.l1Client, oneSlotBefore, undefined, proofSubmissionWindowDuration * 2);
|
|
248
300
|
}
|
|
249
301
|
/** Waits for the aztec node to sync to the target block number. */ async waitForNodeToSync(blockNumber, type) {
|
|
250
302
|
const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
|
|
@@ -253,7 +305,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
253
305
|
await sleep(waitTime);
|
|
254
306
|
const [syncState, tips] = await Promise.all([
|
|
255
307
|
this.context.aztecNode.getWorldStateSyncStatus(),
|
|
256
|
-
await this.context.aztecNode.
|
|
308
|
+
await this.context.aztecNode.getChainTips()
|
|
257
309
|
]);
|
|
258
310
|
this.logger.info(`Wait for node synch ${blockNumber} ${type}`, {
|
|
259
311
|
blockNumber,
|
|
@@ -293,11 +345,13 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
293
345
|
return TestContract.at(instance.address, wallet);
|
|
294
346
|
}
|
|
295
347
|
/** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */ async createL1Client() {
|
|
296
|
-
const
|
|
348
|
+
const rawClient = createExtendedL1Client([
|
|
297
349
|
...this.l1Client.chain.rpcUrls.default.http
|
|
298
|
-
], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain)
|
|
350
|
+
], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain);
|
|
351
|
+
const delayer = createDelayer(this.context.dateProvider, {
|
|
299
352
|
ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S
|
|
300
|
-
});
|
|
353
|
+
}, {});
|
|
354
|
+
const client = wrapClientWithDelayer(rawClient, delayer);
|
|
301
355
|
expect(await client.getBalance({
|
|
302
356
|
address: client.account.address
|
|
303
357
|
})).toBeGreaterThan(0n);
|
|
@@ -315,7 +369,34 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
315
369
|
]).then((_)=>true).catch((_)=>false);
|
|
316
370
|
expect(result).toBe(expectedSuccess);
|
|
317
371
|
}
|
|
318
|
-
|
|
372
|
+
/** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */ async assertMultipleBlocksPerSlot(targetBlockCount) {
|
|
373
|
+
const archiver = this.context.aztecNode.getBlockSource();
|
|
374
|
+
const checkpoints = await archiver.getCheckpoints({
|
|
375
|
+
from: CheckpointNumber(1),
|
|
376
|
+
limit: 50
|
|
377
|
+
});
|
|
378
|
+
this.logger.warn(`Retrieved ${checkpoints.length} checkpoints from archiver`, {
|
|
379
|
+
checkpoints: checkpoints.map((pc)=>pc.checkpoint.getStats())
|
|
380
|
+
});
|
|
381
|
+
let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
|
|
382
|
+
let targetFound = false;
|
|
383
|
+
for (const checkpoint of checkpoints){
|
|
384
|
+
const blockCount = checkpoint.checkpoint.blocks.length;
|
|
385
|
+
targetFound = targetFound || blockCount >= targetBlockCount;
|
|
386
|
+
this.logger.verbose(`Checkpoint ${checkpoint.checkpoint.number} has ${blockCount} blocks`, {
|
|
387
|
+
checkpoint: checkpoint.checkpoint.getStats()
|
|
388
|
+
});
|
|
389
|
+
for(let i = 0; i < blockCount; i++){
|
|
390
|
+
const block = checkpoint.checkpoint.blocks[i];
|
|
391
|
+
expect(block.indexWithinCheckpoint).toBe(i);
|
|
392
|
+
expect(block.checkpointNumber).toBe(checkpoint.checkpoint.number);
|
|
393
|
+
expect(block.number).toBe(expectedBlockNumber);
|
|
394
|
+
expectedBlockNumber++;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
expect(targetFound).toBe(true);
|
|
398
|
+
}
|
|
399
|
+
watchSequencerEvents(sequencers, getMetadata = ()=>({}), additionalFailEventKeys = []) {
|
|
319
400
|
const stateChanges = [];
|
|
320
401
|
const failEvents = [];
|
|
321
402
|
// Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
|
|
@@ -323,7 +404,12 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
323
404
|
const failEventsKeys = [
|
|
324
405
|
'block-build-failed',
|
|
325
406
|
'checkpoint-publish-failed',
|
|
326
|
-
'proposer-rollup-check-failed'
|
|
407
|
+
'proposer-rollup-check-failed',
|
|
408
|
+
'checkpoint-error',
|
|
409
|
+
'checkpoint-publish-failed',
|
|
410
|
+
'header-validation-failed',
|
|
411
|
+
'pipelined-checkpoint-discarded',
|
|
412
|
+
...additionalFailEventKeys
|
|
327
413
|
];
|
|
328
414
|
const makeEvent = (i, eventName, args)=>({
|
|
329
415
|
...args,
|
|
@@ -347,6 +433,13 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
347
433
|
});
|
|
348
434
|
failEventsKeys.forEach((eventName)=>{
|
|
349
435
|
sequencer.getSequencer().on(eventName, (args)=>{
|
|
436
|
+
// Skip benign block-build-failed events where the builder rejected the block because it
|
|
437
|
+
// could not collect enough valid txs. This is the same "not enough txs" case as
|
|
438
|
+
// block-tx-count-check-failed (which is already excluded above), just detected after we
|
|
439
|
+
// started processing txs rather than before.
|
|
440
|
+
if (eventName === 'block-build-failed' && args.reason === 'Insufficient valid txs') {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
350
443
|
const evt = makeEvent(i, eventName, args);
|
|
351
444
|
failEvents.push(evt);
|
|
352
445
|
this.logger.error(`Failed event ${eventName} from sequencer ${sequencerIndex}`, undefined, evt);
|
|
@@ -358,4 +451,10 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
358
451
|
stateChanges
|
|
359
452
|
};
|
|
360
453
|
}
|
|
454
|
+
assertNoFailuresFromSequencers(failEvents) {
|
|
455
|
+
if (failEvents.length > 0) {
|
|
456
|
+
this.logger.error(`Failed events from sequencers`, failEvents);
|
|
457
|
+
}
|
|
458
|
+
expect(failEvents).toEqual([]);
|
|
459
|
+
}
|
|
361
460
|
}
|
|
@@ -15,10 +15,10 @@ import { TokenContract as BananaCoin } from '@aztec/noir-contracts.js/Token';
|
|
|
15
15
|
import { CounterContract } from '@aztec/noir-test-contracts.js/Counter';
|
|
16
16
|
import { GasSettings } from '@aztec/stdlib/gas';
|
|
17
17
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
18
|
-
import { TestWallet } from '@aztec/test-wallet/server';
|
|
19
18
|
import { type EndToEndContext, type SetupOptions } from '../fixtures/setup.js';
|
|
20
19
|
import { type BalancesFn } from '../fixtures/utils.js';
|
|
21
20
|
import { type GasBridgingTestHarness } from '../shared/gas_portal_test_harness.js';
|
|
21
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
22
22
|
/**
|
|
23
23
|
* Test fixture for testing fees. Provides the following setup steps:
|
|
24
24
|
* InitialAccounts: Initializes 3 Schnorr account contracts.
|
|
@@ -60,11 +60,13 @@ export declare class FeesTest {
|
|
|
60
60
|
getBananaPublicBalanceFn: BalancesFn;
|
|
61
61
|
getBananaPrivateBalanceFn: BalancesFn;
|
|
62
62
|
getProverFee: (blockNumber: BlockNumber) => Promise<bigint>;
|
|
63
|
+
getCommittedProverFee: (blockNumber: BlockNumber) => Promise<bigint>;
|
|
64
|
+
getCommittedBurn: (blockNumber: BlockNumber) => Promise<bigint>;
|
|
63
65
|
readonly ALICE_INITIAL_BANANAS: bigint;
|
|
64
66
|
readonly SUBSCRIPTION_AMOUNT: bigint;
|
|
65
67
|
readonly APP_SPONSORED_TX_GAS_LIMIT: bigint;
|
|
66
68
|
constructor(testName: string, numberOfAccounts?: number, setupOptions?: Partial<SetupOptions & DeployAztecL1ContractsArgs>);
|
|
67
|
-
setup(): Promise<this>;
|
|
69
|
+
setup(opts?: Partial<SetupOptions>): Promise<this>;
|
|
68
70
|
teardown(): Promise<void>;
|
|
69
71
|
setIsMarkingAsProven(b: boolean): void;
|
|
70
72
|
catchUpProvenChain(): Promise<void>;
|
|
@@ -76,6 +78,7 @@ export declare class FeesTest {
|
|
|
76
78
|
/** Alice mints bananaCoin tokens privately to the target address and redeems them. */
|
|
77
79
|
mintPrivateBananas(amount: bigint, address: AztecAddress): Promise<void>;
|
|
78
80
|
applyBaseSetup(): Promise<void>;
|
|
81
|
+
applyEnsureAuthRegistryPublished(): Promise<void>;
|
|
79
82
|
applyInitialAccounts(): Promise<void>;
|
|
80
83
|
applyPublicDeployAccounts(): Promise<void>;
|
|
81
84
|
applySetupFeeJuice(): Promise<void>;
|
|
@@ -85,4 +88,4 @@ export declare class FeesTest {
|
|
|
85
88
|
applyFundAliceWithBananas(): Promise<void>;
|
|
86
89
|
applyFundAliceWithPrivateBananas(): Promise<void>;
|
|
87
90
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlc190ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX2ZlZXMvZmVlc190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFpQyxNQUFNLHNCQUFzQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxJQUFJLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUd4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFLdEUsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUNwQixLQUFLLFlBQVksRUFNbEIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQW9DLE1BQU0sc0JBQXNCLENBQUM7QUFDekYsT0FBTyxFQUF1QyxLQUFLLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNEOzs7Ozs7Ozs7R0FTRztBQUNILHFCQUFhLFFBQVE7SUE4Q2pCLE9BQU8sQ0FBQyxnQkFBZ0I7SUFDeEIsT0FBTyxDQUFDLFlBQVk7SUE5Q3RCLE9BQU8sQ0FBQyxRQUFRLENBQXNCO0lBQy9CLE9BQU8sRUFBRyxlQUFlLENBQUM7SUFFMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLFNBQVMsRUFBRyxTQUFTLENBQUM7SUFDdEIsY0FBYyxFQUFHLGNBQWMsQ0FBQztJQUNoQyxVQUFVLEVBQUcsVUFBVSxDQUFDO0lBRXhCLE1BQU0sRUFBRyxVQUFVLENBQUM7SUFDcEIsWUFBWSxFQUFHLFlBQVksQ0FBQztJQUM1QixVQUFVLEVBQUcsWUFBWSxDQUFDO0lBQzFCLGdCQUFnQixFQUFHLFlBQVksQ0FBQztJQUNoQyxRQUFRLEVBQUcsVUFBVSxDQUFDO0lBRXRCLFFBQVEsRUFBRyxZQUFZLENBQUM7SUFFeEIsV0FBVyxFQUFHLFdBQVcsQ0FBQztJQUUxQixjQUFjLEVBQUcsY0FBYyxDQUFDO0lBRWhDLGdCQUFnQixFQUFHLGdCQUFnQixDQUFDO0lBQ3BDLFVBQVUsRUFBRyxVQUFVLENBQUM7SUFDeEIsU0FBUyxFQUFHLFdBQVcsQ0FBQztJQUN4QixZQUFZLEVBQUcsb0JBQW9CLENBQUM7SUFDcEMsZUFBZSxFQUFHLGVBQWUsQ0FBQztJQUNsQyxvQkFBb0IsRUFBRyx1QkFBdUIsQ0FBQztJQUMvQyx5QkFBeUIsRUFBRyxzQkFBc0IsQ0FBQztJQUVuRCxZQUFZLEVBQUcsWUFBWSxDQUFDO0lBRTVCLGtCQUFrQixFQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLDJCQUEyQixFQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELGVBQWUsRUFBRyxVQUFVLENBQUM7SUFDN0Isd0JBQXdCLEVBQUcsVUFBVSxDQUFDO0lBQ3RDLHlCQUF5QixFQUFHLFVBQVUsQ0FBQztJQUN2QyxZQUFZLEVBQUcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RCxxQkFBcUIsRUFBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RFLGdCQUFnQixFQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFeEUsU0FBZ0IscUJBQXFCLFNBQWdCO0lBQ3JELFNBQWdCLG1CQUFtQixTQUFnQjtJQUNuRCxTQUFnQiwwQkFBMEIsU0FBZ0I7SUFFMUQsWUFDRSxRQUFRLEVBQUUsTUFBTSxFQUNSLGdCQUFnQixTQUFJLEVBQ3BCLFlBQVksR0FBRSxPQUFPLENBQUMsWUFBWSxHQUFHLDBCQUEwQixDQUFNLEVBUTlFO0lBRUssS0FBSyxDQUFDLElBQUksR0FBRSxPQUFPLENBQUMsWUFBWSxDQUFNLGlCQW9CM0M7SUFFSyxRQUFRLGtCQUdiO0lBRUQsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLE9BQU8sUUFFOUI7SUFFSyxrQkFBa0Isa0JBS3ZCO0lBRUssZUFBZTs7O09BV3BCO0lBRUsscUJBQXFCLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxpQkFJeEU7SUFFRCxzRkFBc0Y7SUFDaEYsa0JBQWtCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxpQkFXN0Q7SUFFWSxjQUFjLGtCQU0xQjtJQUVLLGdDQUFnQyxrQkFHckM7SUFFSyxvQkFBb0Isa0JBMkJ6QjtJQUVLLHlCQUF5QixrQkFHOUI7SUFFSyxrQkFBa0Isa0JBY3ZCO0lBRUssc0JBQXNCLGtCQWUzQjtJQUVZLGFBQWEsa0JBNkV6QjtJQUVZLHNCQUFzQixrQkFVbEM7SUFFWSx5QkFBeUIsa0JBT3JDO0lBRVksZ0NBQWdDLGtCQUk1QztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fees_test.d.ts","sourceRoot":"","sources":["../../src/e2e_fees/fees_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"fees_test.d.ts","sourceRoot":"","sources":["../../src/e2e_fees/fees_test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
|
+
import { getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
|
|
2
3
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
3
4
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
4
5
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
@@ -13,8 +14,8 @@ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
|
13
14
|
import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
14
15
|
import { GasSettings } from '@aztec/stdlib/gas';
|
|
15
16
|
import { getContract } from 'viem';
|
|
16
|
-
import { MNEMONIC } from '../fixtures/fixtures.js';
|
|
17
|
-
import { deployAccounts, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
|
|
17
|
+
import { MNEMONIC, getPaddedMaxFeesPerGas } from '../fixtures/fixtures.js';
|
|
18
|
+
import { deployAccounts, ensureAuthRegistryPublished, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
|
|
18
19
|
import { mintTokensToPrivate } from '../fixtures/token_utils.js';
|
|
19
20
|
import { getBalancesFn, setupSponsoredFPC } from '../fixtures/utils.js';
|
|
20
21
|
import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_harness.js';
|
|
@@ -58,6 +59,8 @@ import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_h
|
|
|
58
59
|
getBananaPublicBalanceFn;
|
|
59
60
|
getBananaPrivateBalanceFn;
|
|
60
61
|
getProverFee;
|
|
62
|
+
getCommittedProverFee;
|
|
63
|
+
getCommittedBurn;
|
|
61
64
|
ALICE_INITIAL_BANANAS;
|
|
62
65
|
SUBSCRIPTION_AMOUNT;
|
|
63
66
|
APP_SPONSORED_TX_GAS_LIMIT;
|
|
@@ -75,16 +78,23 @@ import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_h
|
|
|
75
78
|
this.coinbase = setupOptions.coinbase;
|
|
76
79
|
this.logger = createLogger(`e2e:e2e_fees:${testName}`);
|
|
77
80
|
}
|
|
78
|
-
async setup() {
|
|
81
|
+
async setup(opts = {}) {
|
|
79
82
|
this.logger.verbose('Setting up fresh context...');
|
|
83
|
+
// Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
84
|
+
const tokenAllowList = await getTokenAllowedSetupFunctions();
|
|
80
85
|
this.context = await setup(0, {
|
|
81
86
|
startProverNode: true,
|
|
82
87
|
...this.setupOptions,
|
|
88
|
+
...opts,
|
|
83
89
|
fundSponsoredFPC: true,
|
|
84
90
|
skipAccountDeployment: true,
|
|
85
91
|
l1ContractsArgs: {
|
|
86
92
|
...this.setupOptions
|
|
87
|
-
}
|
|
93
|
+
},
|
|
94
|
+
txPublicSetupAllowListExtend: [
|
|
95
|
+
...this.setupOptions.txPublicSetupAllowListExtend ?? [],
|
|
96
|
+
...tokenAllowList
|
|
97
|
+
]
|
|
88
98
|
});
|
|
89
99
|
this.rollupContract = RollupContract.getFromConfig(this.context.config);
|
|
90
100
|
this.chainMonitor = new ChainMonitor(this.rollupContract, this.context.dateProvider, this.logger, 200).start();
|
|
@@ -100,7 +110,7 @@ import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_h
|
|
|
100
110
|
}
|
|
101
111
|
async catchUpProvenChain() {
|
|
102
112
|
const bn = await this.aztecNode.getBlockNumber();
|
|
103
|
-
while(await this.aztecNode.
|
|
113
|
+
while(await this.aztecNode.getBlockNumber('proven') < bn){
|
|
104
114
|
await sleep(1000);
|
|
105
115
|
}
|
|
106
116
|
}
|
|
@@ -124,21 +134,26 @@ import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_h
|
|
|
124
134
|
});
|
|
125
135
|
}
|
|
126
136
|
/** Alice mints bananaCoin tokens privately to the target address and redeems them. */ async mintPrivateBananas(amount, address) {
|
|
127
|
-
const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
128
|
-
from:
|
|
137
|
+
const { result: balanceBefore } = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
138
|
+
from: address
|
|
129
139
|
});
|
|
130
140
|
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
|
|
131
|
-
const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
132
|
-
from:
|
|
141
|
+
const { result: balanceAfter } = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
142
|
+
from: address
|
|
133
143
|
});
|
|
134
144
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
135
145
|
}
|
|
136
146
|
async applyBaseSetup() {
|
|
137
147
|
await this.applyInitialAccounts();
|
|
148
|
+
await this.applyEnsureAuthRegistryPublished();
|
|
138
149
|
await this.applyPublicDeployAccounts();
|
|
139
150
|
await this.applySetupFeeJuice();
|
|
140
151
|
await this.applyDeployBananaToken();
|
|
141
152
|
}
|
|
153
|
+
async applyEnsureAuthRegistryPublished() {
|
|
154
|
+
this.logger.info('Ensuring AuthRegistry published');
|
|
155
|
+
await ensureAuthRegistryPublished(this.wallet, this.aliceAddress);
|
|
156
|
+
}
|
|
142
157
|
async applyInitialAccounts() {
|
|
143
158
|
this.logger.info('Applying initial accounts setup');
|
|
144
159
|
const { deployedAccounts } = await deployAccounts(this.numberOfAccounts, this.logger)({
|
|
@@ -148,8 +163,8 @@ import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_h
|
|
|
148
163
|
this.wallet = this.context.wallet;
|
|
149
164
|
this.aztecNode = this.context.aztecNodeService;
|
|
150
165
|
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
151
|
-
this.gasSettings = GasSettings.
|
|
152
|
-
maxFeesPerGas:
|
|
166
|
+
this.gasSettings = GasSettings.fallback({
|
|
167
|
+
maxFeesPerGas: await getPaddedMaxFeesPerGas(this.aztecNode)
|
|
153
168
|
});
|
|
154
169
|
this.cheatCodes = this.context.cheatCodes;
|
|
155
170
|
this.accounts = deployedAccounts.map((a)=>a.address);
|
|
@@ -167,7 +182,7 @@ import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_h
|
|
|
167
182
|
async applySetupFeeJuice() {
|
|
168
183
|
this.logger.info('Applying fee juice setup');
|
|
169
184
|
this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
|
|
170
|
-
this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.
|
|
185
|
+
this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.logger);
|
|
171
186
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
172
187
|
aztecNode: this.context.aztecNodeService,
|
|
173
188
|
aztecNodeAdmin: this.context.aztecNodeService,
|
|
@@ -178,20 +193,20 @@ import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_h
|
|
|
178
193
|
}
|
|
179
194
|
async applyDeployBananaToken() {
|
|
180
195
|
this.logger.info('Applying deploy banana token setup');
|
|
181
|
-
const bananaCoin = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
|
|
196
|
+
const { contract: bananaCoin } = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
|
|
182
197
|
from: this.aliceAddress
|
|
183
198
|
});
|
|
184
199
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
185
200
|
this.bananaCoin = bananaCoin;
|
|
186
|
-
this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.
|
|
187
|
-
this.getBananaPrivateBalanceFn = getBalancesFn('🍌.private', this.bananaCoin.methods.balance_of_private, this.
|
|
201
|
+
this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.logger);
|
|
202
|
+
this.getBananaPrivateBalanceFn = getBalancesFn('🍌.private', this.bananaCoin.methods.balance_of_private, this.logger);
|
|
188
203
|
}
|
|
189
204
|
async applyFPCSetup() {
|
|
190
205
|
this.logger.info('Applying FPC setup');
|
|
191
206
|
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
192
207
|
expect((await this.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
193
208
|
const bananaCoin = this.bananaCoin;
|
|
194
|
-
const bananaFPC = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
|
|
209
|
+
const { contract: bananaFPC } = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
|
|
195
210
|
from: this.aliceAddress
|
|
196
211
|
});
|
|
197
212
|
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
@@ -216,7 +231,7 @@ import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_h
|
|
|
216
231
|
const block = await this.aztecNode.getBlock(blockNumber);
|
|
217
232
|
// @todo @lherskind As we deal with #13601
|
|
218
233
|
// Right now the value is from `FeeLib.sol`
|
|
219
|
-
const L1_GAS_PER_EPOCH_VERIFIED =
|
|
234
|
+
const L1_GAS_PER_EPOCH_VERIFIED = 3600000n;
|
|
220
235
|
// We round up
|
|
221
236
|
const mulDiv = (a, b, c)=>a * b / c + (a * b % c > 0n ? 1n : 0n);
|
|
222
237
|
const { baseFee } = await this.rollupContract.getL1FeesAt(block.header.globalVariables.timestamp);
|
|
@@ -225,6 +240,24 @@ import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_h
|
|
|
225
240
|
const mana = block.header.totalManaUsed.toBigInt();
|
|
226
241
|
return mulDiv(mana * proverCost, 10n ** 12n, price);
|
|
227
242
|
};
|
|
243
|
+
/**
|
|
244
|
+
* Reads the prover fee that the rollup actually committed for the block's checkpoint, which is what
|
|
245
|
+
* RewardLib uses to pay prover rewards. Unlike `getProverFee`, this does not re-derive the value
|
|
246
|
+
* from current L1 fees or current eth-per-fee-asset price, so it is robust to pipelined fee-asset-price
|
|
247
|
+
* drift between propose-time and reward-payout-time.
|
|
248
|
+
*/ this.getCommittedProverFee = async (blockNumber)=>{
|
|
249
|
+
const block = await this.aztecNode.getBlock(blockNumber);
|
|
250
|
+
const feeHeader = await this.rollupContract.getFeeHeader(BigInt(block.checkpointNumber));
|
|
251
|
+
return feeHeader.manaUsed * feeHeader.proverCost;
|
|
252
|
+
};
|
|
253
|
+
// RewardLib computes sequencerFee = checkpointFee - burn - proverFee where burn = manaUsed * congestionCost.
|
|
254
|
+
// The fixture's typical case keeps congestionCost at zero, but reading it explicitly avoids latent bugs
|
|
255
|
+
// when test load changes excess mana.
|
|
256
|
+
this.getCommittedBurn = async (blockNumber)=>{
|
|
257
|
+
const block = await this.aztecNode.getBlock(blockNumber);
|
|
258
|
+
const feeHeader = await this.rollupContract.getFeeHeader(BigInt(block.checkpointNumber));
|
|
259
|
+
return feeHeader.manaUsed * feeHeader.congestionCost;
|
|
260
|
+
};
|
|
228
261
|
}
|
|
229
262
|
async applySponsoredFPCSetup() {
|
|
230
263
|
this.logger.info('Applying sponsored FPC setup');
|
|
@@ -4,7 +4,7 @@ import type { AztecNode } from '@aztec/aztec.js/node';
|
|
|
4
4
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
5
5
|
import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
|
|
6
6
|
import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
|
|
7
|
-
import { type EndToEndContext } from '../fixtures/setup.js';
|
|
7
|
+
import { type EndToEndContext, type SetupOptions } from '../fixtures/setup.js';
|
|
8
8
|
export declare class NestedContractTest {
|
|
9
9
|
private numberOfAccounts;
|
|
10
10
|
context: EndToEndContext;
|
|
@@ -19,8 +19,8 @@ export declare class NestedContractTest {
|
|
|
19
19
|
* Applies base setup by deploying accounts and publicly deploying them.
|
|
20
20
|
*/
|
|
21
21
|
applyBaseSetup(): Promise<void>;
|
|
22
|
-
setup(): Promise<void>;
|
|
22
|
+
setup(opts?: Partial<SetupOptions>): Promise<void>;
|
|
23
23
|
teardown(): Promise<void>;
|
|
24
24
|
applyManual(): Promise<void>;
|
|
25
25
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkX2NvbnRyYWN0X3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfbmVzdGVkX2NvbnRyYWN0L25lc3RlZF9jb250cmFjdF90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBQ0wsS0FBSyxlQUFlLEVBQ3BCLEtBQUssWUFBWSxFQUtsQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLHFCQUFhLGtCQUFrQjtJQVkzQixPQUFPLENBQUMsZ0JBQWdCO0lBWDFCLE9BQU8sRUFBRyxlQUFlLENBQUM7SUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLE1BQU0sRUFBRyxNQUFNLENBQUM7SUFDaEIscUJBQXFCLEVBQUcsWUFBWSxDQUFDO0lBQ3JDLFNBQVMsRUFBRyxTQUFTLENBQUM7SUFFdEIsY0FBYyxFQUFHLGNBQWMsQ0FBQztJQUNoQyxhQUFhLEVBQUcsYUFBYSxDQUFDO0lBRTlCLFlBQ0UsUUFBUSxFQUFFLE1BQU0sRUFDUixnQkFBZ0IsU0FBSSxFQUc3QjtJQUVEOztPQUVHO0lBQ0csY0FBYyxrQkFlbkI7SUFFSyxLQUFLLENBQUMsSUFBSSxHQUFFLE9BQU8sQ0FBQyxZQUFZLENBQU0saUJBUTNDO0lBRUssUUFBUSxrQkFFYjtJQUVLLFdBQVcsa0JBUWhCO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested_contract_test.d.ts","sourceRoot":"","sources":["../../src/e2e_nested_contract/nested_contract_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EACL,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"nested_contract_test.d.ts","sourceRoot":"","sources":["../../src/e2e_nested_contract/nested_contract_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAKlB,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,kBAAkB;IAY3B,OAAO,CAAC,gBAAgB;IAX1B,OAAO,EAAG,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,MAAM,CAAC;IAChB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IAEtB,cAAc,EAAG,cAAc,CAAC;IAChC,aAAa,EAAG,aAAa,CAAC;IAE9B,YACE,QAAQ,EAAE,MAAM,EACR,gBAAgB,SAAI,EAG7B;IAED;;OAEG;IACG,cAAc,kBAenB;IAEK,KAAK,CAAC,IAAI,GAAE,OAAO,CAAC,YAAY,CAAM,iBAQ3C;IAEK,QAAQ,kBAEb;IAEK,WAAW,kBAQhB;CACF"}
|
|
@@ -31,9 +31,10 @@ export class NestedContractTest {
|
|
|
31
31
|
this.defaultAccountAddress
|
|
32
32
|
]);
|
|
33
33
|
}
|
|
34
|
-
async setup() {
|
|
34
|
+
async setup(opts = {}) {
|
|
35
35
|
this.logger.info('Setting up fresh subsystems');
|
|
36
36
|
this.context = await setup(0, {
|
|
37
|
+
...opts,
|
|
37
38
|
fundSponsoredFPC: true,
|
|
38
39
|
skipAccountDeployment: true
|
|
39
40
|
});
|
|
@@ -44,13 +45,11 @@ export class NestedContractTest {
|
|
|
44
45
|
}
|
|
45
46
|
async applyManual() {
|
|
46
47
|
this.logger.info('Deploying parent and child contracts');
|
|
47
|
-
|
|
48
|
+
({ contract: this.parentContract } = await ParentContract.deploy(this.wallet).send({
|
|
48
49
|
from: this.defaultAccountAddress
|
|
49
|
-
});
|
|
50
|
-
|
|
50
|
+
}));
|
|
51
|
+
({ contract: this.childContract } = await ChildContract.deploy(this.wallet).send({
|
|
51
52
|
from: this.defaultAccountAddress
|
|
52
|
-
});
|
|
53
|
-
this.parentContract = parentContract;
|
|
54
|
-
this.childContract = childContract;
|
|
53
|
+
}));
|
|
55
54
|
}
|
|
56
55
|
}
|
|
@@ -28,4 +28,4 @@ export declare class P2PInactivityTest {
|
|
|
28
28
|
get logger(): import("@aztec/foundation/log").Logger;
|
|
29
29
|
get slashingAmount(): bigint;
|
|
30
30
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5hY3Rpdml0eV9zbGFzaF90ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX3AycC9pbmFjdGl2aXR5X3NsYXNoX3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTNELE9BQU8sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCbEQscUJBQWEsaUJBQWlCO2FBYVYsSUFBSSxFQUFFLGNBQWM7SUFaL0IsS0FBSyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDM0IsV0FBVyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDakMsYUFBYSxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFbkMsTUFBTSxFQUFHLGNBQWMsQ0FBQztJQUN4QixpQkFBaUIsRUFBRyxVQUFVLEVBQUUsQ0FBQztJQUV4QyxPQUFPLENBQUMsT0FBTyxDQUFTO0lBQ3hCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUztJQUNsQyxPQUFPLENBQUMsZUFBZSxDQUFVO0lBRWpDLFlBQ2tCLElBQUksRUFBRSxjQUFjLEVBQ3BDLElBQUksRUFBRTtRQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLEVBSy9EO0lBRUQsT0FBYSxNQUFNLENBQ2pCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLElBQUksRUFBRTtRQUFFLHdDQUF3QyxFQUFFLE1BQU0sQ0FBQztRQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLDhCQStCakg7SUFFWSxLQUFLLGtCQTBFakI7SUFFWSxRQUFRLGtCQU1wQjtJQUVELElBQVcsR0FBRyxtREFFYjtJQUVELElBQVcsTUFBTSwyQ0FFaEI7SUFFRCxJQUFXLGNBQWMsV0FFeEI7Q0FDRiJ9
|