@aztec/end-to-end 0.0.1-commit.c31f2472 → 0.0.1-commit.c52d6e7
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 +229 -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/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 +45 -48
- 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 +43 -48
- 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 +7 -7
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +68 -62
- 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.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 +18 -14
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +83 -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_acvm_config.d.ts +1 -1
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_acvm_config.js +2 -2
- 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 +6 -6
- 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/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 +120 -60
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +332 -327
- package/dest/fixtures/setup_p2p_test.d.ts +22 -10
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +26 -20
- package/dest/fixtures/standard_contracts_genesis.d.ts +16 -0
- package/dest/fixtures/standard_contracts_genesis.d.ts.map +1 -0
- package/dest/fixtures/standard_contracts_genesis.js +25 -0
- package/dest/fixtures/timing.d.ts +42 -0
- package/dest/fixtures/timing.d.ts.map +1 -0
- package/dest/fixtures/timing.js +72 -0
- package/dest/fixtures/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 +22 -12
- package/dest/p2p/p2p_network.d.ts.map +1 -0
- package/dest/{e2e_p2p → p2p}/p2p_network.js +98 -37
- 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/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 +44 -32
- 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 -17
- 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 +2 -2
- 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 +56 -44
- 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 +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/{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 +95 -0
- package/dest/single-node/fees/fees_test.d.ts.map +1 -0
- package/dest/single-node/fees/fees_test.js +344 -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 +374 -0
- package/dest/single-node/single_node_test_context.d.ts.map +1 -0
- package/dest/single-node/single_node_test_context.js +847 -0
- package/dest/spartan/setup_test_wallets.d.ts +12 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +124 -47
- 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 +11 -28
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +4 -1
- package/dest/spartan/utils/index.d.ts +6 -4
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +6 -2
- package/dest/spartan/utils/k8s.d.ts +31 -1
- package/dest/spartan/utils/k8s.d.ts.map +1 -1
- package/dest/spartan/utils/k8s.js +124 -0
- package/dest/spartan/utils/nodes.d.ts +14 -5
- package/dest/spartan/utils/nodes.d.ts.map +1 -1
- package/dest/spartan/utils/nodes.js +204 -33
- 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 +18 -4
- package/dest/spartan/utils/scripts.d.ts.map +1 -1
- package/dest/spartan/utils/scripts.js +19 -4
- 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 +320 -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 +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 +53 -46
- 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/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 +51 -61
- package/src/{e2e_token_contract → automine/token}/token_contract_test.ts +50 -56
- 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 +109 -78
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +1 -0
- package/src/bench/utils.ts +117 -8
- 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 +101 -95
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +110 -0
- package/src/fixtures/get_acvm_config.ts +2 -8
- package/src/fixtures/get_bb_config.ts +8 -8
- package/src/fixtures/ha_setup.ts +192 -0
- package/src/fixtures/index.ts +2 -0
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +436 -442
- package/src/fixtures/setup_p2p_test.ts +39 -34
- package/src/fixtures/standard_contracts_genesis.ts +28 -0
- 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 +7 -4
- 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 +96 -0
- package/src/multi-node/block-production/setup.ts +272 -0
- package/src/multi-node/governance/setup.ts +172 -0
- package/src/multi-node/multi_node_test_context.ts +447 -0
- package/src/multi-node/slashing/inactivity_setup.ts +139 -0
- package/src/multi-node/slashing/setup.ts +433 -0
- package/src/p2p/README.md +78 -0
- package/src/{e2e_p2p → p2p}/p2p_network.ts +124 -53
- package/src/p2p/reqresp/utils.ts +263 -0
- package/src/p2p/shared.ts +329 -0
- package/src/shared/cross_chain_test_harness.ts +44 -21
- package/src/shared/gas_portal_test_harness.ts +35 -18
- 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 +15 -6
- 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 -56
- 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 -30
- package/src/single-node/README.md +66 -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/single-node/fees/fees_test.ts +434 -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 +1058 -0
- package/src/spartan/setup_test_wallets.ts +168 -42
- package/src/spartan/tx_metrics.ts +108 -24
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/config.ts +3 -0
- package/src/spartan/utils/index.ts +10 -1
- package/src/spartan/utils/k8s.ts +160 -0
- package/src/spartan/utils/nodes.ts +251 -31
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +43 -7
- package/src/test-wallet/test_wallet.ts +426 -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 +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 -53
- 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 -128
- 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 -361
- 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_fees/fees_test.js +0 -248
- 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/shared.d.ts +0 -46
- package/dest/e2e_p2p/shared.d.ts.map +0 -1
- package/dest/e2e_p2p/shared.js +0 -177
- package/dest/e2e_token_contract/token_contract_test.d.ts +0 -42
- 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 -194
- package/src/e2e_deploy_contract/deploy_test.ts +0 -85
- package/src/e2e_epochs/epochs_test.ts +0 -477
- package/src/e2e_fees/fees_test.ts +0 -339
- 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 -288
- /package/dest/{e2e_multi_validator/utils.js → composed/web3signer/multi_validator_keystore_utils.js} +0 -0
- /package/src/{e2e_multi_validator/utils.ts → composed/web3signer/multi_validator_keystore_utils.ts} +0 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import type { ContractFunctionInteraction } from '@aztec/aztec.js/contracts';
|
|
3
|
+
import type { Logger } from '@aztec/aztec.js/log';
|
|
4
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
5
|
+
import { AMMContract } from '@aztec/noir-contracts.js/AMM';
|
|
6
|
+
import type { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
|
|
7
|
+
|
|
8
|
+
import { sendThroughAuthwitProxy } from '../../fixtures/authwit_proxy.js';
|
|
9
|
+
import { DUPLICATE_NULLIFIER_ERROR } from '../../fixtures/fixtures.js';
|
|
10
|
+
import { type AnyTokenContract, mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
11
|
+
import type { TestWallet } from '../../test-wallet/test_wallet.js';
|
|
12
|
+
|
|
13
|
+
/** Whether an amount / balance is read from the private or public balance of the token. */
|
|
14
|
+
export type BalanceKind = 'private' | 'public';
|
|
15
|
+
|
|
16
|
+
/** The invalid-authwit-nonce assertion the contract raises when `from == msg_sender` but nonce != 0. */
|
|
17
|
+
export const INVALID_AUTHWIT_NONCE_ERROR =
|
|
18
|
+
"Assertion failed: Invalid authwit nonce. When 'from' and 'msg_sender' are the same, 'authwit_nonce' must be zero";
|
|
19
|
+
|
|
20
|
+
/** Minimal token shape needed to read balances — satisfied structurally by Token/TestToken/TokenBlacklist. */
|
|
21
|
+
export interface BalanceReadable {
|
|
22
|
+
methods: {
|
|
23
|
+
balance_of_private(owner: AztecAddress): { simulate(opts: { from: AztecAddress }): Promise<{ result: bigint }> };
|
|
24
|
+
balance_of_public(owner: AztecAddress): { simulate(opts: { from: AztecAddress }): Promise<{ result: bigint }> };
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Reads the private or public balance of an account, simulating from that account's own scope. */
|
|
29
|
+
export async function balanceOf(asset: BalanceReadable, kind: BalanceKind, account: AztecAddress): Promise<bigint> {
|
|
30
|
+
const interaction =
|
|
31
|
+
kind === 'private' ? asset.methods.balance_of_private(account) : asset.methods.balance_of_public(account);
|
|
32
|
+
return (await interaction.simulate({ from: account })).result;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Returns half of an account's balance, asserting it is non-zero so the operation under test is meaningful. */
|
|
36
|
+
export async function halfBalanceOf(asset: BalanceReadable, kind: BalanceKind, owner: AztecAddress): Promise<bigint> {
|
|
37
|
+
const amount = (await balanceOf(asset, kind, owner)) / 2n;
|
|
38
|
+
expect(amount).toBeGreaterThan(0n);
|
|
39
|
+
return amount;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Returns an amount just above an account's balance (balance + delta), asserting it is non-zero. */
|
|
43
|
+
export async function amountAboveBalance(
|
|
44
|
+
asset: BalanceReadable,
|
|
45
|
+
kind: BalanceKind,
|
|
46
|
+
owner: AztecAddress,
|
|
47
|
+
delta = 1n,
|
|
48
|
+
): Promise<bigint> {
|
|
49
|
+
const amount = (await balanceOf(asset, kind, owner)) + delta;
|
|
50
|
+
expect(amount).toBeGreaterThan(0n);
|
|
51
|
+
return amount;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Grants a public authwit for `caller` to run `action` on behalf of `owner`, executes it from `caller`,
|
|
56
|
+
* then asserts a replay of the same call reverts as unauthorized (the authwit is single-use).
|
|
57
|
+
*
|
|
58
|
+
* `onExecuted` runs after the successful execution (before the replay attempt) so callers can update
|
|
59
|
+
* their {@link TokenSimulator} to match the state change the executed action produced.
|
|
60
|
+
*/
|
|
61
|
+
export async function assertPublicAuthwitReplayRejected(
|
|
62
|
+
wallet: TestWallet,
|
|
63
|
+
owner: AztecAddress,
|
|
64
|
+
action: ContractFunctionInteraction,
|
|
65
|
+
caller: AztecAddress,
|
|
66
|
+
onExecuted?: () => void,
|
|
67
|
+
): Promise<void> {
|
|
68
|
+
const grant = await wallet.setPublicAuthWit(owner, { caller, action }, true);
|
|
69
|
+
await grant.send();
|
|
70
|
+
|
|
71
|
+
await action.send({ from: caller });
|
|
72
|
+
onExecuted?.();
|
|
73
|
+
|
|
74
|
+
await expect(action.simulate({ from: caller })).rejects.toThrow(/unauthorized/);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Creates a private authwit for `owner`, executes `action` through the authwit proxy (so `msg_sender`
|
|
79
|
+
* differs from the note owner), then asserts a replay reverts with a duplicate-nullifier error.
|
|
80
|
+
*
|
|
81
|
+
* `onExecuted` runs after the successful execution (before the replay attempt) so callers can update
|
|
82
|
+
* their {@link TokenSimulator} to match the state change the executed action produced.
|
|
83
|
+
*/
|
|
84
|
+
export async function assertAuthwitProxyReplayRejected(
|
|
85
|
+
proxy: GenericProxyContract,
|
|
86
|
+
wallet: TestWallet,
|
|
87
|
+
owner: AztecAddress,
|
|
88
|
+
action: ContractFunctionInteraction,
|
|
89
|
+
onExecuted?: () => void,
|
|
90
|
+
): Promise<void> {
|
|
91
|
+
const witness = await wallet.createAuthWit(owner, { caller: proxy.address, action });
|
|
92
|
+
|
|
93
|
+
await sendThroughAuthwitProxy(proxy, action, { from: owner, authWitnesses: [witness] });
|
|
94
|
+
onExecuted?.();
|
|
95
|
+
|
|
96
|
+
await expect(sendThroughAuthwitProxy(proxy, action, { from: owner, authWitnesses: [witness] })).rejects.toThrow(
|
|
97
|
+
DUPLICATE_NULLIFIER_ERROR,
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Deploys an {@link AMMContract} over three freshly deployed tokens (token0, token1, and the liquidity
|
|
103
|
+
* token), makes the AMM the liquidity token's minter, and mints `initialBalance` of token0 and token1 to
|
|
104
|
+
* each liquidity provider plus token0 to the swapper. `deploy` selects the token flavour (Token vs
|
|
105
|
+
* TestToken), so the concrete token type flows through to the caller.
|
|
106
|
+
*/
|
|
107
|
+
export async function deployAmmWithTokens<T extends AnyTokenContract>(
|
|
108
|
+
wallet: Wallet,
|
|
109
|
+
admin: AztecAddress,
|
|
110
|
+
deploy: (wallet: Wallet, admin: AztecAddress, initialBalance: bigint, logger: Logger) => Promise<{ contract: T }>,
|
|
111
|
+
opts: { liquidityProviders: AztecAddress[]; swapper: AztecAddress; initialBalance: bigint; logger: Logger },
|
|
112
|
+
): Promise<{ token0: T; token1: T; liquidityToken: T; amm: AMMContract }> {
|
|
113
|
+
const { liquidityProviders, swapper, initialBalance, logger } = opts;
|
|
114
|
+
|
|
115
|
+
const { contract: token0 } = await deploy(wallet, admin, 0n, logger);
|
|
116
|
+
const { contract: token1 } = await deploy(wallet, admin, 0n, logger);
|
|
117
|
+
const { contract: liquidityToken } = await deploy(wallet, admin, 0n, logger);
|
|
118
|
+
|
|
119
|
+
const { contract: amm } = await AMMContract.deploy(
|
|
120
|
+
wallet,
|
|
121
|
+
token0.address,
|
|
122
|
+
token1.address,
|
|
123
|
+
liquidityToken.address,
|
|
124
|
+
).send({ from: admin });
|
|
125
|
+
|
|
126
|
+
// TODO(#9480): consider deploying the token by some factory when the AMM is deployed, and making the AMM be the
|
|
127
|
+
// minter there.
|
|
128
|
+
await liquidityToken.methods.set_minter(amm.address, true).send({ from: admin });
|
|
129
|
+
|
|
130
|
+
for (const lp of liquidityProviders) {
|
|
131
|
+
await mintTokensToPrivate(token0, admin, lp, initialBalance);
|
|
132
|
+
await mintTokensToPrivate(token1, admin, lp, initialBalance);
|
|
133
|
+
}
|
|
134
|
+
// Note that the swapper only holds token0, not token1.
|
|
135
|
+
await mintTokensToPrivate(token0, admin, swapper, initialBalance);
|
|
136
|
+
|
|
137
|
+
return { token0, token1, liquidityToken, amm };
|
|
138
|
+
}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
type ProfileInteractionOptions,
|
|
6
6
|
} from '@aztec/aztec.js/contracts';
|
|
7
7
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
8
|
+
import { MAX_APPS_PER_KERNEL } from '@aztec/constants';
|
|
8
9
|
import { createLogger } from '@aztec/foundation/log';
|
|
9
10
|
import { type PrivateExecutionStep, serializePrivateExecutionSteps } from '@aztec/stdlib/kernel';
|
|
10
11
|
import type {
|
|
@@ -320,6 +321,26 @@ export function convertProfileToGHBenchmark(benchmark: ClientFlowBenchmark): Git
|
|
|
320
321
|
return benches;
|
|
321
322
|
}
|
|
322
323
|
|
|
324
|
+
/**
|
|
325
|
+
* Computes the expected number of `PrivateExecutionStep` entries the orchestrator will produce
|
|
326
|
+
* for a tx with `apps` private function calls.
|
|
327
|
+
*
|
|
328
|
+
* Step layout: `apps` app circuits + kernel iterations + 1 final reset + 1 tail + 1 hiding kernel.
|
|
329
|
+
* Each kernel iteration absorbs up to `MAX_APPS_PER_KERNEL` apps via the `init_K` / `inner_K`
|
|
330
|
+
* variants, so the kernel count is `ceil(apps / MAX_APPS_PER_KERNEL)`.
|
|
331
|
+
*
|
|
332
|
+
* Caveat: this assumes no mid-flow reset is triggered, which would split a batch into two kernels
|
|
333
|
+
* separated by a reset. For the flows currently exercised in this benchmark suite that holds, but
|
|
334
|
+
* a future flow that grows large enough to overflow per-tx limits before consuming all apps will
|
|
335
|
+
* not match this formula.
|
|
336
|
+
*/
|
|
337
|
+
export function expectedExecutionSteps(apps: number): number {
|
|
338
|
+
const kernels = Math.ceil(apps / MAX_APPS_PER_KERNEL);
|
|
339
|
+
// The final reset and tail are proved as a single circuit (reset_tail or reset_tail_to_public),
|
|
340
|
+
// so they share one execution step.
|
|
341
|
+
return apps + kernels + 1 /* reset+tail */ + 1 /* hiding */;
|
|
342
|
+
}
|
|
343
|
+
|
|
323
344
|
export async function captureProfile(
|
|
324
345
|
label: string,
|
|
325
346
|
interaction: ContractFunctionInteraction | DeployMethod,
|
|
@@ -1,10 +1,12 @@
|
|
|
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';
|
|
7
|
+
import { FeeJuiceContract } from '@aztec/aztec.js/protocol';
|
|
6
8
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
7
|
-
import { CheatCodes } from '@aztec/aztec/testing';
|
|
9
|
+
import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
|
|
8
10
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
9
11
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
10
12
|
import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
@@ -12,24 +14,26 @@ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
|
12
14
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
13
15
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
14
16
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
17
|
+
import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
|
|
15
18
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
16
19
|
import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
|
|
17
20
|
import { TestERC20Bytecode } from '@aztec/l1-artifacts/TestERC20Bytecode';
|
|
18
21
|
import { AMMContract } from '@aztec/noir-contracts.js/AMM';
|
|
19
22
|
import { FPCContract } from '@aztec/noir-contracts.js/FPC';
|
|
20
|
-
import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
|
|
21
23
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
22
|
-
import {
|
|
23
|
-
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
24
|
-
import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
24
|
+
import { TestTokenContract as BananaCoin, TestTokenContract } from '@aztec/noir-test-contracts.js/TestToken';
|
|
25
25
|
import { type PXEConfig, getPXEConfig } from '@aztec/pxe/server';
|
|
26
26
|
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
27
|
-
import { GasSettings } from '@aztec/stdlib/gas';
|
|
28
|
-
import {
|
|
29
|
-
import { TestWallet } from '@aztec/test-wallet/server';
|
|
27
|
+
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
28
|
+
import { AppTaggingSecretKind } from '@aztec/stdlib/logs';
|
|
30
29
|
|
|
31
|
-
import {
|
|
32
|
-
|
|
30
|
+
import {
|
|
31
|
+
AUTOMINE_E2E_OPTS,
|
|
32
|
+
L1_DIRECT_WRITE_ACCOUNT_INDEX,
|
|
33
|
+
MNEMONIC,
|
|
34
|
+
getPaddedMaxFeesPerGas,
|
|
35
|
+
} from '../../fixtures/fixtures.js';
|
|
36
|
+
import { type EndToEndContext, type SetupOptions, setup, teardown } from '../../fixtures/setup.js';
|
|
33
37
|
import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
34
38
|
import { setupSponsoredFPC } from '../../fixtures/utils.js';
|
|
35
39
|
import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
|
|
@@ -37,6 +41,7 @@ import {
|
|
|
37
41
|
FeeJuicePortalTestingHarnessFactory,
|
|
38
42
|
type GasBridgingTestHarness,
|
|
39
43
|
} from '../../shared/gas_portal_test_harness.js';
|
|
44
|
+
import { TestWallet } from '../../test-wallet/test_wallet.js';
|
|
40
45
|
import { ProxyLogger } from './benchmark.js';
|
|
41
46
|
import { type ClientFlowsConfig, FULL_FLOWS_CONFIG, KEY_FLOWS_CONFIG } from './config.js';
|
|
42
47
|
|
|
@@ -70,13 +75,13 @@ export class ClientFlowsBenchmark {
|
|
|
70
75
|
public bananaFPC!: FPCContract;
|
|
71
76
|
public bananaFPCInstance!: ContractInstanceWithAddress;
|
|
72
77
|
// Random asset we want to trade
|
|
73
|
-
public candyBarCoin!:
|
|
78
|
+
public candyBarCoin!: TestTokenContract;
|
|
74
79
|
public candyBarCoinInstance!: ContractInstanceWithAddress;
|
|
75
80
|
// AMM contract
|
|
76
81
|
public amm!: AMMContract;
|
|
77
82
|
public ammInstance!: ContractInstanceWithAddress;
|
|
78
83
|
// Liquidity token for AMM
|
|
79
|
-
public liquidityToken!:
|
|
84
|
+
public liquidityToken!: TestTokenContract;
|
|
80
85
|
public liquidityTokenInstance!: ContractInstanceWithAddress;
|
|
81
86
|
// Sponsored FPC contract
|
|
82
87
|
public sponsoredFPC!: SponsoredFPCContract;
|
|
@@ -87,33 +92,35 @@ export class ClientFlowsBenchmark {
|
|
|
87
92
|
|
|
88
93
|
public realProofs = ['true', '1'].includes(process.env.REAL_PROOFS ?? '');
|
|
89
94
|
|
|
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
|
-
|
|
95
|
+
// `apps` is the number of private function calls contributed by this payment method.
|
|
96
|
+
// Each app produces one execution step at proving time; the orchestrator additionally produces
|
|
97
|
+
// one kernel step per batch of N apps (see `expectedExecutionSteps` in `benchmark.ts`).
|
|
98
|
+
public paymentMethods: Record<BenchmarkingFeePaymentMethod, { forWallet: FeePaymentMethodGetter; apps: number }> = {
|
|
99
|
+
// eslint-disable-next-line camelcase
|
|
100
|
+
bridged_fee_juice: {
|
|
101
|
+
forWallet: this.getBridgedFeeJuicePaymentMethodForWallet.bind(this),
|
|
102
|
+
apps: 1, // FeeJuice claim
|
|
103
|
+
},
|
|
104
|
+
// eslint-disable-next-line camelcase
|
|
105
|
+
private_fpc: {
|
|
106
|
+
forWallet: this.getPrivateFPCPaymentMethodForWallet.bind(this),
|
|
107
|
+
apps:
|
|
108
|
+
1 + // FPC entrypoint
|
|
109
|
+
1 + // BananaCoin transfer_to_public
|
|
110
|
+
1 + // Account verify_private_authwit
|
|
111
|
+
1, // BananaCoin prepare_private_balance_increase
|
|
112
|
+
},
|
|
113
|
+
// eslint-disable-next-line camelcase
|
|
114
|
+
sponsored_fpc: {
|
|
115
|
+
forWallet: this.getSponsoredFPCPaymentMethodForWallet.bind(this),
|
|
116
|
+
apps: 1, // Sponsored FPC sponsor_unconditionally
|
|
117
|
+
},
|
|
118
|
+
// eslint-disable-next-line camelcase
|
|
119
|
+
fee_juice: {
|
|
120
|
+
forWallet: () => Promise.resolve(undefined),
|
|
121
|
+
apps: 0,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
117
124
|
|
|
118
125
|
public config: ClientFlowsConfig;
|
|
119
126
|
|
|
@@ -122,7 +129,7 @@ export class ClientFlowsBenchmark {
|
|
|
122
129
|
|
|
123
130
|
constructor(testName?: string, setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs> = {}) {
|
|
124
131
|
this.logger = createLogger(`bench:client_flows${testName ? `:${testName}` : ''}`);
|
|
125
|
-
this.setupOptions = { startProverNode: true, ...setupOptions };
|
|
132
|
+
this.setupOptions = { ...AUTOMINE_E2E_OPTS, startProverNode: true, ...setupOptions };
|
|
126
133
|
this.config = BENCHMARK_CONFIG === 'key_flows' ? KEY_FLOWS_CONFIG : FULL_FLOWS_CONFIG;
|
|
127
134
|
ProxyLogger.create();
|
|
128
135
|
this.proxyLogger = ProxyLogger.getInstance();
|
|
@@ -130,24 +137,28 @@ export class ClientFlowsBenchmark {
|
|
|
130
137
|
|
|
131
138
|
async setup() {
|
|
132
139
|
this.logger.info('Setting up subsystems from fresh');
|
|
133
|
-
|
|
140
|
+
// Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
141
|
+
// BananaCoin is the codegen'd TestToken here, so the allowlist must key on its class, not canonical Token's.
|
|
142
|
+
const tokenAllowList = await getTokenAllowedSetupFunctions(BananaCoin.artifact);
|
|
143
|
+
this.context = await setup(2, {
|
|
134
144
|
...this.setupOptions,
|
|
135
145
|
fundSponsoredFPC: true,
|
|
136
|
-
skipAccountDeployment: true,
|
|
137
146
|
l1ContractsArgs: this.setupOptions,
|
|
147
|
+
txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
|
|
138
148
|
});
|
|
139
149
|
await this.applyBaseSetup();
|
|
140
150
|
|
|
141
|
-
await this.context.aztecNodeService
|
|
151
|
+
await this.context.aztecNodeService.setConfig({ feeRecipient: this.sequencerAddress, coinbase: this.coinbase });
|
|
142
152
|
|
|
143
153
|
const rollupContract = RollupContract.getFromConfig(this.context.config);
|
|
144
|
-
this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider
|
|
154
|
+
this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider, this.logger, 200).start();
|
|
145
155
|
|
|
146
156
|
return this;
|
|
147
157
|
}
|
|
148
158
|
|
|
149
159
|
async teardown() {
|
|
150
160
|
await this.chainMonitor.stop();
|
|
161
|
+
await this.userWallet?.stop();
|
|
151
162
|
await teardown(this.context);
|
|
152
163
|
}
|
|
153
164
|
|
|
@@ -161,15 +172,15 @@ export class ClientFlowsBenchmark {
|
|
|
161
172
|
|
|
162
173
|
/** Admin mints bananaCoin tokens privately to the target address and redeems them. */
|
|
163
174
|
async mintPrivateBananas(amount: bigint, address: AztecAddress) {
|
|
164
|
-
const balanceBefore = await this.bananaCoin.methods
|
|
175
|
+
const { result: balanceBefore } = await this.bananaCoin.methods
|
|
165
176
|
.balance_of_private(address)
|
|
166
|
-
.simulate({ from:
|
|
177
|
+
.simulate({ from: address });
|
|
167
178
|
|
|
168
179
|
await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
|
|
169
180
|
|
|
170
|
-
const balanceAfter = await this.bananaCoin.methods
|
|
181
|
+
const { result: balanceAfter } = await this.bananaCoin.methods
|
|
171
182
|
.balance_of_private(address)
|
|
172
|
-
.simulate({ from:
|
|
183
|
+
.simulate({ from: address });
|
|
173
184
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
174
185
|
}
|
|
175
186
|
|
|
@@ -179,7 +190,7 @@ export class ClientFlowsBenchmark {
|
|
|
179
190
|
|
|
180
191
|
let benchysPrivateSigningKey;
|
|
181
192
|
if (type === 'schnorr') {
|
|
182
|
-
benchysPrivateSigningKey =
|
|
193
|
+
benchysPrivateSigningKey = GrumpkinScalar.random();
|
|
183
194
|
return wallet.createSchnorrAccount(benchysSecret, salt, benchysPrivateSigningKey);
|
|
184
195
|
} else if (type === 'ecdsar1') {
|
|
185
196
|
benchysPrivateSigningKey = randomBytes(32);
|
|
@@ -196,25 +207,16 @@ export class ClientFlowsBenchmark {
|
|
|
196
207
|
|
|
197
208
|
async applyInitialAccounts() {
|
|
198
209
|
this.logger.info('Applying initial accounts setup');
|
|
199
|
-
const
|
|
200
|
-
2,
|
|
201
|
-
this.logger,
|
|
202
|
-
)({
|
|
203
|
-
wallet: this.context.wallet,
|
|
204
|
-
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
|
|
210
|
+
const [adminAddress, sequencerAddress] = this.context.accounts;
|
|
208
211
|
|
|
209
212
|
this.adminWallet = this.context.wallet;
|
|
210
|
-
this.aztecNode = this.context.aztecNodeService
|
|
213
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
211
214
|
this.cheatCodes = this.context.cheatCodes;
|
|
212
215
|
|
|
213
216
|
this.adminAddress = adminAddress;
|
|
214
217
|
this.sequencerAddress = sequencerAddress;
|
|
215
218
|
|
|
216
|
-
|
|
217
|
-
this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
|
|
219
|
+
this.feeJuiceContract = FeeJuiceContract.withWallet(this.adminWallet);
|
|
218
220
|
this.coinbase = EthAddress.random();
|
|
219
221
|
|
|
220
222
|
const userPXEConfig = getPXEConfig();
|
|
@@ -227,17 +229,38 @@ export class ClientFlowsBenchmark {
|
|
|
227
229
|
loggers: {
|
|
228
230
|
prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied'),
|
|
229
231
|
},
|
|
232
|
+
// The benchmark measures steady-state app cost, not first-send discovery cost. Reproduce the pre-handshake-default
|
|
233
|
+
// behavior of unconstrained delivery: derive the tagging secret from the (sender, recipient) key pair via ECDH
|
|
234
|
+
// instead of taking the current default (a non-interactive handshake, which injects two extra private app
|
|
235
|
+
// executions and a nullifier per cold chain). Constrained delivery is unaffected: the Noir circuit rejects
|
|
236
|
+
// address-derived for constrained, so the hook falls through to a handshake there.
|
|
237
|
+
hooks: {
|
|
238
|
+
resolveTaggingSecretStrategy: ({ deliveryMode }) =>
|
|
239
|
+
Promise.resolve(
|
|
240
|
+
deliveryMode === AppTaggingSecretKind.UNCONSTRAINED
|
|
241
|
+
? { type: 'address-derived' }
|
|
242
|
+
: { type: 'non-interactive-handshake' },
|
|
243
|
+
),
|
|
244
|
+
},
|
|
230
245
|
});
|
|
231
246
|
}
|
|
232
247
|
|
|
233
248
|
async applySetupFeeJuice() {
|
|
234
249
|
this.logger.info('Applying fee juice setup');
|
|
235
|
-
this.feeJuiceContract = FeeJuiceContract.
|
|
250
|
+
this.feeJuiceContract = FeeJuiceContract.withWallet(this.adminWallet);
|
|
236
251
|
|
|
237
252
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
238
|
-
aztecNode: this.context.aztecNodeService
|
|
239
|
-
aztecNodeAdmin: this.context.aztecNodeService
|
|
240
|
-
|
|
253
|
+
aztecNode: this.context.aztecNodeService,
|
|
254
|
+
aztecNodeAdmin: this.context.aztecNodeService,
|
|
255
|
+
// Bridge from a dedicated L1 account so its direct writes don't race the sequencer publisher's
|
|
256
|
+
// txs on the deployer account (see L1_DIRECT_WRITE_ACCOUNT_INDEX).
|
|
257
|
+
l1Client: createExtendedL1Client(
|
|
258
|
+
this.context.config.l1RpcUrls,
|
|
259
|
+
MNEMONIC,
|
|
260
|
+
undefined,
|
|
261
|
+
undefined,
|
|
262
|
+
L1_DIRECT_WRITE_ACCOUNT_INDEX,
|
|
263
|
+
),
|
|
241
264
|
wallet: this.adminWallet,
|
|
242
265
|
logger: this.logger,
|
|
243
266
|
});
|
|
@@ -251,7 +274,9 @@ export class ClientFlowsBenchmark {
|
|
|
251
274
|
'BC',
|
|
252
275
|
'BC',
|
|
253
276
|
18n,
|
|
254
|
-
).send({
|
|
277
|
+
).send({
|
|
278
|
+
from: this.adminAddress,
|
|
279
|
+
});
|
|
255
280
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
256
281
|
this.bananaCoin = bananaCoin;
|
|
257
282
|
this.bananaCoinInstance = bananaCoinInstance;
|
|
@@ -259,13 +284,15 @@ export class ClientFlowsBenchmark {
|
|
|
259
284
|
|
|
260
285
|
async applyDeployCandyBarToken() {
|
|
261
286
|
this.logger.info('Applying candy bar token deployment');
|
|
262
|
-
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await
|
|
287
|
+
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TestTokenContract.deploy(
|
|
263
288
|
this.adminWallet,
|
|
264
289
|
this.adminAddress,
|
|
265
290
|
'CBC',
|
|
266
291
|
'CBC',
|
|
267
292
|
18n,
|
|
268
|
-
).send({
|
|
293
|
+
).send({
|
|
294
|
+
from: this.adminAddress,
|
|
295
|
+
});
|
|
269
296
|
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
270
297
|
this.candyBarCoin = candyBarCoin;
|
|
271
298
|
this.candyBarCoinInstance = candyBarCoinInstance;
|
|
@@ -281,7 +308,9 @@ export class ClientFlowsBenchmark {
|
|
|
281
308
|
this.adminWallet,
|
|
282
309
|
bananaCoin.address,
|
|
283
310
|
this.adminAddress,
|
|
284
|
-
).send({
|
|
311
|
+
).send({
|
|
312
|
+
from: this.adminAddress,
|
|
313
|
+
});
|
|
285
314
|
|
|
286
315
|
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
287
316
|
|
|
@@ -325,18 +354,17 @@ export class ClientFlowsBenchmark {
|
|
|
325
354
|
|
|
326
355
|
public async createAndFundBenchmarkingAccountOnUserWallet(accountType: AccountType) {
|
|
327
356
|
const benchysAccountManager = await this.createBenchmarkingAccountManager(this.adminWallet, accountType);
|
|
328
|
-
const benchysAccount = await benchysAccountManager.getAccount();
|
|
329
357
|
const benchysAddress = benchysAccountManager.address;
|
|
330
358
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
|
|
331
359
|
const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
|
|
332
360
|
await behchysDeployMethod.send({
|
|
333
|
-
from:
|
|
361
|
+
from: NO_FROM,
|
|
334
362
|
fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
|
|
335
363
|
});
|
|
336
364
|
// Register benchy on the user's Wallet, where we're going to be interacting from
|
|
337
365
|
const accountManager = await this.userWallet.createAccount({
|
|
338
|
-
secret:
|
|
339
|
-
salt: new Fr(
|
|
366
|
+
secret: benchysAccountManager.getSecretKey(),
|
|
367
|
+
salt: new Fr(benchysAccountManager.getInstance().salt),
|
|
340
368
|
contract: benchysAccountManager.getAccountContract(),
|
|
341
369
|
});
|
|
342
370
|
return accountManager.address;
|
|
@@ -344,19 +372,21 @@ export class ClientFlowsBenchmark {
|
|
|
344
372
|
|
|
345
373
|
public async applyDeployAmm() {
|
|
346
374
|
this.logger.info('Applying AMM deployment');
|
|
347
|
-
const { contract: liquidityToken, instance: liquidityTokenInstance } = await
|
|
375
|
+
const { contract: liquidityToken, instance: liquidityTokenInstance } = await TestTokenContract.deploy(
|
|
348
376
|
this.adminWallet,
|
|
349
377
|
this.adminAddress,
|
|
350
378
|
'LPT',
|
|
351
379
|
'LPT',
|
|
352
380
|
18n,
|
|
353
|
-
).send({
|
|
381
|
+
).send({
|
|
382
|
+
from: this.adminAddress,
|
|
383
|
+
});
|
|
354
384
|
const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
|
|
355
385
|
this.adminWallet,
|
|
356
386
|
this.bananaCoin.address,
|
|
357
387
|
this.candyBarCoin.address,
|
|
358
388
|
liquidityToken.address,
|
|
359
|
-
).send({ from: this.adminAddress
|
|
389
|
+
).send({ from: this.adminAddress });
|
|
360
390
|
this.logger.info(`AMM deployed at ${amm.address}`);
|
|
361
391
|
await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress });
|
|
362
392
|
this.liquidityToken = liquidityToken;
|
|
@@ -373,8 +403,9 @@ export class ClientFlowsBenchmark {
|
|
|
373
403
|
public async getPrivateFPCPaymentMethodForWallet(wallet: Wallet, sender: AztecAddress) {
|
|
374
404
|
// The private fee paying method assembled on the app side requires knowledge of the maximum
|
|
375
405
|
// fee the user is willing to pay
|
|
376
|
-
const maxFeesPerGas =
|
|
377
|
-
const
|
|
406
|
+
const maxFeesPerGas = await getPaddedMaxFeesPerGas(this.aztecNode);
|
|
407
|
+
const gasLimits = Gas.from((await this.aztecNode.getNodeInfo()).txsLimits.gas);
|
|
408
|
+
const gasSettings = GasSettings.fallback({ gasLimits, maxFeesPerGas });
|
|
378
409
|
return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
|
|
379
410
|
}
|
|
380
411
|
|
|
@@ -6,7 +6,7 @@ export type ClientFlowConfig = {
|
|
|
6
6
|
recursions?: number[];
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
-
type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm';
|
|
9
|
+
type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm' | 'storageProof';
|
|
10
10
|
|
|
11
11
|
export type ClientFlowsConfig = {
|
|
12
12
|
[key in ClientFlows]: ClientFlowConfig;
|
|
@@ -34,6 +34,10 @@ export const KEY_FLOWS_CONFIG: ClientFlowsConfig = {
|
|
|
34
34
|
feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
|
|
35
35
|
recursions: [0, 1],
|
|
36
36
|
},
|
|
37
|
+
storageProof: {
|
|
38
|
+
accounts: ['ecdsar1'],
|
|
39
|
+
feePaymentMethods: ['sponsored_fpc'],
|
|
40
|
+
},
|
|
37
41
|
};
|
|
38
42
|
|
|
39
43
|
export const FULL_FLOWS_CONFIG: ClientFlowsConfig = {
|
|
@@ -58,4 +62,8 @@ export const FULL_FLOWS_CONFIG: ClientFlowsConfig = {
|
|
|
58
62
|
feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
|
|
59
63
|
recursions: [0, 1, 2],
|
|
60
64
|
},
|
|
65
|
+
storageProof: {
|
|
66
|
+
accounts: ['ecdsar1', 'schnorr'],
|
|
67
|
+
feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
|
|
68
|
+
},
|
|
61
69
|
};
|