@aztec/end-to-end 3.0.0-nightly.20250910 → 3.0.0-nightly.20250912
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +14 -12
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +35 -39
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +6 -4
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +3 -6
- 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 +38 -38
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +4 -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 +16 -20
- package/dest/e2e_deploy_contract/deploy_test.d.ts +2 -2
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +4 -7
- package/dest/e2e_epochs/epochs_test.d.ts +2 -0
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +5 -0
- package/dest/e2e_fees/bridging_race.notest.js +10 -8
- package/dest/e2e_fees/fees_test.d.ts +3 -4
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +26 -21
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +2 -2
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +4 -6
- package/dest/e2e_p2p/p2p_network.d.ts +3 -2
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +7 -11
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +10 -18
- package/dest/e2e_token_contract/token_contract_test.d.ts +2 -4
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +13 -16
- package/dest/fixtures/e2e_prover_test.d.ts +4 -3
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +22 -29
- package/dest/fixtures/snapshot_manager.d.ts +6 -4
- package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
- package/dest/fixtures/snapshot_manager.js +22 -12
- package/dest/fixtures/token_utils.d.ts +3 -3
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +8 -10
- package/dest/fixtures/utils.d.ts +7 -7
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +31 -28
- package/dest/shared/cross_chain_test_harness.d.ts +6 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +5 -6
- package/dest/shared/gas_portal_test_harness.d.ts +1 -1
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/submit-transactions.d.ts +3 -3
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +4 -5
- package/dest/shared/uniswap_l1_l2.d.ts +6 -4
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +18 -21
- package/dest/simulators/lending_simulator.js +1 -1
- package/dest/spartan/setup_test_wallets.d.ts +12 -10
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +54 -50
- package/package.json +37 -36
- package/src/bench/client_flows/client_flows_benchmark.ts +41 -52
- package/src/bench/utils.ts +6 -6
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +39 -50
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +15 -33
- package/src/e2e_deploy_contract/deploy_test.ts +6 -14
- package/src/e2e_epochs/epochs_test.ts +3 -0
- package/src/e2e_fees/bridging_race.notest.ts +12 -9
- package/src/e2e_fees/fees_test.ts +30 -30
- package/src/e2e_nested_contract/nested_contract_test.ts +6 -8
- package/src/e2e_p2p/p2p_network.ts +16 -15
- package/src/e2e_p2p/shared.ts +14 -21
- package/src/e2e_token_contract/token_contract_test.ts +14 -17
- package/src/fixtures/e2e_prover_test.ts +26 -60
- package/src/fixtures/snapshot_manager.ts +32 -24
- package/src/fixtures/token_utils.ts +7 -15
- package/src/fixtures/utils.ts +41 -44
- package/src/shared/cross_chain_test_harness.ts +5 -7
- package/src/shared/gas_portal_test_harness.ts +1 -1
- package/src/shared/submit-transactions.ts +7 -8
- package/src/shared/uniswap_l1_l2.ts +40 -36
- package/src/simulators/lending_simulator.ts +1 -1
- package/src/spartan/setup_test_wallets.ts +82 -73
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AztecAddress, EthAddress, createLogger } from '@aztec/aztec.js';
|
|
1
|
+
import { EthAddress, createLogger } from '@aztec/aztec.js';
|
|
3
2
|
import { CheatCodes } from '@aztec/aztec/testing';
|
|
4
3
|
import { createExtendedL1Client, deployL1Contract } from '@aztec/ethereum';
|
|
5
4
|
import { InboxAbi, OutboxAbi, TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
|
|
@@ -13,19 +12,17 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
13
12
|
export class CrossChainMessagingTest {
|
|
14
13
|
snapshotManager;
|
|
15
14
|
logger;
|
|
16
|
-
accounts = [];
|
|
17
15
|
aztecNode;
|
|
18
16
|
pxe;
|
|
19
17
|
aztecNodeConfig;
|
|
20
18
|
aztecNodeAdmin;
|
|
21
19
|
l1Client;
|
|
22
|
-
|
|
20
|
+
wallet;
|
|
21
|
+
ownerAddress;
|
|
23
22
|
user1Address;
|
|
24
|
-
user2Wallet;
|
|
25
23
|
user2Address;
|
|
26
24
|
crossChainTestHarness;
|
|
27
25
|
ethAccount;
|
|
28
|
-
ownerAddress;
|
|
29
26
|
l2Token;
|
|
30
27
|
l2Bridge;
|
|
31
28
|
inbox;
|
|
@@ -55,23 +52,23 @@ export class CrossChainMessagingTest {
|
|
|
55
52
|
async applyBaseSnapshots() {
|
|
56
53
|
// Note that we are using the same `pxe`, `aztecNodeConfig` and `aztecNode` across all snapshots.
|
|
57
54
|
// This is to not have issues with different networks.
|
|
58
|
-
await this.snapshotManager.snapshot('3_accounts', deployAccounts(3, this.logger),
|
|
59
|
-
|
|
60
|
-
this.accounts = wallets.map((w)=>w.getCompleteAddress());
|
|
61
|
-
wallets.forEach((w, i)=>this.logger.verbose(`Wallet ${i} address: ${w.getAddress()}`));
|
|
62
|
-
this.user1Wallet = wallets[0];
|
|
63
|
-
this.user1Address = this.user1Wallet.getAddress();
|
|
64
|
-
this.user2Wallet = wallets[1];
|
|
65
|
-
this.user2Address = this.user2Wallet.getAddress();
|
|
55
|
+
await this.snapshotManager.snapshot('3_accounts', deployAccounts(3, this.logger), ({ deployedAccounts }, { pxe, wallet, aztecNodeConfig, aztecNode })=>{
|
|
56
|
+
[this.ownerAddress, this.user1Address, this.user2Address] = deployedAccounts.map((a)=>a.address);
|
|
66
57
|
this.pxe = pxe;
|
|
58
|
+
this.wallet = wallet;
|
|
67
59
|
this.aztecNode = aztecNode;
|
|
68
60
|
this.aztecNodeConfig = aztecNodeConfig;
|
|
61
|
+
return Promise.resolve();
|
|
69
62
|
});
|
|
70
63
|
await this.snapshotManager.snapshot('e2e_cross_chain_messaging', async ()=>{
|
|
71
64
|
// Create the token contract state.
|
|
72
65
|
// Move this account thing to addAccounts above?
|
|
73
66
|
this.logger.verbose(`Public deploy accounts...`);
|
|
74
|
-
await publicDeployAccounts(this.
|
|
67
|
+
await publicDeployAccounts(this.wallet, [
|
|
68
|
+
this.ownerAddress,
|
|
69
|
+
this.user1Address,
|
|
70
|
+
this.user2Address
|
|
71
|
+
]);
|
|
75
72
|
this.l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
76
73
|
const underlyingERC20Address = await deployL1Contract(this.l1Client, TestERC20Abi, TestERC20Bytecode, [
|
|
77
74
|
'Underlying',
|
|
@@ -79,15 +76,14 @@ export class CrossChainMessagingTest {
|
|
|
79
76
|
this.l1Client.account.address
|
|
80
77
|
]).then(({ address })=>address);
|
|
81
78
|
this.logger.verbose(`Setting up cross chain harness...`);
|
|
82
|
-
this.crossChainTestHarness = await CrossChainTestHarness.new(this.aztecNode, this.pxe, this.l1Client, this.
|
|
79
|
+
this.crossChainTestHarness = await CrossChainTestHarness.new(this.aztecNode, this.pxe, this.l1Client, this.wallet, this.ownerAddress, this.logger, underlyingERC20Address);
|
|
83
80
|
this.logger.verbose(`L2 token deployed to: ${this.crossChainTestHarness.l2Token.address}`);
|
|
84
81
|
return this.crossChainTestHarness.toCrossChainContext();
|
|
85
82
|
}, async (crossChainContext)=>{
|
|
86
|
-
this.l2Token = await TokenContract.at(crossChainContext.l2Token, this.
|
|
87
|
-
this.l2Bridge = await TokenBridgeContract.at(crossChainContext.l2Bridge, this.
|
|
83
|
+
this.l2Token = await TokenContract.at(crossChainContext.l2Token, this.wallet);
|
|
84
|
+
this.l2Bridge = await TokenBridgeContract.at(crossChainContext.l2Bridge, this.wallet);
|
|
88
85
|
// There is an issue with the reviver so we are getting strings sometimes. Working around it here.
|
|
89
86
|
this.ethAccount = EthAddress.fromString(crossChainContext.ethAccount.toString());
|
|
90
|
-
this.ownerAddress = AztecAddress.fromString(crossChainContext.ownerAddress.toString());
|
|
91
87
|
const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
|
|
92
88
|
const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
93
89
|
const inbox = getContract({
|
|
@@ -100,7 +96,7 @@ export class CrossChainMessagingTest {
|
|
|
100
96
|
abi: OutboxAbi,
|
|
101
97
|
client: l1Client
|
|
102
98
|
});
|
|
103
|
-
this.crossChainTestHarness = new CrossChainTestHarness(this.aztecNode, this.pxe, this.logger, this.l2Token, this.l2Bridge, this.ethAccount, tokenPortalAddress, crossChainContext.underlying, l1Client, this.aztecNodeConfig.l1Contracts, this.
|
|
99
|
+
this.crossChainTestHarness = new CrossChainTestHarness(this.aztecNode, this.pxe, this.logger, this.l2Token, this.l2Bridge, this.ethAccount, tokenPortalAddress, crossChainContext.underlying, l1Client, this.aztecNodeConfig.l1Contracts, this.wallet, this.ownerAddress);
|
|
104
100
|
this.l1Client = l1Client;
|
|
105
101
|
this.inbox = inbox;
|
|
106
102
|
this.outbox = outbox;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type AztecAddress, type AztecNode, type ContractArtifact, type ContractBase, Fr, type Logger, type PXE, type PublicKeys, type Wallet } from '@aztec/aztec.js';
|
|
2
2
|
import type { StatefulTestContract } from '@aztec/noir-test-contracts.js/StatefulTest';
|
|
3
3
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
4
4
|
export declare class DeployTest {
|
|
5
5
|
private snapshotManager;
|
|
6
6
|
logger: Logger;
|
|
7
7
|
pxe: PXE;
|
|
8
|
-
wallet:
|
|
8
|
+
wallet: Wallet;
|
|
9
9
|
defaultAccountAddress: AztecAddress;
|
|
10
10
|
aztecNode: AztecNode;
|
|
11
11
|
aztecNodeAdmin: AztecNodeAdmin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,EAAE,EACF,KAAK,MAAM,EACX,KAAK,GAAG,EACR,KAAK,UAAU,EACf,KAAK,MAAM,EAGZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAMtE,qBAAa,UAAU;IACrB,OAAO,CAAC,eAAe,CAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAG,GAAG,CAAC;IACV,MAAM,EAAG,MAAM,CAAC;IAChB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IACtB,cAAc,EAAG,cAAc,CAAC;gBAE3B,QAAQ,EAAE,MAAM;IAKtB,KAAK;IAQL,QAAQ;YAIA,2BAA2B;IAOnC,gBAAgB,CAAC,CAAC,SAAS,YAAY,EAC3C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC1C,IAAI,GAAE;QACJ,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,YAAY,CAAC;KACpB,GACL,OAAO,CAAC,CAAC,CAAC;IAaP,qBAAqB,IAAI,OAAO,CAAC,YAAY,CAAC;CAIrD;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAElG,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,YAAY,IAAI;IAC1D,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { getSchnorrWallet } from '@aztec/accounts/schnorr';
|
|
2
1
|
import { Fr, createLogger, getContractInstanceFromInstantiationParams } from '@aztec/aztec.js';
|
|
3
2
|
import { createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
|
|
4
3
|
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
@@ -17,7 +16,7 @@ export class DeployTest {
|
|
|
17
16
|
async setup() {
|
|
18
17
|
await this.applyInitialAccountSnapshot();
|
|
19
18
|
const context = await this.snapshotManager.setup();
|
|
20
|
-
({ pxe: this.pxe, aztecNode: this.aztecNode } = context);
|
|
19
|
+
({ pxe: this.pxe, aztecNode: this.aztecNode, wallet: this.wallet } = context);
|
|
21
20
|
this.aztecNodeAdmin = context.aztecNode;
|
|
22
21
|
return this;
|
|
23
22
|
}
|
|
@@ -25,11 +24,9 @@ export class DeployTest {
|
|
|
25
24
|
await this.snapshotManager.teardown();
|
|
26
25
|
}
|
|
27
26
|
async applyInitialAccountSnapshot() {
|
|
28
|
-
await this.snapshotManager.snapshot('initial_account', deployAccounts(1, this.logger),
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
this.wallet = wallets[0];
|
|
32
|
-
this.defaultAccountAddress = this.wallet.getAddress();
|
|
27
|
+
await this.snapshotManager.snapshot('initial_account', deployAccounts(1, this.logger), ({ deployedAccounts })=>{
|
|
28
|
+
this.defaultAccountAddress = deployedAccounts[0].address;
|
|
29
|
+
return Promise.resolve();
|
|
33
30
|
});
|
|
34
31
|
}
|
|
35
32
|
async registerContract(wallet, contractArtifact, opts = {}) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
2
2
|
import { Fr, type Logger, type Wallet } from '@aztec/aztec.js';
|
|
3
|
+
import { EpochCache } from '@aztec/epoch-cache';
|
|
3
4
|
import { type ExtendedViemWalletClient } from '@aztec/ethereum';
|
|
4
5
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
5
6
|
import { ChainMonitor, type Delayer } from '@aztec/ethereum/test';
|
|
@@ -35,6 +36,7 @@ export declare class EpochsTestContext {
|
|
|
35
36
|
constants: L1RollupConstants;
|
|
36
37
|
logger: Logger;
|
|
37
38
|
monitor: ChainMonitor;
|
|
39
|
+
epochCache: EpochCache;
|
|
38
40
|
proverDelayer: Delayer;
|
|
39
41
|
sequencerDelayer: Delayer;
|
|
40
42
|
proverNodes: ProverNode[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,EAAE,EACF,KAAK,MAAM,EAEX,KAAK,MAAM,EAKZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA4B,KAAK,wBAAwB,EAA0B,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAkB,KAAK,OAAO,EAAqC,MAAM,sBAAsB,CAAC;AAIrH,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,OAAO,EAAE,UAAU,EAAuB,MAAM,oBAAoB,CAAC;AAErE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,KAAK,iBAAiB,EAAuC,MAAM,6BAA6B,CAAC;AAO1G,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAIlB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,qBAAqB,QAA0B,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,qBAAqB,GAAG;KACjC,CAAC,IAAI,MAAM,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QAChE,IAAI,EAAE,CAAC,CAAC;QACR,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,UAAU,CAAC;KACvB;CACF,CAAC,MAAM,eAAe,CAAC,CAAC;AAEzB;;;;GAIG;AACH,qBAAa,iBAAiB;IACrB,OAAO,EAAG,eAAe,CAAC;IAC1B,QAAQ,EAAG,wBAAwB,CAAC;IACpC,MAAM,EAAG,cAAc,CAAC;IACxB,SAAS,EAAG,iBAAiB,CAAC;IAC9B,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAG,YAAY,CAAC;IACvB,aAAa,EAAG,OAAO,CAAC;IACxB,gBAAgB,EAAG,OAAO,CAAC;IAE3B,WAAW,EAAE,UAAU,EAAE,CAAM;IAC/B,KAAK,EAAE,gBAAgB,EAAE,CAAM;IAE/B,aAAa,EAAG,MAAM,CAAC;IAEvB,kBAAkB,EAAG,MAAM,CAAC;IAC5B,qBAAqB,EAAG,MAAM,CAAC;WAElB,KAAK,CAAC,IAAI,GAAE,cAAmB;WAMrC,gBAAgB,CAAC,IAAI,GAAE,cAAmB;;;;;;IAW3C,KAAK,CAAC,IAAI,GAAE,cAAmB;
|
|
1
|
+
{"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AztecNodeService } from '@aztec/aztec-node';
|
|
2
2
|
import { Fr, MerkleTreeId, getContractInstanceFromInstantiationParams, getTimestampRangeForEpoch, retryUntil, sleep } from '@aztec/aztec.js';
|
|
3
|
+
import { EpochCache } from '@aztec/epoch-cache';
|
|
3
4
|
import { DefaultL1ContractsConfig, createExtendedL1Client } from '@aztec/ethereum';
|
|
4
5
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
5
6
|
import { ChainMonitor, DelayedTxUtils, waitUntilL1Timestamp, withDelayer } from '@aztec/ethereum/test';
|
|
@@ -30,6 +31,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
30
31
|
constants;
|
|
31
32
|
logger;
|
|
32
33
|
monitor;
|
|
34
|
+
epochCache;
|
|
33
35
|
proverDelayer;
|
|
34
36
|
sequencerDelayer;
|
|
35
37
|
proverNodes = [];
|
|
@@ -99,6 +101,9 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
99
101
|
this.logger = context.logger;
|
|
100
102
|
this.l1Client = context.deployL1ContractsValues.l1Client;
|
|
101
103
|
this.rollup = RollupContract.getFromConfig(context.config);
|
|
104
|
+
this.epochCache = await EpochCache.create(this.rollup, context.config, {
|
|
105
|
+
dateProvider: context.dateProvider
|
|
106
|
+
});
|
|
102
107
|
// Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
|
|
103
108
|
this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
|
|
104
109
|
// This is hideous.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
|
|
2
2
|
import { Fr, sleep } from '@aztec/aztec.js';
|
|
3
3
|
import { Fq } from '@aztec/foundation/fields';
|
|
4
4
|
import { jest } from '@jest/globals';
|
|
@@ -18,22 +18,24 @@ describe('e2e_fees bridging_race', ()=>{
|
|
|
18
18
|
await t.applyInitialAccountsSnapshot();
|
|
19
19
|
await t.applyPublicDeployAccountsSnapshot();
|
|
20
20
|
await t.applySetupFeeJuiceSnapshot();
|
|
21
|
-
({
|
|
21
|
+
({ wallet, logger } = await t.setup());
|
|
22
22
|
});
|
|
23
23
|
afterAll(async ()=>{
|
|
24
24
|
await t.teardown();
|
|
25
25
|
});
|
|
26
26
|
let logger;
|
|
27
|
-
let pxe;
|
|
28
27
|
let bobsAddress;
|
|
28
|
+
let wallet;
|
|
29
29
|
beforeEach(async ()=>{
|
|
30
30
|
const bobsSecretKey = Fr.random();
|
|
31
31
|
const bobsPrivateSigningKey = Fq.random();
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
const bobsSalt = Fr.random();
|
|
33
|
+
const bobsAccountManager = await wallet.createAccount({
|
|
34
|
+
secret: bobsSecretKey,
|
|
35
|
+
salt: bobsSalt,
|
|
36
|
+
contract: new SchnorrAccountContract(bobsPrivateSigningKey)
|
|
37
|
+
});
|
|
38
|
+
bobsAddress = bobsAccountManager.getAddress();
|
|
37
39
|
});
|
|
38
40
|
it('Alice bridges funds to Bob', async ()=>{
|
|
39
41
|
// Tweak the token manager so the bridging happens immediately before the end of the current L2 slot
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type AztecAddress, type AztecNode, type Logger, type PXE } from '@aztec/aztec.js';
|
|
2
2
|
import { CheatCodes } from '@aztec/aztec/testing';
|
|
3
3
|
import { type DeployL1ContractsArgs, RollupContract } from '@aztec/ethereum';
|
|
4
4
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
@@ -10,6 +10,7 @@ import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
|
10
10
|
import { TokenContract as BananaCoin } from '@aztec/noir-contracts.js/Token';
|
|
11
11
|
import { CounterContract } from '@aztec/noir-test-contracts.js/Counter';
|
|
12
12
|
import { GasSettings } from '@aztec/stdlib/gas';
|
|
13
|
+
import { TestWallet } from '@aztec/test-wallet';
|
|
13
14
|
import { type SubsystemsContext } from '../fixtures/snapshot_manager.js';
|
|
14
15
|
import { type BalancesFn, type SetupOptions } from '../fixtures/utils.js';
|
|
15
16
|
import { type GasBridgingTestHarness } from '../shared/gas_portal_test_harness.js';
|
|
@@ -26,15 +27,13 @@ import { type GasBridgingTestHarness } from '../shared/gas_portal_test_harness.j
|
|
|
26
27
|
export declare class FeesTest {
|
|
27
28
|
private numberOfAccounts;
|
|
28
29
|
private snapshotManager;
|
|
29
|
-
private wallets;
|
|
30
30
|
private accounts;
|
|
31
31
|
logger: Logger;
|
|
32
32
|
pxe: PXE;
|
|
33
33
|
aztecNode: AztecNode;
|
|
34
34
|
cheatCodes: CheatCodes;
|
|
35
|
-
|
|
35
|
+
wallet: TestWallet;
|
|
36
36
|
aliceAddress: AztecAddress;
|
|
37
|
-
bobWallet: AccountWallet;
|
|
38
37
|
bobAddress: AztecAddress;
|
|
39
38
|
sequencerAddress: AztecAddress;
|
|
40
39
|
coinbase: EthAddress;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fees_test.d.ts","sourceRoot":"","sources":["../../src/e2e_fees/fees_test.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
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,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
|
|
2
2
|
import { createLogger, sleep } from '@aztec/aztec.js';
|
|
3
3
|
import { CheatCodes } from '@aztec/aztec/testing';
|
|
4
4
|
import { RollupContract, createExtendedL1Client } from '@aztec/ethereum';
|
|
@@ -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
36
|
pxe;
|
|
38
37
|
aztecNode;
|
|
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);
|
|
@@ -125,7 +122,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
125
122
|
const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
126
123
|
from: this.aliceAddress
|
|
127
124
|
});
|
|
128
|
-
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress,
|
|
125
|
+
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
|
|
129
126
|
const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
130
127
|
from: this.aliceAddress
|
|
131
128
|
});
|
|
@@ -138,45 +135,53 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
138
135
|
await this.applyDeployBananaTokenSnapshot();
|
|
139
136
|
}
|
|
140
137
|
async applyInitialAccountsSnapshot() {
|
|
141
|
-
await this.snapshotManager.snapshot('initial_accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, { pxe, aztecNode, aztecNodeConfig })=>{
|
|
138
|
+
await this.snapshotManager.snapshot('initial_accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, { wallet, pxe, aztecNode, aztecNodeConfig })=>{
|
|
142
139
|
this.pxe = pxe;
|
|
140
|
+
this.wallet = wallet;
|
|
143
141
|
this.aztecNode = aztecNode;
|
|
144
142
|
this.gasSettings = GasSettings.default({
|
|
145
143
|
maxFeesPerGas: (await this.aztecNode.getCurrentBaseFees()).mul(2)
|
|
146
144
|
});
|
|
147
145
|
this.cheatCodes = await CheatCodes.create(aztecNodeConfig.l1RpcUrls, pxe);
|
|
148
|
-
this.
|
|
149
|
-
this.
|
|
150
|
-
this.
|
|
151
|
-
|
|
152
|
-
|
|
146
|
+
this.accounts = deployedAccounts.map((a)=>a.address);
|
|
147
|
+
this.accounts.forEach((a, i)=>this.logger.verbose(`Account ${i} address: ${a}`));
|
|
148
|
+
[this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.accounts.slice(0, 3);
|
|
149
|
+
await Promise.all(deployedAccounts.map(async (acc)=>{
|
|
150
|
+
const accountData = {
|
|
151
|
+
secret: acc.secret,
|
|
152
|
+
salt: acc.salt,
|
|
153
|
+
contract: new SchnorrAccountContract(acc.signingKey)
|
|
154
|
+
};
|
|
155
|
+
const accountManager = await this.wallet.createAccount(accountData);
|
|
156
|
+
return accountManager.register();
|
|
157
|
+
}));
|
|
153
158
|
// We set Alice as the FPC admin to avoid the need for deployment of another account.
|
|
154
159
|
this.fpcAdmin = this.aliceAddress;
|
|
155
160
|
const canonicalFeeJuice = await getCanonicalFeeJuice();
|
|
156
|
-
this.feeJuiceContract = await FeeJuiceContract.at(canonicalFeeJuice.address, this.
|
|
161
|
+
this.feeJuiceContract = await FeeJuiceContract.at(canonicalFeeJuice.address, this.wallet);
|
|
157
162
|
});
|
|
158
163
|
}
|
|
159
164
|
async applyPublicDeployAccountsSnapshot() {
|
|
160
|
-
await this.snapshotManager.snapshot('public_deploy_accounts', ()=>ensureAccountContractsPublished(this.
|
|
165
|
+
await this.snapshotManager.snapshot('public_deploy_accounts', ()=>ensureAccountContractsPublished(this.wallet, this.accounts));
|
|
161
166
|
}
|
|
162
167
|
async applySetupFeeJuiceSnapshot() {
|
|
163
168
|
await this.snapshotManager.snapshot('setup_fee_juice', async ()=>{}, async (_data, context)=>{
|
|
164
169
|
this.context = context;
|
|
165
|
-
this.feeJuiceContract = await FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.
|
|
170
|
+
this.feeJuiceContract = await FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
|
|
166
171
|
this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.aliceAddress, this.logger);
|
|
167
172
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
168
173
|
aztecNode: context.aztecNode,
|
|
169
174
|
aztecNodeAdmin: context.aztecNode,
|
|
170
175
|
pxeService: context.pxe,
|
|
171
176
|
l1Client: context.deployL1ContractsValues.l1Client,
|
|
172
|
-
wallet: this.
|
|
177
|
+
wallet: this.wallet,
|
|
173
178
|
logger: this.logger
|
|
174
179
|
});
|
|
175
180
|
});
|
|
176
181
|
}
|
|
177
182
|
async applyDeployBananaTokenSnapshot() {
|
|
178
183
|
await this.snapshotManager.snapshot('deploy_banana_token', async ()=>{
|
|
179
|
-
const bananaCoin = await BananaCoin.deploy(this.
|
|
184
|
+
const bananaCoin = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
|
|
180
185
|
from: this.aliceAddress
|
|
181
186
|
}).deployed();
|
|
182
187
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
@@ -184,7 +189,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
184
189
|
bananaCoinAddress: bananaCoin.address
|
|
185
190
|
};
|
|
186
191
|
}, async ({ bananaCoinAddress })=>{
|
|
187
|
-
this.bananaCoin = await BananaCoin.at(bananaCoinAddress, this.
|
|
192
|
+
this.bananaCoin = await BananaCoin.at(bananaCoinAddress, this.wallet);
|
|
188
193
|
const logger = this.logger;
|
|
189
194
|
this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.aliceAddress, logger);
|
|
190
195
|
this.getBananaPrivateBalanceFn = getBalancesFn('🍌.private', this.bananaCoin.methods.balance_of_private, this.aliceAddress, logger);
|
|
@@ -195,7 +200,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
195
200
|
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
196
201
|
expect((await context.pxe.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
197
202
|
const bananaCoin = this.bananaCoin;
|
|
198
|
-
const bananaFPC = await FPCContract.deploy(this.
|
|
203
|
+
const bananaFPC = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
|
|
199
204
|
from: this.aliceAddress
|
|
200
205
|
}).deployed();
|
|
201
206
|
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
@@ -207,7 +212,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
207
212
|
rollupAddress: context.deployL1ContractsValues.l1ContractAddresses.rollupAddress
|
|
208
213
|
};
|
|
209
214
|
}, async (data, context)=>{
|
|
210
|
-
const bananaFPC = await FPCContract.at(data.bananaFPCAddress, this.
|
|
215
|
+
const bananaFPC = await FPCContract.at(data.bananaFPCAddress, this.wallet);
|
|
211
216
|
this.bananaFPC = bananaFPC;
|
|
212
217
|
this.getCoinbaseBalance = async ()=>{
|
|
213
218
|
const l1Client = createExtendedL1Client(context.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
@@ -248,7 +253,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
248
253
|
sponsoredFPCAddress: sponsoredFPC.address
|
|
249
254
|
};
|
|
250
255
|
}, async (data)=>{
|
|
251
|
-
this.sponsoredFPC = await SponsoredFPCContract.at(data.sponsoredFPCAddress, this.
|
|
256
|
+
this.sponsoredFPC = await SponsoredFPCContract.at(data.sponsoredFPCAddress, this.wallet);
|
|
252
257
|
});
|
|
253
258
|
}
|
|
254
259
|
async applyFundAliceWithBananas() {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AztecAddress, type Logger, type PXE, type Wallet } from '@aztec/aztec.js';
|
|
2
2
|
import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
|
|
3
3
|
import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
|
|
4
4
|
import { type SubsystemsContext } from '../fixtures/snapshot_manager.js';
|
|
@@ -6,7 +6,7 @@ export declare class NestedContractTest {
|
|
|
6
6
|
private numberOfAccounts;
|
|
7
7
|
private snapshotManager;
|
|
8
8
|
logger: Logger;
|
|
9
|
-
wallet:
|
|
9
|
+
wallet: Wallet;
|
|
10
10
|
defaultAccountAddress: AztecAddress;
|
|
11
11
|
pxe: PXE;
|
|
12
12
|
parentContract: ParentContract;
|
|
@@ -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,KAAK,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AACjG,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,GAAG,EAAG,GAAG,CAAC;IAEV,cAAc,EAAG,cAAc,CAAC;IAChC,aAAa,EAAG,aAAa,CAAC;gBAG5B,QAAQ,EAAE,MAAM,EACR,gBAAgB,SAAI;IAM9B;;;;OAIG;IACG,kBAAkB;IAsBlB,KAAK;IAIL,QAAQ;IAId,QAAQ,GAAI,CAAC,EACX,MAAM,MAAM,EACZ,OAAO,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,EACjD,UAAS,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAA2B,KAChG,OAAO,CAAC,IAAI,CAAC,CAAwD;IAElE,oBAAoB;CAkB3B"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { getSchnorrWallet } from '@aztec/accounts/schnorr';
|
|
2
1
|
import { createLogger } from '@aztec/aztec.js';
|
|
3
2
|
import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
|
|
4
3
|
import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
|
|
@@ -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
|
-
[this.wallet] = wallets;
|
|
31
|
-
this.defaultAccountAddress = this.wallet.getAddress();
|
|
26
|
+
await this.snapshotManager.snapshot('accounts', deployAccounts(this.numberOfAccounts, this.logger), ({ deployedAccounts }, { pxe, wallet })=>{
|
|
27
|
+
this.wallet = wallet;
|
|
28
|
+
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
32
29
|
this.pxe = pxe;
|
|
30
|
+
return Promise.resolve();
|
|
33
31
|
});
|
|
34
32
|
await this.snapshotManager.snapshot('public_deploy', async ()=>{}, async ()=>{
|
|
35
33
|
this.logger.verbose(`Public deploy accounts...`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { InitialAccountData } from '@aztec/accounts/testing';
|
|
2
2
|
import type { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
3
|
-
import {
|
|
3
|
+
import { AztecAddress } from '@aztec/aztec.js';
|
|
4
4
|
import { type EmpireSlashingProposerContract, type Operator, RollupContract, type TallySlashingProposerContract, type ViemClient } from '@aztec/ethereum';
|
|
5
5
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
6
6
|
import { type Logger } from '@aztec/foundation/log';
|
|
@@ -9,6 +9,7 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
|
9
9
|
import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
10
10
|
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
11
11
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
12
|
+
import type { TestWallet } from '@aztec/test-wallet';
|
|
12
13
|
import { type GetContractReturnType } from 'viem';
|
|
13
14
|
import { type SubsystemsContext } from '../fixtures/snapshot_manager.js';
|
|
14
15
|
export declare const WAIT_FOR_TX_TIMEOUT: number;
|
|
@@ -52,7 +53,7 @@ export declare class P2PNetworkTest {
|
|
|
52
53
|
validators: Operator[];
|
|
53
54
|
deployedAccounts: InitialAccountData[];
|
|
54
55
|
prefilledPublicData: PublicDataTreeLeaf[];
|
|
55
|
-
wallet?:
|
|
56
|
+
wallet?: TestWallet;
|
|
56
57
|
defaultAccountAddress?: AztecAddress;
|
|
57
58
|
spamContract?: SpamContract;
|
|
58
59
|
bootstrapNode?: BootstrapNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p2p_network.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/p2p_network.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"p2p_network.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/p2p_network.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { getSchnorrWalletWithSecretKey } from '@aztec/accounts/schnorr';
|
|
2
1
|
import { EthAddress, Fr } from '@aztec/aztec.js';
|
|
3
2
|
import { GSEContract, MultiAdderArtifact, RollupContract, createL1TxUtilsFromViemWallet, deployL1Contract, getL1ContractsConfigEnvVars } from '@aztec/ethereum';
|
|
4
3
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
@@ -160,7 +159,7 @@ export class P2PNetworkTest {
|
|
|
160
159
|
abi: MultiAdderArtifact.contractAbi,
|
|
161
160
|
client: deployL1ContractsValues.l1Client
|
|
162
161
|
});
|
|
163
|
-
const stakeNeeded =
|
|
162
|
+
const stakeNeeded = await rollup.read.getActivationThreshold() * BigInt(this.numberOfValidators);
|
|
164
163
|
await Promise.all([
|
|
165
164
|
await stakingAsset.write.mint([
|
|
166
165
|
multiAdder.address,
|
|
@@ -190,22 +189,19 @@ export class P2PNetworkTest {
|
|
|
190
189
|
validatorTuples
|
|
191
190
|
])
|
|
192
191
|
});
|
|
193
|
-
|
|
192
|
+
await cheatCodes.rollup.advanceToEpoch(await cheatCodes.rollup.getEpoch() + await rollup.read.getLagInEpochs() + 1n, {
|
|
194
193
|
updateDateProvider: dateProvider
|
|
195
194
|
});
|
|
196
195
|
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
197
196
|
await this._sendDummyTx(deployL1ContractsValues.l1Client);
|
|
198
|
-
// Set the system time in the node, only after we have warped the time and waited for a block
|
|
199
|
-
// Time is only set in the NEXT block
|
|
200
|
-
dateProvider.setTime(Number(timestamp) * 1000);
|
|
201
197
|
});
|
|
202
198
|
}
|
|
203
199
|
async setupAccount() {
|
|
204
|
-
await this.snapshotManager.snapshot('setup-account', deployAccounts(1, this.logger
|
|
200
|
+
await this.snapshotManager.snapshot('setup-account', deployAccounts(1, this.logger), ({ deployedAccounts }, { wallet })=>{
|
|
205
201
|
this.deployedAccounts = deployedAccounts;
|
|
206
|
-
|
|
207
|
-
this.wallet =
|
|
208
|
-
|
|
202
|
+
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
203
|
+
this.wallet = wallet;
|
|
204
|
+
return Promise.resolve();
|
|
209
205
|
});
|
|
210
206
|
}
|
|
211
207
|
async deploySpamContract() {
|
|
@@ -280,7 +276,7 @@ export class P2PNetworkTest {
|
|
|
280
276
|
}
|
|
281
277
|
const rollup = new RollupContract(this.ctx.deployL1ContractsValues.l1Client, this.ctx.deployL1ContractsValues.l1ContractAddresses.rollupAddress);
|
|
282
278
|
const slasherContract = getContract({
|
|
283
|
-
address: getAddress(await rollup.
|
|
279
|
+
address: getAddress(await rollup.getSlasherAddress()),
|
|
284
280
|
abi: SlasherAbi,
|
|
285
281
|
client: this.ctx.deployL1ContractsValues.l1Client
|
|
286
282
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/shared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/shared.ts"],"names":[],"mappings":"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"}
|