@aztec/end-to-end 0.0.1-commit.c7c42ec → 0.0.1-commit.c80b6263
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 +12 -13
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +118 -133
- package/dest/bench/client_flows/data_extractor.js +3 -1
- package/dest/bench/utils.d.ts +9 -8
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +17 -12
- 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 +96 -112
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +15 -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 +89 -70
- package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -3
- 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 +7 -1
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +31 -9
- package/dest/e2e_fees/bridging_race.notest.js +3 -5
- package/dest/e2e_fees/fees_test.d.ts +13 -13
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +123 -141
- package/dest/e2e_l1_publisher/write_json.d.ts +2 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +19 -15
- 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 +31 -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 +3 -3
- package/dest/e2e_p2p/p2p_network.d.ts +7 -6
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +111 -104
- 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 +13 -20
- 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 +89 -91
- package/dest/fixtures/e2e_prover_test.d.ts +8 -14
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +86 -95
- package/dest/fixtures/setup.d.ts +218 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +695 -0
- package/dest/fixtures/setup_p2p_test.d.ts +4 -5
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +24 -19
- package/dest/fixtures/token_utils.d.ts +1 -1
- 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 -194
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -619
- 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 +16 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +13 -13
- package/dest/shared/gas_portal_test_harness.d.ts +11 -1
- 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/submit-transactions.d.ts +3 -3
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +9 -11
- package/dest/shared/uniswap_l1_l2.d.ts +3 -28
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +51 -33
- package/dest/simulators/lending_simulator.d.ts +5 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +2 -2
- package/dest/spartan/setup_test_wallets.d.ts +4 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +61 -34
- package/dest/spartan/tx_metrics.d.ts +51 -2
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +333 -6
- package/dest/spartan/utils/bot.d.ts +27 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +141 -0
- package/dest/spartan/utils/chaos.d.ts +79 -0
- package/dest/spartan/utils/chaos.d.ts.map +1 -0
- package/dest/spartan/utils/chaos.js +142 -0
- package/dest/spartan/utils/clients.d.ts +39 -0
- package/dest/spartan/utils/clients.d.ts.map +1 -0
- package/dest/spartan/utils/clients.js +90 -0
- package/dest/spartan/utils/config.d.ts +36 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +20 -0
- package/dest/spartan/utils/health.d.ts +63 -0
- package/dest/spartan/utils/health.d.ts.map +1 -0
- package/dest/spartan/utils/health.js +202 -0
- package/dest/spartan/utils/helm.d.ts +15 -0
- package/dest/spartan/utils/helm.d.ts.map +1 -0
- package/dest/spartan/utils/helm.js +47 -0
- package/dest/spartan/utils/index.d.ts +9 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +18 -0
- package/dest/spartan/utils/k8s.d.ts +98 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +257 -0
- package/dest/spartan/utils/nodes.d.ts +31 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +290 -0
- package/dest/spartan/utils/scripts.d.ts +16 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +66 -0
- package/dest/spartan/utils.d.ts +2 -253
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -892
- package/package.json +40 -39
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +138 -204
- package/src/bench/client_flows/data_extractor.ts +1 -1
- package/src/bench/utils.ts +20 -14
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +104 -142
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +127 -116
- package/src/e2e_deploy_contract/deploy_test.ts +21 -14
- package/src/e2e_epochs/epochs_test.ts +60 -34
- package/src/e2e_fees/bridging_race.notest.ts +3 -9
- package/src/e2e_fees/fees_test.ts +172 -220
- package/src/e2e_l1_publisher/write_json.ts +21 -16
- package/src/e2e_nested_contract/nested_contract_test.ts +33 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +5 -5
- package/src/e2e_p2p/p2p_network.ts +172 -168
- package/src/e2e_p2p/shared.ts +26 -27
- package/src/e2e_token_contract/token_contract_test.ts +103 -118
- package/src/fixtures/e2e_prover_test.ts +99 -134
- package/src/fixtures/setup.ts +1017 -0
- package/src/fixtures/setup_p2p_test.ts +15 -20
- package/src/fixtures/token_utils.ts +6 -5
- package/src/fixtures/utils.ts +27 -907
- 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 +16 -36
- package/src/shared/gas_portal_test_harness.ts +1 -1
- package/src/shared/index.ts +1 -1
- package/src/shared/submit-transactions.ts +9 -15
- package/src/shared/uniswap_l1_l2.ts +58 -77
- package/src/simulators/lending_simulator.ts +2 -2
- package/src/spartan/setup_test_wallets.ts +79 -25
- package/src/spartan/tx_metrics.ts +255 -9
- package/src/spartan/utils/bot.ts +185 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +26 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +62 -0
- package/src/spartan/utils/k8s.ts +375 -0
- package/src/spartan/utils/nodes.ts +323 -0
- package/src/spartan/utils/scripts.ts +63 -0
- package/src/spartan/utils.ts +1 -1158
- package/dest/fixtures/snapshot_manager.d.ts +0 -93
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -493
- 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/snapshot_manager.ts +0 -651
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/end-to-end",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.c80b6263",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"inherits": [
|
|
@@ -25,43 +25,44 @@
|
|
|
25
25
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@aztec/accounts": "0.0.1-commit.
|
|
29
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
30
|
-
"@aztec/aztec": "0.0.1-commit.
|
|
31
|
-
"@aztec/aztec-node": "0.0.1-commit.
|
|
32
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
33
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
34
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
35
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
36
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
37
|
-
"@aztec/bot": "0.0.1-commit.
|
|
38
|
-
"@aztec/cli": "0.0.1-commit.
|
|
39
|
-
"@aztec/constants": "0.0.1-commit.
|
|
40
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
41
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
42
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
43
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
44
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
45
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
46
|
-
"@aztec/merkle-tree": "0.0.1-commit.
|
|
47
|
-
"@aztec/node-keystore": "0.0.1-commit.
|
|
48
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
49
|
-
"@aztec/noir-noirc_abi": "0.0.1-commit.
|
|
50
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
51
|
-
"@aztec/noir-test-contracts.js": "0.0.1-commit.
|
|
52
|
-
"@aztec/p2p": "0.0.1-commit.
|
|
53
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
54
|
-
"@aztec/prover-client": "0.0.1-commit.
|
|
55
|
-
"@aztec/prover-node": "0.0.1-commit.
|
|
56
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
57
|
-
"@aztec/sequencer-client": "0.0.1-commit.
|
|
58
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
59
|
-
"@aztec/slasher": "0.0.1-commit.
|
|
60
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
61
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
62
|
-
"@aztec/test-wallet": "0.0.1-commit.
|
|
63
|
-
"@aztec/validator-client": "0.0.1-commit.
|
|
64
|
-
"@aztec/
|
|
28
|
+
"@aztec/accounts": "0.0.1-commit.c80b6263",
|
|
29
|
+
"@aztec/archiver": "0.0.1-commit.c80b6263",
|
|
30
|
+
"@aztec/aztec": "0.0.1-commit.c80b6263",
|
|
31
|
+
"@aztec/aztec-node": "0.0.1-commit.c80b6263",
|
|
32
|
+
"@aztec/aztec.js": "0.0.1-commit.c80b6263",
|
|
33
|
+
"@aztec/bb-prover": "0.0.1-commit.c80b6263",
|
|
34
|
+
"@aztec/bb.js": "0.0.1-commit.c80b6263",
|
|
35
|
+
"@aztec/blob-client": "0.0.1-commit.c80b6263",
|
|
36
|
+
"@aztec/blob-lib": "0.0.1-commit.c80b6263",
|
|
37
|
+
"@aztec/bot": "0.0.1-commit.c80b6263",
|
|
38
|
+
"@aztec/cli": "0.0.1-commit.c80b6263",
|
|
39
|
+
"@aztec/constants": "0.0.1-commit.c80b6263",
|
|
40
|
+
"@aztec/entrypoints": "0.0.1-commit.c80b6263",
|
|
41
|
+
"@aztec/epoch-cache": "0.0.1-commit.c80b6263",
|
|
42
|
+
"@aztec/ethereum": "0.0.1-commit.c80b6263",
|
|
43
|
+
"@aztec/foundation": "0.0.1-commit.c80b6263",
|
|
44
|
+
"@aztec/kv-store": "0.0.1-commit.c80b6263",
|
|
45
|
+
"@aztec/l1-artifacts": "0.0.1-commit.c80b6263",
|
|
46
|
+
"@aztec/merkle-tree": "0.0.1-commit.c80b6263",
|
|
47
|
+
"@aztec/node-keystore": "0.0.1-commit.c80b6263",
|
|
48
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.c80b6263",
|
|
49
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.c80b6263",
|
|
50
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.c80b6263",
|
|
51
|
+
"@aztec/noir-test-contracts.js": "0.0.1-commit.c80b6263",
|
|
52
|
+
"@aztec/p2p": "0.0.1-commit.c80b6263",
|
|
53
|
+
"@aztec/protocol-contracts": "0.0.1-commit.c80b6263",
|
|
54
|
+
"@aztec/prover-client": "0.0.1-commit.c80b6263",
|
|
55
|
+
"@aztec/prover-node": "0.0.1-commit.c80b6263",
|
|
56
|
+
"@aztec/pxe": "0.0.1-commit.c80b6263",
|
|
57
|
+
"@aztec/sequencer-client": "0.0.1-commit.c80b6263",
|
|
58
|
+
"@aztec/simulator": "0.0.1-commit.c80b6263",
|
|
59
|
+
"@aztec/slasher": "0.0.1-commit.c80b6263",
|
|
60
|
+
"@aztec/stdlib": "0.0.1-commit.c80b6263",
|
|
61
|
+
"@aztec/telemetry-client": "0.0.1-commit.c80b6263",
|
|
62
|
+
"@aztec/test-wallet": "0.0.1-commit.c80b6263",
|
|
63
|
+
"@aztec/validator-client": "0.0.1-commit.c80b6263",
|
|
64
|
+
"@aztec/validator-ha-signer": "0.0.1-commit.c80b6263",
|
|
65
|
+
"@aztec/world-state": "0.0.1-commit.c80b6263",
|
|
65
66
|
"@iarna/toml": "^2.2.5",
|
|
66
67
|
"@jest/globals": "^30.0.0",
|
|
67
68
|
"@noble/curves": "=1.0.0",
|
|
@@ -107,7 +108,7 @@
|
|
|
107
108
|
"@types/jest": "^30.0.0",
|
|
108
109
|
"@types/js-yaml": "^4.0.9",
|
|
109
110
|
"@types/lodash.chunk": "^4.2.9",
|
|
110
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
111
|
+
"@typescript/native-preview": "7.0.0-dev.20260113.1",
|
|
111
112
|
"concurrently": "^7.6.0",
|
|
112
113
|
"jest": "^30.0.0",
|
|
113
114
|
"jest-extended": "^6.0.0",
|
|
@@ -7,7 +7,13 @@ import {
|
|
|
7
7
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
8
8
|
import { createLogger } from '@aztec/foundation/log';
|
|
9
9
|
import { type PrivateExecutionStep, serializePrivateExecutionSteps } from '@aztec/stdlib/kernel';
|
|
10
|
-
import type {
|
|
10
|
+
import type {
|
|
11
|
+
ProvingStats,
|
|
12
|
+
ProvingTimings,
|
|
13
|
+
RoundTripStats,
|
|
14
|
+
SimulationStats,
|
|
15
|
+
SimulationTimings,
|
|
16
|
+
} from '@aztec/stdlib/tx';
|
|
11
17
|
|
|
12
18
|
import assert from 'node:assert';
|
|
13
19
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
@@ -119,6 +125,7 @@ type ClientFlowBenchmark = {
|
|
|
119
125
|
timings: Omit<ProvingTimings & SimulationTimings, 'perFunction'> & { witgen: number };
|
|
120
126
|
maxMemory: number;
|
|
121
127
|
rpc: Record<string, CallRecording>;
|
|
128
|
+
roundTrips: RoundTripStats;
|
|
122
129
|
proverType: ProverType;
|
|
123
130
|
minimumTrace: StructuredTrace;
|
|
124
131
|
totalGateCount: number;
|
|
@@ -212,6 +219,10 @@ export function generateBenchmark(
|
|
|
212
219
|
}, []);
|
|
213
220
|
const timings = stats.timings;
|
|
214
221
|
const totalGateCount = steps[steps.length - 1].accGateCount;
|
|
222
|
+
const nodeRPCCalls = stats.nodeRPCCalls ?? {
|
|
223
|
+
perMethod: {},
|
|
224
|
+
roundTrips: { roundTrips: 0, totalBlockingTime: 0, roundTripDurations: [], roundTripMethods: [] },
|
|
225
|
+
};
|
|
215
226
|
return {
|
|
216
227
|
name: flow,
|
|
217
228
|
timings: {
|
|
@@ -221,7 +232,7 @@ export function generateBenchmark(
|
|
|
221
232
|
unaccounted: timings.unaccounted,
|
|
222
233
|
witgen: timings.perFunction.reduce((acc, fn) => acc + fn.time, 0),
|
|
223
234
|
},
|
|
224
|
-
rpc: Object.entries(
|
|
235
|
+
rpc: Object.entries(nodeRPCCalls.perMethod).reduce(
|
|
225
236
|
(acc, [RPCName, RPCCalls]) => {
|
|
226
237
|
const total = RPCCalls.times.reduce((sum, time) => sum + time, 0);
|
|
227
238
|
const calls = RPCCalls.times.length;
|
|
@@ -236,6 +247,7 @@ export function generateBenchmark(
|
|
|
236
247
|
},
|
|
237
248
|
{} as Record<string, CallRecording>,
|
|
238
249
|
),
|
|
250
|
+
roundTrips: nodeRPCCalls.roundTrips,
|
|
239
251
|
maxMemory,
|
|
240
252
|
proverType,
|
|
241
253
|
minimumTrace: minimumTrace!,
|
|
@@ -280,6 +292,16 @@ export function convertProfileToGHBenchmark(benchmark: ClientFlowBenchmark): Git
|
|
|
280
292
|
value: totalRPCCalls,
|
|
281
293
|
unit: 'calls',
|
|
282
294
|
},
|
|
295
|
+
{
|
|
296
|
+
name: `${benchmark.name}/round_trips`,
|
|
297
|
+
value: benchmark.roundTrips.roundTrips,
|
|
298
|
+
unit: 'round_trips',
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
name: `${benchmark.name}/round_trips_blocking_time`,
|
|
302
|
+
value: benchmark.roundTrips.totalBlockingTime,
|
|
303
|
+
unit: 'ms',
|
|
304
|
+
},
|
|
283
305
|
];
|
|
284
306
|
if (benchmark.timings.proving) {
|
|
285
307
|
benches.push({
|
|
@@ -29,14 +29,9 @@ import { deriveSigningKey } from '@aztec/stdlib/keys';
|
|
|
29
29
|
import { TestWallet } from '@aztec/test-wallet/server';
|
|
30
30
|
|
|
31
31
|
import { MNEMONIC } from '../../fixtures/fixtures.js';
|
|
32
|
-
import {
|
|
33
|
-
type ISnapshotManager,
|
|
34
|
-
type SubsystemsContext,
|
|
35
|
-
createSnapshotManager,
|
|
36
|
-
deployAccounts,
|
|
37
|
-
} from '../../fixtures/snapshot_manager.js';
|
|
32
|
+
import { type EndToEndContext, type SetupOptions, deployAccounts, setup, teardown } from '../../fixtures/setup.js';
|
|
38
33
|
import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
39
|
-
import {
|
|
34
|
+
import { setupSponsoredFPC } from '../../fixtures/utils.js';
|
|
40
35
|
import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
|
|
41
36
|
import {
|
|
42
37
|
FeeJuicePortalTestingHarnessFactory,
|
|
@@ -45,19 +40,17 @@ import {
|
|
|
45
40
|
import { ProxyLogger } from './benchmark.js';
|
|
46
41
|
import { type ClientFlowsConfig, FULL_FLOWS_CONFIG, KEY_FLOWS_CONFIG } from './config.js';
|
|
47
42
|
|
|
48
|
-
const {
|
|
43
|
+
const { BENCHMARK_CONFIG } = process.env;
|
|
49
44
|
|
|
50
45
|
export type AccountType = 'ecdsar1' | 'schnorr';
|
|
51
46
|
export type FeePaymentMethodGetter = (wallet: Wallet, sender: AztecAddress) => Promise<FeePaymentMethod | undefined>;
|
|
52
47
|
export type BenchmarkingFeePaymentMethod = 'bridged_fee_juice' | 'private_fpc' | 'sponsored_fpc' | 'fee_juice';
|
|
53
48
|
|
|
54
49
|
export class ClientFlowsBenchmark {
|
|
55
|
-
private snapshotManager: ISnapshotManager;
|
|
56
|
-
|
|
57
50
|
public logger: Logger;
|
|
58
51
|
public aztecNode!: AztecNode;
|
|
59
52
|
public cheatCodes!: CheatCodes;
|
|
60
|
-
public context!:
|
|
53
|
+
public context!: EndToEndContext;
|
|
61
54
|
public chainMonitor!: ChainMonitor;
|
|
62
55
|
public feeJuiceBridgeTestHarness!: GasBridgingTestHarness;
|
|
63
56
|
public adminWallet!: TestWallet;
|
|
@@ -125,33 +118,37 @@ export class ClientFlowsBenchmark {
|
|
|
125
118
|
public config: ClientFlowsConfig;
|
|
126
119
|
|
|
127
120
|
private proxyLogger: ProxyLogger;
|
|
121
|
+
private setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs>;
|
|
128
122
|
|
|
129
123
|
constructor(testName?: string, setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs> = {}) {
|
|
130
124
|
this.logger = createLogger(`bench:client_flows${testName ? `:${testName}` : ''}`);
|
|
131
|
-
this.
|
|
132
|
-
`bench_client_flows${testName ? `/${testName}` : ''}`,
|
|
133
|
-
dataPath,
|
|
134
|
-
{ startProverNode: true, ...setupOptions },
|
|
135
|
-
{ ...setupOptions },
|
|
136
|
-
);
|
|
125
|
+
this.setupOptions = { startProverNode: true, ...setupOptions };
|
|
137
126
|
this.config = BENCHMARK_CONFIG === 'key_flows' ? KEY_FLOWS_CONFIG : FULL_FLOWS_CONFIG;
|
|
138
127
|
ProxyLogger.create();
|
|
139
128
|
this.proxyLogger = ProxyLogger.getInstance();
|
|
140
129
|
}
|
|
141
130
|
|
|
142
131
|
async setup() {
|
|
143
|
-
|
|
144
|
-
await
|
|
132
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
133
|
+
this.context = await setup(0, {
|
|
134
|
+
...this.setupOptions,
|
|
135
|
+
fundSponsoredFPC: true,
|
|
136
|
+
skipAccountDeployment: true,
|
|
137
|
+
l1ContractsArgs: this.setupOptions,
|
|
138
|
+
});
|
|
139
|
+
await this.applyBaseSetup();
|
|
140
|
+
|
|
141
|
+
await this.context.aztecNodeService!.setConfig({ feeRecipient: this.sequencerAddress, coinbase: this.coinbase });
|
|
145
142
|
|
|
146
|
-
const rollupContract = RollupContract.getFromConfig(context.
|
|
147
|
-
this.chainMonitor = new ChainMonitor(rollupContract, context.dateProvider
|
|
143
|
+
const rollupContract = RollupContract.getFromConfig(this.context.config);
|
|
144
|
+
this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider!, this.logger, 200).start();
|
|
148
145
|
|
|
149
146
|
return this;
|
|
150
147
|
}
|
|
151
148
|
|
|
152
149
|
async teardown() {
|
|
153
150
|
await this.chainMonitor.stop();
|
|
154
|
-
await this.
|
|
151
|
+
await teardown(this.context);
|
|
155
152
|
}
|
|
156
153
|
|
|
157
154
|
async mintAndBridgeFeeJuice(address: AztecAddress) {
|
|
@@ -159,8 +156,7 @@ export class ClientFlowsBenchmark {
|
|
|
159
156
|
const { claimSecret: secret, messageLeafIndex: index } = claim;
|
|
160
157
|
await this.feeJuiceContract.methods
|
|
161
158
|
.claim(address, claim.claimAmount, secret, index)
|
|
162
|
-
.send({ from: this.adminAddress })
|
|
163
|
-
.wait();
|
|
159
|
+
.send({ from: this.adminAddress });
|
|
164
160
|
}
|
|
165
161
|
|
|
166
162
|
/** Admin mints bananaCoin tokens privately to the target address and redeems them. */
|
|
@@ -193,161 +189,118 @@ export class ClientFlowsBenchmark {
|
|
|
193
189
|
}
|
|
194
190
|
}
|
|
195
191
|
|
|
196
|
-
public async
|
|
197
|
-
await this.
|
|
198
|
-
await this.
|
|
192
|
+
public async applyBaseSetup() {
|
|
193
|
+
await this.applyInitialAccounts();
|
|
194
|
+
await this.applySetupFeeJuice();
|
|
199
195
|
}
|
|
200
196
|
|
|
201
|
-
async
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
197
|
+
async applyInitialAccounts() {
|
|
198
|
+
this.logger.info('Applying initial accounts setup');
|
|
199
|
+
const { deployedAccounts } = await deployAccounts(
|
|
200
|
+
2,
|
|
201
|
+
this.logger,
|
|
202
|
+
)({
|
|
203
|
+
wallet: this.context.wallet,
|
|
204
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
|
|
208
|
+
|
|
209
|
+
this.adminWallet = this.context.wallet;
|
|
210
|
+
this.aztecNode = this.context.aztecNodeService!;
|
|
211
|
+
this.cheatCodes = this.context.cheatCodes;
|
|
212
|
+
|
|
213
|
+
this.adminAddress = adminAddress;
|
|
214
|
+
this.sequencerAddress = sequencerAddress;
|
|
215
|
+
|
|
216
|
+
const canonicalFeeJuice = await getCanonicalFeeJuice();
|
|
217
|
+
this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
|
|
218
|
+
this.coinbase = EthAddress.random();
|
|
219
|
+
|
|
220
|
+
const userPXEConfig = getPXEConfig();
|
|
221
|
+
const userPXEConfigWithContracts = {
|
|
222
|
+
...userPXEConfig,
|
|
223
|
+
proverEnabled: this.realProofs,
|
|
224
|
+
} as PXEConfig;
|
|
225
|
+
|
|
226
|
+
this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
|
|
227
|
+
loggers: {
|
|
228
|
+
prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied'),
|
|
231
229
|
},
|
|
232
|
-
);
|
|
230
|
+
});
|
|
233
231
|
}
|
|
234
232
|
|
|
235
|
-
async
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
aztecNodeAdmin: context.aztecNode,
|
|
247
|
-
l1Client: context.deployL1ContractsValues.l1Client,
|
|
248
|
-
wallet: this.adminWallet,
|
|
249
|
-
logger: this.logger,
|
|
250
|
-
});
|
|
251
|
-
},
|
|
252
|
-
);
|
|
233
|
+
async applySetupFeeJuice() {
|
|
234
|
+
this.logger.info('Applying fee juice setup');
|
|
235
|
+
this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.adminWallet);
|
|
236
|
+
|
|
237
|
+
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
238
|
+
aztecNode: this.context.aztecNodeService!,
|
|
239
|
+
aztecNodeAdmin: this.context.aztecNodeService!,
|
|
240
|
+
l1Client: this.context.deployL1ContractsValues.l1Client,
|
|
241
|
+
wallet: this.adminWallet,
|
|
242
|
+
logger: this.logger,
|
|
243
|
+
});
|
|
253
244
|
}
|
|
254
245
|
|
|
255
|
-
async
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
.wait();
|
|
268
|
-
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
269
|
-
return { bananaCoinAddress: bananaCoin.address, bananaCoinInstance };
|
|
270
|
-
},
|
|
271
|
-
({ bananaCoinAddress, bananaCoinInstance }) => {
|
|
272
|
-
this.bananaCoin = BananaCoin.at(bananaCoinAddress, this.adminWallet);
|
|
273
|
-
this.bananaCoinInstance = bananaCoinInstance;
|
|
274
|
-
return Promise.resolve();
|
|
275
|
-
},
|
|
276
|
-
);
|
|
246
|
+
async applyDeployBananaToken() {
|
|
247
|
+
this.logger.info('Applying banana token deployment');
|
|
248
|
+
const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(
|
|
249
|
+
this.adminWallet,
|
|
250
|
+
this.adminAddress,
|
|
251
|
+
'BC',
|
|
252
|
+
'BC',
|
|
253
|
+
18n,
|
|
254
|
+
).send({ from: this.adminAddress, wait: { returnReceipt: true } });
|
|
255
|
+
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
256
|
+
this.bananaCoin = bananaCoin;
|
|
257
|
+
this.bananaCoinInstance = bananaCoinInstance;
|
|
277
258
|
}
|
|
278
259
|
|
|
279
|
-
async
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
.wait();
|
|
292
|
-
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
293
|
-
return { candyBarCoinAddress: candyBarCoin.address, candyBarCoinInstance };
|
|
294
|
-
},
|
|
295
|
-
({ candyBarCoinAddress, candyBarCoinInstance }) => {
|
|
296
|
-
this.candyBarCoin = TokenContract.at(candyBarCoinAddress, this.adminWallet);
|
|
297
|
-
this.candyBarCoinInstance = candyBarCoinInstance;
|
|
298
|
-
return Promise.resolve();
|
|
299
|
-
},
|
|
300
|
-
);
|
|
260
|
+
async applyDeployCandyBarToken() {
|
|
261
|
+
this.logger.info('Applying candy bar token deployment');
|
|
262
|
+
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(
|
|
263
|
+
this.adminWallet,
|
|
264
|
+
this.adminAddress,
|
|
265
|
+
'CBC',
|
|
266
|
+
'CBC',
|
|
267
|
+
18n,
|
|
268
|
+
).send({ from: this.adminAddress, wait: { returnReceipt: true } });
|
|
269
|
+
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
270
|
+
this.candyBarCoin = candyBarCoin;
|
|
271
|
+
this.candyBarCoinInstance = candyBarCoinInstance;
|
|
301
272
|
}
|
|
302
273
|
|
|
303
|
-
public async
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
308
|
-
expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
274
|
+
public async applyFPCSetup() {
|
|
275
|
+
this.logger.info('Applying FPC setup');
|
|
276
|
+
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
277
|
+
expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
309
278
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
.send({ from: this.adminAddress })
|
|
317
|
-
.wait();
|
|
279
|
+
const bananaCoin = this.bananaCoin;
|
|
280
|
+
const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(
|
|
281
|
+
this.adminWallet,
|
|
282
|
+
bananaCoin.address,
|
|
283
|
+
this.adminAddress,
|
|
284
|
+
).send({ from: this.adminAddress, wait: { returnReceipt: true } });
|
|
318
285
|
|
|
319
|
-
|
|
286
|
+
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
320
287
|
|
|
321
|
-
|
|
288
|
+
await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.adminAddress);
|
|
322
289
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
data => {
|
|
326
|
-
this.bananaFPC = FPCContract.at(data.bananaFPCAddress, this.adminWallet);
|
|
327
|
-
this.bananaFPCInstance = data.bananaFPCInstance;
|
|
328
|
-
return Promise.resolve();
|
|
329
|
-
},
|
|
330
|
-
);
|
|
290
|
+
this.bananaFPC = bananaFPC;
|
|
291
|
+
this.bananaFPCInstance = bananaFPCInstance;
|
|
331
292
|
}
|
|
332
293
|
|
|
333
|
-
async
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
return { sponsoredFPCAddress: sponsoredFPCInstance.address, sponsoredFPCInstance };
|
|
340
|
-
},
|
|
341
|
-
({ sponsoredFPCAddress, sponsoredFPCInstance }) => {
|
|
342
|
-
this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCAddress, this.adminWallet);
|
|
343
|
-
this.sponsoredFPCInstance = sponsoredFPCInstance;
|
|
344
|
-
return Promise.resolve();
|
|
345
|
-
},
|
|
346
|
-
);
|
|
294
|
+
async applyDeploySponsoredFPC() {
|
|
295
|
+
this.logger.info('Applying sponsored FPC deployment');
|
|
296
|
+
const sponsoredFPCInstance = await setupSponsoredFPC(this.adminWallet);
|
|
297
|
+
this.logger.info(`SponsoredFPC at ${sponsoredFPCInstance.address}`);
|
|
298
|
+
this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCInstance.address, this.adminWallet);
|
|
299
|
+
this.sponsoredFPCInstance = sponsoredFPCInstance;
|
|
347
300
|
}
|
|
348
301
|
|
|
349
302
|
public async createCrossChainTestHarness(owner: AztecAddress) {
|
|
350
|
-
const l1Client = createExtendedL1Client(this.context.
|
|
303
|
+
const l1Client = createExtendedL1Client(this.context.config.l1RpcUrls, MNEMONIC);
|
|
351
304
|
|
|
352
305
|
const underlyingERC20Address = await deployL1Contract(l1Client, TestERC20Abi, TestERC20Bytecode, [
|
|
353
306
|
'Underlying',
|
|
@@ -376,12 +329,10 @@ export class ClientFlowsBenchmark {
|
|
|
376
329
|
const benchysAddress = benchysAccountManager.address;
|
|
377
330
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
|
|
378
331
|
const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
|
|
379
|
-
await behchysDeployMethod
|
|
380
|
-
.
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
})
|
|
384
|
-
.wait();
|
|
332
|
+
await behchysDeployMethod.send({
|
|
333
|
+
from: AztecAddress.ZERO,
|
|
334
|
+
fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
|
|
335
|
+
});
|
|
385
336
|
// Register benchy on the user's Wallet, where we're going to be interacting from
|
|
386
337
|
const accountManager = await this.userWallet.createAccount({
|
|
387
338
|
secret: benchysAccount.getSecretKey(),
|
|
@@ -391,44 +342,27 @@ export class ClientFlowsBenchmark {
|
|
|
391
342
|
return accountManager.address;
|
|
392
343
|
}
|
|
393
344
|
|
|
394
|
-
public async
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
this.logger.info(`AMM deployed at ${amm.address}`);
|
|
416
|
-
await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress }).wait();
|
|
417
|
-
return {
|
|
418
|
-
ammAddress: amm.address,
|
|
419
|
-
ammInstance,
|
|
420
|
-
liquidityTokenAddress: liquidityToken.address,
|
|
421
|
-
liquidityTokenInstance,
|
|
422
|
-
};
|
|
423
|
-
},
|
|
424
|
-
({ ammAddress, ammInstance, liquidityTokenAddress, liquidityTokenInstance }) => {
|
|
425
|
-
this.liquidityToken = TokenContract.at(liquidityTokenAddress, this.adminWallet);
|
|
426
|
-
this.liquidityTokenInstance = liquidityTokenInstance;
|
|
427
|
-
this.amm = AMMContract.at(ammAddress, this.adminWallet);
|
|
428
|
-
this.ammInstance = ammInstance;
|
|
429
|
-
return Promise.resolve();
|
|
430
|
-
},
|
|
431
|
-
);
|
|
345
|
+
public async applyDeployAmm() {
|
|
346
|
+
this.logger.info('Applying AMM deployment');
|
|
347
|
+
const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(
|
|
348
|
+
this.adminWallet,
|
|
349
|
+
this.adminAddress,
|
|
350
|
+
'LPT',
|
|
351
|
+
'LPT',
|
|
352
|
+
18n,
|
|
353
|
+
).send({ from: this.adminAddress, wait: { returnReceipt: true } });
|
|
354
|
+
const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
|
|
355
|
+
this.adminWallet,
|
|
356
|
+
this.bananaCoin.address,
|
|
357
|
+
this.candyBarCoin.address,
|
|
358
|
+
liquidityToken.address,
|
|
359
|
+
).send({ from: this.adminAddress, wait: { returnReceipt: true } });
|
|
360
|
+
this.logger.info(`AMM deployed at ${amm.address}`);
|
|
361
|
+
await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress });
|
|
362
|
+
this.liquidityToken = liquidityToken;
|
|
363
|
+
this.liquidityTokenInstance = liquidityTokenInstance;
|
|
364
|
+
this.amm = amm;
|
|
365
|
+
this.ammInstance = ammInstance;
|
|
432
366
|
}
|
|
433
367
|
|
|
434
368
|
public async getBridgedFeeJuicePaymentMethodForWallet(_wallet: Wallet, sender: AztecAddress) {
|
|
@@ -439,7 +373,7 @@ export class ClientFlowsBenchmark {
|
|
|
439
373
|
public async getPrivateFPCPaymentMethodForWallet(wallet: Wallet, sender: AztecAddress) {
|
|
440
374
|
// The private fee paying method assembled on the app side requires knowledge of the maximum
|
|
441
375
|
// fee the user is willing to pay
|
|
442
|
-
const maxFeesPerGas = (await this.aztecNode.
|
|
376
|
+
const maxFeesPerGas = (await this.aztecNode.getCurrentMinFees()).mul(1.5);
|
|
443
377
|
const gasSettings = GasSettings.default({ maxFeesPerGas });
|
|
444
378
|
return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
|
|
445
379
|
}
|
|
@@ -22,7 +22,7 @@ async function main() {
|
|
|
22
22
|
logger.info(`Flows in ${ivcFolder}: \n${flows.map(flowName => `\t- ${flowName}`).join('\n')}`);
|
|
23
23
|
const simulator = new WASMSimulator();
|
|
24
24
|
const log = proxyLogger.createLogger('bb:prover');
|
|
25
|
-
const prover = new BBBundlePrivateKernelProver(simulator, log);
|
|
25
|
+
const prover = new BBBundlePrivateKernelProver(simulator, { logger: log });
|
|
26
26
|
|
|
27
27
|
const userLog = createLogger('chonk_flows:data_processor');
|
|
28
28
|
|