@aztec/end-to-end 0.0.1-commit.b655e406 → 0.0.1-commit.b8a057fa
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 +217 -14
- 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/automine/contracts/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/automine/contracts/fixtures/storage_proof_fixture.js +120 -0
- package/dest/automine/delivery/onchain_delivery_harness.d.ts +17 -0
- package/dest/automine/delivery/onchain_delivery_harness.d.ts.map +1 -0
- package/dest/automine/delivery/onchain_delivery_harness.js +123 -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/automine/token/blacklist_token_contract_test.js +166 -0
- 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/automine/token/token_contract_test.js +119 -0
- 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 +17 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +40 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +26 -20
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +159 -140
- 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/client_flows/data_extractor.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.js +8 -27
- package/dest/bench/utils.d.ts +10 -9
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +126 -23
- 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/{e2e_multi_validator/utils.js → composed/web3signer/multi_validator_keystore_utils.js} +1 -1
- 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 +27 -29
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +156 -156
- 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 +83 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +86 -3
- package/dest/fixtures/get_acvm_config.d.ts +1 -1
- package/dest/fixtures/get_acvm_config.js +1 -1
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/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 +119 -0
- package/dest/fixtures/index.d.ts +3 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +2 -0
- package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +2 -2
- package/dest/fixtures/logging.d.ts +1 -1
- package/dest/fixtures/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 +269 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +688 -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 +60 -41
- 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/token_utils.d.ts +26 -5
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +33 -9
- package/dest/fixtures/utils.d.ts +5 -192
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -648
- package/dest/fixtures/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/fixtures/web3signer.d.ts +1 -1
- package/dest/fixtures/web3signer.js +1 -1
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/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/index.d.ts +1 -1
- 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/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/p2p/p2p_network.d.ts +325 -0
- package/dest/p2p/p2p_network.d.ts.map +1 -0
- package/dest/p2p/p2p_network.js +389 -0
- package/dest/p2p/reqresp/utils.d.ts +19 -0
- package/dest/p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/p2p/reqresp/utils.js +193 -0
- 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/quality_of_service/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +11 -8
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +45 -40
- package/dest/shared/gas_portal_test_harness.d.ts +9 -6
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +28 -16
- package/dest/shared/index.d.ts +3 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.d.ts +1 -1
- 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 +19 -14
- package/dest/shared/timing_env.d.js +5 -0
- package/dest/shared/timing_env.js +365 -0
- package/dest/shared/uniswap_l1_l2.d.ts +3 -27
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +86 -54
- 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/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +11 -4
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +33 -19
- 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/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/single-node/cross-chain/cross_chain_messaging_test.js +209 -0
- 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/single-node/fees/bridging_race.notest.d.ts +2 -0
- package/dest/single-node/fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.js +21 -10
- package/dest/single-node/fees/fees_test.d.ts +93 -0
- package/dest/single-node/fees/fees_test.d.ts.map +1 -0
- package/dest/single-node/fees/fees_test.js +274 -0
- 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 +360 -0
- package/dest/single-node/single_node_test_context.d.ts.map +1 -0
- package/dest/single-node/single_node_test_context.js +833 -0
- package/dest/spartan/setup_test_wallets.d.ts +18 -6
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +169 -30
- package/dest/spartan/tx_metrics.d.ts +111 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +507 -0
- 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 -218
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -749
- package/dest/test-wallet/test_wallet.d.ts +105 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +323 -0
- package/dest/test-wallet/utils.d.ts +76 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +126 -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 +56 -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 +4 -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 +57 -47
- package/src/automine/README.md +60 -0
- package/src/automine/automine_test_context.ts +153 -0
- package/src/automine/contracts/fixtures/storage_proof.json +915 -0
- package/src/automine/contracts/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/automine/contracts/fixtures/storage_proof_fixture.ts +173 -0
- package/src/automine/delivery/onchain_delivery_harness.ts +177 -0
- package/src/automine/token/blacklist_token_contract_test.ts +208 -0
- package/src/automine/token/token_contract_test.ts +146 -0
- package/src/automine/token/token_test_helpers.ts +138 -0
- package/src/bench/client_flows/benchmark.ts +45 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +227 -211
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +7 -28
- package/src/bench/utils.ts +144 -25
- package/src/composed/ha/ha_full_setup.ts +466 -0
- package/src/{e2e_multi_validator/utils.ts → composed/web3signer/multi_validator_keystore_utils.ts} +1 -1
- 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 +175 -214
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +110 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +192 -0
- package/src/fixtures/index.ts +2 -0
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +987 -0
- package/src/fixtures/setup_p2p_test.ts +72 -58
- package/src/fixtures/timing.ts +97 -0
- package/src/fixtures/token_utils.ts +47 -11
- package/src/fixtures/utils.ts +26 -947
- package/src/fixtures/wait_helpers.ts +333 -0
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +106 -0
- package/src/guides/up_quick_start.sh +8 -5
- package/src/infra/README.md +12 -0
- package/src/install_legacy_contracts.cjs +75 -0
- package/src/legacy-jest-resolver.cjs +112 -0
- package/src/multi-node/README.md +95 -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/p2p/p2p_network.ts +542 -0
- package/src/p2p/reqresp/utils.ts +263 -0
- package/src/p2p/shared.ts +329 -0
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +51 -43
- package/src/shared/gas_portal_test_harness.ts +36 -18
- package/src/shared/index.ts +2 -1
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +22 -19
- package/src/shared/timing_env.d.mts +39 -0
- package/src/shared/timing_env.mjs +363 -0
- package/src/shared/uniswap_l1_l2.ts +136 -115
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +40 -20
- package/src/simulators/token_simulator.ts +6 -30
- package/src/single-node/README.md +60 -0
- package/src/single-node/cross-chain/cross_chain_messaging_test.ts +302 -0
- package/src/single-node/cross-chain/message_test_helpers.ts +125 -0
- package/src/{e2e_fees → single-node/fees}/bridging_race.notest.ts +23 -15
- package/src/single-node/fees/fees_test.ts +368 -0
- 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 +1041 -0
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +243 -32
- package/src/spartan/tx_metrics.ts +460 -0
- 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 -942
- package/src/test-wallet/test_wallet.ts +429 -0
- package/src/test-wallet/utils.ts +205 -0
- package/src/test-wallet/wallet_worker_script.ts +66 -0
- package/src/test-wallet/worker_wallet.ts +214 -0
- package/src/test-wallet/worker_wallet_schema.ts +14 -0
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -54
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +0 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +0 -185
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +0 -41
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +0 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +0 -107
- 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 -45
- package/dest/e2e_epochs/epochs_test.d.ts +0 -92
- package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
- package/dest/e2e_epochs/epochs_test.js +0 -336
- package/dest/e2e_fees/bridging_race.notest.d.ts +0 -2
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.d.ts +0 -84
- package/dest/e2e_fees/fees_test.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.js +0 -260
- package/dest/e2e_l1_publisher/write_json.d.ts +0 -10
- 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 -29
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +0 -63
- 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 -135
- package/dest/e2e_p2p/p2p_network.d.ts +0 -108
- package/dest/e2e_p2p/p2p_network.d.ts.map +0 -1
- package/dest/e2e_p2p/p2p_network.js +0 -318
- package/dest/e2e_p2p/shared.d.ts +0 -46
- package/dest/e2e_p2p/shared.d.ts.map +0 -1
- package/dest/e2e_p2p/shared.js +0 -183
- package/dest/e2e_token_contract/token_contract_test.d.ts +0 -35
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +0 -1
- package/dest/e2e_token_contract/token_contract_test.js +0 -126
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/dest/fixtures/snapshot_manager.d.ts +0 -95
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -505
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +0 -256
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +0 -178
- package/src/e2e_deploy_contract/deploy_test.ts +0 -78
- package/src/e2e_epochs/epochs_test.ts +0 -437
- package/src/e2e_fees/fees_test.ts +0 -378
- package/src/e2e_l1_publisher/write_json.ts +0 -76
- package/src/e2e_nested_contract/nested_contract_test.ts +0 -95
- package/src/e2e_p2p/inactivity_slash_test.ts +0 -178
- package/src/e2e_p2p/p2p_network.ts +0 -472
- package/src/e2e_p2p/shared.ts +0 -282
- package/src/e2e_token_contract/token_contract_test.ts +0 -167
- package/src/fixtures/setup_l1_contracts.ts +0 -26
- package/src/fixtures/snapshot_manager.ts +0 -665
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
export type PromteheusClientOptions = {
|
|
2
|
+
server: URL;
|
|
3
|
+
};
|
|
4
|
+
|
|
5
|
+
export class PrometheusClient {
|
|
6
|
+
constructor(
|
|
7
|
+
private config: PromteheusClientOptions,
|
|
8
|
+
private httpClient: typeof fetch = fetch,
|
|
9
|
+
) {}
|
|
10
|
+
|
|
11
|
+
public async querySingleValue(query: string, time = new Date()): Promise<number> {
|
|
12
|
+
const resp = await this.queryRaw(query, time);
|
|
13
|
+
if (resp.status === 'success') {
|
|
14
|
+
if (resp.data.resultType === 'vector') {
|
|
15
|
+
if (resp.data.result.length === 0) {
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
const [_, value] = resp.data.result[0].value;
|
|
19
|
+
return parseFloat(value);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
throw new TypeError('Unsupported response body', { cause: JSON.stringify(resp) });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public queryRaw(query: string, time = new Date()): Promise<PrometheusResponse> {
|
|
27
|
+
const searchParams = new URLSearchParams();
|
|
28
|
+
searchParams.set('query', query);
|
|
29
|
+
searchParams.set('time', String(Math.trunc(time.getTime() / 1000)));
|
|
30
|
+
searchParams.set('limit', '10');
|
|
31
|
+
|
|
32
|
+
return this.callPrometheus('query', searchParams);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public queryRangeRaw(
|
|
36
|
+
query: string,
|
|
37
|
+
step: PrometheusDuration,
|
|
38
|
+
start: Date,
|
|
39
|
+
end = new Date(),
|
|
40
|
+
): Promise<PrometheusResponse> {
|
|
41
|
+
const searchParams = new URLSearchParams();
|
|
42
|
+
searchParams.set('query', query);
|
|
43
|
+
searchParams.set('step', step);
|
|
44
|
+
searchParams.set('start', String(Math.trunc(start.getTime() / 1000)));
|
|
45
|
+
searchParams.set('end', String(Math.trunc(end.getTime() / 1000)));
|
|
46
|
+
searchParams.set('limit', '10');
|
|
47
|
+
|
|
48
|
+
return this.callPrometheus('query_range', searchParams);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private async callPrometheus(api: string, searchParams: URLSearchParams): Promise<PrometheusResponse> {
|
|
52
|
+
const url = new URL('api/v1/' + api, this.config.server);
|
|
53
|
+
for (const [name, value] of searchParams) {
|
|
54
|
+
url.searchParams.append(name, value);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const resp = await this.httpClient(url, { method: 'GET' });
|
|
58
|
+
if (!resp.ok || resp.status !== 200) {
|
|
59
|
+
throw new Error('Invalid HTTP response from Prometheus', {
|
|
60
|
+
cause: {
|
|
61
|
+
url,
|
|
62
|
+
status: resp.status,
|
|
63
|
+
statusText: resp.statusText,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const body = await resp.json();
|
|
69
|
+
if ('status' in body && (body.status === 'error' || body.status === 'success')) {
|
|
70
|
+
return body;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
throw new Error('Invalid response from Prometheus', {
|
|
74
|
+
cause: {
|
|
75
|
+
url,
|
|
76
|
+
body,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export type PrometheusDuration = `${number}s` | `${number}m` | `${number}h`;
|
|
83
|
+
|
|
84
|
+
export type PrometheusData =
|
|
85
|
+
| {
|
|
86
|
+
resultType: 'vector';
|
|
87
|
+
result: Array<{
|
|
88
|
+
metric: unknown;
|
|
89
|
+
value: [unixTimestamp: number, value: string];
|
|
90
|
+
}>;
|
|
91
|
+
}
|
|
92
|
+
| {
|
|
93
|
+
resultType: 'matrix';
|
|
94
|
+
result: Array<{
|
|
95
|
+
metric: unknown;
|
|
96
|
+
values: [unixTimestamp: number, value: string];
|
|
97
|
+
}>;
|
|
98
|
+
}
|
|
99
|
+
| {
|
|
100
|
+
resultType: 'scalar' | 'string';
|
|
101
|
+
result: unknown;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export type PrometheusResponse =
|
|
105
|
+
| {
|
|
106
|
+
status: 'error';
|
|
107
|
+
errorType: string;
|
|
108
|
+
error: string;
|
|
109
|
+
}
|
|
110
|
+
| {
|
|
111
|
+
status: 'success';
|
|
112
|
+
data: PrometheusData;
|
|
113
|
+
};
|
|
@@ -13,16 +13,20 @@ import type { AztecNode } from '@aztec/aztec.js/node';
|
|
|
13
13
|
import type { SiblingPath } from '@aztec/aztec.js/trees';
|
|
14
14
|
import type { TxReceipt } from '@aztec/aztec.js/tx';
|
|
15
15
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import type {
|
|
16
|
+
import { OutboxContract } from '@aztec/ethereum/contracts';
|
|
17
|
+
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
18
|
+
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
19
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
20
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
19
21
|
import { TestERC20Abi, TokenPortalAbi, TokenPortalBytecode } from '@aztec/l1-artifacts';
|
|
20
22
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
21
23
|
import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
|
|
22
24
|
|
|
23
25
|
import { type Hex, getContract } from 'viem';
|
|
24
26
|
|
|
27
|
+
import { testSpan } from '../fixtures/timing.js';
|
|
25
28
|
import { mintTokensToPrivate } from '../fixtures/token_utils.js';
|
|
29
|
+
import { waitForL1ToL2MessageSeen } from './wait_for_l1_to_l2_message.js';
|
|
26
30
|
|
|
27
31
|
/**
|
|
28
32
|
* Deploy L1 token and portal, initialize portal, deploy a non native l2 token contract, its L2 bridge contract and attach is to the portal.
|
|
@@ -40,6 +44,7 @@ export async function deployAndInitializeTokenAndBridgeContracts(
|
|
|
40
44
|
rollupRegistryAddress: EthAddress,
|
|
41
45
|
owner: AztecAddress,
|
|
42
46
|
underlyingERC20Address: EthAddress,
|
|
47
|
+
predeployedTokenPortalAddress?: EthAddress,
|
|
43
48
|
): Promise<{
|
|
44
49
|
/**
|
|
45
50
|
* The L2 token contract instance.
|
|
@@ -62,8 +67,9 @@ export async function deployAndInitializeTokenAndBridgeContracts(
|
|
|
62
67
|
*/
|
|
63
68
|
underlyingERC20: any;
|
|
64
69
|
}> {
|
|
65
|
-
//
|
|
66
|
-
const
|
|
70
|
+
// Deploy the token portal, unless it was already deployed before the node started (under automine).
|
|
71
|
+
const tokenPortalAddress =
|
|
72
|
+
predeployedTokenPortalAddress ?? (await deployL1Contract(l1Client, TokenPortalAbi, TokenPortalBytecode)).address;
|
|
67
73
|
const tokenPortal = getContract({
|
|
68
74
|
address: tokenPortalAddress.toString(),
|
|
69
75
|
abi: TokenPortalAbi,
|
|
@@ -71,26 +77,30 @@ export async function deployAndInitializeTokenAndBridgeContracts(
|
|
|
71
77
|
});
|
|
72
78
|
|
|
73
79
|
// deploy l2 token
|
|
74
|
-
const token = await
|
|
75
|
-
.
|
|
76
|
-
|
|
80
|
+
const { contract: token } = await testSpan('deploy:token', () =>
|
|
81
|
+
TokenContract.deploy(wallet, owner, 'TokenName', 'TokenSymbol', 18).send({
|
|
82
|
+
from: owner,
|
|
83
|
+
}),
|
|
84
|
+
);
|
|
77
85
|
|
|
78
86
|
// deploy l2 token bridge and attach to the portal
|
|
79
|
-
const bridge = await
|
|
80
|
-
.
|
|
81
|
-
|
|
87
|
+
const { contract: bridge } = await testSpan('deploy:bridge', () =>
|
|
88
|
+
TokenBridgeContract.deploy(wallet, token.address, tokenPortalAddress).send({
|
|
89
|
+
from: owner,
|
|
90
|
+
}),
|
|
91
|
+
);
|
|
82
92
|
|
|
83
|
-
if ((await token.methods.get_admin().simulate({ from: owner })) !== owner.toBigInt()) {
|
|
93
|
+
if ((await token.methods.get_admin().simulate({ from: owner })).result !== owner.toBigInt()) {
|
|
84
94
|
throw new Error(`Token admin is not ${owner}`);
|
|
85
95
|
}
|
|
86
96
|
|
|
87
|
-
if (!(await bridge.methods.get_config().simulate({ from: owner })).token.equals(token.address)) {
|
|
97
|
+
if (!(await bridge.methods.get_config().simulate({ from: owner })).result.token.equals(token.address)) {
|
|
88
98
|
throw new Error(`Bridge token is not ${token.address}`);
|
|
89
99
|
}
|
|
90
100
|
|
|
91
101
|
// make the bridge a minter on the token:
|
|
92
|
-
await token.methods.set_minter(bridge.address, true).send({ from: owner })
|
|
93
|
-
if ((await token.methods.is_minter(bridge.address).simulate({ from: owner })) === 1n) {
|
|
102
|
+
await token.methods.set_minter(bridge.address, true).send({ from: owner });
|
|
103
|
+
if ((await token.methods.is_minter(bridge.address).simulate({ from: owner })).result === 1n) {
|
|
94
104
|
throw new Error(`Bridge is not a minter`);
|
|
95
105
|
}
|
|
96
106
|
|
|
@@ -132,6 +142,7 @@ export class CrossChainTestHarness {
|
|
|
132
142
|
ownerAddress: AztecAddress,
|
|
133
143
|
logger: Logger,
|
|
134
144
|
underlyingERC20Address: EthAddress,
|
|
145
|
+
predeployedTokenPortalAddress?: EthAddress,
|
|
135
146
|
): Promise<CrossChainTestHarness> {
|
|
136
147
|
const ethAccount = EthAddress.fromString((await l1Client.getAddresses())[0]);
|
|
137
148
|
const l1ContractAddresses = (await aztecNode.getNodeInfo()).l1ContractAddresses;
|
|
@@ -144,6 +155,7 @@ export class CrossChainTestHarness {
|
|
|
144
155
|
l1ContractAddresses.registryAddress,
|
|
145
156
|
ownerAddress,
|
|
146
157
|
underlyingERC20Address,
|
|
158
|
+
predeployedTokenPortalAddress,
|
|
147
159
|
);
|
|
148
160
|
logger.info('Deployed and initialized token, portal and its bridge.');
|
|
149
161
|
|
|
@@ -164,6 +176,7 @@ export class CrossChainTestHarness {
|
|
|
164
176
|
|
|
165
177
|
private readonly l1TokenManager: L1TokenManager;
|
|
166
178
|
private readonly l1TokenPortalManager: L1TokenPortalManager;
|
|
179
|
+
public readonly outboxContract: OutboxContract;
|
|
167
180
|
|
|
168
181
|
constructor(
|
|
169
182
|
/** Aztec node instance. */
|
|
@@ -204,6 +217,7 @@ export class CrossChainTestHarness {
|
|
|
204
217
|
this.logger,
|
|
205
218
|
);
|
|
206
219
|
this.l1TokenManager = this.l1TokenPortalManager.getTokenManager();
|
|
220
|
+
this.outboxContract = new OutboxContract(this.l1Client, this.l1ContractAddresses.outboxAddress);
|
|
207
221
|
}
|
|
208
222
|
|
|
209
223
|
async mintTokensOnL1(amount: bigint) {
|
|
@@ -232,19 +246,20 @@ export class CrossChainTestHarness {
|
|
|
232
246
|
|
|
233
247
|
async mintTokensPublicOnL2(amount: bigint) {
|
|
234
248
|
this.logger.info('Minting tokens on L2 publicly');
|
|
235
|
-
await
|
|
249
|
+
await testSpan('tx:mint', () =>
|
|
250
|
+
this.l2Token.methods.mint_to_public(this.ownerAddress, amount).send({ from: this.ownerAddress }),
|
|
251
|
+
);
|
|
236
252
|
}
|
|
237
253
|
|
|
238
254
|
async mintTokensPrivateOnL2(amount: bigint) {
|
|
239
|
-
await mintTokensToPrivate(this.l2Token, this.ownerAddress, this.ownerAddress, amount);
|
|
255
|
+
await testSpan('tx:mint', () => mintTokensToPrivate(this.l2Token, this.ownerAddress, this.ownerAddress, amount));
|
|
240
256
|
}
|
|
241
257
|
|
|
242
258
|
async sendL2PublicTransfer(transferAmount: bigint, receiverAddress: AztecAddress) {
|
|
243
259
|
// send a transfer tx to force through rollup with the message included
|
|
244
260
|
await this.l2Token.methods
|
|
245
261
|
.transfer_in_public(this.ownerAddress, receiverAddress, transferAmount, 0)
|
|
246
|
-
.send({ from: this.ownerAddress })
|
|
247
|
-
.wait();
|
|
262
|
+
.send({ from: this.ownerAddress });
|
|
248
263
|
}
|
|
249
264
|
|
|
250
265
|
async consumeMessageOnAztecAndMintPrivately(
|
|
@@ -254,8 +269,7 @@ export class CrossChainTestHarness {
|
|
|
254
269
|
const { recipient, claimAmount, claimSecret: secretForL2MessageConsumption, messageLeafIndex } = claim;
|
|
255
270
|
await this.l2Bridge.methods
|
|
256
271
|
.claim_private(recipient, claimAmount, secretForL2MessageConsumption, messageLeafIndex)
|
|
257
|
-
.send({ from: this.ownerAddress })
|
|
258
|
-
.wait();
|
|
272
|
+
.send({ from: this.ownerAddress });
|
|
259
273
|
}
|
|
260
274
|
|
|
261
275
|
async consumeMessageOnAztecAndMintPublicly(
|
|
@@ -265,34 +279,31 @@ export class CrossChainTestHarness {
|
|
|
265
279
|
const { claimAmount, claimSecret, messageLeafIndex } = claim;
|
|
266
280
|
await this.l2Bridge.methods
|
|
267
281
|
.claim_public(this.ownerAddress, claimAmount, claimSecret, messageLeafIndex)
|
|
268
|
-
.send({ from: this.ownerAddress })
|
|
269
|
-
.wait();
|
|
282
|
+
.send({ from: this.ownerAddress });
|
|
270
283
|
}
|
|
271
284
|
|
|
272
285
|
async withdrawPrivateFromAztecToL1(
|
|
273
286
|
withdrawAmount: bigint,
|
|
274
287
|
authwitNonce: Fr = Fr.ZERO,
|
|
275
288
|
authWitness: AuthWitness,
|
|
276
|
-
): Promise<
|
|
277
|
-
const withdrawReceipt = await this.l2Bridge.methods
|
|
289
|
+
): Promise<TxReceipt> {
|
|
290
|
+
const { receipt: withdrawReceipt } = await this.l2Bridge.methods
|
|
278
291
|
.exit_to_l1_private(this.l2Token.address, this.ethAccount, withdrawAmount, EthAddress.ZERO, authwitNonce)
|
|
279
|
-
.send({ authWitnesses: [authWitness], from: this.ownerAddress })
|
|
280
|
-
.wait();
|
|
292
|
+
.send({ authWitnesses: [authWitness], from: this.ownerAddress });
|
|
281
293
|
|
|
282
294
|
return withdrawReceipt;
|
|
283
295
|
}
|
|
284
296
|
|
|
285
|
-
async withdrawPublicFromAztecToL1(withdrawAmount: bigint, authwitNonce: Fr = Fr.ZERO): Promise<
|
|
286
|
-
const withdrawReceipt = await this.l2Bridge.methods
|
|
297
|
+
async withdrawPublicFromAztecToL1(withdrawAmount: bigint, authwitNonce: Fr = Fr.ZERO): Promise<TxReceipt> {
|
|
298
|
+
const { receipt: withdrawReceipt } = await this.l2Bridge.methods
|
|
287
299
|
.exit_to_l1_public(this.ethAccount, withdrawAmount, EthAddress.ZERO, authwitNonce)
|
|
288
|
-
.send({ from: this.ownerAddress })
|
|
289
|
-
.wait();
|
|
300
|
+
.send({ from: this.ownerAddress });
|
|
290
301
|
|
|
291
302
|
return withdrawReceipt;
|
|
292
303
|
}
|
|
293
304
|
|
|
294
305
|
async getL2PrivateBalanceOf(owner: AztecAddress) {
|
|
295
|
-
return await this.l2Token.methods.balance_of_private(owner).simulate({ from: owner });
|
|
306
|
+
return (await this.l2Token.methods.balance_of_private(owner).simulate({ from: owner })).result;
|
|
296
307
|
}
|
|
297
308
|
|
|
298
309
|
async expectPrivateBalanceOnL2(owner: AztecAddress, expectedBalance: bigint) {
|
|
@@ -302,7 +313,7 @@ export class CrossChainTestHarness {
|
|
|
302
313
|
}
|
|
303
314
|
|
|
304
315
|
async getL2PublicBalanceOf(owner: AztecAddress) {
|
|
305
|
-
return await this.l2Token.methods.balance_of_public(owner).simulate({ from: this.ownerAddress });
|
|
316
|
+
return (await this.l2Token.methods.balance_of_public(owner).simulate({ from: this.ownerAddress })).result;
|
|
306
317
|
}
|
|
307
318
|
|
|
308
319
|
async expectPublicBalanceOnL2(owner: AztecAddress, expectedBalance: bigint) {
|
|
@@ -321,14 +332,16 @@ export class CrossChainTestHarness {
|
|
|
321
332
|
|
|
322
333
|
withdrawFundsFromBridgeOnL1(
|
|
323
334
|
amount: bigint,
|
|
324
|
-
|
|
335
|
+
epochNumber: EpochNumber,
|
|
336
|
+
numCheckpointsInEpoch: number,
|
|
325
337
|
messageIndex: bigint,
|
|
326
338
|
siblingPath: SiblingPath<number>,
|
|
327
339
|
) {
|
|
328
340
|
return this.l1TokenPortalManager.withdrawFunds(
|
|
329
341
|
amount,
|
|
330
342
|
this.ethAccount,
|
|
331
|
-
|
|
343
|
+
epochNumber,
|
|
344
|
+
numCheckpointsInEpoch,
|
|
332
345
|
messageIndex,
|
|
333
346
|
siblingPath,
|
|
334
347
|
);
|
|
@@ -336,18 +349,14 @@ export class CrossChainTestHarness {
|
|
|
336
349
|
|
|
337
350
|
async transferToPrivateOnL2(shieldAmount: bigint) {
|
|
338
351
|
this.logger.info('Transferring to private on L2');
|
|
339
|
-
await this.l2Token.methods
|
|
340
|
-
.transfer_to_private(this.ownerAddress, shieldAmount)
|
|
341
|
-
.send({ from: this.ownerAddress })
|
|
342
|
-
.wait();
|
|
352
|
+
await this.l2Token.methods.transfer_to_private(this.ownerAddress, shieldAmount).send({ from: this.ownerAddress });
|
|
343
353
|
}
|
|
344
354
|
|
|
345
355
|
async transferToPublicOnL2(amount: bigint, authwitNonce = Fr.ZERO) {
|
|
346
356
|
this.logger.info('Transferring tokens to public');
|
|
347
357
|
await this.l2Token.methods
|
|
348
358
|
.transfer_to_public(this.ownerAddress, this.ownerAddress, amount, authwitNonce)
|
|
349
|
-
.send({ from: this.ownerAddress })
|
|
350
|
-
.wait();
|
|
359
|
+
.send({ from: this.ownerAddress });
|
|
351
360
|
}
|
|
352
361
|
|
|
353
362
|
/**
|
|
@@ -359,8 +368,7 @@ export class CrossChainTestHarness {
|
|
|
359
368
|
*/
|
|
360
369
|
async makeMessageConsumable(msgHash: Fr | Hex) {
|
|
361
370
|
const frMsgHash = typeof msgHash === 'string' ? Fr.fromHexString(msgHash) : msgHash;
|
|
362
|
-
|
|
363
|
-
await retryUntil(async () => await this.aztecNode.isL1ToL2MessageSynced(frMsgHash), 'message sync', 10);
|
|
371
|
+
await waitForL1ToL2MessageSeen(this.aztecNode, frMsgHash, { timeoutSeconds: 10 });
|
|
364
372
|
|
|
365
373
|
await this.mintTokensPublicOnL2(0n);
|
|
366
374
|
await this.mintTokensPublicOnL2(0n);
|
|
@@ -4,11 +4,17 @@ import { Fr } from '@aztec/aztec.js/fields';
|
|
|
4
4
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
5
5
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
6
6
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
7
|
-
import type { ExtendedViemWalletClient } from '@aztec/ethereum';
|
|
7
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
8
8
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
9
9
|
import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
|
|
10
10
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
11
|
-
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
11
|
+
import type { AztecNodeAdmin, AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
|
|
12
|
+
|
|
13
|
+
import { testSpan } from '../fixtures/timing.js';
|
|
14
|
+
import { waitForL1ToL2MessageSeen } from './wait_for_l1_to_l2_message.js';
|
|
15
|
+
|
|
16
|
+
/** Aztec node that may expose the debug mining API in local e2e setups. */
|
|
17
|
+
type MiningAztecNode = AztecNode & Partial<AztecNodeDebug>;
|
|
12
18
|
|
|
13
19
|
export interface IGasBridgingTestHarness {
|
|
14
20
|
getL1FeeJuiceBalance(address: EthAddress): Promise<bigint>;
|
|
@@ -19,7 +25,7 @@ export interface IGasBridgingTestHarness {
|
|
|
19
25
|
}
|
|
20
26
|
|
|
21
27
|
export interface FeeJuicePortalTestingHarnessFactoryConfig {
|
|
22
|
-
aztecNode:
|
|
28
|
+
aztecNode: MiningAztecNode;
|
|
23
29
|
aztecNodeAdmin?: AztecNodeAdmin;
|
|
24
30
|
l1Client: ExtendedViemWalletClient;
|
|
25
31
|
wallet: Wallet;
|
|
@@ -43,7 +49,7 @@ export class FeeJuicePortalTestingHarnessFactory {
|
|
|
43
49
|
throw new Error('Fee Juice portal not deployed on L1');
|
|
44
50
|
}
|
|
45
51
|
|
|
46
|
-
const gasL2 =
|
|
52
|
+
const gasL2 = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, wallet);
|
|
47
53
|
|
|
48
54
|
return new GasBridgingTestHarness(
|
|
49
55
|
aztecNode,
|
|
@@ -75,7 +81,7 @@ export class GasBridgingTestHarness implements IGasBridgingTestHarness {
|
|
|
75
81
|
|
|
76
82
|
constructor(
|
|
77
83
|
/** Aztec node */
|
|
78
|
-
public aztecNode:
|
|
84
|
+
public aztecNode: MiningAztecNode,
|
|
79
85
|
/** Aztec node admin interface */
|
|
80
86
|
public aztecNodeAdmin: AztecNodeAdmin | undefined,
|
|
81
87
|
/** Wallet. */
|
|
@@ -127,11 +133,11 @@ export class GasBridgingTestHarness implements IGasBridgingTestHarness {
|
|
|
127
133
|
async consumeMessageOnAztecAndClaimPrivately(owner: AztecAddress, claimer: AztecAddress, claim: L2AmountClaim) {
|
|
128
134
|
this.logger.info('Consuming messages on L2 Privately');
|
|
129
135
|
const { claimAmount, claimSecret, messageLeafIndex } = claim;
|
|
130
|
-
await this.feeJuice.methods.claim(owner, claimAmount, claimSecret, messageLeafIndex).send({ from: claimer })
|
|
136
|
+
await this.feeJuice.methods.claim(owner, claimAmount, claimSecret, messageLeafIndex).send({ from: claimer });
|
|
131
137
|
}
|
|
132
138
|
|
|
133
139
|
async getL2PublicBalanceOf(owner: AztecAddress) {
|
|
134
|
-
return await this.feeJuice.methods.balance_of_public(owner).simulate({ from: owner });
|
|
140
|
+
return (await this.feeJuice.methods.balance_of_public(owner).simulate({ from: owner })).result;
|
|
135
141
|
}
|
|
136
142
|
|
|
137
143
|
async expectPublicBalanceOnL2(owner: AztecAddress, expectedBalance: bigint) {
|
|
@@ -144,8 +150,7 @@ export class GasBridgingTestHarness implements IGasBridgingTestHarness {
|
|
|
144
150
|
await this.mintTokensOnL1();
|
|
145
151
|
const claim = await this.sendTokensToPortalPublic(bridgeAmount, owner);
|
|
146
152
|
|
|
147
|
-
|
|
148
|
-
await retryUntil(isSynced, `message ${claim.messageHash} sync`, 24, 1);
|
|
153
|
+
await waitForL1ToL2MessageSeen(this.aztecNode, Fr.fromHexString(claim.messageHash), { timeoutSeconds: 24 });
|
|
149
154
|
|
|
150
155
|
// Progress by 2 L2 blocks so that the l1ToL2Message added above will be available to use on L2.
|
|
151
156
|
await this.advanceL2Block();
|
|
@@ -155,14 +160,21 @@ export class GasBridgingTestHarness implements IGasBridgingTestHarness {
|
|
|
155
160
|
}
|
|
156
161
|
|
|
157
162
|
async bridgeFromL1ToL2(owner: AztecAddress, claimer: AztecAddress) {
|
|
158
|
-
|
|
159
|
-
|
|
163
|
+
await testSpan('setup:bridge', async () => {
|
|
164
|
+
// Prepare the tokens on the L1 side
|
|
165
|
+
const claim = await this.prepareTokensOnL1(owner);
|
|
160
166
|
|
|
161
|
-
|
|
162
|
-
|
|
167
|
+
// Consume L1 -> L2 message and claim tokens privately on L2
|
|
168
|
+
await this.consumeMessageOnAztecAndClaimPrivately(owner, claimer, claim);
|
|
169
|
+
});
|
|
163
170
|
}
|
|
164
171
|
|
|
165
172
|
private async advanceL2Block() {
|
|
173
|
+
if (this.aztecNode.mineBlock) {
|
|
174
|
+
await this.aztecNode.mineBlock();
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
166
178
|
const initialBlockNumber = await this.aztecNode.getBlockNumber();
|
|
167
179
|
|
|
168
180
|
let minTxsPerBlock = undefined;
|
|
@@ -171,11 +183,17 @@ export class GasBridgingTestHarness implements IGasBridgingTestHarness {
|
|
|
171
183
|
await this.aztecNodeAdmin.setConfig({ minTxsPerBlock: 0 }); // Set to 0 to ensure we can advance the block
|
|
172
184
|
}
|
|
173
185
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
186
|
+
try {
|
|
187
|
+
await retryUntil(
|
|
188
|
+
async () => (await this.aztecNode.getBlockNumber()) >= initialBlockNumber + 1,
|
|
189
|
+
'gas portal block advance',
|
|
190
|
+
0,
|
|
191
|
+
0.25,
|
|
192
|
+
);
|
|
193
|
+
} finally {
|
|
194
|
+
if (this.aztecNodeAdmin && minTxsPerBlock !== undefined) {
|
|
195
|
+
await this.aztecNodeAdmin.setConfig({ minTxsPerBlock });
|
|
196
|
+
}
|
|
178
197
|
}
|
|
179
198
|
}
|
|
180
199
|
}
|
|
181
|
-
// docs:end:cross_chain_test_harness
|
package/src/shared/index.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { uniswapL1L2TestSuite
|
|
1
|
+
export { uniswapL1L2TestSuite } from './uniswap_l1_l2.js';
|
|
2
|
+
export { MockStateView, diffInBps } from './mock_state_view.js';
|
package/src/shared/jest_setup.ts
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
2
|
|
|
3
|
-
import { beforeEach, expect } from '@jest/globals';
|
|
3
|
+
import { afterAll, afterEach, beforeEach, expect } from '@jest/globals';
|
|
4
|
+
import { readlinkSync } from 'fs';
|
|
4
5
|
import { basename } from 'path';
|
|
5
6
|
|
|
7
|
+
import { EluMonitor } from '../fixtures/elu_monitor.js';
|
|
8
|
+
|
|
9
|
+
const eluMonitor = process.env.ELU_MONITOR_FILE
|
|
10
|
+
? new EluMonitor(process.env.ELU_MONITOR_FILE, Number(process.env.ELU_MONITOR_INTERVAL_MS) || undefined)
|
|
11
|
+
: undefined;
|
|
12
|
+
|
|
13
|
+
if (eluMonitor) {
|
|
14
|
+
process.on('exit', () => eluMonitor.stop());
|
|
15
|
+
}
|
|
16
|
+
|
|
6
17
|
beforeEach(() => {
|
|
7
18
|
const { testPath, currentTestName } = expect.getState();
|
|
8
19
|
if (!testPath || !currentTestName) {
|
|
@@ -10,4 +21,43 @@ beforeEach(() => {
|
|
|
10
21
|
}
|
|
11
22
|
const logger = createLogger(`e2e:${basename(testPath).replace('.test.ts', '')}`);
|
|
12
23
|
logger.info(`Running test: ${currentTestName}`);
|
|
24
|
+
eluMonitor?.startTest(currentTestName);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
afterEach(() => {
|
|
28
|
+
eluMonitor?.stopTest();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Log leaked handles after all tests complete. This runs after test-level afterAll hooks,
|
|
32
|
+
// so any handles still alive at this point were not properly cleaned up during teardown.
|
|
33
|
+
// This diagnostic helps identify the source of exit hangs without masking them.
|
|
34
|
+
afterAll(() => {
|
|
35
|
+
const handles = (process as any)._getActiveHandles();
|
|
36
|
+
if (handles.length > 0) {
|
|
37
|
+
const details = handles.map((h: any) => {
|
|
38
|
+
const type = h?.constructor?.name ?? typeof h;
|
|
39
|
+
const fd = h?.fd ?? h?._handle?.fd ?? '?';
|
|
40
|
+
const destroyed = h?.destroyed ?? '?';
|
|
41
|
+
const hasRef = typeof h?.hasRef === 'function' ? h.hasRef() : '?';
|
|
42
|
+
const localAddr = h?.localAddress ?? '';
|
|
43
|
+
const remoteAddr = h?.remoteAddress ?? '';
|
|
44
|
+
const localPort = h?.localPort ?? '';
|
|
45
|
+
const remotePort = h?.remotePort ?? '';
|
|
46
|
+
const proto = Object.getPrototypeOf(h)?.constructor?.name ?? '?';
|
|
47
|
+
const keys = Object.keys(h).slice(0, 10).join(',');
|
|
48
|
+
let fdTarget = '';
|
|
49
|
+
if (typeof fd === 'number') {
|
|
50
|
+
try {
|
|
51
|
+
fdTarget = ` -> ${readlinkSync(`/proc/self/fd/${fd}`)}`;
|
|
52
|
+
} catch {
|
|
53
|
+
// ignore
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return ` ${type}(fd=${fd}, destroyed=${destroyed}, hasRef=${hasRef}${fdTarget}) proto=${proto} addr=${localAddr}:${localPort}->${remoteAddr}:${remotePort} keys=[${keys}]`;
|
|
57
|
+
});
|
|
58
|
+
process.stderr.write(
|
|
59
|
+
`\n[jest_setup] WARNING: ${handles.length} handle(s) still active after teardown:\n${details.join('\n')}\n` +
|
|
60
|
+
`These may prevent Jest from exiting. Investigate and fix the leak.\n\n`,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
13
63
|
});
|