@aztec/end-to-end 4.0.0-nightly.20250907 → 4.0.0-nightly.20260107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bench/client_flows/benchmark.d.ts +4 -3
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +2 -2
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +26 -15
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +111 -90
- package/dest/bench/client_flows/config.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.js +10 -30
- package/dest/bench/utils.d.ts +3 -12
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +17 -37
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +8 -8
- 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 +42 -42
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +13 -10
- 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 +35 -35
- package/dest/e2e_deploy_contract/deploy_test.d.ts +12 -6
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +9 -18
- package/dest/e2e_epochs/epochs_test.d.ts +20 -12
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +36 -27
- package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
- package/dest/e2e_fees/bridging_race.notest.js +14 -11
- package/dest/e2e_fees/fees_test.d.ts +13 -9
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +38 -39
- package/dest/e2e_l1_publisher/write_json.d.ts +4 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +9 -8
- package/dest/e2e_multi_validator/utils.d.ts +2 -2
- package/dest/e2e_multi_validator/utils.d.ts.map +1 -1
- package/dest/e2e_multi_validator/utils.js +4 -10
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +7 -4
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +11 -12
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
- package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
- package/dest/e2e_p2p/p2p_network.d.ts +238 -18
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +50 -25
- package/dest/e2e_p2p/shared.d.ts +16 -17
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +57 -56
- package/dest/e2e_token_contract/token_contract_test.d.ts +6 -5
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +14 -17
- package/dest/fixtures/e2e_prover_test.d.ts +13 -11
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +57 -66
- package/dest/fixtures/fixtures.d.ts +2 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +2 -3
- package/dest/fixtures/get_acvm_config.d.ts +2 -2
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_acvm_config.js +1 -1
- package/dest/fixtures/get_bb_config.d.ts +2 -2
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +2 -2
- package/dest/fixtures/index.d.ts +1 -1
- package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +2 -2
- package/dest/fixtures/logging.d.ts +1 -1
- package/dest/fixtures/setup_p2p_test.d.ts +12 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +50 -24
- package/dest/fixtures/snapshot_manager.d.ts +16 -15
- package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
- package/dest/fixtures/snapshot_manager.js +84 -88
- package/dest/fixtures/token_utils.d.ts +10 -5
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +17 -18
- package/dest/fixtures/utils.d.ts +44 -47
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +128 -185
- package/dest/fixtures/web3signer.d.ts +5 -0
- package/dest/fixtures/web3signer.d.ts.map +1 -0
- package/dest/fixtures/web3signer.js +53 -0
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/index.d.ts +1 -1
- package/dest/quality_of_service/alert_checker.d.ts +2 -2
- package/dest/quality_of_service/alert_checker.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.d.ts +20 -23
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +14 -16
- package/dest/shared/gas_portal_test_harness.d.ts +10 -17
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +11 -8
- package/dest/shared/index.d.ts +1 -1
- package/dest/shared/jest_setup.d.ts +1 -1
- package/dest/shared/jest_setup.js +1 -1
- package/dest/shared/submit-transactions.d.ts +6 -4
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +8 -7
- package/dest/shared/uniswap_l1_l2.d.ts +13 -9
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +44 -58
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +4 -7
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +8 -5
- package/dest/simulators/token_simulator.d.ts +4 -2
- 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 +22 -14
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +144 -86
- package/dest/spartan/tx_metrics.d.ts +39 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +95 -0
- package/dest/spartan/utils.d.ts +101 -16
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +414 -52
- package/package.json +43 -40
- package/src/bench/client_flows/benchmark.ts +8 -8
- package/src/bench/client_flows/client_flows_benchmark.ts +143 -115
- package/src/bench/client_flows/data_extractor.ts +9 -31
- package/src/bench/utils.ts +15 -39
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +46 -63
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +46 -55
- package/src/e2e_deploy_contract/deploy_test.ts +18 -36
- package/src/e2e_epochs/epochs_test.ts +59 -42
- package/src/e2e_fees/bridging_race.notest.ts +16 -11
- package/src/e2e_fees/fees_test.ts +47 -51
- package/src/e2e_l1_publisher/write_json.ts +12 -9
- package/src/e2e_multi_validator/utils.ts +5 -11
- package/src/e2e_nested_contract/nested_contract_test.ts +15 -13
- package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
- package/src/e2e_p2p/p2p_network.ts +125 -89
- package/src/e2e_p2p/shared.ts +69 -60
- package/src/e2e_token_contract/token_contract_test.ts +17 -17
- package/src/fixtures/e2e_prover_test.ts +65 -105
- package/src/fixtures/fixtures.ts +2 -5
- package/src/fixtures/get_acvm_config.ts +2 -2
- package/src/fixtures/get_bb_config.ts +3 -2
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup_p2p_test.ts +79 -32
- package/src/fixtures/snapshot_manager.ts +120 -131
- package/src/fixtures/token_utils.ts +16 -24
- package/src/fixtures/utils.ts +175 -269
- package/src/fixtures/web3signer.ts +63 -0
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +3 -11
- package/src/quality_of_service/alert_checker.ts +1 -1
- package/src/shared/cross_chain_test_harness.ts +23 -31
- package/src/shared/gas_portal_test_harness.ts +14 -21
- package/src/shared/jest_setup.ts +1 -1
- package/src/shared/submit-transactions.ts +12 -8
- package/src/shared/uniswap_l1_l2.ts +80 -88
- package/src/simulators/lending_simulator.ts +9 -6
- package/src/simulators/token_simulator.ts +5 -2
- package/src/spartan/DEVELOP.md +15 -3
- package/src/spartan/setup_test_wallets.ts +171 -127
- package/src/spartan/tx_metrics.ts +130 -0
- package/src/spartan/utils.ts +543 -45
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/src/fixtures/setup_l1_contracts.ts +0 -26
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { RollupContract, createExtendedL1Client } from '@aztec/ethereum';
|
|
1
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
3
|
+
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
5
4
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
6
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
7
7
|
import { TestERC20Abi } from '@aztec/l1-artifacts';
|
|
8
8
|
import { FPCContract } from '@aztec/noir-contracts.js/FPC';
|
|
9
9
|
import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
|
|
@@ -31,15 +31,13 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
31
31
|
*/ export class FeesTest {
|
|
32
32
|
numberOfAccounts;
|
|
33
33
|
snapshotManager;
|
|
34
|
-
wallets;
|
|
35
34
|
accounts;
|
|
36
35
|
logger;
|
|
37
|
-
pxe;
|
|
38
36
|
aztecNode;
|
|
37
|
+
aztecNodeAdmin;
|
|
39
38
|
cheatCodes;
|
|
40
|
-
|
|
39
|
+
wallet;
|
|
41
40
|
aliceAddress;
|
|
42
|
-
bobWallet;
|
|
43
41
|
bobAddress;
|
|
44
42
|
sequencerAddress;
|
|
45
43
|
coinbase;
|
|
@@ -66,7 +64,6 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
66
64
|
APP_SPONSORED_TX_GAS_LIMIT;
|
|
67
65
|
constructor(testName, numberOfAccounts = 3, setupOptions = {}){
|
|
68
66
|
this.numberOfAccounts = numberOfAccounts;
|
|
69
|
-
this.wallets = [];
|
|
70
67
|
this.accounts = [];
|
|
71
68
|
this.ALICE_INITIAL_BANANAS = BigInt(1e22);
|
|
72
69
|
this.SUBSCRIPTION_AMOUNT = BigInt(1e19);
|
|
@@ -104,10 +101,11 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
104
101
|
}
|
|
105
102
|
}
|
|
106
103
|
async getBlockRewards() {
|
|
107
|
-
const blockReward = await this.rollupContract.
|
|
108
|
-
const
|
|
104
|
+
const blockReward = await this.rollupContract.getCheckpointReward();
|
|
105
|
+
const rewardConfig = await this.rollupContract.getRewardConfig();
|
|
106
|
+
const balance = await this.feeJuiceBridgeTestHarness.getL1FeeJuiceBalance(rewardConfig.rewardDistributor);
|
|
109
107
|
const toDistribute = balance > blockReward ? blockReward : balance;
|
|
110
|
-
const sequencerBlockRewards = toDistribute /
|
|
108
|
+
const sequencerBlockRewards = toDistribute * BigInt(rewardConfig.sequencerBps) / 10000n;
|
|
111
109
|
const proverBlockRewards = toDistribute - sequencerBlockRewards;
|
|
112
110
|
return {
|
|
113
111
|
sequencerBlockRewards,
|
|
@@ -125,7 +123,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
125
123
|
const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
126
124
|
from: this.aliceAddress
|
|
127
125
|
});
|
|
128
|
-
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress,
|
|
126
|
+
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
|
|
129
127
|
const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
130
128
|
from: this.aliceAddress
|
|
131
129
|
});
|
|
@@ -138,64 +136,63 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
138
136
|
await this.applyDeployBananaTokenSnapshot();
|
|
139
137
|
}
|
|
140
138
|
async applyInitialAccountsSnapshot() {
|
|
141
|
-
await this.snapshotManager.snapshot('initial_accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, {
|
|
142
|
-
this.
|
|
139
|
+
await this.snapshotManager.snapshot('initial_accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, { wallet, aztecNode, cheatCodes })=>{
|
|
140
|
+
this.wallet = wallet;
|
|
143
141
|
this.aztecNode = aztecNode;
|
|
142
|
+
this.aztecNodeAdmin = aztecNode;
|
|
144
143
|
this.gasSettings = GasSettings.default({
|
|
145
144
|
maxFeesPerGas: (await this.aztecNode.getCurrentBaseFees()).mul(2)
|
|
146
145
|
});
|
|
147
|
-
this.cheatCodes =
|
|
148
|
-
this.
|
|
149
|
-
this.
|
|
150
|
-
this.
|
|
151
|
-
[this.aliceWallet, this.bobWallet] = this.wallets.slice(0, 2);
|
|
152
|
-
[this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.accounts;
|
|
146
|
+
this.cheatCodes = cheatCodes;
|
|
147
|
+
this.accounts = deployedAccounts.map((a)=>a.address);
|
|
148
|
+
this.accounts.forEach((a, i)=>this.logger.verbose(`Account ${i} address: ${a}`));
|
|
149
|
+
[this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.accounts.slice(0, 3);
|
|
153
150
|
// We set Alice as the FPC admin to avoid the need for deployment of another account.
|
|
154
151
|
this.fpcAdmin = this.aliceAddress;
|
|
155
152
|
const canonicalFeeJuice = await getCanonicalFeeJuice();
|
|
156
|
-
this.feeJuiceContract =
|
|
153
|
+
this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.wallet);
|
|
157
154
|
});
|
|
158
155
|
}
|
|
159
156
|
async applyPublicDeployAccountsSnapshot() {
|
|
160
|
-
await this.snapshotManager.snapshot('public_deploy_accounts', ()=>ensureAccountContractsPublished(this.
|
|
157
|
+
await this.snapshotManager.snapshot('public_deploy_accounts', ()=>ensureAccountContractsPublished(this.wallet, this.accounts));
|
|
161
158
|
}
|
|
162
159
|
async applySetupFeeJuiceSnapshot() {
|
|
163
160
|
await this.snapshotManager.snapshot('setup_fee_juice', async ()=>{}, async (_data, context)=>{
|
|
164
161
|
this.context = context;
|
|
165
|
-
this.feeJuiceContract =
|
|
162
|
+
this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
|
|
166
163
|
this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.aliceAddress, this.logger);
|
|
167
164
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
168
165
|
aztecNode: context.aztecNode,
|
|
169
166
|
aztecNodeAdmin: context.aztecNode,
|
|
170
|
-
pxeService: context.pxe,
|
|
171
167
|
l1Client: context.deployL1ContractsValues.l1Client,
|
|
172
|
-
wallet: this.
|
|
168
|
+
wallet: this.wallet,
|
|
173
169
|
logger: this.logger
|
|
174
170
|
});
|
|
175
171
|
});
|
|
176
172
|
}
|
|
177
173
|
async applyDeployBananaTokenSnapshot() {
|
|
178
174
|
await this.snapshotManager.snapshot('deploy_banana_token', async ()=>{
|
|
179
|
-
const bananaCoin = await BananaCoin.deploy(this.
|
|
175
|
+
const bananaCoin = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
|
|
180
176
|
from: this.aliceAddress
|
|
181
177
|
}).deployed();
|
|
182
178
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
183
179
|
return {
|
|
184
180
|
bananaCoinAddress: bananaCoin.address
|
|
185
181
|
};
|
|
186
|
-
},
|
|
187
|
-
this.bananaCoin =
|
|
182
|
+
}, ({ bananaCoinAddress })=>{
|
|
183
|
+
this.bananaCoin = BananaCoin.at(bananaCoinAddress, this.wallet);
|
|
188
184
|
const logger = this.logger;
|
|
189
185
|
this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.aliceAddress, logger);
|
|
190
186
|
this.getBananaPrivateBalanceFn = getBalancesFn('🍌.private', this.bananaCoin.methods.balance_of_private, this.aliceAddress, logger);
|
|
187
|
+
return Promise.resolve();
|
|
191
188
|
});
|
|
192
189
|
}
|
|
193
190
|
async applyFPCSetupSnapshot() {
|
|
194
191
|
await this.snapshotManager.snapshot('fpc_setup', async (context)=>{
|
|
195
192
|
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
196
|
-
expect((await context.
|
|
193
|
+
expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
197
194
|
const bananaCoin = this.bananaCoin;
|
|
198
|
-
const bananaFPC = await FPCContract.deploy(this.
|
|
195
|
+
const bananaFPC = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
|
|
199
196
|
from: this.aliceAddress
|
|
200
197
|
}).deployed();
|
|
201
198
|
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
@@ -206,8 +203,8 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
206
203
|
l1FeeJuiceAddress: this.feeJuiceBridgeTestHarness.l1FeeJuiceAddress,
|
|
207
204
|
rollupAddress: context.deployL1ContractsValues.l1ContractAddresses.rollupAddress
|
|
208
205
|
};
|
|
209
|
-
},
|
|
210
|
-
const bananaFPC =
|
|
206
|
+
}, (data, context)=>{
|
|
207
|
+
const bananaFPC = FPCContract.at(data.bananaFPCAddress, this.wallet);
|
|
211
208
|
this.bananaFPC = bananaFPC;
|
|
212
209
|
this.getCoinbaseBalance = async ()=>{
|
|
213
210
|
const l1Client = createExtendedL1Client(context.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
@@ -224,31 +221,33 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
224
221
|
return await this.rollupContract.getSequencerRewards(this.coinbase);
|
|
225
222
|
};
|
|
226
223
|
this.getProverFee = async (blockNumber)=>{
|
|
227
|
-
const block = await this.
|
|
224
|
+
const block = await this.aztecNode.getBlock(blockNumber);
|
|
228
225
|
// @todo @lherskind As we deal with #13601
|
|
229
226
|
// Right now the value is from `FeeLib.sol`
|
|
230
227
|
const L1_GAS_PER_EPOCH_VERIFIED = 1000000n;
|
|
231
228
|
// We round up
|
|
232
229
|
const mulDiv = (a, b, c)=>a * b / c + (a * b % c > 0n ? 1n : 0n);
|
|
233
230
|
const { baseFee } = await this.rollupContract.getL1FeesAt(block.header.globalVariables.timestamp);
|
|
234
|
-
const proverCost = mulDiv(mulDiv(L1_GAS_PER_EPOCH_VERIFIED, baseFee, await this.rollupContract.getEpochDuration()), 1n, await this.rollupContract.getManaTarget()) + await this.rollupContract.getProvingCostPerMana();
|
|
231
|
+
const proverCost = mulDiv(mulDiv(L1_GAS_PER_EPOCH_VERIFIED, baseFee, BigInt(await this.rollupContract.getEpochDuration())), 1n, await this.rollupContract.getManaTarget()) + await this.rollupContract.getProvingCostPerMana();
|
|
235
232
|
const price = await this.rollupContract.getFeeAssetPerEth();
|
|
236
233
|
const mana = block.header.totalManaUsed.toBigInt();
|
|
237
234
|
return mulDiv(mana * proverCost, price, 10n ** 9n);
|
|
238
235
|
};
|
|
236
|
+
return Promise.resolve();
|
|
239
237
|
});
|
|
240
238
|
}
|
|
241
239
|
async applySponsoredFPCSetupSnapshot() {
|
|
242
240
|
await this.snapshotManager.snapshot('sponsored_fpc_setup', async (context)=>{
|
|
243
241
|
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
244
|
-
expect((await context.
|
|
245
|
-
const sponsoredFPC = await setupSponsoredFPC(
|
|
242
|
+
expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
243
|
+
const sponsoredFPC = await setupSponsoredFPC(this.wallet);
|
|
246
244
|
this.logger.info(`SponsoredFPC at ${sponsoredFPC.address}`);
|
|
247
245
|
return {
|
|
248
246
|
sponsoredFPCAddress: sponsoredFPC.address
|
|
249
247
|
};
|
|
250
|
-
},
|
|
251
|
-
this.sponsoredFPC =
|
|
248
|
+
}, (data)=>{
|
|
249
|
+
this.sponsoredFPC = SponsoredFPCContract.at(data.sponsoredFPCAddress, this.wallet);
|
|
250
|
+
return Promise.resolve();
|
|
252
251
|
});
|
|
253
252
|
}
|
|
254
253
|
async applyFundAliceWithBananas() {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { AztecAddress
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import type { L2Block } from '@aztec/aztec.js/block';
|
|
3
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
2
4
|
import { BatchedBlob, Blob } from '@aztec/blob-lib';
|
|
3
5
|
/**
|
|
4
6
|
* Creates a json object that can be used to test the solidity contract.
|
|
5
7
|
* The json object must be put into
|
|
6
8
|
*/
|
|
7
9
|
export declare function writeJson(fileName: string, block: L2Block, l1ToL2Content: Fr[], blobs: Blob[], batchedBlob: BatchedBlob, recipientAddress: AztecAddress, deployerAddress: `0x${string}`): Promise<void>;
|
|
8
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVfanNvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2UyZV9sMV9wdWJsaXNoZXIvd3JpdGVfanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUE2RCxNQUFNLGlCQUFpQixDQUFDO0FBTy9HOzs7R0FHRztBQUNILHdCQUFzQixTQUFTLENBQzdCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLEtBQUssRUFBRSxPQUFPLEVBQ2QsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUNuQixLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQ2IsV0FBVyxFQUFFLFdBQVcsRUFDeEIsZ0JBQWdCLEVBQUUsWUFBWSxFQUM5QixlQUFlLEVBQUUsS0FBSyxNQUFNLEVBQUUsR0FDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXNEZiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write_json.d.ts","sourceRoot":"","sources":["../../src/e2e_l1_publisher/write_json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"write_json.d.ts","sourceRoot":"","sources":["../../src/e2e_l1_publisher/write_json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,IAAI,EAA6D,MAAM,iBAAiB,CAAC;AAO/G;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,EAAE,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,YAAY,EAC9B,eAAe,EAAE,KAAK,MAAM,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAsDf"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getEthBlobEvaluationInputs, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
|
|
2
2
|
import { writeFile } from 'fs/promises';
|
|
3
3
|
const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
|
|
4
4
|
/**
|
|
@@ -16,23 +16,24 @@ const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
|
|
|
16
16
|
};
|
|
17
17
|
const jsonObject = {
|
|
18
18
|
populate: {
|
|
19
|
-
l1ToL2Content: l1ToL2Content.map(asHex),
|
|
19
|
+
l1ToL2Content: l1ToL2Content.map((value)=>asHex(value)),
|
|
20
20
|
recipient: asHex(recipientAddress.toField()),
|
|
21
21
|
sender: deployerAddress
|
|
22
22
|
},
|
|
23
23
|
messages: {
|
|
24
|
-
l2ToL1Messages: block.body.txEffects.flatMap((txEffect)=>txEffect.l2ToL1Msgs).map(asHex)
|
|
24
|
+
l2ToL1Messages: block.body.txEffects.flatMap((txEffect)=>txEffect.l2ToL1Msgs).map((value)=>asHex(value))
|
|
25
25
|
},
|
|
26
|
-
|
|
26
|
+
checkpoint: {
|
|
27
27
|
// The json formatting in forge is a bit brittle, so we convert Fr to a number in the few values below.
|
|
28
28
|
// This should not be a problem for testing as long as the values are not larger than u32.
|
|
29
29
|
archive: asHex(block.archive.root),
|
|
30
|
-
blobCommitments:
|
|
31
|
-
batchedBlobInputs:
|
|
32
|
-
|
|
30
|
+
blobCommitments: getPrefixedEthBlobCommitments(blobs),
|
|
31
|
+
batchedBlobInputs: getEthBlobEvaluationInputs(batchedBlob),
|
|
32
|
+
checkpointNumber: block.number,
|
|
33
33
|
body: `0x${block.body.toBuffer().toString('hex')}`,
|
|
34
34
|
header: {
|
|
35
35
|
lastArchiveRoot: asHex(block.header.lastArchive.root),
|
|
36
|
+
blockHeadersHash: asHex(block.header.blockHeadersHash),
|
|
36
37
|
contentCommitment: {
|
|
37
38
|
blobsHash: asHex(block.header.contentCommitment.blobsHash),
|
|
38
39
|
inHash: asHex(block.header.contentCommitment.inHash),
|
|
@@ -48,7 +49,7 @@ const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
|
|
|
48
49
|
},
|
|
49
50
|
totalManaUsed: block.header.totalManaUsed.toNumber()
|
|
50
51
|
},
|
|
51
|
-
headerHash: asHex(block.
|
|
52
|
+
headerHash: asHex(block.getCheckpointHeader().hash()),
|
|
52
53
|
numTxs: block.body.txEffects.length
|
|
53
54
|
}
|
|
54
55
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import type { EthPrivateKey } from '@aztec/node-keystore';
|
|
4
4
|
export declare function createJSONRPCSigner(keyLookup: Map<string, EthPrivateKey>, stats: Map<string, number>): import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
|
|
@@ -9,4 +9,4 @@ export declare function createKeyFile4(fileName: string, validator1Address: EthA
|
|
|
9
9
|
export declare function createKeyFile5(fileName: string, proverAddress: EthAddress, remoteSignerUrl: string): Promise<void>;
|
|
10
10
|
export declare function createKeyFile6(fileName: string, mnemonic: string, validator1Index: number, coinbase: EthAddress, feeRecipient: AztecAddress): Promise<void>;
|
|
11
11
|
export declare function addressForPrivateKey(privateKey: EthPrivateKey): EthAddress;
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfbXVsdGlfdmFsaWRhdG9yL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFXMUQsd0JBQWdCLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxzR0EwRXBHO0FBR0Qsd0JBQXNCLGNBQWMsQ0FDbEMsUUFBUSxFQUFFLE1BQU0sRUFDaEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsY0FBYyxFQUFFLE1BQU0sRUFDdEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksaUJBbUIzQjtBQUVELHdCQUFzQixjQUFjLENBQ2xDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLFlBQVksRUFBRSxhQUFhLEVBQzNCLGlCQUFpQixFQUFFLE1BQU0sRUFDekIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksaUJBbUIzQjtBQUVELHdCQUFzQixjQUFjLENBQ2xDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLGdCQUFnQixFQUFFLFVBQVUsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsWUFBWSxFQUFFLFlBQVksaUJBaUIzQjtBQUVELHdCQUFzQixjQUFjLENBQ2xDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLGlCQUFpQixFQUFFLFVBQVUsRUFDN0IsaUJBQWlCLEVBQUUsVUFBVSxFQUM3QixlQUFlLEVBQUUsTUFBTSxFQUN2QixhQUFhLEVBQUUsYUFBYSxFQUM1QixRQUFRLEVBQUUsTUFBTSxFQUNoQixhQUFhLEVBQUUsYUFBYSxFQUM1QixTQUFTLEVBQUUsVUFBVSxFQUNyQixTQUFTLEVBQUUsVUFBVSxFQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixhQUFhLEVBQUUsWUFBWSxFQUMzQixhQUFhLEVBQUUsWUFBWSxpQkE0QjVCO0FBRUQsd0JBQXNCLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBY3hHO0FBRUQsd0JBQXNCLGNBQWMsQ0FDbEMsUUFBUSxFQUFFLE1BQU0sRUFDaEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksaUJBa0IzQjtBQUVELHdCQUFnQixvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxHQUFHLFVBQVUsQ0FFMUUifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/e2e_multi_validator/utils.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/e2e_multi_validator/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,sGA0EpG;AAGD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAmB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAmB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,UAAU,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,UAAU,EACpB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,YAAY,iBAiB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,UAAU,EAC7B,iBAAiB,EAAE,UAAU,EAC7B,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,EACrB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,YAAY,EAC3B,aAAa,EAAE,YAAY,iBA4B5B;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAcxG;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAkB3B;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,aAAa,GAAG,UAAU,CAE1E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getAddressFromPrivateKey } from '@aztec/ethereum';
|
|
1
|
+
import { getAddressFromPrivateKey } from '@aztec/ethereum/account';
|
|
2
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import { writeFile } from 'fs/promises';
|
|
4
4
|
import { createServer } from 'http';
|
|
@@ -130,9 +130,7 @@ export async function createKeyFile3(fileName, validatorAddress, publisher1Key,
|
|
|
130
130
|
schemaVersion: 1,
|
|
131
131
|
validators: [
|
|
132
132
|
{
|
|
133
|
-
attester:
|
|
134
|
-
address: validatorAddress.toChecksumString()
|
|
135
|
-
},
|
|
133
|
+
attester: validatorAddress.toChecksumString(),
|
|
136
134
|
coinbase: coinbase.toChecksumString(),
|
|
137
135
|
publisher: [
|
|
138
136
|
publisher1Key,
|
|
@@ -155,9 +153,7 @@ export async function createKeyFile4(fileName, validator1Address, validator2Addr
|
|
|
155
153
|
},
|
|
156
154
|
validators: [
|
|
157
155
|
{
|
|
158
|
-
attester:
|
|
159
|
-
address: validator1Address.toChecksumString()
|
|
160
|
-
},
|
|
156
|
+
attester: validator1Address.toChecksumString(),
|
|
161
157
|
coinbase: coinbase1.toChecksumString(),
|
|
162
158
|
publisher: {
|
|
163
159
|
mnemonic: mnemonic,
|
|
@@ -168,9 +164,7 @@ export async function createKeyFile4(fileName, validator1Address, validator2Addr
|
|
|
168
164
|
feeRecipient: feeRecipient1.toString()
|
|
169
165
|
},
|
|
170
166
|
{
|
|
171
|
-
attester:
|
|
172
|
-
address: validator2Address.toChecksumString()
|
|
173
|
-
},
|
|
167
|
+
attester: validator2Address.toChecksumString(),
|
|
174
168
|
coinbase: coinbase2.toChecksumString(),
|
|
175
169
|
publisher: [
|
|
176
170
|
publisher2Key,
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type Logger } from '@aztec/aztec.js/log';
|
|
3
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
4
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
2
5
|
import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
|
|
3
6
|
import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
|
|
4
7
|
import { type SubsystemsContext } from '../fixtures/snapshot_manager.js';
|
|
@@ -6,9 +9,9 @@ export declare class NestedContractTest {
|
|
|
6
9
|
private numberOfAccounts;
|
|
7
10
|
private snapshotManager;
|
|
8
11
|
logger: Logger;
|
|
9
|
-
wallet:
|
|
12
|
+
wallet: Wallet;
|
|
10
13
|
defaultAccountAddress: AztecAddress;
|
|
11
|
-
|
|
14
|
+
aztecNode: AztecNode;
|
|
12
15
|
parentContract: ParentContract;
|
|
13
16
|
childContract: ChildContract;
|
|
14
17
|
constructor(testName: string, numberOfAccounts?: number);
|
|
@@ -23,4 +26,4 @@ export declare class NestedContractTest {
|
|
|
23
26
|
snapshot: <T>(name: string, apply: (context: SubsystemsContext) => Promise<T>, restore?: (snapshotData: T, context: SubsystemsContext) => Promise<void>) => Promise<void>;
|
|
24
27
|
applyManualSnapshots(): Promise<void>;
|
|
25
28
|
}
|
|
26
|
-
//# sourceMappingURL=
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkX2NvbnRyYWN0X3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfbmVzdGVkX2NvbnRyYWN0L25lc3RlZF9jb250cmFjdF90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBRUwsS0FBSyxpQkFBaUIsRUFJdkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUl6QyxxQkFBYSxrQkFBa0I7SUFZM0IsT0FBTyxDQUFDLGdCQUFnQjtJQVgxQixPQUFPLENBQUMsZUFBZSxDQUFtQjtJQUMxQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsTUFBTSxFQUFHLE1BQU0sQ0FBQztJQUNoQixxQkFBcUIsRUFBRyxZQUFZLENBQUM7SUFDckMsU0FBUyxFQUFHLFNBQVMsQ0FBQztJQUV0QixjQUFjLEVBQUcsY0FBYyxDQUFDO0lBQ2hDLGFBQWEsRUFBRyxhQUFhLENBQUM7SUFFOUIsWUFDRSxRQUFRLEVBQUUsTUFBTSxFQUNSLGdCQUFnQixTQUFJLEVBSTdCO0lBRUQ7Ozs7T0FJRztJQUNHLGtCQUFrQixrQkFvQnZCO0lBRUssS0FBSyxrQkFFVjtJQUVLLFFBQVEsa0JBRWI7SUFFRCxRQUFRLEdBQUksQ0FBQyw4SkFJMkQ7SUFFbEUsb0JBQW9CLGtCQWtCekI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested_contract_test.d.ts","sourceRoot":"","sources":["../../src/e2e_nested_contract/nested_contract_test.ts"],"names":[],"mappings":"
|
|
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,EAEL,KAAK,iBAAiB,EAIvB,MAAM,iCAAiC,CAAC;AAIzC,qBAAa,kBAAkB;IAY3B,OAAO,CAAC,gBAAgB;IAX1B,OAAO,CAAC,eAAe,CAAmB;IAC1C,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,EAI7B;IAED;;;;OAIG;IACG,kBAAkB,kBAoBvB;IAEK,KAAK,kBAEV;IAEK,QAAQ,kBAEb;IAED,QAAQ,GAAI,CAAC,8JAI2D;IAElE,oBAAoB,kBAkBzB;CACF"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createLogger } from '@aztec/aztec.js';
|
|
1
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
3
2
|
import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
|
|
4
3
|
import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
|
|
5
4
|
import { createSnapshotManager, deployAccounts, publicDeployAccounts } from '../fixtures/snapshot_manager.js';
|
|
@@ -10,7 +9,7 @@ export class NestedContractTest {
|
|
|
10
9
|
logger;
|
|
11
10
|
wallet;
|
|
12
11
|
defaultAccountAddress;
|
|
13
|
-
|
|
12
|
+
aztecNode;
|
|
14
13
|
parentContract;
|
|
15
14
|
childContract;
|
|
16
15
|
constructor(testName, numberOfAccounts = 1){
|
|
@@ -24,12 +23,11 @@ export class NestedContractTest {
|
|
|
24
23
|
* 1. Add 3 accounts.
|
|
25
24
|
* 2. Publicly deploy accounts
|
|
26
25
|
*/ async applyBaseSnapshots() {
|
|
27
|
-
await this.snapshotManager.snapshot('accounts', deployAccounts(this.numberOfAccounts, this.logger),
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
this.pxe = pxe;
|
|
26
|
+
await this.snapshotManager.snapshot('accounts', deployAccounts(this.numberOfAccounts, this.logger), ({ deployedAccounts }, { wallet, aztecNode })=>{
|
|
27
|
+
this.wallet = wallet;
|
|
28
|
+
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
29
|
+
this.aztecNode = aztecNode;
|
|
30
|
+
return Promise.resolve();
|
|
33
31
|
});
|
|
34
32
|
await this.snapshotManager.snapshot('public_deploy', async ()=>{}, async ()=>{
|
|
35
33
|
this.logger.verbose(`Public deploy accounts...`);
|
|
@@ -57,9 +55,10 @@ export class NestedContractTest {
|
|
|
57
55
|
parentContractAddress: parentContract.address,
|
|
58
56
|
childContractAddress: childContract.address
|
|
59
57
|
};
|
|
60
|
-
},
|
|
61
|
-
this.parentContract =
|
|
62
|
-
this.childContract =
|
|
58
|
+
}, ({ parentContractAddress, childContractAddress })=>{
|
|
59
|
+
this.parentContract = ParentContract.at(parentContractAddress, this.wallet);
|
|
60
|
+
this.childContract = ChildContract.at(childContractAddress, this.wallet);
|
|
61
|
+
return Promise.resolve();
|
|
63
62
|
});
|
|
64
63
|
}
|
|
65
64
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { AztecNodeService } from '@aztec/aztec-node';
|
|
2
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
+
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
4
|
+
import 'jest-extended';
|
|
5
|
+
import { P2PNetworkTest } from './p2p_network.js';
|
|
6
|
+
export declare class P2PInactivityTest {
|
|
7
|
+
readonly test: P2PNetworkTest;
|
|
8
|
+
nodes: AztecNodeService[];
|
|
9
|
+
activeNodes: AztecNodeService[];
|
|
10
|
+
inactiveNodes: AztecNodeService[];
|
|
11
|
+
rollup: RollupContract;
|
|
12
|
+
offlineValidators: EthAddress[];
|
|
13
|
+
private dataDir;
|
|
14
|
+
private inactiveNodeCount;
|
|
15
|
+
private keepInitialNode;
|
|
16
|
+
constructor(test: P2PNetworkTest, opts: {
|
|
17
|
+
inactiveNodeCount: number;
|
|
18
|
+
keepInitialNode?: boolean;
|
|
19
|
+
});
|
|
20
|
+
static create(testName: string, opts: {
|
|
21
|
+
slashInactivityConsecutiveEpochThreshold: number;
|
|
22
|
+
inactiveNodeCount: number;
|
|
23
|
+
keepInitialNode?: boolean;
|
|
24
|
+
}): Promise<P2PInactivityTest>;
|
|
25
|
+
setup(): Promise<this>;
|
|
26
|
+
teardown(): Promise<void>;
|
|
27
|
+
get ctx(): import("../fixtures/snapshot_manager.js").SubsystemsContext;
|
|
28
|
+
get logger(): import("../../../foundation/dest/log/pino-logger.js").Logger;
|
|
29
|
+
get slashingAmount(): bigint;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5hY3Rpdml0eV9zbGFzaF90ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX3AycC9pbmFjdGl2aXR5X3NsYXNoX3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTNELE9BQU8sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCbEQscUJBQWEsaUJBQWlCO2FBYVYsSUFBSSxFQUFFLGNBQWM7SUFaL0IsS0FBSyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDM0IsV0FBVyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDakMsYUFBYSxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFbkMsTUFBTSxFQUFHLGNBQWMsQ0FBQztJQUN4QixpQkFBaUIsRUFBRyxVQUFVLEVBQUUsQ0FBQztJQUV4QyxPQUFPLENBQUMsT0FBTyxDQUFTO0lBQ3hCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUztJQUNsQyxPQUFPLENBQUMsZUFBZSxDQUFVO0lBRWpDLFlBQ2tCLElBQUksRUFBRSxjQUFjLEVBQ3BDLElBQUksRUFBRTtRQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLEVBSy9EO0lBRUQsT0FBYSxNQUFNLENBQ2pCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLElBQUksRUFBRTtRQUFFLHdDQUF3QyxFQUFFLE1BQU0sQ0FBQztRQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLDhCQThCakg7SUFFWSxLQUFLLGtCQTBFakI7SUFFWSxRQUFRLGtCQU1wQjtJQUVELElBQVcsR0FBRyxnRUFFYjtJQUVELElBQVcsTUFBTSxpRUFFaEI7SUFFRCxJQUFXLGNBQWMsV0FFeEI7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inactivity_slash_test.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/inactivity_slash_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAI3D,OAAO,eAAe,CAAC;AAKvB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiBlD,qBAAa,iBAAiB;aAaV,IAAI,EAAE,cAAc;IAZ/B,KAAK,EAAG,gBAAgB,EAAE,CAAC;IAC3B,WAAW,EAAG,gBAAgB,EAAE,CAAC;IACjC,aAAa,EAAG,gBAAgB,EAAE,CAAC;IAEnC,MAAM,EAAG,cAAc,CAAC;IACxB,iBAAiB,EAAG,UAAU,EAAE,CAAC;IAExC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAU;IAEjC,YACkB,IAAI,EAAE,cAAc,EACpC,IAAI,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,EAK/D;IAED,OAAa,MAAM,CACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QAAE,wCAAwC,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,8BA8BjH;IAEY,KAAK,kBA0EjB;IAEY,QAAQ,kBAMpB;IAED,IAAW,GAAG,gEAEb;IAED,IAAW,MAAM,iEAEhB;IAED,IAAW,cAAc,WAExB;CACF"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import 'jest-extended';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { createNodes } from '../fixtures/setup_p2p_test.js';
|
|
7
|
+
import { P2PNetworkTest } from './p2p_network.js';
|
|
8
|
+
const NUM_NODES = 6;
|
|
9
|
+
const NUM_VALIDATORS = NUM_NODES;
|
|
10
|
+
const COMMITTEE_SIZE = NUM_VALIDATORS;
|
|
11
|
+
const SLASHING_QUORUM = 3;
|
|
12
|
+
const EPOCH_DURATION = 2;
|
|
13
|
+
const SLASHING_ROUND_SIZE_IN_EPOCHS = 2;
|
|
14
|
+
const BOOT_NODE_UDP_PORT = 4500;
|
|
15
|
+
const ETHEREUM_SLOT_DURATION = process.env.CI ? 8 : 4;
|
|
16
|
+
const AZTEC_SLOT_DURATION = ETHEREUM_SLOT_DURATION * 2;
|
|
17
|
+
const SLASHING_UNIT = BigInt(1e18);
|
|
18
|
+
const SLASHING_AMOUNT = SLASHING_UNIT * 3n;
|
|
19
|
+
// How many epochs it may take to set everything up, so we dont slash during this period
|
|
20
|
+
const SETUP_EPOCH_DURATION = 8;
|
|
21
|
+
export class P2PInactivityTest {
|
|
22
|
+
test;
|
|
23
|
+
nodes;
|
|
24
|
+
activeNodes;
|
|
25
|
+
inactiveNodes;
|
|
26
|
+
rollup;
|
|
27
|
+
offlineValidators;
|
|
28
|
+
dataDir;
|
|
29
|
+
inactiveNodeCount;
|
|
30
|
+
keepInitialNode;
|
|
31
|
+
constructor(test, opts){
|
|
32
|
+
this.test = test;
|
|
33
|
+
this.dataDir = fs.mkdtempSync(path.join(os.tmpdir(), test.testName));
|
|
34
|
+
this.inactiveNodeCount = opts.inactiveNodeCount;
|
|
35
|
+
this.keepInitialNode = opts.keepInitialNode ?? false;
|
|
36
|
+
}
|
|
37
|
+
static async create(testName, opts) {
|
|
38
|
+
const test = await P2PNetworkTest.create({
|
|
39
|
+
testName,
|
|
40
|
+
numberOfNodes: 0,
|
|
41
|
+
numberOfValidators: NUM_VALIDATORS,
|
|
42
|
+
basePort: BOOT_NODE_UDP_PORT,
|
|
43
|
+
startProverNode: true,
|
|
44
|
+
initialConfig: {
|
|
45
|
+
proverNodeConfig: {
|
|
46
|
+
proverNodeEpochProvingDelayMs: AZTEC_SLOT_DURATION * 1000
|
|
47
|
+
},
|
|
48
|
+
aztecTargetCommitteeSize: COMMITTEE_SIZE,
|
|
49
|
+
aztecSlotDuration: AZTEC_SLOT_DURATION,
|
|
50
|
+
ethereumSlotDuration: ETHEREUM_SLOT_DURATION,
|
|
51
|
+
aztecProofSubmissionEpochs: 1024,
|
|
52
|
+
listenAddress: '127.0.0.1',
|
|
53
|
+
minTxsPerBlock: 0,
|
|
54
|
+
aztecEpochDuration: EPOCH_DURATION,
|
|
55
|
+
validatorReexecute: false,
|
|
56
|
+
sentinelEnabled: true,
|
|
57
|
+
slashingQuorum: SLASHING_QUORUM,
|
|
58
|
+
slashingRoundSizeInEpochs: SLASHING_ROUND_SIZE_IN_EPOCHS,
|
|
59
|
+
slashInactivityTargetPercentage: 0.8,
|
|
60
|
+
slashGracePeriodL2Slots: SETUP_EPOCH_DURATION * EPOCH_DURATION,
|
|
61
|
+
slashAmountSmall: SLASHING_UNIT,
|
|
62
|
+
slashAmountMedium: SLASHING_UNIT * 2n,
|
|
63
|
+
slashAmountLarge: SLASHING_UNIT * 3n,
|
|
64
|
+
...opts
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return new P2PInactivityTest(test, opts);
|
|
68
|
+
}
|
|
69
|
+
async setup() {
|
|
70
|
+
await this.test.applyBaseSnapshots();
|
|
71
|
+
await this.test.setup();
|
|
72
|
+
// Set slashing penalties for inactivity
|
|
73
|
+
const { rollup } = await this.test.getContracts();
|
|
74
|
+
const [activationThreshold, ejectionThreshold, localEjectionThreshold] = await Promise.all([
|
|
75
|
+
rollup.getActivationThreshold(),
|
|
76
|
+
rollup.getEjectionThreshold(),
|
|
77
|
+
rollup.getLocalEjectionThreshold()
|
|
78
|
+
]);
|
|
79
|
+
const biggestEjection = ejectionThreshold > localEjectionThreshold ? ejectionThreshold : localEjectionThreshold;
|
|
80
|
+
expect(activationThreshold - SLASHING_AMOUNT).toBeLessThan(biggestEjection);
|
|
81
|
+
this.test.ctx.aztecNodeConfig.slashInactivityPenalty = SLASHING_AMOUNT;
|
|
82
|
+
this.rollup = rollup;
|
|
83
|
+
if (!this.keepInitialNode) {
|
|
84
|
+
await this.test.ctx.aztecNode.stop();
|
|
85
|
+
}
|
|
86
|
+
// Create all active nodes
|
|
87
|
+
this.activeNodes = await createNodes(this.test.ctx.aztecNodeConfig, this.test.ctx.dateProvider, this.test.bootstrapNodeEnr, NUM_NODES - this.inactiveNodeCount - Number(this.keepInitialNode), BOOT_NODE_UDP_PORT, this.test.prefilledPublicData, this.dataDir, undefined, Number(this.keepInitialNode));
|
|
88
|
+
// And the ones with an initially disabled sequencer
|
|
89
|
+
const inactiveConfig = {
|
|
90
|
+
...this.test.ctx.aztecNodeConfig,
|
|
91
|
+
dontStartSequencer: true
|
|
92
|
+
};
|
|
93
|
+
this.inactiveNodes = await createNodes(inactiveConfig, this.test.ctx.dateProvider, this.test.bootstrapNodeEnr, this.inactiveNodeCount, BOOT_NODE_UDP_PORT, this.test.prefilledPublicData, this.dataDir, undefined, NUM_NODES - this.inactiveNodeCount);
|
|
94
|
+
this.nodes = [
|
|
95
|
+
...this.keepInitialNode ? [
|
|
96
|
+
this.test.ctx.aztecNode
|
|
97
|
+
] : [],
|
|
98
|
+
...this.activeNodes,
|
|
99
|
+
...this.inactiveNodes
|
|
100
|
+
];
|
|
101
|
+
if (this.nodes.length !== NUM_NODES) {
|
|
102
|
+
throw new Error(`Expected ${NUM_NODES} nodes but got ${this.nodes.length}`);
|
|
103
|
+
}
|
|
104
|
+
this.offlineValidators = this.test.validators.slice(this.test.validators.length - this.inactiveNodeCount).map((a)=>a.attester);
|
|
105
|
+
this.test.logger.warn(`Setup complete. Offline validators are ${this.offlineValidators.join(', ')}.`, {
|
|
106
|
+
validators: this.test.validators,
|
|
107
|
+
offlineValidators: this.offlineValidators
|
|
108
|
+
});
|
|
109
|
+
// Wait for P2P mesh to be fully formed before starting slashing period
|
|
110
|
+
// This prevents race conditions where validators propose blocks before the network is ready
|
|
111
|
+
await this.test.waitForP2PMeshConnectivity(this.nodes, NUM_NODES);
|
|
112
|
+
this.test.logger.warn(`Advancing to epoch ${SETUP_EPOCH_DURATION - 1} (slashing will start after it is completed)`);
|
|
113
|
+
await this.test.ctx.cheatCodes.rollup.advanceToEpoch(EpochNumber(SETUP_EPOCH_DURATION - 1));
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
async teardown() {
|
|
117
|
+
await this.test.stopNodes(this.nodes);
|
|
118
|
+
await this.test.teardown();
|
|
119
|
+
for(let i = 0; i < NUM_NODES; i++){
|
|
120
|
+
fs.rmSync(`${this.dataDir}-${i}`, {
|
|
121
|
+
recursive: true,
|
|
122
|
+
force: true,
|
|
123
|
+
maxRetries: 3
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
get ctx() {
|
|
128
|
+
return this.test.ctx;
|
|
129
|
+
}
|
|
130
|
+
get logger() {
|
|
131
|
+
return this.test.logger;
|
|
132
|
+
}
|
|
133
|
+
get slashingAmount() {
|
|
134
|
+
return SLASHING_AMOUNT;
|
|
135
|
+
}
|
|
136
|
+
}
|