@aztec/end-to-end 0.0.1-commit.96bb3f7 → 0.0.1-commit.993d240
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -0
- package/dest/bench/client_flows/benchmark.d.ts +17 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +38 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +14 -15
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +132 -150
- package/dest/bench/client_flows/config.d.ts +2 -2
- package/dest/bench/client_flows/config.d.ts.map +1 -1
- package/dest/bench/client_flows/config.js +18 -0
- package/dest/bench/utils.d.ts +6 -5
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +15 -8
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +12 -10
- 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 +120 -117
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +21 -11
- 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 +103 -67
- package/dest/e2e_deploy_contract/deploy_test.d.ts +6 -5
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +20 -14
- package/dest/e2e_epochs/epochs_test.d.ts +39 -8
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +171 -50
- package/dest/e2e_fees/bridging_race.notest.js +3 -5
- package/dest/e2e_fees/fees_test.d.ts +18 -15
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +157 -142
- package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +14 -13
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +7 -10
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +32 -41
- 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 +8 -6
- package/dest/e2e_p2p/p2p_network.d.ts +20 -17
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +166 -123
- package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/e2e_p2p/reqresp/utils.js +206 -0
- package/dest/e2e_p2p/shared.d.ts +30 -12
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +86 -66
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
- package/dest/e2e_token_contract/token_contract_test.d.ts +20 -11
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +103 -93
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +34 -0
- package/dest/fixtures/e2e_prover_test.d.ts +15 -20
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +115 -134
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +77 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +74 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +71 -0
- package/dest/fixtures/ha_setup.d.ts.map +1 -0
- package/dest/fixtures/ha_setup.js +116 -0
- package/dest/fixtures/index.d.ts +2 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
- package/dest/fixtures/setup.d.ts +266 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +714 -0
- package/dest/fixtures/setup_p2p_test.d.ts +22 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +43 -32
- package/dest/fixtures/token_utils.d.ts +2 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +7 -6
- package/dest/fixtures/utils.d.ts +5 -191
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -615
- package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/install_legacy_contracts.d.cts +10 -0
- package/dest/install_legacy_contracts.d.cts.map +1 -0
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/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 +17 -5
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +33 -29
- package/dest/shared/gas_portal_test_harness.d.ts +18 -5
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +20 -11
- package/dest/shared/index.d.ts +2 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.js +41 -1
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +4 -4
- 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 +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +73 -50
- package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
- package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
- package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
- package/dest/simulators/lending_simulator.d.ts +14 -3
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +28 -16
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +3 -24
- package/dest/spartan/setup_test_wallets.d.ts +12 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +133 -43
- package/dest/spartan/tx_metrics.d.ts +68 -5
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +399 -19
- package/dest/spartan/utils/bot.d.ts +28 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +142 -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 +19 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +23 -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 +11 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +22 -0
- package/dest/spartan/utils/k8s.d.ts +128 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +381 -0
- package/dest/spartan/utils/nodes.d.ts +40 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +461 -0
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/spartan/utils/scripts.d.ts +30 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +81 -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/dest/test-wallet/test_wallet.d.ts +85 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +273 -0
- package/dest/test-wallet/utils.d.ts +41 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +66 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +48 -0
- package/dest/test-wallet/worker_wallet.d.ts +53 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +155 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +160 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +22 -0
- package/package.json +53 -45
- package/src/bench/client_flows/benchmark.ts +43 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +189 -240
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +17 -9
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +141 -152
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +144 -114
- package/src/e2e_deploy_contract/deploy_test.ts +24 -16
- package/src/e2e_epochs/epochs_test.ts +217 -93
- package/src/e2e_fees/bridging_race.notest.ts +4 -10
- package/src/e2e_fees/fees_test.ts +206 -227
- package/src/e2e_l1_publisher/write_json.ts +16 -13
- package/src/e2e_nested_contract/nested_contract_test.ts +38 -57
- package/src/e2e_p2p/inactivity_slash_test.ts +8 -6
- package/src/e2e_p2p/p2p_network.ts +238 -190
- package/src/e2e_p2p/reqresp/utils.ts +274 -0
- package/src/e2e_p2p/shared.ts +111 -83
- package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
- package/src/e2e_token_contract/token_contract_test.ts +129 -117
- package/src/fixtures/authwit_proxy.ts +54 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +143 -184
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +96 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +188 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +1037 -0
- package/src/fixtures/setup_p2p_test.ts +52 -52
- package/src/fixtures/token_utils.ts +7 -6
- package/src/fixtures/utils.ts +29 -901
- package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +104 -0
- package/src/guides/up_quick_start.sh +3 -5
- package/src/install_legacy_contracts.cjs +75 -0
- package/src/legacy-jest-resolver.cjs +112 -0
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +38 -38
- package/src/shared/gas_portal_test_harness.ts +22 -12
- package/src/shared/index.ts +1 -0
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +11 -16
- package/src/shared/uniswap_l1_l2.ts +91 -73
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +34 -16
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/setup_test_wallets.ts +184 -28
- package/src/spartan/tx_metrics.ts +329 -25
- package/src/spartan/utils/bot.ts +188 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +29 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +71 -0
- package/src/spartan/utils/k8s.ts +535 -0
- package/src/spartan/utils/nodes.ts +543 -0
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +99 -0
- package/src/spartan/utils.ts +1 -1158
- package/src/test-wallet/test_wallet.ts +376 -0
- package/src/test-wallet/utils.ts +108 -0
- package/src/test-wallet/wallet_worker_script.ts +60 -0
- package/src/test-wallet/worker_wallet.ts +218 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- 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 -488
- package/src/fixtures/snapshot_manager.ts +0 -646
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,YAAY,EAA8C,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,YAAY,EAA8C,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAmC,MAAM,sBAAsB,CAAC;AAChH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,qBAAa,UAAU;IACd,OAAO,EAAG,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,UAAU,CAAC;IACpB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IACtB,cAAc,EAAG,cAAc,CAAC;IAEvC,YAAY,QAAQ,EAAE,MAAM,EAE3B;IAEK,KAAK,CAAC,IAAI,GAAE,OAAO,CAAC,YAAY,CAAM,iBAY3C;IAEK,QAAQ,kBAEb;YAEa,mBAAmB;IAY3B,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,CAWZ;CACF;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,CAAC,CAAC;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
2
2
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
3
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
4
|
-
import {
|
|
5
|
-
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
4
|
+
import { deployAccounts, setup, teardown } from '../fixtures/setup.js';
|
|
6
5
|
export class DeployTest {
|
|
7
|
-
|
|
6
|
+
context;
|
|
8
7
|
logger;
|
|
9
8
|
wallet;
|
|
10
9
|
defaultAccountAddress;
|
|
@@ -12,23 +11,30 @@ export class DeployTest {
|
|
|
12
11
|
aztecNodeAdmin;
|
|
13
12
|
constructor(testName){
|
|
14
13
|
this.logger = createLogger(`e2e:e2e_deploy_contract:${testName}`);
|
|
15
|
-
this.snapshotManager = createSnapshotManager(`e2e_deploy_contract/${testName}`, dataPath);
|
|
16
14
|
}
|
|
17
|
-
async setup() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
async setup(opts = {}) {
|
|
16
|
+
this.logger.info('Setting up test environment');
|
|
17
|
+
this.context = await setup(0, {
|
|
18
|
+
...opts,
|
|
19
|
+
fundSponsoredFPC: true,
|
|
20
|
+
skipAccountDeployment: true
|
|
21
|
+
});
|
|
22
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
23
|
+
this.wallet = this.context.wallet;
|
|
24
|
+
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
25
|
+
await this.applyInitialAccount();
|
|
22
26
|
return this;
|
|
23
27
|
}
|
|
24
28
|
async teardown() {
|
|
25
|
-
await this.
|
|
29
|
+
await teardown(this.context);
|
|
26
30
|
}
|
|
27
|
-
async
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
async applyInitialAccount() {
|
|
32
|
+
this.logger.info('Applying initial account setup');
|
|
33
|
+
const { deployedAccounts } = await deployAccounts(1, this.logger)({
|
|
34
|
+
wallet: this.context.wallet,
|
|
35
|
+
initialFundedAccounts: this.context.initialFundedAccounts
|
|
31
36
|
});
|
|
37
|
+
this.defaultAccountAddress = deployedAccounts[0].address;
|
|
32
38
|
}
|
|
33
39
|
async registerContract(wallet, contractArtifact, opts = {}) {
|
|
34
40
|
const { salt, publicKeys, initArgs, constructorName, deployer } = opts;
|
|
@@ -1,24 +1,38 @@
|
|
|
1
|
+
import type { InitialAccountData } from '@aztec/accounts/testing';
|
|
1
2
|
import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
2
3
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
4
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
4
5
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
5
6
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
6
7
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
7
|
-
import {
|
|
8
|
+
import { Delayer } from '@aztec/ethereum/l1-tx-utils';
|
|
9
|
+
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
8
10
|
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
9
11
|
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
10
12
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
11
|
-
import {
|
|
13
|
+
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
14
|
+
import type { ProverNodeConfig } from '@aztec/prover-node';
|
|
15
|
+
import type { PXEConfig } from '@aztec/pxe/config';
|
|
12
16
|
import { type SequencerClient, type SequencerEvents } from '@aztec/sequencer-client';
|
|
13
17
|
import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
|
|
14
18
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
19
|
+
import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
|
|
15
20
|
import { type EndToEndContext, type SetupOptions } from '../fixtures/utils.js';
|
|
16
|
-
export declare const
|
|
21
|
+
export declare const WORLD_STATE_CHECKPOINT_HISTORY = 2;
|
|
17
22
|
export declare const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
|
|
18
23
|
export declare const ARCHIVER_POLL_INTERVAL = 50;
|
|
19
24
|
export declare const DEFAULT_L1_BLOCK_TIME: number;
|
|
20
25
|
export type EpochsTestOpts = Partial<SetupOptions> & {
|
|
21
26
|
numberOfAccounts?: number;
|
|
27
|
+
pxeOpts?: Partial<PXEConfig>;
|
|
28
|
+
aztecSlotDurationInL1Slots?: number;
|
|
29
|
+
/** Skip creating/registering the hardcoded account during setup (for tests that handle accounts themselves). */
|
|
30
|
+
skipHardcodedAccount?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Force the hardcoded-account fast-path even when an initial sequencer is running. Useful for
|
|
33
|
+
* tests with tight per-block gas budgets that can't fit a full account-deploy tx.
|
|
34
|
+
*/
|
|
35
|
+
useHardcodedAccount?: boolean;
|
|
22
36
|
};
|
|
23
37
|
export type TrackedSequencerEvent = {
|
|
24
38
|
[K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
|
|
@@ -42,7 +56,7 @@ export declare class EpochsTestContext {
|
|
|
42
56
|
epochCache: EpochCache;
|
|
43
57
|
proverDelayer: Delayer;
|
|
44
58
|
sequencerDelayer: Delayer;
|
|
45
|
-
proverNodes:
|
|
59
|
+
proverNodes: AztecNodeService[];
|
|
46
60
|
nodes: AztecNodeService[];
|
|
47
61
|
epochDuration: number;
|
|
48
62
|
L1_BLOCK_TIME_IN_S: number;
|
|
@@ -57,13 +71,25 @@ export declare class EpochsTestContext {
|
|
|
57
71
|
};
|
|
58
72
|
setup(opts?: EpochsTestOpts): Promise<void>;
|
|
59
73
|
teardown(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Computes InitialAccountData for a SchnorrHardcodedKeyAccountContract.
|
|
76
|
+
* This contract has a hardcoded signing key and no initializer, so it can be used without
|
|
77
|
+
* on-chain deployment. Pass the returned data in `initialFundedAccounts` so the address
|
|
78
|
+
* gets funded with fee juice in genesis.
|
|
79
|
+
*/
|
|
80
|
+
static getHardcodedAccountData(secret: Fr, salt: Fr): Promise<InitialAccountData>;
|
|
81
|
+
/**
|
|
82
|
+
* Registers a SchnorrHardcodedKeyAccountContract in PXE. The account must have been funded
|
|
83
|
+
* at genesis (via getHardcodedAccountData). No on-chain deployment or block mining needed.
|
|
84
|
+
*/
|
|
85
|
+
registerHardcodedAccount(accountData: InitialAccountData): Promise<import("@aztec/stdlib/aztec-address").AztecAddress>;
|
|
60
86
|
createProverNode(opts?: {
|
|
61
87
|
dontStart?: boolean;
|
|
62
|
-
} & Partial<ProverNodeConfig>): Promise<
|
|
88
|
+
} & Partial<ProverNodeConfig>): Promise<AztecNodeService>;
|
|
63
89
|
createNonValidatorNode(opts?: Partial<AztecNodeConfig>): Promise<AztecNodeService>;
|
|
64
90
|
createValidatorNode(privateKeys: `0x${string}`[], opts?: Partial<AztecNodeConfig> & {
|
|
65
|
-
txDelayerMaxInclusionTimeIntoSlot?: number;
|
|
66
91
|
dontStartSequencer?: boolean;
|
|
92
|
+
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
67
93
|
}): Promise<AztecNodeService>;
|
|
68
94
|
private createNode;
|
|
69
95
|
private getNextPrivateKey;
|
|
@@ -79,6 +105,8 @@ export declare class EpochsTestContext {
|
|
|
79
105
|
waitForNodeToSync(blockNumber: BlockNumber, type: 'proven' | 'finalized' | 'historic'): Promise<void>;
|
|
80
106
|
/** Registers the SpamContract on the given wallet. */
|
|
81
107
|
registerSpamContract(wallet: Wallet, salt?: Fr): Promise<SpamContract>;
|
|
108
|
+
/** Registers the TestContract on the given wallet. */
|
|
109
|
+
registerTestContract(wallet: Wallet, salt?: Fr): Promise<TestContract>;
|
|
82
110
|
/** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
|
|
83
111
|
createL1Client(): Promise<{
|
|
84
112
|
client: ExtendedViemWalletClient;
|
|
@@ -86,9 +114,12 @@ export declare class EpochsTestContext {
|
|
|
86
114
|
}>;
|
|
87
115
|
/** Verifies whether the given block number is found on the aztec node. */
|
|
88
116
|
verifyHistoricBlock(blockNumber: BlockParameter, expectedSuccess: boolean): Promise<void>;
|
|
89
|
-
|
|
117
|
+
/** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */
|
|
118
|
+
assertMultipleBlocksPerSlot(targetBlockCount: number): Promise<void>;
|
|
119
|
+
watchSequencerEvents(sequencers: SequencerClient[], getMetadata?: (i: number) => Record<string, any>, additionalFailEventKeys?: (keyof SequencerEvents)[]): {
|
|
90
120
|
failEvents: TrackedSequencerEvent[];
|
|
91
121
|
stateChanges: TrackedSequencerEvent[];
|
|
92
122
|
};
|
|
123
|
+
assertNoFailuresFromSequencers(failEvents: TrackedSequencerEvent[]): void;
|
|
93
124
|
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hzX3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZXBvY2hzL2Vwb2Noc190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEUsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJM0UsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVDLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBOEQsTUFBTSw2QkFBNkIsQ0FBQztBQUNsSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFNN0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVsRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLGVBQWUsRUFBa0IsTUFBTSx5QkFBeUIsQ0FB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
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AztecNodeService } from '@aztec/aztec-node';
|
|
2
|
+
import { getAccountContractAddress } from '@aztec/aztec.js/account';
|
|
2
3
|
import { getTimestampRangeForEpoch } from '@aztec/aztec.js/block';
|
|
3
4
|
import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
4
5
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
@@ -7,14 +8,16 @@ import { EpochCache } from '@aztec/epoch-cache';
|
|
|
7
8
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
8
9
|
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
9
10
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
11
|
+
import { createDelayer, waitUntilL1Timestamp, wrapClientWithDelayer } from '@aztec/ethereum/l1-tx-utils';
|
|
12
|
+
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
13
|
+
import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
12
14
|
import { SecretValue } from '@aztec/foundation/config';
|
|
13
15
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
14
|
-
import {
|
|
16
|
+
import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
15
17
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
16
18
|
import { sleep } from '@aztec/foundation/sleep';
|
|
17
19
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
20
|
+
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
18
21
|
import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
19
22
|
import { SequencerState } from '@aztec/sequencer-client';
|
|
20
23
|
import { EthAddress } from '@aztec/stdlib/block';
|
|
@@ -22,8 +25,9 @@ import { getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers
|
|
|
22
25
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
23
26
|
import { join } from 'path';
|
|
24
27
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
28
|
+
import { SCHNORR_HARDCODED_PRIVATE_KEY, SchnorrHardcodedKeyAccountContract } from '../fixtures/schnorr_hardcoded_account_contract.js';
|
|
25
29
|
import { createAndSyncProverNode, getPrivateKeyFromIndex, setup } from '../fixtures/utils.js';
|
|
26
|
-
export const
|
|
30
|
+
export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
|
|
27
31
|
export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
|
|
28
32
|
export const ARCHIVER_POLL_INTERVAL = 50;
|
|
29
33
|
export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
@@ -54,7 +58,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
54
58
|
static getSlotDurations(opts = {}) {
|
|
55
59
|
const envEthereumSlotDuration = process.env.L1_BLOCK_TIME ? parseInt(process.env.L1_BLOCK_TIME) : DEFAULT_L1_BLOCK_TIME;
|
|
56
60
|
const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
|
|
57
|
-
const aztecSlotDuration = opts.aztecSlotDuration ??
|
|
61
|
+
const aztecSlotDuration = opts.aztecSlotDuration ?? (opts.aztecSlotDurationInL1Slots ?? 2) * ethereumSlotDuration;
|
|
58
62
|
const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
|
|
59
63
|
const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
|
|
60
64
|
const l1PublishingTime = opts.l1PublishingTime ?? 1;
|
|
@@ -70,9 +74,18 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
70
74
|
const { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs, l1PublishingTime } = EpochsTestContext.getSlotDurations(opts);
|
|
71
75
|
this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
|
|
72
76
|
this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
|
|
77
|
+
// Auto-create a hardcoded account funded via genesis when:
|
|
78
|
+
// - skipInitialSequencer is set (no sequencer to deploy on-chain), or
|
|
79
|
+
// - useHardcodedAccount is explicitly requested (e.g. tight per-block gas budgets that
|
|
80
|
+
// can't fit a full account-deploy tx).
|
|
81
|
+
const useHardcodedAccount = (opts.skipInitialSequencer || opts.useHardcodedAccount) && !opts.skipHardcodedAccount;
|
|
82
|
+
let hardcodedAccountData;
|
|
83
|
+
if (useHardcodedAccount) {
|
|
84
|
+
hardcodedAccountData = await EpochsTestContext.getHardcodedAccountData(Fr.random(), Fr.random());
|
|
85
|
+
}
|
|
73
86
|
// Set up system without any account nor protocol contracts
|
|
74
87
|
// and with faster block times and shorter epochs.
|
|
75
|
-
const context = await setup(opts.numberOfAccounts ?? 0, {
|
|
88
|
+
const context = await setup(useHardcodedAccount ? 0 : opts.numberOfAccounts ?? 0, {
|
|
76
89
|
automineL1Setup: true,
|
|
77
90
|
checkIntervalMs: 50,
|
|
78
91
|
archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
|
|
@@ -86,17 +99,29 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
86
99
|
realProofs: false,
|
|
87
100
|
startProverNode: true,
|
|
88
101
|
proverTestDelayMs: opts.proverTestDelayMs ?? 0,
|
|
89
|
-
// We use numeric incremental prover ids for simplicity, but we can switch to
|
|
90
|
-
// using the prover's eth address if the proverId is used for something in the rollup contract
|
|
91
|
-
// Use numeric EthAddress for deterministic prover id
|
|
92
102
|
proverId: EthAddress.fromNumber(1),
|
|
93
|
-
|
|
103
|
+
worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
|
|
94
104
|
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
95
|
-
|
|
105
|
+
slasherEnabled: false,
|
|
96
106
|
l1PublishingTime,
|
|
97
|
-
...opts
|
|
107
|
+
...opts,
|
|
108
|
+
...hardcodedAccountData ? {
|
|
109
|
+
initialFundedAccounts: [
|
|
110
|
+
hardcodedAccountData
|
|
111
|
+
],
|
|
112
|
+
numberOfAccounts: 0
|
|
113
|
+
} : {}
|
|
114
|
+
}, // Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
115
|
+
// Can be overridden via opts.pxeOpts.
|
|
116
|
+
{
|
|
117
|
+
syncChainTip: 'checkpointed',
|
|
118
|
+
...opts.pxeOpts
|
|
98
119
|
});
|
|
99
120
|
this.context = context;
|
|
121
|
+
// Register the hardcoded account in PXE (local only, no on-chain deployment needed).
|
|
122
|
+
if (hardcodedAccountData) {
|
|
123
|
+
await this.registerHardcodedAccount(hardcodedAccountData);
|
|
124
|
+
}
|
|
100
125
|
this.proverNodes = context.proverNode ? [
|
|
101
126
|
context.proverNode
|
|
102
127
|
] : [];
|
|
@@ -111,10 +136,8 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
111
136
|
});
|
|
112
137
|
// Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
|
|
113
138
|
this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
this.proverDelayer = context.proverNode ? context.proverNode.publisher.l1TxUtils.delayer : undefined;
|
|
117
|
-
this.sequencerDelayer = context.sequencer ? context.sequencer.sequencer.publisher.l1TxUtils.delayer : undefined;
|
|
139
|
+
this.proverDelayer = context.proverDelayer;
|
|
140
|
+
this.sequencerDelayer = context.sequencerDelayer;
|
|
118
141
|
if (context.proverNode && !this.proverDelayer || context.sequencer && !this.sequencerDelayer) {
|
|
119
142
|
throw new Error(`Could not find prover or sequencer delayer`);
|
|
120
143
|
}
|
|
@@ -126,7 +149,9 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
126
149
|
l1StartBlock: await this.rollup.getL1StartBlock(),
|
|
127
150
|
l1GenesisTime: await this.rollup.getL1GenesisTime(),
|
|
128
151
|
ethereumSlotDuration,
|
|
129
|
-
proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs())
|
|
152
|
+
proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
|
|
153
|
+
targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
|
|
154
|
+
rollupManaLimit: Number(await this.rollup.getManaLimit())
|
|
130
155
|
};
|
|
131
156
|
this.logger.info(`L2 genesis at L1 block ${this.constants.l1StartBlock} (timestamp ${this.constants.l1GenesisTime})`);
|
|
132
157
|
}
|
|
@@ -136,19 +161,64 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
136
161
|
await Promise.all(this.nodes.map((node)=>tryStop(node, this.logger)));
|
|
137
162
|
await this.context.teardown();
|
|
138
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Computes InitialAccountData for a SchnorrHardcodedKeyAccountContract.
|
|
166
|
+
* This contract has a hardcoded signing key and no initializer, so it can be used without
|
|
167
|
+
* on-chain deployment. Pass the returned data in `initialFundedAccounts` so the address
|
|
168
|
+
* gets funded with fee juice in genesis.
|
|
169
|
+
*/ static async getHardcodedAccountData(secret, salt) {
|
|
170
|
+
const contract = new SchnorrHardcodedKeyAccountContract();
|
|
171
|
+
const address = await getAccountContractAddress(contract, secret, salt);
|
|
172
|
+
const signingKey = SCHNORR_HARDCODED_PRIVATE_KEY;
|
|
173
|
+
return {
|
|
174
|
+
secret,
|
|
175
|
+
salt,
|
|
176
|
+
signingKey,
|
|
177
|
+
address
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Registers a SchnorrHardcodedKeyAccountContract in PXE. The account must have been funded
|
|
182
|
+
* at genesis (via getHardcodedAccountData). No on-chain deployment or block mining needed.
|
|
183
|
+
*/ async registerHardcodedAccount(accountData) {
|
|
184
|
+
const contract = new SchnorrHardcodedKeyAccountContract();
|
|
185
|
+
const wallet = this.context.wallet;
|
|
186
|
+
const accountManager = await wallet.createAccount({
|
|
187
|
+
secret: accountData.secret,
|
|
188
|
+
salt: accountData.salt,
|
|
189
|
+
contract
|
|
190
|
+
});
|
|
191
|
+
this.context.accounts = [
|
|
192
|
+
accountManager.address
|
|
193
|
+
];
|
|
194
|
+
return accountManager.address;
|
|
195
|
+
}
|
|
139
196
|
async createProverNode(opts = {}) {
|
|
140
197
|
this.logger.warn('Creating and syncing a simulated prover node...');
|
|
141
198
|
const proverNodePrivateKey = this.getNextPrivateKey();
|
|
142
|
-
const
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
199
|
+
const proverIndex = this.proverNodes.length + 1;
|
|
200
|
+
const { mockGossipSubNetwork } = this.context;
|
|
201
|
+
const { proverNode } = await withLoggerBindings({
|
|
202
|
+
actor: `prover-${proverIndex}`
|
|
203
|
+
}, ()=>createAndSyncProverNode(proverNodePrivateKey, {
|
|
204
|
+
...this.context.config,
|
|
205
|
+
p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
|
|
206
|
+
proverId: EthAddress.fromNumber(proverIndex),
|
|
148
207
|
dontStart: opts.dontStart,
|
|
149
208
|
...opts
|
|
150
|
-
},
|
|
151
|
-
|
|
209
|
+
}, {
|
|
210
|
+
dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex'))
|
|
211
|
+
}, {
|
|
212
|
+
dateProvider: this.context.dateProvider,
|
|
213
|
+
p2pClientDeps: {
|
|
214
|
+
p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
|
|
215
|
+
rpcTxProviders: [
|
|
216
|
+
this.context.aztecNode
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
}, {
|
|
220
|
+
genesis: this.context.genesis,
|
|
221
|
+
dontStart: opts.dontStart
|
|
152
222
|
}));
|
|
153
223
|
this.proverNodes.push(proverNode);
|
|
154
224
|
return proverNode;
|
|
@@ -169,7 +239,8 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
169
239
|
});
|
|
170
240
|
}
|
|
171
241
|
async createNode(opts = {}) {
|
|
172
|
-
const
|
|
242
|
+
const nodeIndex = this.nodes.length + 1;
|
|
243
|
+
const actorPrefix = opts.disableValidator ? 'node' : 'validator';
|
|
173
244
|
const { mockGossipSubNetwork } = this.context;
|
|
174
245
|
const resolvedConfig = {
|
|
175
246
|
...this.context.config,
|
|
@@ -177,35 +248,25 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
177
248
|
};
|
|
178
249
|
const p2pEnabled = resolvedConfig.p2pEnabled || mockGossipSubNetwork !== undefined;
|
|
179
250
|
const p2pIp = resolvedConfig.p2pIp ?? (p2pEnabled ? '127.0.0.1' : undefined);
|
|
180
|
-
const node = await
|
|
251
|
+
const node = await withLoggerBindings({
|
|
252
|
+
actor: `${actorPrefix}-${nodeIndex}`
|
|
253
|
+
}, ()=>AztecNodeService.createAndSync({
|
|
181
254
|
...resolvedConfig,
|
|
182
255
|
dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
|
|
183
256
|
validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
|
|
257
|
+
nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
|
|
184
258
|
p2pEnabled,
|
|
185
259
|
p2pIp
|
|
186
260
|
}, {
|
|
187
261
|
dateProvider: this.context.dateProvider,
|
|
188
262
|
p2pClientDeps: {
|
|
189
263
|
p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined
|
|
190
|
-
}
|
|
264
|
+
},
|
|
265
|
+
slashingProtectionDb: opts.slashingProtectionDb
|
|
191
266
|
}, {
|
|
192
|
-
|
|
267
|
+
genesis: this.context.genesis,
|
|
193
268
|
...opts
|
|
194
269
|
}));
|
|
195
|
-
// REFACTOR: We're getting too much into the internals of the sequencer here.
|
|
196
|
-
// We should have a single method for constructing an aztec node that returns a TestAztecNodeService
|
|
197
|
-
// which directly exposes the delayer and sets any test config.
|
|
198
|
-
if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
|
|
199
|
-
this.logger.info(`Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`);
|
|
200
|
-
// Here we reach into the sequencer and hook in a tx delayer. The problem is that the sequencer's l1 utils only uses a public client, not a wallet.
|
|
201
|
-
// The delayer needs a wallet (a client that can sign), so we have to create one here.
|
|
202
|
-
const l1Client = createExtendedL1Client(resolvedConfig.l1RpcUrls, resolvedConfig.publisherPrivateKeys[0].getValue());
|
|
203
|
-
const sequencer = node.getSequencer();
|
|
204
|
-
const publisher = sequencer.sequencer.publisher;
|
|
205
|
-
const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
|
|
206
|
-
delayed.delayer.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
|
|
207
|
-
publisher.l1TxUtils = delayed;
|
|
208
|
-
}
|
|
209
270
|
this.nodes.push(node);
|
|
210
271
|
return node;
|
|
211
272
|
}
|
|
@@ -233,7 +294,9 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
233
294
|
this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
|
|
234
295
|
oneSlotBefore
|
|
235
296
|
});
|
|
236
|
-
|
|
297
|
+
// Use a timeout that accounts for the full proof submission window
|
|
298
|
+
const proofSubmissionWindowDuration = this.constants.proofSubmissionEpochs * this.epochDuration * this.L2_SLOT_DURATION_IN_S;
|
|
299
|
+
await waitUntilL1Timestamp(this.l1Client, oneSlotBefore, undefined, proofSubmissionWindowDuration * 2);
|
|
237
300
|
}
|
|
238
301
|
/** Waits for the aztec node to sync to the target block number. */ async waitForNodeToSync(blockNumber, type) {
|
|
239
302
|
const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
|
|
@@ -242,7 +305,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
242
305
|
await sleep(waitTime);
|
|
243
306
|
const [syncState, tips] = await Promise.all([
|
|
244
307
|
this.context.aztecNode.getWorldStateSyncStatus(),
|
|
245
|
-
await this.context.aztecNode.
|
|
308
|
+
await this.context.aztecNode.getChainTips()
|
|
246
309
|
]);
|
|
247
310
|
this.logger.info(`Wait for node synch ${blockNumber} ${type}`, {
|
|
248
311
|
blockNumber,
|
|
@@ -270,12 +333,25 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
270
333
|
await wallet.registerContract(instance, SpamContract.artifact);
|
|
271
334
|
return SpamContract.at(instance.address, wallet);
|
|
272
335
|
}
|
|
336
|
+
/** Registers the TestContract on the given wallet. */ async registerTestContract(wallet, salt = Fr.ZERO) {
|
|
337
|
+
const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
|
|
338
|
+
constructorArgs: [],
|
|
339
|
+
constructorArtifact: undefined,
|
|
340
|
+
salt,
|
|
341
|
+
publicKeys: undefined,
|
|
342
|
+
deployer: undefined
|
|
343
|
+
});
|
|
344
|
+
await wallet.registerContract(instance, TestContract.artifact);
|
|
345
|
+
return TestContract.at(instance.address, wallet);
|
|
346
|
+
}
|
|
273
347
|
/** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */ async createL1Client() {
|
|
274
|
-
const
|
|
348
|
+
const rawClient = createExtendedL1Client([
|
|
275
349
|
...this.l1Client.chain.rpcUrls.default.http
|
|
276
|
-
], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain)
|
|
350
|
+
], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain);
|
|
351
|
+
const delayer = createDelayer(this.context.dateProvider, {
|
|
277
352
|
ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S
|
|
278
|
-
});
|
|
353
|
+
}, {});
|
|
354
|
+
const client = wrapClientWithDelayer(rawClient, delayer);
|
|
279
355
|
expect(await client.getBalance({
|
|
280
356
|
address: client.account.address
|
|
281
357
|
})).toBeGreaterThan(0n);
|
|
@@ -293,7 +369,34 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
293
369
|
]).then((_)=>true).catch((_)=>false);
|
|
294
370
|
expect(result).toBe(expectedSuccess);
|
|
295
371
|
}
|
|
296
|
-
|
|
372
|
+
/** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */ async assertMultipleBlocksPerSlot(targetBlockCount) {
|
|
373
|
+
const archiver = this.context.aztecNode.getBlockSource();
|
|
374
|
+
const checkpoints = await archiver.getCheckpoints({
|
|
375
|
+
from: CheckpointNumber(1),
|
|
376
|
+
limit: 50
|
|
377
|
+
});
|
|
378
|
+
this.logger.warn(`Retrieved ${checkpoints.length} checkpoints from archiver`, {
|
|
379
|
+
checkpoints: checkpoints.map((pc)=>pc.checkpoint.getStats())
|
|
380
|
+
});
|
|
381
|
+
let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
|
|
382
|
+
let targetFound = false;
|
|
383
|
+
for (const checkpoint of checkpoints){
|
|
384
|
+
const blockCount = checkpoint.checkpoint.blocks.length;
|
|
385
|
+
targetFound = targetFound || blockCount >= targetBlockCount;
|
|
386
|
+
this.logger.verbose(`Checkpoint ${checkpoint.checkpoint.number} has ${blockCount} blocks`, {
|
|
387
|
+
checkpoint: checkpoint.checkpoint.getStats()
|
|
388
|
+
});
|
|
389
|
+
for(let i = 0; i < blockCount; i++){
|
|
390
|
+
const block = checkpoint.checkpoint.blocks[i];
|
|
391
|
+
expect(block.indexWithinCheckpoint).toBe(i);
|
|
392
|
+
expect(block.checkpointNumber).toBe(checkpoint.checkpoint.number);
|
|
393
|
+
expect(block.number).toBe(expectedBlockNumber);
|
|
394
|
+
expectedBlockNumber++;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
expect(targetFound).toBe(true);
|
|
398
|
+
}
|
|
399
|
+
watchSequencerEvents(sequencers, getMetadata = ()=>({}), additionalFailEventKeys = []) {
|
|
297
400
|
const stateChanges = [];
|
|
298
401
|
const failEvents = [];
|
|
299
402
|
// Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
|
|
@@ -301,7 +404,12 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
301
404
|
const failEventsKeys = [
|
|
302
405
|
'block-build-failed',
|
|
303
406
|
'checkpoint-publish-failed',
|
|
304
|
-
'proposer-rollup-check-failed'
|
|
407
|
+
'proposer-rollup-check-failed',
|
|
408
|
+
'checkpoint-error',
|
|
409
|
+
'checkpoint-publish-failed',
|
|
410
|
+
'header-validation-failed',
|
|
411
|
+
'pipelined-checkpoint-discarded',
|
|
412
|
+
...additionalFailEventKeys
|
|
305
413
|
];
|
|
306
414
|
const makeEvent = (i, eventName, args)=>({
|
|
307
415
|
...args,
|
|
@@ -325,6 +433,13 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
325
433
|
});
|
|
326
434
|
failEventsKeys.forEach((eventName)=>{
|
|
327
435
|
sequencer.getSequencer().on(eventName, (args)=>{
|
|
436
|
+
// Skip benign block-build-failed events where the builder rejected the block because it
|
|
437
|
+
// could not collect enough valid txs. This is the same "not enough txs" case as
|
|
438
|
+
// block-tx-count-check-failed (which is already excluded above), just detected after we
|
|
439
|
+
// started processing txs rather than before.
|
|
440
|
+
if (eventName === 'block-build-failed' && args.reason === 'Insufficient valid txs') {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
328
443
|
const evt = makeEvent(i, eventName, args);
|
|
329
444
|
failEvents.push(evt);
|
|
330
445
|
this.logger.error(`Failed event ${eventName} from sequencer ${sequencerIndex}`, undefined, evt);
|
|
@@ -336,4 +451,10 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
336
451
|
stateChanges
|
|
337
452
|
};
|
|
338
453
|
}
|
|
454
|
+
assertNoFailuresFromSequencers(failEvents) {
|
|
455
|
+
if (failEvents.length > 0) {
|
|
456
|
+
this.logger.error(`Failed events from sequencers`, failEvents);
|
|
457
|
+
}
|
|
458
|
+
expect(failEvents).toEqual([]);
|
|
459
|
+
}
|
|
339
460
|
}
|
|
@@ -16,10 +16,8 @@ describe('e2e_fees bridging_race', ()=>{
|
|
|
16
16
|
minTxsPerBlock: 0
|
|
17
17
|
});
|
|
18
18
|
beforeAll(async ()=>{
|
|
19
|
-
await t.
|
|
20
|
-
|
|
21
|
-
await t.applySetupFeeJuiceSnapshot();
|
|
22
|
-
({ wallet, logger } = await t.setup());
|
|
19
|
+
await t.setup();
|
|
20
|
+
({ wallet, logger } = t);
|
|
23
21
|
});
|
|
24
22
|
afterAll(async ()=>{
|
|
25
23
|
await t.teardown();
|
|
@@ -56,7 +54,7 @@ describe('e2e_fees bridging_race', ()=>{
|
|
|
56
54
|
const { claimSecret: secret, messageLeafIndex: index } = claim;
|
|
57
55
|
await t.feeJuiceContract.methods.claim(bobsAddress, claim.claimAmount, secret, index).send({
|
|
58
56
|
from: bobsAddress
|
|
59
|
-
})
|
|
57
|
+
});
|
|
60
58
|
const [balance] = await t.getGasBalanceFn(bobsAddress);
|
|
61
59
|
expect(balance).toEqual(claim.claimAmount);
|
|
62
60
|
});
|