@aztec/end-to-end 0.0.1-commit.4d79d1f2d → 0.0.1-commit.4d9804df
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/{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 +39 -52
- 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 +37 -52
- 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 +15 -1
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +19 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +5 -5
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +62 -53
- package/dest/bench/client_flows/data_extractor.js +1 -0
- package/dest/bench/utils.d.ts +3 -3
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +102 -8
- 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/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 +17 -13
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +82 -74
- 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 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +86 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +4 -4
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +8 -3
- package/dest/fixtures/index.d.ts +2 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
- package/dest/fixtures/setup.d.ts +99 -48
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +319 -262
- package/dest/fixtures/setup_p2p_test.d.ts +14 -7
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +21 -18
- 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 +22 -4
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +26 -8
- package/dest/fixtures/utils.d.ts +2 -2
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +1 -1
- 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_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/install_legacy_contracts.d.cts +10 -0
- package/dest/install_legacy_contracts.d.cts.map +1 -0
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/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 +21 -11
- package/dest/p2p/p2p_network.d.ts.map +1 -0
- package/dest/{e2e_p2p → p2p}/p2p_network.js +97 -37
- 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 +67 -27
- 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 +6 -4
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +36 -31
- package/dest/shared/gas_portal_test_harness.d.ts +8 -5
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +26 -14
- package/dest/shared/index.d.ts +2 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.js +41 -1
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +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 +365 -0
- package/dest/shared/uniswap_l1_l2.d.ts +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +55 -45
- package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
- package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
- package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
- package/dest/simulators/lending_simulator.d.ts +10 -3
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +27 -15
- 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 +2 -2
- 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/{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 +17 -4
- 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/{e2e_fees → single-node/fees}/fees_test.js +89 -63
- 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 +11 -2
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +121 -46
- package/dest/spartan/tx_metrics.d.ts +27 -4
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +106 -21
- package/dest/spartan/utils/bot.d.ts +3 -2
- package/dest/spartan/utils/bot.d.ts.map +1 -1
- package/dest/spartan/utils/bot.js +2 -1
- package/dest/spartan/utils/config.d.ts +10 -30
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +3 -1
- package/dest/spartan/utils/index.d.ts +4 -2
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +5 -1
- package/dest/spartan/utils/k8s.d.ts +3 -1
- package/dest/spartan/utils/k8s.d.ts.map +1 -1
- package/dest/spartan/utils/k8s.js +6 -0
- package/dest/spartan/utils/nodes.d.ts +4 -5
- package/dest/spartan/utils/nodes.d.ts.map +1 -1
- package/dest/spartan/utils/nodes.js +11 -11
- 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/test-wallet/test_wallet.d.ts +48 -25
- package/dest/test-wallet/test_wallet.d.ts.map +1 -1
- package/dest/test-wallet/test_wallet.js +197 -91
- package/dest/test-wallet/utils.d.ts +38 -3
- package/dest/test-wallet/utils.d.ts.map +1 -1
- package/dest/test-wallet/utils.js +65 -10
- 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 +157 -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 +23 -0
- package/package.json +50 -47
- 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 +44 -63
- package/src/{e2e_token_contract → automine/token}/token_contract_test.ts +43 -58
- package/src/automine/token/token_test_helpers.ts +138 -0
- package/src/bench/client_flows/benchmark.ts +21 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +102 -64
- package/src/bench/client_flows/data_extractor.ts +1 -0
- package/src/bench/utils.ts +116 -7
- package/src/composed/ha/ha_full_setup.ts +466 -0
- 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 +97 -93
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +110 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +14 -6
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +406 -351
- package/src/fixtures/setup_p2p_test.ts +23 -27
- package/src/fixtures/timing.ts +97 -0
- package/src/fixtures/token_utils.ts +42 -7
- package/src/fixtures/utils.ts +2 -3
- package/src/fixtures/wait_helpers.ts +333 -0
- 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 +5 -2
- 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/{e2e_p2p → p2p}/p2p_network.ts +116 -47
- package/src/{e2e_p2p → p2p}/reqresp/utils.ts +82 -26
- package/src/p2p/shared.ts +329 -0
- package/src/shared/cross_chain_test_harness.ts +42 -17
- package/src/shared/gas_portal_test_harness.ts +33 -15
- package/src/shared/index.ts +1 -0
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +13 -5
- package/src/shared/timing_env.d.mts +39 -0
- package/src/shared/timing_env.mjs +363 -0
- package/src/shared/uniswap_l1_l2.ts +98 -54
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +33 -15
- package/src/simulators/token_simulator.ts +6 -2
- 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 +19 -5
- package/src/{e2e_fees → single-node/fees}/fees_test.ts +114 -70
- 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/setup_test_wallets.ts +165 -41
- package/src/spartan/tx_metrics.ts +108 -24
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/config.ts +2 -0
- package/src/spartan/utils/index.ts +7 -0
- package/src/spartan/utils/k8s.ts +8 -0
- package/src/spartan/utils/nodes.ts +17 -12
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/test-wallet/test_wallet.ts +228 -107
- package/src/test-wallet/utils.ts +104 -11
- package/src/test-wallet/wallet_worker_script.ts +66 -0
- package/src/test-wallet/worker_wallet.ts +216 -0
- package/src/test-wallet/worker_wallet_schema.ts +14 -0
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -55
- 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 -47
- 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 -129
- package/dest/e2e_deploy_contract/deploy_test.d.ts +0 -37
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +0 -1
- package/dest/e2e_deploy_contract/deploy_test.js +0 -50
- package/dest/e2e_epochs/epochs_test.d.ts +0 -100
- package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
- package/dest/e2e_epochs/epochs_test.js +0 -367
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.d.ts +0 -88
- 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 -56
- 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 -26
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +0 -56
- 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 -136
- 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 -46
- package/dest/e2e_p2p/shared.d.ts.map +0 -1
- package/dest/e2e_p2p/shared.js +0 -181
- 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_cross_chain_messaging/cross_chain_messaging_test.ts +0 -193
- package/src/e2e_deploy_contract/deploy_test.ts +0 -85
- package/src/e2e_epochs/epochs_test.ts +0 -487
- package/src/e2e_l1_publisher/write_json.ts +0 -77
- package/src/e2e_nested_contract/nested_contract_test.ts +0 -73
- package/src/e2e_p2p/inactivity_slash_test.ts +0 -179
- package/src/e2e_p2p/shared.ts +0 -290
- /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
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
1
2
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
3
|
import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
3
4
|
import { type FeePaymentMethod, PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
4
5
|
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
5
6
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
6
7
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
7
|
-
import { CheatCodes } from '@aztec/aztec/testing';
|
|
8
|
+
import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
|
|
8
9
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
9
10
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
10
11
|
import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
@@ -12,6 +13,7 @@ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
|
12
13
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
13
14
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
14
15
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
16
|
+
import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
|
|
15
17
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
16
18
|
import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
|
|
17
19
|
import { TestERC20Bytecode } from '@aztec/l1-artifacts/TestERC20Bytecode';
|
|
@@ -19,16 +21,21 @@ import { AMMContract } from '@aztec/noir-contracts.js/AMM';
|
|
|
19
21
|
import { FPCContract } from '@aztec/noir-contracts.js/FPC';
|
|
20
22
|
import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
|
|
21
23
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
22
|
-
import {
|
|
24
|
+
import { TestTokenContract as BananaCoin, TestTokenContract } from '@aztec/noir-test-contracts.js/TestToken';
|
|
23
25
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
24
26
|
import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
25
27
|
import { type PXEConfig, getPXEConfig } from '@aztec/pxe/server';
|
|
26
28
|
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
27
|
-
import { GasSettings } from '@aztec/stdlib/gas';
|
|
28
|
-
import {
|
|
29
|
+
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
30
|
+
import { AppTaggingSecretKind } from '@aztec/stdlib/logs';
|
|
29
31
|
|
|
30
|
-
import {
|
|
31
|
-
|
|
32
|
+
import {
|
|
33
|
+
AUTOMINE_E2E_OPTS,
|
|
34
|
+
L1_DIRECT_WRITE_ACCOUNT_INDEX,
|
|
35
|
+
MNEMONIC,
|
|
36
|
+
getPaddedMaxFeesPerGas,
|
|
37
|
+
} from '../../fixtures/fixtures.js';
|
|
38
|
+
import { type EndToEndContext, type SetupOptions, setup, teardown } from '../../fixtures/setup.js';
|
|
32
39
|
import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
33
40
|
import { setupSponsoredFPC } from '../../fixtures/utils.js';
|
|
34
41
|
import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
|
|
@@ -70,13 +77,13 @@ export class ClientFlowsBenchmark {
|
|
|
70
77
|
public bananaFPC!: FPCContract;
|
|
71
78
|
public bananaFPCInstance!: ContractInstanceWithAddress;
|
|
72
79
|
// Random asset we want to trade
|
|
73
|
-
public candyBarCoin!:
|
|
80
|
+
public candyBarCoin!: TestTokenContract;
|
|
74
81
|
public candyBarCoinInstance!: ContractInstanceWithAddress;
|
|
75
82
|
// AMM contract
|
|
76
83
|
public amm!: AMMContract;
|
|
77
84
|
public ammInstance!: ContractInstanceWithAddress;
|
|
78
85
|
// Liquidity token for AMM
|
|
79
|
-
public liquidityToken!:
|
|
86
|
+
public liquidityToken!: TestTokenContract;
|
|
80
87
|
public liquidityTokenInstance!: ContractInstanceWithAddress;
|
|
81
88
|
// Sponsored FPC contract
|
|
82
89
|
public sponsoredFPC!: SponsoredFPCContract;
|
|
@@ -87,33 +94,35 @@ export class ClientFlowsBenchmark {
|
|
|
87
94
|
|
|
88
95
|
public realProofs = ['true', '1'].includes(process.env.REAL_PROOFS ?? '');
|
|
89
96
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
//
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
//
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
97
|
+
// `apps` is the number of private function calls contributed by this payment method.
|
|
98
|
+
// Each app produces one execution step at proving time; the orchestrator additionally produces
|
|
99
|
+
// one kernel step per batch of N apps (see `expectedExecutionSteps` in `benchmark.ts`).
|
|
100
|
+
public paymentMethods: Record<BenchmarkingFeePaymentMethod, { forWallet: FeePaymentMethodGetter; apps: number }> = {
|
|
101
|
+
// eslint-disable-next-line camelcase
|
|
102
|
+
bridged_fee_juice: {
|
|
103
|
+
forWallet: this.getBridgedFeeJuicePaymentMethodForWallet.bind(this),
|
|
104
|
+
apps: 1, // FeeJuice claim
|
|
105
|
+
},
|
|
106
|
+
// eslint-disable-next-line camelcase
|
|
107
|
+
private_fpc: {
|
|
108
|
+
forWallet: this.getPrivateFPCPaymentMethodForWallet.bind(this),
|
|
109
|
+
apps:
|
|
110
|
+
1 + // FPC entrypoint
|
|
111
|
+
1 + // BananaCoin transfer_to_public
|
|
112
|
+
1 + // Account verify_private_authwit
|
|
113
|
+
1, // BananaCoin prepare_private_balance_increase
|
|
114
|
+
},
|
|
115
|
+
// eslint-disable-next-line camelcase
|
|
116
|
+
sponsored_fpc: {
|
|
117
|
+
forWallet: this.getSponsoredFPCPaymentMethodForWallet.bind(this),
|
|
118
|
+
apps: 1, // Sponsored FPC sponsor_unconditionally
|
|
119
|
+
},
|
|
120
|
+
// eslint-disable-next-line camelcase
|
|
121
|
+
fee_juice: {
|
|
122
|
+
forWallet: () => Promise.resolve(undefined),
|
|
123
|
+
apps: 0,
|
|
124
|
+
},
|
|
125
|
+
};
|
|
117
126
|
|
|
118
127
|
public config: ClientFlowsConfig;
|
|
119
128
|
|
|
@@ -122,7 +131,7 @@ export class ClientFlowsBenchmark {
|
|
|
122
131
|
|
|
123
132
|
constructor(testName?: string, setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs> = {}) {
|
|
124
133
|
this.logger = createLogger(`bench:client_flows${testName ? `:${testName}` : ''}`);
|
|
125
|
-
this.setupOptions = { startProverNode: true, ...setupOptions };
|
|
134
|
+
this.setupOptions = { ...AUTOMINE_E2E_OPTS, startProverNode: true, ...setupOptions };
|
|
126
135
|
this.config = BENCHMARK_CONFIG === 'key_flows' ? KEY_FLOWS_CONFIG : FULL_FLOWS_CONFIG;
|
|
127
136
|
ProxyLogger.create();
|
|
128
137
|
this.proxyLogger = ProxyLogger.getInstance();
|
|
@@ -130,11 +139,14 @@ export class ClientFlowsBenchmark {
|
|
|
130
139
|
|
|
131
140
|
async setup() {
|
|
132
141
|
this.logger.info('Setting up subsystems from fresh');
|
|
133
|
-
|
|
142
|
+
// Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
143
|
+
// BananaCoin is the codegen'd TestToken here, so the allowlist must key on its class, not canonical Token's.
|
|
144
|
+
const tokenAllowList = await getTokenAllowedSetupFunctions(BananaCoin.artifact);
|
|
145
|
+
this.context = await setup(2, {
|
|
134
146
|
...this.setupOptions,
|
|
135
147
|
fundSponsoredFPC: true,
|
|
136
|
-
skipAccountDeployment: true,
|
|
137
148
|
l1ContractsArgs: this.setupOptions,
|
|
149
|
+
txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
|
|
138
150
|
});
|
|
139
151
|
await this.applyBaseSetup();
|
|
140
152
|
|
|
@@ -148,6 +160,7 @@ export class ClientFlowsBenchmark {
|
|
|
148
160
|
|
|
149
161
|
async teardown() {
|
|
150
162
|
await this.chainMonitor.stop();
|
|
163
|
+
await this.userWallet?.stop();
|
|
151
164
|
await teardown(this.context);
|
|
152
165
|
}
|
|
153
166
|
|
|
@@ -161,11 +174,15 @@ export class ClientFlowsBenchmark {
|
|
|
161
174
|
|
|
162
175
|
/** Admin mints bananaCoin tokens privately to the target address and redeems them. */
|
|
163
176
|
async mintPrivateBananas(amount: bigint, address: AztecAddress) {
|
|
164
|
-
const balanceBefore = await this.bananaCoin.methods
|
|
177
|
+
const { result: balanceBefore } = await this.bananaCoin.methods
|
|
178
|
+
.balance_of_private(address)
|
|
179
|
+
.simulate({ from: address });
|
|
165
180
|
|
|
166
181
|
await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
|
|
167
182
|
|
|
168
|
-
const balanceAfter = await this.bananaCoin.methods
|
|
183
|
+
const { result: balanceAfter } = await this.bananaCoin.methods
|
|
184
|
+
.balance_of_private(address)
|
|
185
|
+
.simulate({ from: address });
|
|
169
186
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
170
187
|
}
|
|
171
188
|
|
|
@@ -175,7 +192,7 @@ export class ClientFlowsBenchmark {
|
|
|
175
192
|
|
|
176
193
|
let benchysPrivateSigningKey;
|
|
177
194
|
if (type === 'schnorr') {
|
|
178
|
-
benchysPrivateSigningKey =
|
|
195
|
+
benchysPrivateSigningKey = GrumpkinScalar.random();
|
|
179
196
|
return wallet.createSchnorrAccount(benchysSecret, salt, benchysPrivateSigningKey);
|
|
180
197
|
} else if (type === 'ecdsar1') {
|
|
181
198
|
benchysPrivateSigningKey = randomBytes(32);
|
|
@@ -192,15 +209,7 @@ export class ClientFlowsBenchmark {
|
|
|
192
209
|
|
|
193
210
|
async applyInitialAccounts() {
|
|
194
211
|
this.logger.info('Applying initial accounts setup');
|
|
195
|
-
const
|
|
196
|
-
2,
|
|
197
|
-
this.logger,
|
|
198
|
-
)({
|
|
199
|
-
wallet: this.context.wallet,
|
|
200
|
-
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
|
|
212
|
+
const [adminAddress, sequencerAddress] = this.context.accounts;
|
|
204
213
|
|
|
205
214
|
this.adminWallet = this.context.wallet;
|
|
206
215
|
this.aztecNode = this.context.aztecNodeService;
|
|
@@ -223,6 +232,19 @@ export class ClientFlowsBenchmark {
|
|
|
223
232
|
loggers: {
|
|
224
233
|
prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied'),
|
|
225
234
|
},
|
|
235
|
+
// The benchmark measures steady-state app cost, not first-send discovery cost. Reproduce the pre-handshake-default
|
|
236
|
+
// behavior of unconstrained delivery: derive the tagging secret from the (sender, recipient) key pair via ECDH
|
|
237
|
+
// instead of taking the current default (a non-interactive handshake, which injects two extra private app
|
|
238
|
+
// executions and a nullifier per cold chain). Constrained delivery is unaffected: the Noir circuit rejects
|
|
239
|
+
// address-derived for constrained, so the hook falls through to a handshake there.
|
|
240
|
+
hooks: {
|
|
241
|
+
resolveTaggingSecretStrategy: ({ deliveryMode }) =>
|
|
242
|
+
Promise.resolve(
|
|
243
|
+
deliveryMode === AppTaggingSecretKind.UNCONSTRAINED
|
|
244
|
+
? { type: 'address-derived' }
|
|
245
|
+
: { type: 'non-interactive-handshake' },
|
|
246
|
+
),
|
|
247
|
+
},
|
|
226
248
|
});
|
|
227
249
|
}
|
|
228
250
|
|
|
@@ -233,7 +255,15 @@ export class ClientFlowsBenchmark {
|
|
|
233
255
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
234
256
|
aztecNode: this.context.aztecNodeService,
|
|
235
257
|
aztecNodeAdmin: this.context.aztecNodeService,
|
|
236
|
-
|
|
258
|
+
// Bridge from a dedicated L1 account so its direct writes don't race the sequencer publisher's
|
|
259
|
+
// txs on the deployer account (see L1_DIRECT_WRITE_ACCOUNT_INDEX).
|
|
260
|
+
l1Client: createExtendedL1Client(
|
|
261
|
+
this.context.config.l1RpcUrls,
|
|
262
|
+
MNEMONIC,
|
|
263
|
+
undefined,
|
|
264
|
+
undefined,
|
|
265
|
+
L1_DIRECT_WRITE_ACCOUNT_INDEX,
|
|
266
|
+
),
|
|
237
267
|
wallet: this.adminWallet,
|
|
238
268
|
logger: this.logger,
|
|
239
269
|
});
|
|
@@ -247,7 +277,9 @@ export class ClientFlowsBenchmark {
|
|
|
247
277
|
'BC',
|
|
248
278
|
'BC',
|
|
249
279
|
18n,
|
|
250
|
-
).send({
|
|
280
|
+
).send({
|
|
281
|
+
from: this.adminAddress,
|
|
282
|
+
});
|
|
251
283
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
252
284
|
this.bananaCoin = bananaCoin;
|
|
253
285
|
this.bananaCoinInstance = bananaCoinInstance;
|
|
@@ -255,13 +287,15 @@ export class ClientFlowsBenchmark {
|
|
|
255
287
|
|
|
256
288
|
async applyDeployCandyBarToken() {
|
|
257
289
|
this.logger.info('Applying candy bar token deployment');
|
|
258
|
-
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await
|
|
290
|
+
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TestTokenContract.deploy(
|
|
259
291
|
this.adminWallet,
|
|
260
292
|
this.adminAddress,
|
|
261
293
|
'CBC',
|
|
262
294
|
'CBC',
|
|
263
295
|
18n,
|
|
264
|
-
).send({
|
|
296
|
+
).send({
|
|
297
|
+
from: this.adminAddress,
|
|
298
|
+
});
|
|
265
299
|
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
266
300
|
this.candyBarCoin = candyBarCoin;
|
|
267
301
|
this.candyBarCoinInstance = candyBarCoinInstance;
|
|
@@ -277,7 +311,9 @@ export class ClientFlowsBenchmark {
|
|
|
277
311
|
this.adminWallet,
|
|
278
312
|
bananaCoin.address,
|
|
279
313
|
this.adminAddress,
|
|
280
|
-
).send({
|
|
314
|
+
).send({
|
|
315
|
+
from: this.adminAddress,
|
|
316
|
+
});
|
|
281
317
|
|
|
282
318
|
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
283
319
|
|
|
@@ -321,18 +357,17 @@ export class ClientFlowsBenchmark {
|
|
|
321
357
|
|
|
322
358
|
public async createAndFundBenchmarkingAccountOnUserWallet(accountType: AccountType) {
|
|
323
359
|
const benchysAccountManager = await this.createBenchmarkingAccountManager(this.adminWallet, accountType);
|
|
324
|
-
const benchysAccount = await benchysAccountManager.getAccount();
|
|
325
360
|
const benchysAddress = benchysAccountManager.address;
|
|
326
361
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
|
|
327
362
|
const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
|
|
328
363
|
await behchysDeployMethod.send({
|
|
329
|
-
from:
|
|
364
|
+
from: NO_FROM,
|
|
330
365
|
fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
|
|
331
366
|
});
|
|
332
367
|
// Register benchy on the user's Wallet, where we're going to be interacting from
|
|
333
368
|
const accountManager = await this.userWallet.createAccount({
|
|
334
|
-
secret:
|
|
335
|
-
salt: new Fr(
|
|
369
|
+
secret: benchysAccountManager.getSecretKey(),
|
|
370
|
+
salt: new Fr(benchysAccountManager.getInstance().salt),
|
|
336
371
|
contract: benchysAccountManager.getAccountContract(),
|
|
337
372
|
});
|
|
338
373
|
return accountManager.address;
|
|
@@ -340,19 +375,21 @@ export class ClientFlowsBenchmark {
|
|
|
340
375
|
|
|
341
376
|
public async applyDeployAmm() {
|
|
342
377
|
this.logger.info('Applying AMM deployment');
|
|
343
|
-
const { contract: liquidityToken, instance: liquidityTokenInstance } = await
|
|
378
|
+
const { contract: liquidityToken, instance: liquidityTokenInstance } = await TestTokenContract.deploy(
|
|
344
379
|
this.adminWallet,
|
|
345
380
|
this.adminAddress,
|
|
346
381
|
'LPT',
|
|
347
382
|
'LPT',
|
|
348
383
|
18n,
|
|
349
|
-
).send({
|
|
384
|
+
).send({
|
|
385
|
+
from: this.adminAddress,
|
|
386
|
+
});
|
|
350
387
|
const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
|
|
351
388
|
this.adminWallet,
|
|
352
389
|
this.bananaCoin.address,
|
|
353
390
|
this.candyBarCoin.address,
|
|
354
391
|
liquidityToken.address,
|
|
355
|
-
).send({ from: this.adminAddress
|
|
392
|
+
).send({ from: this.adminAddress });
|
|
356
393
|
this.logger.info(`AMM deployed at ${amm.address}`);
|
|
357
394
|
await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress });
|
|
358
395
|
this.liquidityToken = liquidityToken;
|
|
@@ -369,8 +406,9 @@ export class ClientFlowsBenchmark {
|
|
|
369
406
|
public async getPrivateFPCPaymentMethodForWallet(wallet: Wallet, sender: AztecAddress) {
|
|
370
407
|
// The private fee paying method assembled on the app side requires knowledge of the maximum
|
|
371
408
|
// fee the user is willing to pay
|
|
372
|
-
const maxFeesPerGas =
|
|
373
|
-
const
|
|
409
|
+
const maxFeesPerGas = await getPaddedMaxFeesPerGas(this.aztecNode);
|
|
410
|
+
const gasLimits = Gas.from((await this.aztecNode.getNodeInfo()).txsLimits.gas);
|
|
411
|
+
const gasSettings = GasSettings.fallback({ gasLimits, maxFeesPerGas });
|
|
374
412
|
return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
|
|
375
413
|
}
|
|
376
414
|
|
package/src/bench/utils.ts
CHANGED
|
@@ -2,8 +2,10 @@ import type { AztecNodeService } from '@aztec/aztec-node';
|
|
|
2
2
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
3
3
|
import { BatchCall, NO_WAIT, type WaitOpts } from '@aztec/aztec.js/contracts';
|
|
4
4
|
import { waitForTx } from '@aztec/aztec.js/node';
|
|
5
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
5
6
|
import { mean, stdDev, times } from '@aztec/foundation/collection';
|
|
6
7
|
import { BenchmarkingContract } from '@aztec/noir-test-contracts.js/Benchmarking';
|
|
8
|
+
import { type Sequencer, type SequencerEvents, SequencerState } from '@aztec/sequencer-client';
|
|
7
9
|
import type { TxHash } from '@aztec/stdlib/tx';
|
|
8
10
|
import type { MetricDefinition } from '@aztec/telemetry-client';
|
|
9
11
|
import type { BenchmarkDataPoint, BenchmarkMetricsType, BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
|
|
@@ -11,10 +13,16 @@ import type { BenchmarkDataPoint, BenchmarkMetricsType, BenchmarkTelemetryClient
|
|
|
11
13
|
import { mkdirSync, writeFileSync } from 'fs';
|
|
12
14
|
import path from 'path';
|
|
13
15
|
|
|
16
|
+
import { PIPELINING_SETUP_OPTS } from '../fixtures/fixtures.js';
|
|
14
17
|
import { type EndToEndContext, type SetupOptions, setup } from '../fixtures/utils.js';
|
|
15
18
|
|
|
19
|
+
const MAX_BENCH_WAIT_BLOCKS = 6;
|
|
20
|
+
const BENCH_FINAL_WAIT_TIMEOUT_SECONDS = 10;
|
|
21
|
+
const SEQUENCER_IDLE_TIMEOUT_MS = 60_000;
|
|
22
|
+
const DEFAULT_L1_PUBLISHING_TIME_SECONDS = 12;
|
|
23
|
+
|
|
16
24
|
/**
|
|
17
|
-
* Setup for benchmarks. Initializes a remote node with a
|
|
25
|
+
* Setup for benchmarks. Initializes a remote node with a funded hardcoded account and deploys a benchmark contract.
|
|
18
26
|
*/
|
|
19
27
|
export async function benchmarkSetup(
|
|
20
28
|
opts: Partial<SetupOptions> & {
|
|
@@ -23,11 +31,19 @@ export async function benchmarkSetup(
|
|
|
23
31
|
benchOutput?: string;
|
|
24
32
|
},
|
|
25
33
|
) {
|
|
26
|
-
const context = await setup(1, {
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
const context = await setup(1, {
|
|
35
|
+
...PIPELINING_SETUP_OPTS,
|
|
36
|
+
...opts,
|
|
37
|
+
telemetryConfig: { benchmark: true },
|
|
38
|
+
});
|
|
39
|
+
const [defaultAccountAddress] = context.accounts;
|
|
40
|
+
const sequencer = getSequencerClient(context);
|
|
41
|
+
await waitForSequencerIdle(sequencer.getSequencer());
|
|
42
|
+
const deployment = BenchmarkingContract.deploy(context.wallet);
|
|
43
|
+
const { txHash } = await deployment.send({ from: defaultAccountAddress, wait: NO_WAIT });
|
|
44
|
+
await waitTxs([txHash], context);
|
|
45
|
+
const contract = await deployment.register();
|
|
29
46
|
context.logger.info(`Deployed benchmarking contract at ${contract.address}`);
|
|
30
|
-
const sequencer = (context.aztecNode as AztecNodeService).getSequencer()!;
|
|
31
47
|
const telemetry = context.telemetryClient as BenchmarkTelemetryClient;
|
|
32
48
|
context.logger.warn(`Cleared benchmark data points from setup`);
|
|
33
49
|
telemetry.clear();
|
|
@@ -48,6 +64,14 @@ export async function benchmarkSetup(
|
|
|
48
64
|
return { telemetry, context, contract, sequencer };
|
|
49
65
|
}
|
|
50
66
|
|
|
67
|
+
function getSequencerClient(context: EndToEndContext) {
|
|
68
|
+
const sequencer = (context.aztecNode as AztecNodeService).getSequencer();
|
|
69
|
+
if (!sequencer) {
|
|
70
|
+
throw new Error('Benchmark setup requires a local sequencer');
|
|
71
|
+
}
|
|
72
|
+
return sequencer;
|
|
73
|
+
}
|
|
74
|
+
|
|
51
75
|
type MetricFilter = {
|
|
52
76
|
source: MetricDefinition;
|
|
53
77
|
transform: (value: number) => number;
|
|
@@ -149,15 +173,100 @@ export async function sendTxs(
|
|
|
149
173
|
context.logger.info(`Creating ${txCount} txs`);
|
|
150
174
|
const [from] = context.accounts;
|
|
151
175
|
context.logger.info(`Sending ${txCount} txs`);
|
|
152
|
-
return Promise.all(
|
|
176
|
+
return Promise.all(
|
|
177
|
+
calls.map(async call => {
|
|
178
|
+
const { txHash } = await call.send({ from, wait: NO_WAIT });
|
|
179
|
+
return txHash;
|
|
180
|
+
}),
|
|
181
|
+
);
|
|
153
182
|
}
|
|
154
183
|
|
|
155
184
|
export async function waitTxs(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
|
|
156
185
|
context.logger.info(`Awaiting ${txs.length} txs to be mined`);
|
|
157
|
-
await
|
|
186
|
+
await waitTxsWithBlockMining(txs, context, txWaitOpts);
|
|
158
187
|
context.logger.info(`${txs.length} txs have been mined`);
|
|
159
188
|
}
|
|
160
189
|
|
|
190
|
+
async function waitTxsWithBlockMining(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
|
|
191
|
+
const sequencer = getSequencerClient(context).getSequencer();
|
|
192
|
+
for (let attempt = 0; attempt <= MAX_BENCH_WAIT_BLOCKS; attempt++) {
|
|
193
|
+
if (await haveAllTxsMined(txs, context, txWaitOpts)) {
|
|
194
|
+
await waitForSequencerIdle(sequencer);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
await waitForSequencerIdle(sequencer);
|
|
198
|
+
context.logger.info('Mining next benchmark block while waiting for txs', {
|
|
199
|
+
attempt,
|
|
200
|
+
txs: txs.length,
|
|
201
|
+
});
|
|
202
|
+
await mineNextBenchmarkBlock(context, sequencer);
|
|
203
|
+
}
|
|
204
|
+
await Promise.all(
|
|
205
|
+
txs.map(txHash =>
|
|
206
|
+
waitForTx(context.aztecNode, txHash, {
|
|
207
|
+
...txWaitOpts,
|
|
208
|
+
timeout: txWaitOpts?.timeout ?? BENCH_FINAL_WAIT_TIMEOUT_SECONDS,
|
|
209
|
+
}),
|
|
210
|
+
),
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
async function haveAllTxsMined(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts): Promise<boolean> {
|
|
215
|
+
const receipts = await Promise.all(txs.map(txHash => context.aztecNode.getTxReceipt(txHash)));
|
|
216
|
+
for (const receipt of receipts) {
|
|
217
|
+
if (receipt.isDropped()) {
|
|
218
|
+
throw new Error(`Transaction ${receipt.txHash.toString()} was dropped. Reason: ${receipt.error ?? 'unknown'}`);
|
|
219
|
+
}
|
|
220
|
+
if (!receipt.isMined()) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
if (!receipt.hasExecutionSucceeded() && !txWaitOpts?.dontThrowOnRevert) {
|
|
224
|
+
throw new Error(
|
|
225
|
+
`Transaction ${receipt.txHash.toString()} reverted: ${receipt.executionResult}. Reason: ${
|
|
226
|
+
receipt.error ?? 'unknown'
|
|
227
|
+
}`,
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
async function mineNextBenchmarkBlock(context: EndToEndContext, sequencer: Sequencer) {
|
|
235
|
+
const l1PublishingTime = BigInt(context.config.l1PublishingTime ?? DEFAULT_L1_PUBLISHING_TIME_SECONDS);
|
|
236
|
+
const currentTimestamp = BigInt(await context.cheatCodes.eth.lastBlockTimestamp());
|
|
237
|
+
let targetSlot = SlotNumber((await context.cheatCodes.rollup.getSlot()) + 1);
|
|
238
|
+
let targetTimestamp = await context.cheatCodes.rollup.getTimestampForSlot(targetSlot);
|
|
239
|
+
while (targetTimestamp - l1PublishingTime - 1n <= currentTimestamp) {
|
|
240
|
+
targetSlot = SlotNumber(targetSlot + 1);
|
|
241
|
+
targetTimestamp = await context.cheatCodes.rollup.getTimestampForSlot(targetSlot);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const triggerTimestamp = targetTimestamp - l1PublishingTime - 1n;
|
|
245
|
+
await context.cheatCodes.eth.warp(triggerTimestamp, { resetBlockInterval: true });
|
|
246
|
+
await context.aztecNode.mineBlock();
|
|
247
|
+
await waitForSequencerIdle(sequencer);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function waitForSequencerIdle(sequencer: Sequencer, timeout = SEQUENCER_IDLE_TIMEOUT_MS): Promise<void> {
|
|
251
|
+
if (sequencer.status().state === SequencerState.IDLE) {
|
|
252
|
+
return Promise.resolve();
|
|
253
|
+
}
|
|
254
|
+
return new Promise((resolve, reject) => {
|
|
255
|
+
const timer = setTimeout(() => {
|
|
256
|
+
sequencer.off('state-changed', handler);
|
|
257
|
+
reject(new Error('Timeout waiting for sequencer IDLE state'));
|
|
258
|
+
}, timeout);
|
|
259
|
+
const handler = (args: Parameters<SequencerEvents['state-changed']>[0]) => {
|
|
260
|
+
if (args.newState === SequencerState.IDLE) {
|
|
261
|
+
clearTimeout(timer);
|
|
262
|
+
sequencer.off('state-changed', handler);
|
|
263
|
+
resolve();
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
sequencer.on('state-changed', handler);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
|
|
161
270
|
function randomBytesAsBigInts(length: number): bigint[] {
|
|
162
271
|
return [...Array(length)].map(_ => BigInt(Math.floor(Math.random() * 255)));
|
|
163
272
|
}
|