@aztec/end-to-end 0.0.1-commit.24de95ac → 0.0.1-commit.3469e52
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 +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +21 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +21 -15
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +116 -121
- 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 +7 -27
- package/dest/bench/utils.d.ts +5 -5
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +18 -11
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -7
- 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 +98 -113
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +19 -13
- 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 +91 -70
- package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +18 -13
- package/dest/e2e_epochs/epochs_test.d.ts +11 -9
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +19 -16
- package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
- package/dest/e2e_fees/bridging_race.notest.js +4 -6
- package/dest/e2e_fees/fees_test.d.ts +20 -16
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +127 -139
- package/dest/e2e_l1_publisher/write_json.d.ts +3 -3
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +23 -18
- package/dest/e2e_multi_validator/utils.d.ts +1 -1
- package/dest/e2e_multi_validator/utils.js +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +32 -39
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +7 -6
- package/dest/e2e_p2p/p2p_network.d.ts +225 -18
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +117 -110
- package/dest/e2e_p2p/shared.d.ts +6 -6
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +6 -5
- package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +90 -92
- package/dest/fixtures/e2e_prover_test.d.ts +12 -18
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +98 -109
- 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 +1 -1
- package/dest/fixtures/get_acvm_config.js +1 -1
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- 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.d.ts +216 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +684 -0
- package/dest/fixtures/setup_p2p_test.d.ts +4 -4
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +18 -10
- package/dest/fixtures/token_utils.d.ts +5 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +7 -4
- package/dest/fixtures/utils.d.ts +5 -192
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -648
- package/dest/fixtures/web3signer.d.ts +1 -1
- package/dest/fixtures/web3signer.js +1 -1
- 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/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +5 -3
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +3 -3
- package/dest/shared/gas_portal_test_harness.d.ts +2 -2
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +1 -1
- package/dest/shared/index.d.ts +2 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/jest_setup.d.ts +1 -1
- package/dest/shared/submit-transactions.d.ts +1 -1
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts +3 -27
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +43 -23
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +2 -2
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +5 -3
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.d.ts +8 -5
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +45 -10
- package/dest/spartan/tx_metrics.d.ts +52 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +248 -0
- package/dest/spartan/utils.d.ts +66 -24
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +326 -133
- package/package.json +43 -40
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +157 -162
- package/src/bench/client_flows/data_extractor.ts +6 -28
- package/src/bench/utils.ts +22 -14
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +107 -142
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -124
- package/src/e2e_deploy_contract/deploy_test.ts +22 -15
- package/src/e2e_epochs/epochs_test.ts +39 -25
- package/src/e2e_fees/bridging_race.notest.ts +4 -7
- package/src/e2e_fees/fees_test.ts +180 -215
- package/src/e2e_l1_publisher/write_json.ts +26 -20
- package/src/e2e_multi_validator/utils.ts +1 -1
- package/src/e2e_nested_contract/nested_contract_test.ts +35 -55
- package/src/e2e_p2p/inactivity_slash_test.ts +10 -9
- package/src/e2e_p2p/p2p_network.ts +175 -180
- package/src/e2e_p2p/shared.ts +15 -7
- package/src/e2e_token_contract/token_contract_test.ts +105 -118
- package/src/fixtures/e2e_prover_test.ts +120 -153
- package/src/fixtures/fixtures.ts +2 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup.ts +1010 -0
- package/src/fixtures/setup_p2p_test.ts +23 -9
- package/src/fixtures/token_utils.ts +4 -4
- package/src/fixtures/utils.ts +27 -947
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +1 -1
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +6 -9
- package/src/shared/gas_portal_test_harness.ts +2 -2
- package/src/shared/index.ts +1 -1
- package/src/shared/uniswap_l1_l2.ts +53 -67
- package/src/simulators/lending_simulator.ts +6 -4
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +56 -13
- package/src/spartan/tx_metrics.ts +231 -0
- package/src/spartan/utils.ts +379 -75
- 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/dest/fixtures/snapshot_manager.d.ts +0 -95
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -505
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/src/fixtures/setup_l1_contracts.ts +0 -26
- package/src/fixtures/snapshot_manager.ts +0 -665
|
@@ -7,24 +7,19 @@ import type { TestWallet } from '@aztec/test-wallet/server';
|
|
|
7
7
|
|
|
8
8
|
import { jest } from '@jest/globals';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
type ISnapshotManager,
|
|
12
|
-
type SubsystemsContext,
|
|
13
|
-
createSnapshotManager,
|
|
14
|
-
deployAccounts,
|
|
15
|
-
publicDeployAccounts,
|
|
16
|
-
} from '../fixtures/snapshot_manager.js';
|
|
10
|
+
import { type EndToEndContext, deployAccounts, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
|
|
17
11
|
import { mintTokensToPrivate } from '../fixtures/token_utils.js';
|
|
18
12
|
import { TokenSimulator } from '../simulators/token_simulator.js';
|
|
19
13
|
|
|
20
|
-
const {
|
|
14
|
+
const { METRICS_PORT: metricsPort } = process.env;
|
|
21
15
|
|
|
22
16
|
export class TokenContractTest {
|
|
23
17
|
static TOKEN_NAME = 'USDC';
|
|
24
18
|
static TOKEN_SYMBOL = 'USD';
|
|
25
19
|
static TOKEN_DECIMALS = 18n;
|
|
26
|
-
|
|
20
|
+
context!: EndToEndContext;
|
|
27
21
|
logger: Logger;
|
|
22
|
+
metricsPort?: number;
|
|
28
23
|
asset!: TokenContract;
|
|
29
24
|
tokenSim!: TokenSimulator;
|
|
30
25
|
node!: AztecNode;
|
|
@@ -35,133 +30,125 @@ export class TokenContractTest {
|
|
|
35
30
|
account1Address!: AztecAddress;
|
|
36
31
|
account2Address!: AztecAddress;
|
|
37
32
|
|
|
33
|
+
private shouldApplyBaseSetup = false;
|
|
34
|
+
private shouldApplyMint = false;
|
|
35
|
+
|
|
38
36
|
constructor(testName: string) {
|
|
39
37
|
this.logger = createLogger(`e2e:e2e_token_contract:${testName}`);
|
|
40
|
-
this.
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
this.metricsPort = metricsPort ? parseInt(metricsPort) : undefined;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Registers that base setup should be applied during setup().
|
|
43
|
+
* Call this before setup() to deploy 3 accounts, publicly deploy accounts, token contract and a "bad account".
|
|
44
|
+
*/
|
|
45
|
+
applyBaseSnapshots() {
|
|
46
|
+
this.shouldApplyBaseSetup = true;
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* 2. Publicly deploy accounts, deploy token contract and a "bad account".
|
|
50
|
+
* Registers that mint should be applied during setup().
|
|
51
|
+
* Call this before setup() to mint tokens to the admin account.
|
|
49
52
|
*/
|
|
50
|
-
|
|
53
|
+
applyMintSnapshot() {
|
|
54
|
+
this.shouldApplyMint = true;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Applies base setup: deploys 3 accounts, publicly deploys accounts, token contract and a "bad account".
|
|
59
|
+
*/
|
|
60
|
+
private async applyBaseSetup() {
|
|
51
61
|
// Adding a timeout of 2 minutes in here such that it is propagated to the underlying tests
|
|
52
62
|
jest.setTimeout(120_000);
|
|
53
63
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
},
|
|
63
|
-
);
|
|
64
|
+
this.logger.info('Applying base setup - deploying 3 accounts');
|
|
65
|
+
const { deployedAccounts } = await deployAccounts(
|
|
66
|
+
3,
|
|
67
|
+
this.logger,
|
|
68
|
+
)({
|
|
69
|
+
wallet: this.context.wallet,
|
|
70
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
71
|
+
});
|
|
64
72
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
this.tokenSim = new TokenSimulator(this.asset, this.wallet, this.adminAddress, this.logger, [
|
|
97
|
-
this.adminAddress,
|
|
98
|
-
this.account1Address,
|
|
99
|
-
]);
|
|
100
|
-
|
|
101
|
-
this.badAccount = await InvalidAccountContract.at(badAccountAddress, this.wallet);
|
|
102
|
-
this.logger.verbose(`Bad account address: ${this.badAccount.address}`);
|
|
103
|
-
|
|
104
|
-
expect(await this.asset.methods.get_admin().simulate({ from: this.adminAddress })).toBe(
|
|
105
|
-
this.adminAddress.toBigInt(),
|
|
106
|
-
);
|
|
107
|
-
},
|
|
73
|
+
this.node = this.context.aztecNodeService!;
|
|
74
|
+
this.wallet = this.context.wallet;
|
|
75
|
+
[this.adminAddress, this.account1Address, this.account2Address] = deployedAccounts.map(acc => acc.address);
|
|
76
|
+
|
|
77
|
+
this.logger.info('Applying base setup - deploying token contract');
|
|
78
|
+
this.logger.verbose(`Public deploy accounts...`);
|
|
79
|
+
await publicDeployAccounts(this.wallet, [this.adminAddress, this.account1Address]);
|
|
80
|
+
|
|
81
|
+
this.logger.verbose(`Deploying TokenContract...`);
|
|
82
|
+
this.asset = await TokenContract.deploy(
|
|
83
|
+
this.wallet,
|
|
84
|
+
this.adminAddress,
|
|
85
|
+
TokenContractTest.TOKEN_NAME,
|
|
86
|
+
TokenContractTest.TOKEN_SYMBOL,
|
|
87
|
+
TokenContractTest.TOKEN_DECIMALS,
|
|
88
|
+
)
|
|
89
|
+
.send({ from: this.adminAddress })
|
|
90
|
+
.deployed();
|
|
91
|
+
this.logger.verbose(`Token deployed to ${this.asset.address}`);
|
|
92
|
+
|
|
93
|
+
this.logger.verbose(`Deploying bad account...`);
|
|
94
|
+
this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({ from: this.adminAddress }).deployed();
|
|
95
|
+
this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
|
|
96
|
+
|
|
97
|
+
this.tokenSim = new TokenSimulator(this.asset, this.wallet, this.adminAddress, this.logger, [
|
|
98
|
+
this.adminAddress,
|
|
99
|
+
this.account1Address,
|
|
100
|
+
]);
|
|
101
|
+
|
|
102
|
+
expect(await this.asset.methods.get_admin().simulate({ from: this.adminAddress })).toBe(
|
|
103
|
+
this.adminAddress.toBigInt(),
|
|
108
104
|
);
|
|
109
|
-
|
|
110
|
-
// TokenContract.artifact.functions.forEach(fn => {
|
|
111
|
-
// const sig = decodeFunctionSignature(fn.name, fn.parameters);
|
|
112
|
-
// logger.verbose(`Function ${sig} and the selector: ${FunctionSelector.fromNameAndParameters(fn.name, fn.parameters)}`);
|
|
113
|
-
// });
|
|
114
105
|
}
|
|
115
106
|
|
|
116
107
|
async setup() {
|
|
117
|
-
await
|
|
118
|
-
|
|
108
|
+
this.context = await setup(0, {
|
|
109
|
+
metricsPort: this.metricsPort,
|
|
110
|
+
fundSponsoredFPC: true,
|
|
111
|
+
skipAccountDeployment: true,
|
|
112
|
+
});
|
|
119
113
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
114
|
+
if (this.shouldApplyBaseSetup) {
|
|
115
|
+
await this.applyBaseSetup();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (this.shouldApplyMint) {
|
|
119
|
+
await this.applyMint();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
125
122
|
|
|
126
123
|
async teardown() {
|
|
127
|
-
await this.
|
|
124
|
+
await teardown(this.context);
|
|
128
125
|
}
|
|
129
126
|
|
|
130
|
-
async
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
157
|
-
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(adminAddress));
|
|
158
|
-
|
|
159
|
-
const totalSupply = await asset.methods.total_supply().simulate({ from: adminAddress });
|
|
160
|
-
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
161
|
-
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
162
|
-
|
|
163
|
-
return Promise.resolve();
|
|
164
|
-
},
|
|
165
|
-
);
|
|
127
|
+
private async applyMint() {
|
|
128
|
+
this.logger.info('Applying mint setup');
|
|
129
|
+
const { asset, adminAddress, tokenSim } = this;
|
|
130
|
+
const amount = 10000n;
|
|
131
|
+
|
|
132
|
+
this.logger.verbose(`Minting ${amount} publicly...`);
|
|
133
|
+
await asset.methods.mint_to_public(adminAddress, amount).send({ from: adminAddress }).wait();
|
|
134
|
+
tokenSim.mintPublic(adminAddress, amount);
|
|
135
|
+
|
|
136
|
+
const publicBalance = await asset.methods.balance_of_public(adminAddress).simulate({ from: adminAddress });
|
|
137
|
+
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
138
|
+
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(adminAddress));
|
|
139
|
+
|
|
140
|
+
this.logger.verbose(`Minting ${amount} privately...`);
|
|
141
|
+
await mintTokensToPrivate(asset, adminAddress, adminAddress, amount);
|
|
142
|
+
tokenSim.mintPrivate(adminAddress, amount);
|
|
143
|
+
|
|
144
|
+
const privateBalance = await asset.methods.balance_of_private(adminAddress).simulate({ from: adminAddress });
|
|
145
|
+
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
146
|
+
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(adminAddress));
|
|
147
|
+
|
|
148
|
+
const totalSupply = await asset.methods.total_supply().simulate({ from: adminAddress });
|
|
149
|
+
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
150
|
+
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
151
|
+
|
|
152
|
+
this.logger.verbose(`Minting complete.`);
|
|
166
153
|
}
|
|
167
154
|
}
|
|
@@ -10,14 +10,15 @@ import {
|
|
|
10
10
|
QueuedIVCVerifier,
|
|
11
11
|
TestCircuitVerifier,
|
|
12
12
|
} from '@aztec/bb-prover';
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
15
|
-
import type {
|
|
13
|
+
import { BackendType, Barretenberg } from '@aztec/bb.js';
|
|
14
|
+
import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
|
|
15
|
+
import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
16
16
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
17
17
|
import { SecretValue } from '@aztec/foundation/config';
|
|
18
18
|
import { FeeAssetHandlerAbi } from '@aztec/l1-artifacts';
|
|
19
19
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
20
20
|
import { type ProverNode, type ProverNodeConfig, createProverNode } from '@aztec/prover-node';
|
|
21
|
+
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
21
22
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
22
23
|
import { TestWallet } from '@aztec/test-wallet/server';
|
|
23
24
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
@@ -29,15 +30,15 @@ import { TokenSimulator } from '../simulators/token_simulator.js';
|
|
|
29
30
|
import { getACVMConfig } from './get_acvm_config.js';
|
|
30
31
|
import { getBBConfig } from './get_bb_config.js';
|
|
31
32
|
import {
|
|
32
|
-
type
|
|
33
|
-
type SubsystemsContext,
|
|
34
|
-
createSnapshotManager,
|
|
33
|
+
type EndToEndContext,
|
|
35
34
|
deployAccounts,
|
|
35
|
+
getPrivateKeyFromIndex,
|
|
36
|
+
getSponsoredFPCAddress,
|
|
36
37
|
publicDeployAccounts,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
setup,
|
|
39
|
+
setupPXEAndGetWallet,
|
|
40
|
+
teardown,
|
|
41
|
+
} from './setup.js';
|
|
41
42
|
|
|
42
43
|
type ProvenSetup = {
|
|
43
44
|
wallet: TestWallet;
|
|
@@ -55,121 +56,108 @@ export class FullProverTest {
|
|
|
55
56
|
static TOKEN_NAME = 'USDC';
|
|
56
57
|
static TOKEN_SYMBOL = 'USD';
|
|
57
58
|
static TOKEN_DECIMALS = 18n;
|
|
58
|
-
private snapshotManager: ISnapshotManager;
|
|
59
59
|
logger: Logger;
|
|
60
60
|
wallet!: TestWallet;
|
|
61
61
|
provenWallet!: TestWallet;
|
|
62
62
|
accounts: AztecAddress[] = [];
|
|
63
63
|
deployedAccounts!: InitialAccountData[];
|
|
64
64
|
fakeProofsAsset!: TokenContract;
|
|
65
|
+
fakeProofsAssetInstance!: ContractInstanceWithAddress;
|
|
65
66
|
tokenSim!: TokenSimulator;
|
|
66
67
|
aztecNode!: AztecNode;
|
|
67
68
|
aztecNodeAdmin!: AztecNodeAdmin;
|
|
68
69
|
cheatCodes!: CheatCodes;
|
|
69
|
-
blobSink!: BlobSinkServer;
|
|
70
70
|
private provenComponents: ProvenSetup[] = [];
|
|
71
71
|
private bbConfigCleanup?: () => Promise<void>;
|
|
72
72
|
private acvmConfigCleanup?: () => Promise<void>;
|
|
73
73
|
circuitProofVerifier?: ClientProtocolCircuitVerifier;
|
|
74
74
|
provenAsset!: TokenContract;
|
|
75
|
-
|
|
75
|
+
context!: EndToEndContext;
|
|
76
76
|
private proverNode!: ProverNode;
|
|
77
77
|
private simulatedProverNode!: ProverNode;
|
|
78
|
-
public l1Contracts!:
|
|
78
|
+
public l1Contracts!: DeployAztecL1ContractsReturnType;
|
|
79
79
|
public proverAddress!: EthAddress;
|
|
80
|
+
private minNumberOfTxsPerBlock: number;
|
|
81
|
+
private coinbase: EthAddress;
|
|
82
|
+
private realProofs: boolean;
|
|
80
83
|
|
|
81
|
-
constructor(
|
|
82
|
-
testName: string,
|
|
83
|
-
private minNumberOfTxsPerBlock: number,
|
|
84
|
-
coinbase: EthAddress,
|
|
85
|
-
private realProofs = true,
|
|
86
|
-
) {
|
|
84
|
+
constructor(testName: string, minNumberOfTxsPerBlock: number, coinbase: EthAddress, realProofs = true) {
|
|
87
85
|
this.logger = createLogger(`e2e:full_prover_test:${testName}`);
|
|
88
|
-
this.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
{ startProverNode: true, fundRewardDistributor: true, coinbase },
|
|
92
|
-
{
|
|
93
|
-
realVerifier: realProofs,
|
|
94
|
-
},
|
|
95
|
-
);
|
|
86
|
+
this.minNumberOfTxsPerBlock = minNumberOfTxsPerBlock;
|
|
87
|
+
this.coinbase = coinbase;
|
|
88
|
+
this.realProofs = realProofs;
|
|
96
89
|
}
|
|
97
90
|
|
|
98
91
|
/**
|
|
99
|
-
*
|
|
100
|
-
* 1. Add 2 accounts.
|
|
101
|
-
* 2. Publicly deploy accounts, deploy token contract
|
|
92
|
+
* Applies base setup: deploys 2 accounts and token contract.
|
|
102
93
|
*/
|
|
103
|
-
async
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
this.fakeProofsAsset = await TokenContract.at(tokenContractAddress, this.wallet);
|
|
140
|
-
this.logger.verbose(`Token contract address: ${this.fakeProofsAsset.address}`);
|
|
141
|
-
|
|
142
|
-
this.tokenSim = new TokenSimulator(
|
|
143
|
-
this.fakeProofsAsset,
|
|
144
|
-
this.wallet,
|
|
145
|
-
this.accounts[0],
|
|
146
|
-
this.logger,
|
|
147
|
-
this.accounts,
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
expect(await this.fakeProofsAsset.methods.get_admin().simulate({ from: this.accounts[0] })).toBe(
|
|
151
|
-
this.accounts[0].toBigInt(),
|
|
152
|
-
);
|
|
153
|
-
},
|
|
94
|
+
private async applyBaseSetup() {
|
|
95
|
+
this.logger.info('Applying base setup: deploying accounts');
|
|
96
|
+
const { deployedAccounts } = await deployAccounts(
|
|
97
|
+
2,
|
|
98
|
+
this.logger,
|
|
99
|
+
)({
|
|
100
|
+
wallet: this.context.wallet,
|
|
101
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
102
|
+
});
|
|
103
|
+
this.deployedAccounts = deployedAccounts;
|
|
104
|
+
this.accounts = deployedAccounts.map(a => a.address);
|
|
105
|
+
this.wallet = this.context.wallet;
|
|
106
|
+
|
|
107
|
+
this.logger.info('Applying base setup: publicly deploying accounts');
|
|
108
|
+
await publicDeployAccounts(this.wallet, this.accounts.slice(0, 2));
|
|
109
|
+
|
|
110
|
+
this.logger.info('Applying base setup: deploying token contract');
|
|
111
|
+
const { contract: asset, instance } = await TokenContract.deploy(
|
|
112
|
+
this.wallet,
|
|
113
|
+
this.accounts[0],
|
|
114
|
+
FullProverTest.TOKEN_NAME,
|
|
115
|
+
FullProverTest.TOKEN_SYMBOL,
|
|
116
|
+
FullProverTest.TOKEN_DECIMALS,
|
|
117
|
+
)
|
|
118
|
+
.send({ from: this.accounts[0] })
|
|
119
|
+
.wait();
|
|
120
|
+
this.logger.verbose(`Token deployed to ${asset.address}`);
|
|
121
|
+
|
|
122
|
+
this.fakeProofsAsset = asset;
|
|
123
|
+
this.fakeProofsAssetInstance = instance;
|
|
124
|
+
this.logger.verbose(`Token contract address: ${this.fakeProofsAsset.address}`);
|
|
125
|
+
|
|
126
|
+
this.tokenSim = new TokenSimulator(this.fakeProofsAsset, this.wallet, this.accounts[0], this.logger, this.accounts);
|
|
127
|
+
|
|
128
|
+
expect(await this.fakeProofsAsset.methods.get_admin().simulate({ from: this.accounts[0] })).toBe(
|
|
129
|
+
this.accounts[0].toBigInt(),
|
|
154
130
|
);
|
|
155
131
|
}
|
|
156
132
|
|
|
157
133
|
async setup() {
|
|
158
|
-
this.
|
|
134
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
135
|
+
this.context = await setup(0, {
|
|
136
|
+
startProverNode: true,
|
|
137
|
+
coinbase: this.coinbase,
|
|
138
|
+
fundSponsoredFPC: true,
|
|
139
|
+
skipAccountDeployment: true,
|
|
140
|
+
l1ContractsArgs: { realVerifier: this.realProofs },
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
await this.applyBaseSetup();
|
|
144
|
+
await this.applyMint();
|
|
145
|
+
|
|
146
|
+
this.logger.info(`Enabling proving`, { realProofs: this.realProofs });
|
|
159
147
|
|
|
160
148
|
// We don't wish to mark as proven automatically, so we set the flag to false
|
|
161
|
-
this.context.watcher
|
|
149
|
+
this.context.watcher!.setIsMarkingAsProven(false);
|
|
162
150
|
|
|
163
151
|
this.simulatedProverNode = this.context.proverNode!;
|
|
164
152
|
({
|
|
165
153
|
aztecNode: this.aztecNode,
|
|
166
154
|
deployL1ContractsValues: this.l1Contracts,
|
|
167
155
|
cheatCodes: this.cheatCodes,
|
|
168
|
-
blobSink: this.blobSink,
|
|
169
156
|
} = this.context);
|
|
170
|
-
this.aztecNodeAdmin = this.context.
|
|
157
|
+
this.aztecNodeAdmin = this.context.aztecNodeService!;
|
|
171
158
|
|
|
172
|
-
const
|
|
159
|
+
const config = this.context.aztecNodeConfig;
|
|
160
|
+
const blobClient = await createBlobClientWithFileStores(config, this.logger);
|
|
173
161
|
|
|
174
162
|
// Configure a full prover PXE
|
|
175
163
|
let acvmConfig: Awaited<ReturnType<typeof getACVMConfig>> | undefined;
|
|
@@ -183,9 +171,7 @@ export class FullProverTest {
|
|
|
183
171
|
this.acvmConfigCleanup = acvmConfig.cleanup;
|
|
184
172
|
this.bbConfigCleanup = bbConfig.cleanup;
|
|
185
173
|
|
|
186
|
-
|
|
187
|
-
throw new Error(`Test must be run with BB native configuration`);
|
|
188
|
-
}
|
|
174
|
+
await Barretenberg.initSingleton({ backend: BackendType.NativeUnixSocket });
|
|
189
175
|
|
|
190
176
|
const verifier = await BBCircuitVerifier.new(bbConfig);
|
|
191
177
|
this.circuitProofVerifier = new QueuedIVCVerifier(bbConfig, verifier);
|
|
@@ -212,23 +198,19 @@ export class FullProverTest {
|
|
|
212
198
|
this.logger.verbose(`Main setup completed, initializing full prover PXE, Node, and Prover Node`);
|
|
213
199
|
const { wallet: provenWallet, teardown: provenTeardown } = await setupPXEAndGetWallet(
|
|
214
200
|
this.aztecNode,
|
|
215
|
-
{
|
|
216
|
-
proverEnabled: this.realProofs,
|
|
217
|
-
bbBinaryPath: bbConfig?.bbBinaryPath,
|
|
218
|
-
bbWorkingDirectory: bbConfig?.bbWorkingDirectory,
|
|
219
|
-
},
|
|
201
|
+
{ proverEnabled: this.realProofs },
|
|
220
202
|
undefined,
|
|
221
203
|
true,
|
|
222
204
|
);
|
|
223
205
|
this.logger.debug(`Contract address ${this.fakeProofsAsset.address}`);
|
|
224
|
-
await provenWallet.registerContract(this.
|
|
206
|
+
await provenWallet.registerContract(this.fakeProofsAssetInstance, TokenContract.artifact);
|
|
225
207
|
|
|
226
208
|
for (let i = 0; i < 2; i++) {
|
|
227
209
|
await provenWallet.createSchnorrAccount(this.deployedAccounts[i].secret, this.deployedAccounts[i].salt);
|
|
228
210
|
await this.wallet.createSchnorrAccount(this.deployedAccounts[i].secret, this.deployedAccounts[i].salt);
|
|
229
211
|
}
|
|
230
212
|
|
|
231
|
-
const asset =
|
|
213
|
+
const asset = TokenContract.at(this.fakeProofsAsset.address, provenWallet);
|
|
232
214
|
this.provenComponents.push({
|
|
233
215
|
wallet: provenWallet,
|
|
234
216
|
teardown: provenTeardown,
|
|
@@ -245,7 +227,7 @@ export class FullProverTest {
|
|
|
245
227
|
this.logger.verbose('Starting archiver for new prover node');
|
|
246
228
|
const archiver = await createArchiver(
|
|
247
229
|
{ ...this.context.aztecNodeConfig, dataDirectory: undefined },
|
|
248
|
-
{
|
|
230
|
+
{ blobClient, dateProvider: this.context.dateProvider! },
|
|
249
231
|
{ blockUntilSync: true },
|
|
250
232
|
);
|
|
251
233
|
|
|
@@ -285,13 +267,12 @@ export class FullProverTest {
|
|
|
285
267
|
{
|
|
286
268
|
aztecNodeTxProvider: this.aztecNode,
|
|
287
269
|
archiver: archiver as Archiver,
|
|
288
|
-
blobSinkClient,
|
|
289
270
|
},
|
|
290
271
|
{ prefilledPublicData },
|
|
291
272
|
);
|
|
292
273
|
await this.proverNode.start();
|
|
293
274
|
|
|
294
|
-
this.logger.warn(`Proofs are now enabled
|
|
275
|
+
this.logger.warn(`Proofs are now enabled`, { realProofs: this.realProofs });
|
|
295
276
|
return this;
|
|
296
277
|
}
|
|
297
278
|
|
|
@@ -304,15 +285,7 @@ export class FullProverTest {
|
|
|
304
285
|
await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash });
|
|
305
286
|
}
|
|
306
287
|
|
|
307
|
-
snapshot = <T>(
|
|
308
|
-
name: string,
|
|
309
|
-
apply: (context: SubsystemsContext) => Promise<T>,
|
|
310
|
-
restore: (snapshotData: T, context: SubsystemsContext) => Promise<void> = () => Promise.resolve(),
|
|
311
|
-
): Promise<void> => this.snapshotManager.snapshot(name, apply, restore);
|
|
312
|
-
|
|
313
288
|
async teardown() {
|
|
314
|
-
await this.snapshotManager.teardown();
|
|
315
|
-
|
|
316
289
|
// Cleanup related to the full prover PXEs
|
|
317
290
|
for (let i = 0; i < this.provenComponents.length; i++) {
|
|
318
291
|
await this.provenComponents[i].teardown();
|
|
@@ -321,54 +294,48 @@ export class FullProverTest {
|
|
|
321
294
|
// clean up the full prover node
|
|
322
295
|
await this.proverNode.stop();
|
|
323
296
|
|
|
297
|
+
await Barretenberg.destroySingleton();
|
|
324
298
|
await this.bbConfigCleanup?.();
|
|
325
299
|
await this.acvmConfigCleanup?.();
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
async applyMintSnapshot() {
|
|
329
|
-
await this.snapshotManager.snapshot(
|
|
330
|
-
'mint',
|
|
331
|
-
async () => {
|
|
332
|
-
const { fakeProofsAsset: asset, accounts } = this;
|
|
333
|
-
const privateAmount = 10000n;
|
|
334
|
-
const publicAmount = 10000n;
|
|
335
300
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
.mint_to_public(accounts[0], privateAmount + publicAmount)
|
|
339
|
-
.send({ from: accounts[0] })
|
|
340
|
-
.wait();
|
|
341
|
-
|
|
342
|
-
this.logger.verbose(`Transferring ${privateAmount} to private...`);
|
|
343
|
-
await asset.methods.transfer_to_private(accounts[0], privateAmount).send({ from: accounts[0] }).wait();
|
|
344
|
-
|
|
345
|
-
this.logger.verbose(`Minting complete.`);
|
|
301
|
+
await teardown(this.context);
|
|
302
|
+
}
|
|
346
303
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
);
|
|
304
|
+
private async applyMint() {
|
|
305
|
+
this.logger.info('Applying mint setup');
|
|
306
|
+
const { fakeProofsAsset: asset, accounts } = this;
|
|
307
|
+
const privateAmount = 10000n;
|
|
308
|
+
const publicAmount = 10000n;
|
|
309
|
+
|
|
310
|
+
this.logger.verbose(`Minting ${privateAmount + publicAmount} publicly...`);
|
|
311
|
+
await asset.methods
|
|
312
|
+
.mint_to_public(accounts[0], privateAmount + publicAmount)
|
|
313
|
+
.send({ from: accounts[0] })
|
|
314
|
+
.wait();
|
|
315
|
+
|
|
316
|
+
this.logger.verbose(`Transferring ${privateAmount} to private...`);
|
|
317
|
+
await asset.methods.transfer_to_private(accounts[0], privateAmount).send({ from: accounts[0] }).wait();
|
|
318
|
+
|
|
319
|
+
this.logger.info(`Minting complete`);
|
|
320
|
+
|
|
321
|
+
const {
|
|
322
|
+
fakeProofsAsset,
|
|
323
|
+
accounts: [address],
|
|
324
|
+
tokenSim,
|
|
325
|
+
} = this;
|
|
326
|
+
tokenSim.mintPublic(address, publicAmount);
|
|
327
|
+
|
|
328
|
+
const publicBalance = await fakeProofsAsset.methods.balance_of_public(address).simulate({ from: address });
|
|
329
|
+
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
330
|
+
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(address));
|
|
331
|
+
|
|
332
|
+
tokenSim.mintPrivate(address, publicAmount);
|
|
333
|
+
const privateBalance = await fakeProofsAsset.methods.balance_of_private(address).simulate({ from: address });
|
|
334
|
+
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
335
|
+
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(address));
|
|
336
|
+
|
|
337
|
+
const totalSupply = await fakeProofsAsset.methods.total_supply().simulate({ from: address });
|
|
338
|
+
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
339
|
+
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
373
340
|
}
|
|
374
341
|
}
|