@aztec/end-to-end 5.0.0-rc.2 → 5.0.0
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 +215 -27
- package/dest/automine/automine_test_context.d.ts +85 -0
- package/dest/automine/automine_test_context.d.ts.map +1 -0
- package/dest/automine/automine_test_context.js +98 -0
- package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fixture.d.ts +1 -1
- package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/automine/delivery/interactive_handshake_responder.d.ts +48 -0
- package/dest/automine/delivery/interactive_handshake_responder.d.ts.map +1 -0
- package/dest/automine/delivery/interactive_handshake_responder.js +76 -0
- package/dest/automine/delivery/onchain_delivery_harness.d.ts +19 -0
- package/dest/automine/delivery/onchain_delivery_harness.d.ts.map +1 -0
- package/dest/automine/delivery/onchain_delivery_harness.js +141 -0
- package/dest/automine/token/blacklist_token_contract_test.d.ts +49 -0
- package/dest/automine/token/blacklist_token_contract_test.d.ts.map +1 -0
- package/dest/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.js +17 -24
- package/dest/automine/token/token_contract_test.d.ts +40 -0
- package/dest/automine/token/token_contract_test.d.ts.map +1 -0
- package/dest/{e2e_token_contract → automine/token}/token_contract_test.js +22 -28
- package/dest/automine/token/token_test_helpers.d.ts +73 -0
- package/dest/automine/token/token_test_helpers.d.ts.map +1 -0
- package/dest/automine/token/token_test_helpers.js +97 -0
- package/dest/bench/client_flows/benchmark.d.ts +1 -1
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +3 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +16 -4
- package/dest/bench/utils.d.ts +1 -1
- package/dest/composed/ha/ha_full_setup.d.ts +77 -0
- package/dest/composed/ha/ha_full_setup.d.ts.map +1 -0
- package/dest/composed/ha/ha_full_setup.js +383 -0
- package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts +12 -0
- package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts.map +1 -0
- package/dest/fixtures/e2e_prover_test.d.ts +10 -7
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +30 -11
- package/dest/fixtures/fixtures.d.ts +7 -5
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +6 -4
- package/dest/fixtures/ha_setup.d.ts +3 -3
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +4 -1
- 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/setup.d.ts +32 -8
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +165 -160
- package/dest/fixtures/standard_contracts_genesis.d.ts +16 -0
- package/dest/fixtures/standard_contracts_genesis.d.ts.map +1 -0
- package/dest/fixtures/standard_contracts_genesis.js +25 -0
- package/dest/fixtures/timing.d.ts +42 -0
- package/dest/fixtures/timing.d.ts.map +1 -0
- package/dest/fixtures/timing.js +72 -0
- package/dest/fixtures/wait_helpers.d.ts +135 -0
- package/dest/fixtures/wait_helpers.d.ts.map +1 -0
- package/dest/fixtures/wait_helpers.js +154 -0
- package/dest/forward-compatibility/wallet_service.js +1 -1
- package/dest/multi-node/block-production/setup.d.ts +97 -0
- package/dest/multi-node/block-production/setup.d.ts.map +1 -0
- package/dest/multi-node/block-production/setup.js +158 -0
- package/dest/multi-node/governance/setup.d.ts +67 -0
- package/dest/multi-node/governance/setup.d.ts.map +1 -0
- package/dest/multi-node/governance/setup.js +126 -0
- package/dest/multi-node/multi_node_test_context.d.ts +212 -0
- package/dest/multi-node/multi_node_test_context.d.ts.map +1 -0
- package/dest/multi-node/multi_node_test_context.js +347 -0
- package/dest/multi-node/slashing/inactivity_setup.d.ts +27 -0
- package/dest/multi-node/slashing/inactivity_setup.d.ts.map +1 -0
- package/dest/multi-node/slashing/inactivity_setup.js +111 -0
- package/dest/multi-node/slashing/setup.d.ts +167 -0
- package/dest/multi-node/slashing/setup.d.ts.map +1 -0
- package/dest/multi-node/slashing/setup.js +275 -0
- package/dest/{e2e_p2p → p2p}/p2p_network.d.ts +9 -1
- package/dest/p2p/p2p_network.d.ts.map +1 -0
- package/dest/{e2e_p2p → p2p}/p2p_network.js +26 -1
- package/dest/p2p/reqresp/utils.d.ts +19 -0
- package/dest/p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/{e2e_p2p → p2p}/reqresp/utils.js +4 -15
- package/dest/p2p/shared.d.ts +72 -0
- package/dest/p2p/shared.d.ts.map +1 -0
- package/dest/p2p/shared.js +212 -0
- package/dest/shared/cross_chain_test_harness.d.ts +3 -3
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +24 -16
- package/dest/shared/gas_portal_test_harness.d.ts +1 -1
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +8 -5
- package/dest/shared/submit-transactions.d.ts +1 -1
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +12 -5
- package/dest/shared/timing_env.d.js +5 -0
- package/dest/shared/timing_env.js +158 -47
- package/dest/shared/wait_for_l1_to_l2_message.js +1 -1
- package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts +75 -0
- package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts.map +1 -0
- package/dest/{e2e_cross_chain_messaging → single-node/cross-chain}/cross_chain_messaging_test.js +74 -26
- package/dest/single-node/cross-chain/message_test_helpers.d.ts +38 -0
- package/dest/single-node/cross-chain/message_test_helpers.d.ts.map +1 -0
- package/dest/single-node/cross-chain/message_test_helpers.js +70 -0
- package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.d.ts +1 -1
- package/dest/single-node/fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.js +9 -6
- package/dest/single-node/fees/fees_test.d.ts +95 -0
- package/dest/single-node/fees/fees_test.d.ts.map +1 -0
- package/dest/{e2e_fees → single-node/fees}/fees_test.js +121 -45
- package/dest/single-node/l1-reorgs/setup.d.ts +42 -0
- package/dest/single-node/l1-reorgs/setup.d.ts.map +1 -0
- package/dest/single-node/l1-reorgs/setup.js +57 -0
- package/dest/single-node/partial-proofs/setup.d.ts +5 -0
- package/dest/single-node/partial-proofs/setup.d.ts.map +1 -0
- package/dest/single-node/partial-proofs/setup.js +5 -0
- package/dest/single-node/proving/setup.d.ts +5 -0
- package/dest/single-node/proving/setup.d.ts.map +1 -0
- package/dest/single-node/proving/setup.js +5 -0
- package/dest/single-node/recovery/setup.d.ts +5 -0
- package/dest/single-node/recovery/setup.d.ts.map +1 -0
- package/dest/single-node/recovery/setup.js +5 -0
- package/dest/single-node/setup.d.ts +49 -0
- package/dest/single-node/setup.d.ts.map +1 -0
- package/dest/single-node/setup.js +56 -0
- package/dest/single-node/single_node_test_context.d.ts +373 -0
- package/dest/single-node/single_node_test_context.d.ts.map +1 -0
- package/dest/single-node/single_node_test_context.js +845 -0
- package/dest/spartan/setup_test_wallets.d.ts +1 -1
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +13 -7
- package/dest/spartan/tx_metrics.d.ts +10 -1
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +32 -0
- package/dest/test-wallet/test_wallet.d.ts +23 -4
- package/dest/test-wallet/test_wallet.d.ts.map +1 -1
- package/dest/test-wallet/test_wallet.js +20 -4
- package/dest/test-wallet/utils.d.ts +36 -1
- package/dest/test-wallet/utils.d.ts.map +1 -1
- package/dest/test-wallet/utils.js +64 -4
- package/dest/test-wallet/wallet_worker_script.js +5 -2
- package/dest/test-wallet/worker_wallet.d.ts +5 -5
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet.js +2 -2
- package/dest/test-wallet/worker_wallet_schema.js +2 -1
- package/package.json +40 -40
- package/src/automine/README.md +60 -0
- package/src/automine/automine_test_context.ts +153 -0
- package/src/automine/delivery/interactive_handshake_responder.ts +125 -0
- package/src/automine/delivery/onchain_delivery_harness.ts +213 -0
- package/src/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.ts +19 -39
- package/src/{e2e_token_contract → automine/token}/token_contract_test.ts +24 -43
- package/src/automine/token/token_test_helpers.ts +138 -0
- package/src/bench/client_flows/benchmark.ts +3 -1
- package/src/bench/client_flows/client_flows_benchmark.ts +17 -4
- package/src/composed/ha/ha_full_setup.ts +466 -0
- package/src/fixtures/e2e_prover_test.ts +36 -20
- package/src/fixtures/fixtures.ts +6 -4
- package/src/fixtures/ha_setup.ts +7 -3
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/setup.ts +202 -161
- package/src/fixtures/standard_contracts_genesis.ts +28 -0
- package/src/fixtures/timing.ts +97 -0
- package/src/fixtures/wait_helpers.ts +333 -0
- package/src/forward-compatibility/wallet_service.ts +2 -2
- package/src/infra/README.md +12 -0
- package/src/multi-node/README.md +96 -0
- package/src/multi-node/block-production/setup.ts +272 -0
- package/src/multi-node/governance/setup.ts +172 -0
- package/src/multi-node/multi_node_test_context.ts +447 -0
- package/src/multi-node/slashing/inactivity_setup.ts +139 -0
- package/src/multi-node/slashing/setup.ts +433 -0
- package/src/p2p/README.md +78 -0
- package/src/{e2e_p2p → p2p}/p2p_network.ts +26 -0
- package/src/{e2e_p2p → p2p}/reqresp/utils.ts +5 -14
- package/src/p2p/shared.ts +329 -0
- package/src/shared/cross_chain_test_harness.ts +22 -13
- package/src/shared/gas_portal_test_harness.ts +13 -5
- package/src/shared/submit-transactions.ts +13 -5
- package/src/shared/timing_env.d.mts +39 -0
- package/src/shared/timing_env.mjs +152 -48
- package/src/shared/wait_for_l1_to_l2_message.ts +1 -1
- package/src/single-node/README.md +66 -0
- package/src/{e2e_cross_chain_messaging → single-node/cross-chain}/cross_chain_messaging_test.ts +100 -38
- package/src/single-node/cross-chain/message_test_helpers.ts +125 -0
- package/src/{e2e_fees → single-node/fees}/bridging_race.notest.ts +11 -7
- package/src/{e2e_fees → single-node/fees}/fees_test.ts +132 -47
- package/src/single-node/l1-reorgs/setup.ts +93 -0
- package/src/single-node/partial-proofs/setup.ts +8 -0
- package/src/single-node/proving/setup.ts +15 -0
- package/src/single-node/recovery/setup.ts +8 -0
- package/src/single-node/setup.ts +63 -0
- package/src/single-node/single_node_test_context.ts +1054 -0
- package/src/spartan/setup_test_wallets.ts +19 -7
- package/src/spartan/tx_metrics.ts +26 -0
- package/src/test-wallet/test_wallet.ts +28 -6
- package/src/test-wallet/utils.ts +102 -5
- package/src/test-wallet/wallet_worker_script.ts +6 -3
- package/src/test-wallet/worker_wallet.ts +5 -9
- package/src/test-wallet/worker_wallet_schema.ts +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -56
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +0 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +0 -59
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +0 -1
- package/dest/e2e_deploy_contract/deploy_test.d.ts +0 -36
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +0 -1
- package/dest/e2e_deploy_contract/deploy_test.js +0 -42
- package/dest/e2e_epochs/epochs_test.d.ts +0 -137
- package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
- package/dest/e2e_epochs/epochs_test.js +0 -485
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.d.ts +0 -89
- package/dest/e2e_fees/fees_test.d.ts.map +0 -1
- package/dest/e2e_l1_publisher/write_json.d.ts +0 -11
- package/dest/e2e_l1_publisher/write_json.d.ts.map +0 -1
- package/dest/e2e_l1_publisher/write_json.js +0 -57
- package/dest/e2e_multi_validator/utils.d.ts +0 -12
- package/dest/e2e_multi_validator/utils.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +0 -22
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +0 -40
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +0 -31
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +0 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +0 -138
- package/dest/e2e_p2p/p2p_network.d.ts.map +0 -1
- package/dest/e2e_p2p/reqresp/utils.d.ts +0 -22
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +0 -1
- package/dest/e2e_p2p/shared.d.ts +0 -100
- package/dest/e2e_p2p/shared.d.ts.map +0 -1
- package/dest/e2e_p2p/shared.js +0 -257
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +0 -2
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +0 -1
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +0 -1
- package/dest/e2e_token_contract/token_contract_test.d.ts +0 -44
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +0 -1
- package/src/e2e_deploy_contract/deploy_test.ts +0 -73
- package/src/e2e_epochs/epochs_test.ts +0 -596
- package/src/e2e_l1_publisher/write_json.ts +0 -78
- package/src/e2e_nested_contract/nested_contract_test.ts +0 -51
- package/src/e2e_p2p/inactivity_slash_test.ts +0 -181
- package/src/e2e_p2p/shared.ts +0 -391
- /package/dest/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fetcher.js +0 -0
- /package/dest/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fixture.js +0 -0
- /package/dest/{e2e_multi_validator/utils.js → composed/web3signer/multi_validator_keystore_utils.js} +0 -0
- /package/src/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof.json +0 -0
- /package/src/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fetcher.ts +0 -0
- /package/src/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fixture.ts +0 -0
- /package/src/{e2e_multi_validator/utils.ts → composed/web3signer/multi_validator_keystore_utils.ts} +0 -0
|
@@ -73,4 +73,4 @@ export declare function convertProfileToGHBenchmark(benchmark: ClientFlowBenchma
|
|
|
73
73
|
export declare function expectedExecutionSteps(apps: number): number;
|
|
74
74
|
export declare function captureProfile(label: string, interaction: ContractFunctionInteraction | DeployMethod, opts: Omit<ProfileInteractionOptions & DeployOptions, 'profileMode'>, expectedSteps?: number): Promise<import("@aztec/stdlib/tx").TxProfileResult>;
|
|
75
75
|
export {};
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVuY2htYXJrLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmVuY2gvY2xpZW50X2Zsb3dzL2JlbmNobWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLFlBQVksRUFDWixLQUFLLGFBQWEsRUFDbEIsS0FBSyx5QkFBeUIsRUFDL0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdsRCxPQUFPLEVBQUUsS0FBSyxvQkFBb0IsRUFBa0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRyxPQUFPLEtBQUssRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLGNBQWMsRUFDZCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2xCLE1BQU0sa0JBQWtCLENBQUM7QUFNMUIsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJL0QsUUFBQSxNQUFNLFFBQVEsb0ZBQXFGLENBQUM7QUFDcEcsS0FBSyxRQUFRLEdBQUcsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTFDLE1BQU0sTUFBTSxHQUFHLEdBQUc7SUFDaEIsSUFBSSxFQUFFLFFBQVEsQ0FBQztJQUNmLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNYLENBQUM7QUFFRixRQUFBLE1BQU0sVUFBVSwwS0FhTixDQUFDO0FBRVgsS0FBSyxRQUFRLEdBQUcsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTVDLEtBQUssZUFBZSxHQUFHO0tBQ3BCLENBQUMsSUFBSSxRQUFRLEdBQUcsTUFBTTtDQUN4QixDQUFDO0FBRUYscUJBQWEsV0FBVztJQUN0QixPQUFP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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/benchmark.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,sBAAsB,CAAC;AACjG,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAI/D,QAAA,MAAM,QAAQ,oFAAqF,CAAC;AACpG,KAAK,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1C,MAAM,MAAM,GAAG,GAAG;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,QAAA,MAAM,UAAU,0KAaN,CAAC;AAEX,KAAK,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5C,KAAK,eAAe,GAAG;KACpB,CAAC,IAAI,QAAQ,GAAG,MAAM;CACxB,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO,CAAC,IAAI,CAAa;IAEzB,OAAO,eAAiB;IAExB,MAAM,CAAC,MAAM,SAEZ;IAED,MAAM,CAAC,WAAW,gBAEjB;IAED,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAenC;IAED,OAAO,CAAC,SAAS;IAIV,SAAS,SAEf;IAEM,OAAO,UAEb;CACF;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3C,KAAK,aAAa,GAAG;IAEnB,KAAK,EAAE,MAAM,CAAC;IAEd,GAAG,EAAE,MAAM,CAAC;IAEZ,GAAG,EAAE,MAAM,CAAC;IAEZ,GAAG,EAAE,MAAM,CAAC;IAEZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,WAAW,CAAC,GAAG;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACxC,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC,cAAc,GAAG,iBAAiB,EAAE,aAAa,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnC,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,eAAe,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AA0CF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EAAE,EACX,KAAK,EAAE,YAAY,GAAG,eAAe,EACrC,qBAAqB,EAAE,oBAAoB,EAAE,EAC7C,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,mBAAmB,CA2ErB;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,mBAAmB,GAAG,2BAA2B,EAAE,CA6DzG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,2BAA2B,GAAG,YAAY,EACvD,IAAI,EAAE,IAAI,CAAC,yBAAyB,GAAG,aAAa,EAAE,aAAa,CAAC,EACpE,aAAa,CAAC,EAAE,MAAM,uDAoCvB"}
|
|
@@ -254,7 +254,9 @@ export function convertProfileToGHBenchmark(benchmark) {
|
|
|
254
254
|
* not match this formula.
|
|
255
255
|
*/ export function expectedExecutionSteps(apps) {
|
|
256
256
|
const kernels = Math.ceil(apps / MAX_APPS_PER_KERNEL);
|
|
257
|
-
|
|
257
|
+
// The final reset and tail are proved as a single circuit (reset_tail or reset_tail_to_public),
|
|
258
|
+
// so they share one execution step.
|
|
259
|
+
return apps + kernels + 1 /* reset+tail */ + 1 /* hiding */ ;
|
|
258
260
|
}
|
|
259
261
|
export async function captureProfile(label, interaction, opts, expectedSteps) {
|
|
260
262
|
// Make sure the proxy logger starts from a clean slate
|
|
@@ -76,4 +76,4 @@ export declare class ClientFlowsBenchmark {
|
|
|
76
76
|
getPrivateFPCPaymentMethodForWallet(wallet: Wallet, sender: AztecAddress): Promise<PrivateFeePaymentMethod>;
|
|
77
77
|
getSponsoredFPCPaymentMethodForWallet(_wallet: Wallet, _sender: AztecAddress): Promise<SponsoredFeePaymentMethod>;
|
|
78
78
|
}
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50X2Zsb3dzX2JlbmNobWFyay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JlbmNoL2NsaWVudF9mbG93cy9jbGllbnRfZmxvd3NfYmVuY2htYXJrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFpQyxNQUFNLHNCQUFzQixDQUFDO0FBR2pGLE9BQU8sS0FBSyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFNUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSXBELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUk3RyxPQUFP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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client_flows_benchmark.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/client_flows_benchmark.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,KAAK,gBAAgB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAiC,MAAM,sBAAsB,CAAC;AAGjF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAE5F,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"client_flows_benchmark.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/client_flows_benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
|
9
9
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
10
10
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
11
11
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
12
|
+
import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
|
|
12
13
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
13
14
|
import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
|
|
14
15
|
import { TestERC20Bytecode } from '@aztec/l1-artifacts/TestERC20Bytecode';
|
|
@@ -21,7 +22,7 @@ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
|
21
22
|
import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
22
23
|
import { getPXEConfig } from '@aztec/pxe/server';
|
|
23
24
|
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
24
|
-
import {
|
|
25
|
+
import { AppTaggingSecretKind } from '@aztec/stdlib/logs';
|
|
25
26
|
import { AUTOMINE_E2E_OPTS, L1_DIRECT_WRITE_ACCOUNT_INDEX, MNEMONIC, getPaddedMaxFeesPerGas } from '../../fixtures/fixtures.js';
|
|
26
27
|
import { setup, teardown } from '../../fixtures/setup.js';
|
|
27
28
|
import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
@@ -162,7 +163,7 @@ export class ClientFlowsBenchmark {
|
|
|
162
163
|
const salt = Fr.random();
|
|
163
164
|
let benchysPrivateSigningKey;
|
|
164
165
|
if (type === 'schnorr') {
|
|
165
|
-
benchysPrivateSigningKey =
|
|
166
|
+
benchysPrivateSigningKey = GrumpkinScalar.random();
|
|
166
167
|
return wallet.createSchnorrAccount(benchysSecret, salt, benchysPrivateSigningKey);
|
|
167
168
|
} else if (type === 'ecdsar1') {
|
|
168
169
|
benchysPrivateSigningKey = randomBytes(32);
|
|
@@ -194,6 +195,18 @@ export class ClientFlowsBenchmark {
|
|
|
194
195
|
this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
|
|
195
196
|
loggers: {
|
|
196
197
|
prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied')
|
|
198
|
+
},
|
|
199
|
+
// The benchmark measures steady-state app cost, not first-send discovery cost. Reproduce the pre-handshake-default
|
|
200
|
+
// behavior of unconstrained delivery: derive the tagging secret from the (sender, recipient) key pair via ECDH
|
|
201
|
+
// instead of taking the current default (a non-interactive handshake, which injects two extra private app
|
|
202
|
+
// executions and a nullifier per cold chain). Constrained delivery is unaffected: the Noir circuit rejects
|
|
203
|
+
// address-derived for constrained, so the hook falls through to a handshake there.
|
|
204
|
+
hooks: {
|
|
205
|
+
resolveTaggingSecretStrategy: ({ deliveryMode })=>Promise.resolve(deliveryMode === AppTaggingSecretKind.UNCONSTRAINED ? {
|
|
206
|
+
type: 'address-derived'
|
|
207
|
+
} : {
|
|
208
|
+
type: 'non-interactive-handshake'
|
|
209
|
+
})
|
|
197
210
|
}
|
|
198
211
|
});
|
|
199
212
|
}
|
|
@@ -262,7 +275,6 @@ export class ClientFlowsBenchmark {
|
|
|
262
275
|
}
|
|
263
276
|
async createAndFundBenchmarkingAccountOnUserWallet(accountType) {
|
|
264
277
|
const benchysAccountManager = await this.createBenchmarkingAccountManager(this.adminWallet, accountType);
|
|
265
|
-
const benchysAccount = await benchysAccountManager.getAccount();
|
|
266
278
|
const benchysAddress = benchysAccountManager.address;
|
|
267
279
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
|
|
268
280
|
const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
|
|
@@ -274,7 +286,7 @@ export class ClientFlowsBenchmark {
|
|
|
274
286
|
});
|
|
275
287
|
// Register benchy on the user's Wallet, where we're going to be interacting from
|
|
276
288
|
const accountManager = await this.userWallet.createAccount({
|
|
277
|
-
secret:
|
|
289
|
+
secret: benchysAccountManager.getSecretKey(),
|
|
278
290
|
salt: new Fr(benchysAccountManager.getInstance().salt),
|
|
279
291
|
contract: benchysAccountManager.getAccountContract()
|
|
280
292
|
});
|
package/dest/bench/utils.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare function benchmarkSetup(opts: Partial<SetupOptions> & {
|
|
|
13
13
|
benchOutput?: string;
|
|
14
14
|
}): Promise<{
|
|
15
15
|
telemetry: BenchmarkTelemetryClient;
|
|
16
|
-
context: EndToEndContext
|
|
16
|
+
context: EndToEndContext<unknown>;
|
|
17
17
|
contract: BenchmarkingContract;
|
|
18
18
|
sequencer: import("@aztec/sequencer-client").SequencerClient;
|
|
19
19
|
}>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared setup for the docker-compose HA full suite.
|
|
3
|
+
*
|
|
4
|
+
* Stands up the complete HA cluster used by `e2e_ha_full.parallel.test.ts` and
|
|
5
|
+
* `e2e_ha_distribute_work.test.ts`: a bootstrap RPC/P2P node plus NODE_COUNT in-proc
|
|
6
|
+
* `AztecNodeService` HA peers that share one PostgreSQL slashing-protection DB and a Web3Signer keystore.
|
|
7
|
+
* Requires the docker-compose HA suite (run_test.sh ha): live Postgres (DATABASE_URL) and Web3Signer
|
|
8
|
+
* sidecar.
|
|
9
|
+
*
|
|
10
|
+
* The suite is split across two files because the "distribute work" test kills nodes as it runs, leaving
|
|
11
|
+
* the cluster unusable; giving it its own file (its own cluster) removes the previous "must run last"
|
|
12
|
+
* ordering contract without changing what any test asserts.
|
|
13
|
+
*/
|
|
14
|
+
import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
15
|
+
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
16
|
+
import type { Logger } from '@aztec/aztec.js/log';
|
|
17
|
+
import { type AztecNode } from '@aztec/aztec.js/node';
|
|
18
|
+
import { GovernanceProposerContract } from '@aztec/ethereum/contracts';
|
|
19
|
+
import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
20
|
+
import type { TestDateProvider } from '@aztec/foundation/timer';
|
|
21
|
+
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
22
|
+
import { TxHash, type TxReceipt } from '@aztec/stdlib/tx';
|
|
23
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
24
|
+
import { Pool } from 'pg';
|
|
25
|
+
import { type HADatabaseConfig } from '../../fixtures/ha_setup.js';
|
|
26
|
+
import type { TestWallet } from '../../test-wallet/test_wallet.js';
|
|
27
|
+
export declare const NODE_COUNT = 5;
|
|
28
|
+
export declare const VALIDATOR_COUNT = 4;
|
|
29
|
+
export declare const COMMITTEE_SIZE = 4;
|
|
30
|
+
export declare function registerTestContract(wallet: TestWallet): Promise<TestContract>;
|
|
31
|
+
export declare function submitTriggerTx(wallet: TestWallet, testContract: TestContract, from: AztecAddress): Promise<TxHash>;
|
|
32
|
+
export declare function waitForTriggerTx(node: AztecNode, txHash: TxHash): Promise<TxReceipt>;
|
|
33
|
+
/**
|
|
34
|
+
* Owns the full HA cluster lifecycle and the shared helpers the two HA test files drive it with. Each
|
|
35
|
+
* test file constructs one instance and calls {@link setup} in `beforeAll` / {@link teardown} in
|
|
36
|
+
* `afterAll`; state fields are populated by {@link setup} and read directly by the tests.
|
|
37
|
+
*/
|
|
38
|
+
export declare class HaFullTestContext {
|
|
39
|
+
logger: Logger;
|
|
40
|
+
wallet: TestWallet;
|
|
41
|
+
ownerAddress: AztecAddress;
|
|
42
|
+
testContract: TestContract;
|
|
43
|
+
aztecNode: AztecNode;
|
|
44
|
+
config: AztecNodeConfig;
|
|
45
|
+
accounts: AztecAddress[];
|
|
46
|
+
dateProvider: TestDateProvider;
|
|
47
|
+
genesis: GenesisData | undefined;
|
|
48
|
+
haNodePools: Pool[];
|
|
49
|
+
haNodeServices: AztecNodeService[];
|
|
50
|
+
haKeystoreDirs: string[];
|
|
51
|
+
mainPool: Pool;
|
|
52
|
+
databaseConfig: HADatabaseConfig;
|
|
53
|
+
attesterPrivateKeys: `0x${string}`[];
|
|
54
|
+
attesterAddresses: string[];
|
|
55
|
+
publisherPrivateKeys: `0x${string}`[];
|
|
56
|
+
publisherAddresses: string[];
|
|
57
|
+
web3SignerUrl: string;
|
|
58
|
+
deployL1ContractsValues: DeployAztecL1ContractsReturnType;
|
|
59
|
+
governanceProposer: GovernanceProposerContract;
|
|
60
|
+
/** Per-node initial keystore JSON (all 4 attesters, node's own publisher) for restore after reload test */
|
|
61
|
+
initialKeystoreJsons: string[];
|
|
62
|
+
private teardownBootstrap;
|
|
63
|
+
private haSequencersStarted;
|
|
64
|
+
private readonly stoppedHANodeIndexes;
|
|
65
|
+
getSignatureContext: () => {
|
|
66
|
+
chainId: number;
|
|
67
|
+
rollupAddress: EthAddress;
|
|
68
|
+
};
|
|
69
|
+
startHASequencers: () => Promise<void>;
|
|
70
|
+
sendTriggerTx: () => Promise<TxReceipt>;
|
|
71
|
+
stopHANode: (nodeIndex: number) => Promise<void>;
|
|
72
|
+
setup(): Promise<void>;
|
|
73
|
+
teardown(): Promise<void>;
|
|
74
|
+
/** Clean up database state between tests. */
|
|
75
|
+
resetDutiesTable(): Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFfZnVsbF9zZXR1cC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvc2VkL2hhL2hhX2Z1bGxfc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLGdCQUFnQixFQUEwQixNQUFNLG1CQUFtQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHckUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFhLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUlsRyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssU0FBUyxFQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDcEUsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNN0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQztBQUcxQixPQUFPLEVBQ0wsS0FBSyxnQkFBZ0IsRUFNdEIsTUFBTSw0QkFBNEIsQ0FBQztBQVFwQyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUduRSxlQUFPLE1BQU0sVUFBVSxJQUFJLENBQUM7QUFDNUIsZUFBTyxNQUFNLGVBQWUsSUFBSSxDQUFDO0FBQ2pDLGVBQU8sTUFBTSxjQUFjLElBQUksQ0FBQztBQVVoQyx3QkFBc0Isb0JBQW9CLENBQUMsTUFBTSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBVXBGO0FBRUQsd0JBQXNCLGVBQWUsQ0FDbkMsTUFBTSxFQUFFLFVBQVUsRUFDbEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsSUFBSSxFQUFFLFlBQVksR0FDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUdqQjtBQUVELHdCQUFzQixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQU0xRjtBQUVEOzs7O0dBSUc7QUFDSCxxQkFBYSxpQkFBaUI7SUFDNUIsTUFBTSxFQUFHLE1BQU0sQ0FBQztJQUNoQixNQUFNLEVBQUcsVUFBVSxDQUFDO0lBQ3BCLFlBQVksRUFBRyxZQUFZLENBQUM7SUFDNUIsWUFBWSxFQUFHLFlBQVksQ0FBQztJQUM1QixTQUFTLEVBQUcsU0FBUyxDQUFDO0lBQ3RCLE1BQU0sRUFBRyxlQUFlLENBQUM7SUFDekIsUUFBUSxFQUFHLFlBQVksRUFBRSxDQUFDO0lBQzFCLFlBQVksRUFBRyxnQkFBZ0IsQ0FBQztJQUNoQyxPQUFPLEVBQUUsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUVqQyxXQUFXLEVBQUcsSUFBSSxFQUFFLENBQUM7SUFDckIsY0FBYyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDcEMsY0FBYyxFQUFHLE1BQU0sRUFBRSxDQUFDO0lBQzFCLFFBQVEsRUFBRyxJQUFJLENBQUM7SUFDaEIsY0FBYyxFQUFHLGdCQUFnQixDQUFDO0lBQ2xDLG1CQUFtQixFQUFHLEtBQUssTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUN0QyxpQkFBaUIsRUFBRyxNQUFNLEVBQUUsQ0FBQztJQUM3QixvQkFBb0IsRUFBRyxLQUFLLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDdkMsa0JBQWtCLEVBQUcsTUFBTSxFQUFFLENBQUM7SUFDOUIsYUFBYSxFQUFHLE1BQU0sQ0FBQztJQUN2Qix1QkFBdUIsRUFBRyxnQ0FBZ0MsQ0FBQztJQUMzRCxrQkFBa0IsRUFBRywwQkFBMEIsQ0FBQztJQUNoRCwyR0FBMkc7SUFDM0csb0JBQW9CLEVBQUcsTUFBTSxFQUFFLENBQUM7SUFFaEMsT0FBTyxDQUFDLGlCQUFpQixDQUF1QztJQUNoRSxPQUFPLENBQUMsbUJBQW1CLENBQVM7SUFDcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBcUI7SUFFMUQsbUJBQW1COzs7TUFHaEI7SUFFSCxpQkFBaUIsc0JBYWY7SUFFRixhQUFhLDJCQUlYO0lBRUYsVUFBVSx1Q0FRUjtJQUVJLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBc08zQjtJQUVLLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBdUQ5QjtJQUVELDZDQUE2QztJQUN2QyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBT3RDO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ha_full_setup.d.ts","sourceRoot":"","sources":["../../../src/composed/ha/ha_full_setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared setup for the docker-compose HA full suite.
|
|
3
|
+
*
|
|
4
|
+
* Stands up the complete HA cluster used by `e2e_ha_full.parallel.test.ts` and
|
|
5
|
+
* `e2e_ha_distribute_work.test.ts`: a bootstrap RPC/P2P node plus NODE_COUNT in-proc
|
|
6
|
+
* `AztecNodeService` HA peers that share one PostgreSQL slashing-protection DB and a Web3Signer keystore.
|
|
7
|
+
* Requires the docker-compose HA suite (run_test.sh ha): live Postgres (DATABASE_URL) and Web3Signer
|
|
8
|
+
* sidecar.
|
|
9
|
+
*
|
|
10
|
+
* The suite is split across two files because the "distribute work" test kills nodes as it runs, leaving
|
|
11
|
+
* the cluster unusable; giving it its own file (its own cluster) removes the previous "must run last"
|
|
12
|
+
* ordering contract without changing what any test asserts.
|
|
13
|
+
*/ import { createAztecNodeService } from '@aztec/aztec-node';
|
|
14
|
+
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
15
|
+
import { NO_WAIT, getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
16
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
17
|
+
import { waitForTx } from '@aztec/aztec.js/node';
|
|
18
|
+
import { GovernanceProposerContract } from '@aztec/ethereum/contracts';
|
|
19
|
+
import { SecretValue } from '@aztec/foundation/config';
|
|
20
|
+
import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
21
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
22
|
+
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
23
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
24
|
+
import { TxStatus } from '@aztec/stdlib/tx';
|
|
25
|
+
import getPort, { portNumbers } from 'get-port';
|
|
26
|
+
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
27
|
+
import { tmpdir } from 'node:os';
|
|
28
|
+
import { join } from 'node:path';
|
|
29
|
+
import { Pool } from 'pg';
|
|
30
|
+
import { PIPELINING_SETUP_OPTS } from '../../fixtures/fixtures.js';
|
|
31
|
+
import { cleanupHADatabase, createHADatabaseConfig, createInitialValidatorsFromPrivateKeys, getAddressesFromPrivateKeys, setupHADatabase } from '../../fixtures/ha_setup.js';
|
|
32
|
+
import { getPrivateKeyFromIndex, setup } from '../../fixtures/utils.js';
|
|
33
|
+
import { createWeb3SignerKeystore, getWeb3SignerTestKeystoreDir, getWeb3SignerUrl, refreshWeb3Signer } from '../../fixtures/web3signer.js';
|
|
34
|
+
import { proveInteraction } from '../../test-wallet/utils.js';
|
|
35
|
+
export const NODE_COUNT = 5;
|
|
36
|
+
export const VALIDATOR_COUNT = 4;
|
|
37
|
+
export const COMMITTEE_SIZE = 4;
|
|
38
|
+
// Allocate p2p listen ports from above the OS ephemeral range (Linux default tops out at 60999) so they
|
|
39
|
+
// never collide with an ephemeral socket the OS may already have handed out -- e.g. the in-process prover
|
|
40
|
+
// node (which listens on p2pPort 0) or any outbound connection. The previous fixed 4040x ports sat inside
|
|
41
|
+
// the ephemeral range, so an ephemeral socket occasionally held a node's port at bind time, surfacing as
|
|
42
|
+
// libp2p ERR_NO_VALID_ADDRESSES and aborting beforeAll. get-port also locks each returned port briefly, so
|
|
43
|
+
// concurrent calls within this process never hand back the same one.
|
|
44
|
+
const getFreeP2PPort = ()=>getPort({
|
|
45
|
+
port: portNumbers(61000, 65535)
|
|
46
|
+
});
|
|
47
|
+
export async function registerTestContract(wallet) {
|
|
48
|
+
const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
|
|
49
|
+
constructorArgs: [],
|
|
50
|
+
constructorArtifact: undefined,
|
|
51
|
+
salt: Fr.ZERO,
|
|
52
|
+
publicKeys: undefined,
|
|
53
|
+
deployer: undefined
|
|
54
|
+
});
|
|
55
|
+
await wallet.registerContract(instance, TestContract.artifact);
|
|
56
|
+
return TestContract.at(instance.address, wallet);
|
|
57
|
+
}
|
|
58
|
+
export async function submitTriggerTx(wallet, testContract, from) {
|
|
59
|
+
const tx = await proveInteraction(wallet, testContract.methods.emit_nullifier(Fr.random()), {
|
|
60
|
+
from
|
|
61
|
+
});
|
|
62
|
+
return await tx.send({
|
|
63
|
+
wait: NO_WAIT
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export async function waitForTriggerTx(node, txHash) {
|
|
67
|
+
const receipt = await waitForTx(node, txHash, {
|
|
68
|
+
waitForStatus: TxStatus.CHECKPOINTED
|
|
69
|
+
});
|
|
70
|
+
if (!receipt.blockNumber) {
|
|
71
|
+
throw new Error('Trigger tx was checkpointed without a block number');
|
|
72
|
+
}
|
|
73
|
+
return receipt;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Owns the full HA cluster lifecycle and the shared helpers the two HA test files drive it with. Each
|
|
77
|
+
* test file constructs one instance and calls {@link setup} in `beforeAll` / {@link teardown} in
|
|
78
|
+
* `afterAll`; state fields are populated by {@link setup} and read directly by the tests.
|
|
79
|
+
*/ export class HaFullTestContext {
|
|
80
|
+
logger;
|
|
81
|
+
wallet;
|
|
82
|
+
ownerAddress;
|
|
83
|
+
testContract;
|
|
84
|
+
aztecNode;
|
|
85
|
+
config;
|
|
86
|
+
accounts;
|
|
87
|
+
dateProvider;
|
|
88
|
+
genesis;
|
|
89
|
+
haNodePools;
|
|
90
|
+
haNodeServices;
|
|
91
|
+
haKeystoreDirs;
|
|
92
|
+
mainPool;
|
|
93
|
+
databaseConfig;
|
|
94
|
+
attesterPrivateKeys;
|
|
95
|
+
attesterAddresses;
|
|
96
|
+
publisherPrivateKeys;
|
|
97
|
+
publisherAddresses;
|
|
98
|
+
web3SignerUrl;
|
|
99
|
+
deployL1ContractsValues;
|
|
100
|
+
governanceProposer;
|
|
101
|
+
/** Per-node initial keystore JSON (all 4 attesters, node's own publisher) for restore after reload test */ initialKeystoreJsons;
|
|
102
|
+
teardownBootstrap = async ()=>{};
|
|
103
|
+
haSequencersStarted = false;
|
|
104
|
+
stoppedHANodeIndexes = new Set();
|
|
105
|
+
getSignatureContext = ()=>({
|
|
106
|
+
chainId: this.config.l1ChainId,
|
|
107
|
+
rollupAddress: this.deployL1ContractsValues.l1ContractAddresses.rollupAddress
|
|
108
|
+
});
|
|
109
|
+
startHASequencers = async ()=>{
|
|
110
|
+
if (this.haSequencersStarted) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
await Promise.all(this.haNodeServices.map(async (service, i)=>{
|
|
114
|
+
this.logger.info(`Starting HA peer node ${i} sequencer`);
|
|
115
|
+
await service.getSequencer()?.start();
|
|
116
|
+
}));
|
|
117
|
+
this.haSequencersStarted = true;
|
|
118
|
+
this.logger.info('All HA peer sequencers started');
|
|
119
|
+
};
|
|
120
|
+
sendTriggerTx = async ()=>{
|
|
121
|
+
await this.startHASequencers();
|
|
122
|
+
const txHash = await submitTriggerTx(this.wallet, this.testContract, this.ownerAddress);
|
|
123
|
+
return await waitForTriggerTx(this.aztecNode, txHash);
|
|
124
|
+
};
|
|
125
|
+
stopHANode = async (nodeIndex)=>{
|
|
126
|
+
if (this.stoppedHANodeIndexes.has(nodeIndex)) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
this.logger.info(`Stopping HA peer node ${nodeIndex}`);
|
|
130
|
+
await this.haNodeServices[nodeIndex].stop();
|
|
131
|
+
this.stoppedHANodeIndexes.add(nodeIndex);
|
|
132
|
+
};
|
|
133
|
+
async setup() {
|
|
134
|
+
// Check required environment variables
|
|
135
|
+
if (!process.env.DATABASE_URL) {
|
|
136
|
+
throw new Error('DATABASE_URL environment variable must be set for HA tests');
|
|
137
|
+
}
|
|
138
|
+
this.web3SignerUrl = getWeb3SignerUrl();
|
|
139
|
+
if (!this.web3SignerUrl) {
|
|
140
|
+
throw new Error('WEB3_SIGNER_URL environment variable must be set for HA tests');
|
|
141
|
+
}
|
|
142
|
+
// Setup database configuration
|
|
143
|
+
this.databaseConfig = createHADatabaseConfig('ha-full-test');
|
|
144
|
+
// Connect to database (migrations already run by docker-compose entrypoint)
|
|
145
|
+
this.mainPool = setupHADatabase(this.databaseConfig.databaseUrl.getValue());
|
|
146
|
+
this.attesterPrivateKeys = Array.from({
|
|
147
|
+
length: VALIDATOR_COUNT
|
|
148
|
+
}, (_, i)=>`0x${getPrivateKeyFromIndex(i).toString('hex')}`);
|
|
149
|
+
this.publisherPrivateKeys = Array.from({
|
|
150
|
+
length: NODE_COUNT
|
|
151
|
+
}, (_, i)=>`0x${getPrivateKeyFromIndex(i + VALIDATOR_COUNT).toString('hex')}`);
|
|
152
|
+
const web3SignerDir = getWeb3SignerTestKeystoreDir();
|
|
153
|
+
const allKeys = [
|
|
154
|
+
...this.attesterPrivateKeys,
|
|
155
|
+
...this.publisherPrivateKeys
|
|
156
|
+
];
|
|
157
|
+
for (const key of allKeys){
|
|
158
|
+
await createWeb3SignerKeystore(web3SignerDir, key);
|
|
159
|
+
}
|
|
160
|
+
this.attesterAddresses = getAddressesFromPrivateKeys(this.attesterPrivateKeys);
|
|
161
|
+
this.publisherAddresses = getAddressesFromPrivateKeys(this.publisherPrivateKeys);
|
|
162
|
+
// Refresh Web3Signer to load all the keys (attesters + publishers)
|
|
163
|
+
await refreshWeb3Signer(this.web3SignerUrl, ...this.attesterAddresses, ...this.publisherAddresses);
|
|
164
|
+
// Create database pools for HA nodes
|
|
165
|
+
this.haNodePools = Array.from({
|
|
166
|
+
length: NODE_COUNT
|
|
167
|
+
}, ()=>{
|
|
168
|
+
const pool = new Pool({
|
|
169
|
+
connectionString: this.databaseConfig.databaseUrl.getValue()
|
|
170
|
+
});
|
|
171
|
+
// pg-pool re-emits idle-client errors on the pool; with no listener the emit throws - in production this
|
|
172
|
+
// crashes the validator process.
|
|
173
|
+
pool.on('error', (err)=>this.logger?.warn(`HA node pool error: ${err.message}`));
|
|
174
|
+
return pool;
|
|
175
|
+
});
|
|
176
|
+
const initialValidators = createInitialValidatorsFromPrivateKeys(this.attesterPrivateKeys);
|
|
177
|
+
const bootstrapP2PPort = await getFreeP2PPort();
|
|
178
|
+
({ teardown: this.teardownBootstrap, logger: this.logger, wallet: this.wallet, aztecNode: this.aztecNode, config: this.config, accounts: this.accounts, dateProvider: this.dateProvider, deployL1ContractsValues: this.deployL1ContractsValues, genesis: this.genesis } = await setup(// A single default initializerless account, created/funded/registered by setup with no on-chain
|
|
179
|
+
// deploy tx -- the bootstrap node can't build blocks (disableValidator), so the owner must be usable
|
|
180
|
+
// without one.
|
|
181
|
+
1, {
|
|
182
|
+
...PIPELINING_SETUP_OPTS,
|
|
183
|
+
automineL1Setup: true,
|
|
184
|
+
initialValidators,
|
|
185
|
+
sequencerPublisherPrivateKeys: [
|
|
186
|
+
new SecretValue(this.publisherPrivateKeys[0])
|
|
187
|
+
],
|
|
188
|
+
aztecTargetCommitteeSize: COMMITTEE_SIZE,
|
|
189
|
+
// The full HA docker/Web3Signer stack can still be joining and syncing after the shared
|
|
190
|
+
// 12s pipelining preset's 2.5s start window has closed. Keep real sequencing, but give
|
|
191
|
+
// HA validators enough time to pass the enforced build-start gate in CI.
|
|
192
|
+
aztecSlotDuration: 16,
|
|
193
|
+
// This suite validates HA coordination on tx-bearing checkpoints. Requiring one tx avoids a startup empty
|
|
194
|
+
// checkpoint from occupying the shared HA publisher while the trigger tx is still being prepared.
|
|
195
|
+
minTxsPerBlock: 1,
|
|
196
|
+
archiverPollingIntervalMS: 200,
|
|
197
|
+
sequencerPollingIntervalMS: 200,
|
|
198
|
+
worldStateBlockCheckIntervalMS: 200,
|
|
199
|
+
blockCheckIntervalMS: 200,
|
|
200
|
+
startProverNode: true,
|
|
201
|
+
// The bootstrap node is only an RPC/P2P anchor. HA validators are the first block producers in this suite.
|
|
202
|
+
disableValidator: true,
|
|
203
|
+
// Enable P2P for transaction gossip
|
|
204
|
+
p2pEnabled: true,
|
|
205
|
+
// Bind the bootstrap node above the ephemeral range too (see getFreeP2PPort), so it can't lose
|
|
206
|
+
// its port to an ephemeral socket and abort the whole suite before any HA node is created. Set
|
|
207
|
+
// the broadcast port explicitly to the same value: discv5 otherwise defaults p2pBroadcastPort to
|
|
208
|
+
// p2pPort by mutating this config object in place, and that mutated value would then leak into the
|
|
209
|
+
// HA nodes' configs below (built by spreading `config`), making them advertise the wrong port.
|
|
210
|
+
p2pPort: bootstrapP2PPort,
|
|
211
|
+
p2pBroadcastPort: bootstrapP2PPort,
|
|
212
|
+
// Enable slashing for testing governance + slashing vote coordination
|
|
213
|
+
slasherEnabled: true,
|
|
214
|
+
slashingRoundSizeInEpochs: 1,
|
|
215
|
+
slashingQuorum: 17
|
|
216
|
+
}, {
|
|
217
|
+
syncChainTip: 'proven'
|
|
218
|
+
}));
|
|
219
|
+
this.ownerAddress = this.accounts[0];
|
|
220
|
+
this.testContract = await registerTestContract(this.wallet);
|
|
221
|
+
if (!this.dateProvider) {
|
|
222
|
+
throw new Error('dateProvider must be provided by setup for HA tests');
|
|
223
|
+
}
|
|
224
|
+
this.logger.info('Bootstrap node setup complete; funded initializerless account and test contract registered locally');
|
|
225
|
+
// Get bootstrap node's P2P ENR for HA nodes to connect to
|
|
226
|
+
const bootstrapNodeEnr = await this.aztecNode.getEncodedEnr();
|
|
227
|
+
if (!bootstrapNodeEnr) {
|
|
228
|
+
throw new Error('Failed to get bootstrap node ENR - P2P may not be enabled');
|
|
229
|
+
}
|
|
230
|
+
this.logger.info(`Bootstrap node ENR: ${bootstrapNodeEnr}`);
|
|
231
|
+
// L1 contract wrappers for querying votes
|
|
232
|
+
this.governanceProposer = new GovernanceProposerContract(this.deployL1ContractsValues.l1Client, this.deployL1ContractsValues.l1ContractAddresses.governanceProposerAddress.toString());
|
|
233
|
+
this.logger.info('L1 contract wrappers initialized');
|
|
234
|
+
this.haNodeServices = [];
|
|
235
|
+
this.haKeystoreDirs = [];
|
|
236
|
+
this.logger.info(`Starting ${NODE_COUNT} HA peer nodes...`);
|
|
237
|
+
// Per-node keystore: all attesters but only this node's publisher to avoid nonce conflicts.
|
|
238
|
+
// When keyStoreDirectory is set the node loads validators/publishers from file only, so we omit them from config.
|
|
239
|
+
this.initialKeystoreJsons = [];
|
|
240
|
+
for(let i = 0; i < NODE_COUNT; i++){
|
|
241
|
+
const nodeId = `${this.databaseConfig.nodeId}-${i + 1}`;
|
|
242
|
+
this.logger.info(`Starting HA peer node ${i} with nodeId: ${nodeId}`);
|
|
243
|
+
const keystoreContent = {
|
|
244
|
+
schemaVersion: 1,
|
|
245
|
+
validators: [
|
|
246
|
+
{
|
|
247
|
+
attester: this.attesterAddresses,
|
|
248
|
+
feeRecipient: AztecAddress.ZERO.toString(),
|
|
249
|
+
coinbase: EthAddress.fromString(this.attesterAddresses[0]).toChecksumString(),
|
|
250
|
+
remoteSigner: this.web3SignerUrl,
|
|
251
|
+
publisher: [
|
|
252
|
+
this.publisherAddresses[i]
|
|
253
|
+
]
|
|
254
|
+
}
|
|
255
|
+
]
|
|
256
|
+
};
|
|
257
|
+
const keystoreJson = JSON.stringify(keystoreContent, null, 2);
|
|
258
|
+
this.initialKeystoreJsons.push(keystoreJson);
|
|
259
|
+
const keystoreDir = await mkdtemp(join(tmpdir(), `ha-keystore-${i}-`));
|
|
260
|
+
this.haKeystoreDirs.push(keystoreDir);
|
|
261
|
+
await writeFile(join(keystoreDir, 'keystore.json'), keystoreJson);
|
|
262
|
+
const dataDirectory = this.config.dataDirectory ? `${this.config.dataDirectory}-${i}` : undefined;
|
|
263
|
+
const nodeP2PPort = await getFreeP2PPort();
|
|
264
|
+
const nodeConfig = {
|
|
265
|
+
...this.config,
|
|
266
|
+
nodeId,
|
|
267
|
+
keyStoreDirectory: keystoreDir,
|
|
268
|
+
// Ensure txs are included in proposals to test full signing path
|
|
269
|
+
publishTxsWithProposals: true,
|
|
270
|
+
dataDirectory,
|
|
271
|
+
databaseUrl: this.databaseConfig.databaseUrl,
|
|
272
|
+
pollingIntervalMs: this.databaseConfig.pollingIntervalMs,
|
|
273
|
+
peerSigningTimeoutMs: this.databaseConfig.peerSigningTimeoutMs,
|
|
274
|
+
maxStuckDutiesAgeMs: this.databaseConfig.maxStuckDutiesAgeMs,
|
|
275
|
+
haSigningEnabled: true,
|
|
276
|
+
disableValidator: false,
|
|
277
|
+
// Enable P2P for transaction and block gossip
|
|
278
|
+
p2pEnabled: true,
|
|
279
|
+
// Each HA node gets its own free port above the ephemeral range. Override the broadcast port too:
|
|
280
|
+
// `...config` carries the bootstrap node's broadcast port (discv5 sets it in place), which would
|
|
281
|
+
// otherwise make every HA node advertise the bootstrap's port instead of its own.
|
|
282
|
+
p2pPort: nodeP2PPort,
|
|
283
|
+
p2pBroadcastPort: nodeP2PPort,
|
|
284
|
+
// Connect to bootstrap node for tx gossip
|
|
285
|
+
bootstrapNodes: [
|
|
286
|
+
bootstrapNodeEnr
|
|
287
|
+
],
|
|
288
|
+
web3SignerUrl: this.web3SignerUrl
|
|
289
|
+
};
|
|
290
|
+
const nodeService = await withLoggerBindings({
|
|
291
|
+
actor: `HA-${i}`
|
|
292
|
+
}, async ()=>{
|
|
293
|
+
return await createAztecNodeService(nodeConfig, {
|
|
294
|
+
dateProvider: this.dateProvider
|
|
295
|
+
}, {
|
|
296
|
+
genesis: this.genesis,
|
|
297
|
+
dontStartSequencer: true
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
this.haNodeServices.push(nodeService);
|
|
301
|
+
this.logger.info(`HA peer node ${i} started successfully`);
|
|
302
|
+
}
|
|
303
|
+
this.logger.info(`All ${NODE_COUNT} HA peer nodes started and coordinating via PostgreSQL database`);
|
|
304
|
+
this.logger.info('Waiting for HA peer nodes to join the tx gossip mesh');
|
|
305
|
+
await retryUntil(async ()=>{
|
|
306
|
+
const meshStates = await Promise.all(this.haNodeServices.map(async (service, nodeIndex)=>{
|
|
307
|
+
const p2p = service.getP2P();
|
|
308
|
+
const [peers, txMeshPeerCount] = await Promise.all([
|
|
309
|
+
p2p.getPeers(),
|
|
310
|
+
p2p.getGossipMeshPeerCount(TopicType.tx)
|
|
311
|
+
]);
|
|
312
|
+
return {
|
|
313
|
+
nodeIndex,
|
|
314
|
+
peerCount: peers.length,
|
|
315
|
+
txMeshPeerCount
|
|
316
|
+
};
|
|
317
|
+
}));
|
|
318
|
+
this.logger.debug('HA tx gossip mesh status', {
|
|
319
|
+
meshStates
|
|
320
|
+
});
|
|
321
|
+
return meshStates.every(({ peerCount, txMeshPeerCount })=>peerCount > 0 && txMeshPeerCount > 0) ? true : undefined;
|
|
322
|
+
}, 'HA tx gossip mesh readiness', 60, 1);
|
|
323
|
+
// The owner is an initializerless account, so it needs no deployment tx -- it was funded at genesis
|
|
324
|
+
// and registered during setup, and is ready to transact as soon as the HA nodes start building blocks.
|
|
325
|
+
this.logger.info(`Test account ready at ${this.ownerAddress}`);
|
|
326
|
+
}
|
|
327
|
+
async teardown() {
|
|
328
|
+
// Stop all sequencers before tearing down the nodes: a sequencer stop awaits its in-flight
|
|
329
|
+
// iteration, which can spend tens of seconds finishing a vote or checkpoint publish on L1.
|
|
330
|
+
// Stops must be awaited fully — jest runs without forceExit, so a node abandoned mid-stop
|
|
331
|
+
// outlives the test environment and keeps the worker process alive until the CI job timeout.
|
|
332
|
+
// The dateProvider reset must wait until nodes are stopped: it rewinds the shared clock from
|
|
333
|
+
// chain time to wall time (minutes apart after the automine deploy burst), and any publisher
|
|
334
|
+
// deadline armed against the rewound clock would block shutdown until wall time catches up.
|
|
335
|
+
if (this.haNodeServices) {
|
|
336
|
+
await Promise.allSettled(this.haNodeServices.map(async (service, i)=>{
|
|
337
|
+
try {
|
|
338
|
+
await service.getSequencer()?.stop();
|
|
339
|
+
} catch (error) {
|
|
340
|
+
this.logger.error(`Failed to stop sequencer of HA peer node ${i}: ${error}`);
|
|
341
|
+
}
|
|
342
|
+
}));
|
|
343
|
+
await Promise.allSettled(this.haNodeServices.map((_, i)=>this.stopHANode(i).catch((error)=>{
|
|
344
|
+
this.logger.error(`Failed to stop HA peer node ${i}: ${error}`);
|
|
345
|
+
})));
|
|
346
|
+
}
|
|
347
|
+
this.dateProvider?.reset();
|
|
348
|
+
// Cleanup HA keystore temp directories
|
|
349
|
+
if (this.haKeystoreDirs) {
|
|
350
|
+
for(let i = 0; i < this.haKeystoreDirs.length; i++){
|
|
351
|
+
try {
|
|
352
|
+
await rm(this.haKeystoreDirs[i], {
|
|
353
|
+
recursive: true
|
|
354
|
+
});
|
|
355
|
+
} catch (error) {
|
|
356
|
+
this.logger.error(`Failed to remove HA keystore dir ${i}: ${error}`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// Cleanup HA resources (database pools, etc.)
|
|
361
|
+
if (this.haNodePools) {
|
|
362
|
+
for (const pool of this.haNodePools){
|
|
363
|
+
try {
|
|
364
|
+
await pool.end();
|
|
365
|
+
} catch (error) {
|
|
366
|
+
this.logger.error(`Failed to close HA node pool: ${error}`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
await cleanupHADatabase(this.mainPool, this.logger);
|
|
371
|
+
await this.mainPool.end();
|
|
372
|
+
// Cleanup bootstrap node and test infrastructure (this cleans up the shared data directory)
|
|
373
|
+
await this.teardownBootstrap();
|
|
374
|
+
}
|
|
375
|
+
/** Clean up database state between tests. */ async resetDutiesTable() {
|
|
376
|
+
try {
|
|
377
|
+
await this.mainPool.query('DELETE FROM validator_duties');
|
|
378
|
+
} catch (error) {
|
|
379
|
+
// Ignore cleanup errors (table might not exist on first run failure)
|
|
380
|
+
this.logger?.warn(`Failed to clean up validator_duties: ${error}`);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|