@aztec/end-to-end 0.0.1-commit.b655e406 → 0.0.1-commit.b8a057fa
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +217 -14
- package/dest/automine/automine_test_context.d.ts +85 -0
- package/dest/automine/automine_test_context.d.ts.map +1 -0
- package/dest/automine/automine_test_context.js +98 -0
- package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/automine/contracts/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/automine/contracts/fixtures/storage_proof_fixture.js +120 -0
- package/dest/automine/delivery/onchain_delivery_harness.d.ts +17 -0
- package/dest/automine/delivery/onchain_delivery_harness.d.ts.map +1 -0
- package/dest/automine/delivery/onchain_delivery_harness.js +123 -0
- package/dest/automine/token/blacklist_token_contract_test.d.ts +49 -0
- package/dest/automine/token/blacklist_token_contract_test.d.ts.map +1 -0
- package/dest/automine/token/blacklist_token_contract_test.js +166 -0
- package/dest/automine/token/token_contract_test.d.ts +40 -0
- package/dest/automine/token/token_contract_test.d.ts.map +1 -0
- package/dest/automine/token/token_contract_test.js +119 -0
- package/dest/automine/token/token_test_helpers.d.ts +73 -0
- package/dest/automine/token/token_test_helpers.d.ts.map +1 -0
- package/dest/automine/token/token_test_helpers.js +97 -0
- package/dest/bench/client_flows/benchmark.d.ts +17 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +40 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +26 -20
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +159 -140
- package/dest/bench/client_flows/config.d.ts +2 -2
- package/dest/bench/client_flows/config.d.ts.map +1 -1
- package/dest/bench/client_flows/config.js +18 -0
- package/dest/bench/client_flows/data_extractor.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.js +8 -27
- package/dest/bench/utils.d.ts +10 -9
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +126 -23
- package/dest/composed/ha/ha_full_setup.d.ts +77 -0
- package/dest/composed/ha/ha_full_setup.d.ts.map +1 -0
- package/dest/composed/ha/ha_full_setup.js +383 -0
- package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts +12 -0
- package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts.map +1 -0
- package/dest/{e2e_multi_validator/utils.js → composed/web3signer/multi_validator_keystore_utils.js} +1 -1
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +34 -0
- package/dest/fixtures/e2e_prover_test.d.ts +27 -29
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +156 -156
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +83 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +86 -3
- package/dest/fixtures/get_acvm_config.d.ts +1 -1
- package/dest/fixtures/get_acvm_config.js +1 -1
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +71 -0
- package/dest/fixtures/ha_setup.d.ts.map +1 -0
- package/dest/fixtures/ha_setup.js +119 -0
- package/dest/fixtures/index.d.ts +3 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +2 -0
- package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +2 -2
- package/dest/fixtures/logging.d.ts +1 -1
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
- package/dest/fixtures/setup.d.ts +269 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +688 -0
- package/dest/fixtures/setup_p2p_test.d.ts +22 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +60 -41
- package/dest/fixtures/timing.d.ts +42 -0
- package/dest/fixtures/timing.d.ts.map +1 -0
- package/dest/fixtures/timing.js +72 -0
- package/dest/fixtures/token_utils.d.ts +26 -5
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +33 -9
- package/dest/fixtures/utils.d.ts +5 -192
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -648
- package/dest/fixtures/wait_helpers.d.ts +135 -0
- package/dest/fixtures/wait_helpers.d.ts.map +1 -0
- package/dest/fixtures/wait_helpers.js +154 -0
- package/dest/fixtures/web3signer.d.ts +1 -1
- package/dest/fixtures/web3signer.js +1 -1
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/index.d.ts +1 -1
- package/dest/install_legacy_contracts.d.cts +10 -0
- package/dest/install_legacy_contracts.d.cts.map +1 -0
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/multi-node/block-production/setup.d.ts +97 -0
- package/dest/multi-node/block-production/setup.d.ts.map +1 -0
- package/dest/multi-node/block-production/setup.js +158 -0
- package/dest/multi-node/governance/setup.d.ts +67 -0
- package/dest/multi-node/governance/setup.d.ts.map +1 -0
- package/dest/multi-node/governance/setup.js +126 -0
- package/dest/multi-node/multi_node_test_context.d.ts +212 -0
- package/dest/multi-node/multi_node_test_context.d.ts.map +1 -0
- package/dest/multi-node/multi_node_test_context.js +347 -0
- package/dest/multi-node/slashing/inactivity_setup.d.ts +27 -0
- package/dest/multi-node/slashing/inactivity_setup.d.ts.map +1 -0
- package/dest/multi-node/slashing/inactivity_setup.js +111 -0
- package/dest/multi-node/slashing/setup.d.ts +167 -0
- package/dest/multi-node/slashing/setup.d.ts.map +1 -0
- package/dest/multi-node/slashing/setup.js +275 -0
- package/dest/p2p/p2p_network.d.ts +325 -0
- package/dest/p2p/p2p_network.d.ts.map +1 -0
- package/dest/p2p/p2p_network.js +389 -0
- package/dest/p2p/reqresp/utils.d.ts +19 -0
- package/dest/p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/p2p/reqresp/utils.js +193 -0
- package/dest/p2p/shared.d.ts +72 -0
- package/dest/p2p/shared.d.ts.map +1 -0
- package/dest/p2p/shared.js +212 -0
- package/dest/quality_of_service/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +11 -8
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +45 -40
- package/dest/shared/gas_portal_test_harness.d.ts +9 -6
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +28 -16
- package/dest/shared/index.d.ts +3 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.d.ts +1 -1
- package/dest/shared/jest_setup.js +41 -1
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +4 -4
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +19 -14
- package/dest/shared/timing_env.d.js +5 -0
- package/dest/shared/timing_env.js +365 -0
- package/dest/shared/uniswap_l1_l2.d.ts +3 -27
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +86 -54
- package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
- package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
- package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +11 -4
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +33 -19
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +3 -24
- package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts +75 -0
- package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts.map +1 -0
- package/dest/single-node/cross-chain/cross_chain_messaging_test.js +209 -0
- package/dest/single-node/cross-chain/message_test_helpers.d.ts +38 -0
- package/dest/single-node/cross-chain/message_test_helpers.d.ts.map +1 -0
- package/dest/single-node/cross-chain/message_test_helpers.js +70 -0
- package/dest/single-node/fees/bridging_race.notest.d.ts +2 -0
- package/dest/single-node/fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.js +21 -10
- package/dest/single-node/fees/fees_test.d.ts +93 -0
- package/dest/single-node/fees/fees_test.d.ts.map +1 -0
- package/dest/single-node/fees/fees_test.js +274 -0
- package/dest/single-node/l1-reorgs/setup.d.ts +42 -0
- package/dest/single-node/l1-reorgs/setup.d.ts.map +1 -0
- package/dest/single-node/l1-reorgs/setup.js +57 -0
- package/dest/single-node/partial-proofs/setup.d.ts +5 -0
- package/dest/single-node/partial-proofs/setup.d.ts.map +1 -0
- package/dest/single-node/partial-proofs/setup.js +5 -0
- package/dest/single-node/proving/setup.d.ts +5 -0
- package/dest/single-node/proving/setup.d.ts.map +1 -0
- package/dest/single-node/proving/setup.js +5 -0
- package/dest/single-node/recovery/setup.d.ts +5 -0
- package/dest/single-node/recovery/setup.d.ts.map +1 -0
- package/dest/single-node/recovery/setup.js +5 -0
- package/dest/single-node/setup.d.ts +49 -0
- package/dest/single-node/setup.d.ts.map +1 -0
- package/dest/single-node/setup.js +56 -0
- package/dest/single-node/single_node_test_context.d.ts +360 -0
- package/dest/single-node/single_node_test_context.d.ts.map +1 -0
- package/dest/single-node/single_node_test_context.js +833 -0
- package/dest/spartan/setup_test_wallets.d.ts +18 -6
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +169 -30
- package/dest/spartan/tx_metrics.d.ts +111 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +507 -0
- package/dest/spartan/utils/bot.d.ts +28 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +142 -0
- package/dest/spartan/utils/chaos.d.ts +79 -0
- package/dest/spartan/utils/chaos.d.ts.map +1 -0
- package/dest/spartan/utils/chaos.js +142 -0
- package/dest/spartan/utils/clients.d.ts +39 -0
- package/dest/spartan/utils/clients.d.ts.map +1 -0
- package/dest/spartan/utils/clients.js +90 -0
- package/dest/spartan/utils/config.d.ts +19 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +23 -0
- package/dest/spartan/utils/health.d.ts +63 -0
- package/dest/spartan/utils/health.d.ts.map +1 -0
- package/dest/spartan/utils/health.js +202 -0
- package/dest/spartan/utils/helm.d.ts +15 -0
- package/dest/spartan/utils/helm.d.ts.map +1 -0
- package/dest/spartan/utils/helm.js +47 -0
- package/dest/spartan/utils/index.d.ts +11 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +22 -0
- package/dest/spartan/utils/k8s.d.ts +128 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +381 -0
- package/dest/spartan/utils/nodes.d.ts +40 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +461 -0
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/spartan/utils/scripts.d.ts +30 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +81 -0
- package/dest/spartan/utils.d.ts +2 -218
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -749
- package/dest/test-wallet/test_wallet.d.ts +105 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +323 -0
- package/dest/test-wallet/utils.d.ts +76 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +126 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +56 -0
- package/dest/test-wallet/worker_wallet.d.ts +53 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +155 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +4 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +22 -0
- package/package.json +57 -47
- package/src/automine/README.md +60 -0
- package/src/automine/automine_test_context.ts +153 -0
- package/src/automine/contracts/fixtures/storage_proof.json +915 -0
- package/src/automine/contracts/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/automine/contracts/fixtures/storage_proof_fixture.ts +173 -0
- package/src/automine/delivery/onchain_delivery_harness.ts +177 -0
- package/src/automine/token/blacklist_token_contract_test.ts +208 -0
- package/src/automine/token/token_contract_test.ts +146 -0
- package/src/automine/token/token_test_helpers.ts +138 -0
- package/src/bench/client_flows/benchmark.ts +45 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +227 -211
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +7 -28
- package/src/bench/utils.ts +144 -25
- package/src/composed/ha/ha_full_setup.ts +466 -0
- package/src/{e2e_multi_validator/utils.ts → composed/web3signer/multi_validator_keystore_utils.ts} +1 -1
- package/src/fixtures/authwit_proxy.ts +54 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +175 -214
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +110 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +192 -0
- package/src/fixtures/index.ts +2 -0
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +987 -0
- package/src/fixtures/setup_p2p_test.ts +72 -58
- package/src/fixtures/timing.ts +97 -0
- package/src/fixtures/token_utils.ts +47 -11
- package/src/fixtures/utils.ts +26 -947
- package/src/fixtures/wait_helpers.ts +333 -0
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +106 -0
- package/src/guides/up_quick_start.sh +8 -5
- package/src/infra/README.md +12 -0
- package/src/install_legacy_contracts.cjs +75 -0
- package/src/legacy-jest-resolver.cjs +112 -0
- package/src/multi-node/README.md +95 -0
- package/src/multi-node/block-production/setup.ts +272 -0
- package/src/multi-node/governance/setup.ts +172 -0
- package/src/multi-node/multi_node_test_context.ts +447 -0
- package/src/multi-node/slashing/inactivity_setup.ts +139 -0
- package/src/multi-node/slashing/setup.ts +433 -0
- package/src/p2p/README.md +78 -0
- package/src/p2p/p2p_network.ts +542 -0
- package/src/p2p/reqresp/utils.ts +263 -0
- package/src/p2p/shared.ts +329 -0
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +51 -43
- package/src/shared/gas_portal_test_harness.ts +36 -18
- package/src/shared/index.ts +2 -1
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +22 -19
- package/src/shared/timing_env.d.mts +39 -0
- package/src/shared/timing_env.mjs +363 -0
- package/src/shared/uniswap_l1_l2.ts +136 -115
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +40 -20
- package/src/simulators/token_simulator.ts +6 -30
- package/src/single-node/README.md +60 -0
- package/src/single-node/cross-chain/cross_chain_messaging_test.ts +302 -0
- package/src/single-node/cross-chain/message_test_helpers.ts +125 -0
- package/src/{e2e_fees → single-node/fees}/bridging_race.notest.ts +23 -15
- package/src/single-node/fees/fees_test.ts +368 -0
- package/src/single-node/l1-reorgs/setup.ts +93 -0
- package/src/single-node/partial-proofs/setup.ts +8 -0
- package/src/single-node/proving/setup.ts +15 -0
- package/src/single-node/recovery/setup.ts +8 -0
- package/src/single-node/setup.ts +63 -0
- package/src/single-node/single_node_test_context.ts +1041 -0
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +243 -32
- package/src/spartan/tx_metrics.ts +460 -0
- package/src/spartan/utils/bot.ts +188 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +29 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +71 -0
- package/src/spartan/utils/k8s.ts +535 -0
- package/src/spartan/utils/nodes.ts +543 -0
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +99 -0
- package/src/spartan/utils.ts +1 -942
- package/src/test-wallet/test_wallet.ts +429 -0
- package/src/test-wallet/utils.ts +205 -0
- package/src/test-wallet/wallet_worker_script.ts +66 -0
- package/src/test-wallet/worker_wallet.ts +214 -0
- package/src/test-wallet/worker_wallet_schema.ts +14 -0
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -54
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +0 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +0 -185
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +0 -41
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +0 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +0 -107
- package/dest/e2e_deploy_contract/deploy_test.d.ts +0 -36
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +0 -1
- package/dest/e2e_deploy_contract/deploy_test.js +0 -45
- package/dest/e2e_epochs/epochs_test.d.ts +0 -92
- package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
- package/dest/e2e_epochs/epochs_test.js +0 -336
- package/dest/e2e_fees/bridging_race.notest.d.ts +0 -2
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.d.ts +0 -84
- package/dest/e2e_fees/fees_test.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.js +0 -260
- package/dest/e2e_l1_publisher/write_json.d.ts +0 -10
- package/dest/e2e_l1_publisher/write_json.d.ts.map +0 -1
- package/dest/e2e_l1_publisher/write_json.js +0 -57
- package/dest/e2e_multi_validator/utils.d.ts +0 -12
- package/dest/e2e_multi_validator/utils.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +0 -29
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +0 -63
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +0 -31
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +0 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +0 -135
- package/dest/e2e_p2p/p2p_network.d.ts +0 -108
- package/dest/e2e_p2p/p2p_network.d.ts.map +0 -1
- package/dest/e2e_p2p/p2p_network.js +0 -318
- package/dest/e2e_p2p/shared.d.ts +0 -46
- package/dest/e2e_p2p/shared.d.ts.map +0 -1
- package/dest/e2e_p2p/shared.js +0 -183
- package/dest/e2e_token_contract/token_contract_test.d.ts +0 -35
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +0 -1
- package/dest/e2e_token_contract/token_contract_test.js +0 -126
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/dest/fixtures/snapshot_manager.d.ts +0 -95
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -505
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +0 -256
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +0 -178
- package/src/e2e_deploy_contract/deploy_test.ts +0 -78
- package/src/e2e_epochs/epochs_test.ts +0 -437
- package/src/e2e_fees/fees_test.ts +0 -378
- package/src/e2e_l1_publisher/write_json.ts +0 -76
- package/src/e2e_nested_contract/nested_contract_test.ts +0 -95
- package/src/e2e_p2p/inactivity_slash_test.ts +0 -178
- package/src/e2e_p2p/p2p_network.ts +0 -472
- package/src/e2e_p2p/shared.ts +0 -282
- package/src/e2e_token_contract/token_contract_test.ts +0 -167
- package/src/fixtures/setup_l1_contracts.ts +0 -26
- package/src/fixtures/snapshot_manager.ts +0 -665
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { computeSecretHash } from '@aztec/aztec.js/crypto';
|
|
3
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
5
|
+
import type { TxHash } from '@aztec/aztec.js/tx';
|
|
6
|
+
import type { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
7
|
+
import { TokenBlacklistContract } from '@aztec/noir-contracts.js/TokenBlacklist';
|
|
8
|
+
import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
|
|
9
|
+
import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
|
|
10
|
+
|
|
11
|
+
import { jest } from '@jest/globals';
|
|
12
|
+
|
|
13
|
+
import { ensureAuthRegistryPublished } from '../../fixtures/setup.js';
|
|
14
|
+
import { TokenSimulator } from '../../simulators/token_simulator.js';
|
|
15
|
+
import { AutomineTestContext, type AutomineTestOpts } from '../automine_test_context.js';
|
|
16
|
+
|
|
17
|
+
export class Role {
|
|
18
|
+
private isAdmin = false;
|
|
19
|
+
private isMinter = false;
|
|
20
|
+
private isBlacklisted = false;
|
|
21
|
+
|
|
22
|
+
withAdmin() {
|
|
23
|
+
this.isAdmin = true;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
withMinter() {
|
|
28
|
+
this.isMinter = true;
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
withBlacklisted() {
|
|
33
|
+
this.isBlacklisted = true;
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
toNoirStruct() {
|
|
38
|
+
// We need to use lowercase identifiers as those are what the noir interface expects
|
|
39
|
+
// eslint-disable-next-line camelcase
|
|
40
|
+
return { is_admin: this.isAdmin, is_minter: this.isMinter, is_blacklisted: this.isBlacklisted };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* TokenBlacklist-domain harness over the automine topology: extends {@link AutomineTestContext} with a
|
|
46
|
+
* {@link TokenSimulator}, the {@link Role} helper, the TokenBlacklist deploy plus a bad-account and
|
|
47
|
+
* authwit proxy, and the role-change-delay warp. Base setup and mint run in {@link setup}.
|
|
48
|
+
*/
|
|
49
|
+
export class BlacklistTokenContractTest extends AutomineTestContext {
|
|
50
|
+
// This value MUST match the same value that we have in the contract
|
|
51
|
+
static CHANGE_ROLES_DELAY = 86400;
|
|
52
|
+
|
|
53
|
+
asset!: TokenBlacklistContract;
|
|
54
|
+
tokenSim!: TokenSimulator;
|
|
55
|
+
badAccount!: InvalidAccountContract;
|
|
56
|
+
authwitProxy!: GenericProxyContract;
|
|
57
|
+
|
|
58
|
+
adminAddress!: AztecAddress;
|
|
59
|
+
otherAddress!: AztecAddress;
|
|
60
|
+
blacklistedAddress!: AztecAddress;
|
|
61
|
+
|
|
62
|
+
private testName: string;
|
|
63
|
+
|
|
64
|
+
constructor(testName: string) {
|
|
65
|
+
super();
|
|
66
|
+
this.testName = testName;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async crossTimestampOfChange() {
|
|
70
|
+
await this.markProvenAndWarp(BlacklistTokenContractTest.CHANGE_ROLES_DELAY);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Applies base setup:
|
|
75
|
+
* 1. Add 3 accounts.
|
|
76
|
+
* 2. Publicly deploy accounts, deploy token contract and a "bad account".
|
|
77
|
+
*/
|
|
78
|
+
async applyBaseSetup() {
|
|
79
|
+
// Bumped from 2 min: pipelined cadence (~24s/dependent-tx) makes the 3-account deploy plus token/bad-account/
|
|
80
|
+
// proxy deploys exceed the original window.
|
|
81
|
+
jest.setTimeout(600_000);
|
|
82
|
+
|
|
83
|
+
this.cheatCodes = this.context.cheatCodes;
|
|
84
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
85
|
+
this.sequencer = this.context.sequencer!;
|
|
86
|
+
this.wallet = this.context.wallet;
|
|
87
|
+
[this.adminAddress, this.otherAddress, this.blacklistedAddress] = this.context.accounts;
|
|
88
|
+
|
|
89
|
+
this.logger.info('Setting up blacklist token contract');
|
|
90
|
+
await ensureAuthRegistryPublished(this.wallet, this.adminAddress);
|
|
91
|
+
|
|
92
|
+
this.logger.verbose(`Deploying TokenContract...`);
|
|
93
|
+
({ contract: this.asset } = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
|
|
94
|
+
from: this.adminAddress,
|
|
95
|
+
}));
|
|
96
|
+
this.logger.verbose(`Token deployed to ${this.asset.address}`);
|
|
97
|
+
|
|
98
|
+
this.logger.verbose(`Deploying bad account...`);
|
|
99
|
+
({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
|
|
100
|
+
from: this.adminAddress,
|
|
101
|
+
}));
|
|
102
|
+
this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
|
|
103
|
+
|
|
104
|
+
// Deploy a proxy contract for "on behalf of other" tests. The note owner must be the tx sender
|
|
105
|
+
// (so their notes are in scope), but msg_sender in the target must differ from the note owner
|
|
106
|
+
// to trigger authwit validation. The proxy forwards calls so that msg_sender != tx sender.
|
|
107
|
+
this.logger.verbose(`Deploying generic proxy...`);
|
|
108
|
+
({ contract: this.authwitProxy } = await GenericProxyContract.deploy(this.wallet).send({
|
|
109
|
+
from: this.adminAddress,
|
|
110
|
+
}));
|
|
111
|
+
this.logger.verbose(`Deployed to ${this.authwitProxy.address}.`);
|
|
112
|
+
|
|
113
|
+
await this.crossTimestampOfChange();
|
|
114
|
+
|
|
115
|
+
this.tokenSim = new TokenSimulator(
|
|
116
|
+
this.asset as unknown as TokenContract,
|
|
117
|
+
this.wallet,
|
|
118
|
+
this.adminAddress,
|
|
119
|
+
this.logger,
|
|
120
|
+
[this.adminAddress, this.otherAddress, this.blacklistedAddress],
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
expect(
|
|
124
|
+
(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
|
|
125
|
+
).toEqual(new Role().withAdmin().toNoirStruct());
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
override async setup(opts: AutomineTestOpts = {}) {
|
|
129
|
+
await super.setup({ numberOfAccounts: 3, ...opts });
|
|
130
|
+
// hydrateFromContext repoints `this.logger` at the context logger; restore the harness-named one.
|
|
131
|
+
this.logger = createLogger(`e2e:automine:blacklist:${this.testName}`);
|
|
132
|
+
await this.applyBaseSetup();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async addPendingShieldNoteToPXE(
|
|
136
|
+
contract: TokenBlacklistContract,
|
|
137
|
+
recipient: AztecAddress,
|
|
138
|
+
amount: bigint,
|
|
139
|
+
secretHash: Fr,
|
|
140
|
+
txHash: TxHash,
|
|
141
|
+
) {
|
|
142
|
+
const txEffects = await this.aztecNode.getTxEffect(txHash);
|
|
143
|
+
await contract.methods
|
|
144
|
+
.process_transparent_note(
|
|
145
|
+
contract.address,
|
|
146
|
+
amount,
|
|
147
|
+
secretHash,
|
|
148
|
+
txHash.hash,
|
|
149
|
+
txEffects!.data.noteHashes,
|
|
150
|
+
txEffects!.data.nullifiers[0],
|
|
151
|
+
recipient,
|
|
152
|
+
)
|
|
153
|
+
.simulate({ from: recipient });
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async applyMint() {
|
|
157
|
+
this.logger.info('Applying mint setup');
|
|
158
|
+
const { asset, tokenSim } = this;
|
|
159
|
+
const amount = 10000n;
|
|
160
|
+
|
|
161
|
+
const adminMinterRole = new Role().withAdmin().withMinter();
|
|
162
|
+
await this.asset.methods
|
|
163
|
+
.update_roles(this.adminAddress, adminMinterRole.toNoirStruct())
|
|
164
|
+
.send({ from: this.adminAddress });
|
|
165
|
+
|
|
166
|
+
const blacklistRole = new Role().withBlacklisted();
|
|
167
|
+
await this.asset.methods
|
|
168
|
+
.update_roles(this.blacklistedAddress, blacklistRole.toNoirStruct())
|
|
169
|
+
.send({ from: this.adminAddress });
|
|
170
|
+
|
|
171
|
+
await this.crossTimestampOfChange();
|
|
172
|
+
|
|
173
|
+
expect(
|
|
174
|
+
(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
|
|
175
|
+
).toEqual(adminMinterRole.toNoirStruct());
|
|
176
|
+
|
|
177
|
+
this.logger.verbose(`Minting ${amount} publicly...`);
|
|
178
|
+
await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress });
|
|
179
|
+
|
|
180
|
+
this.logger.verbose(`Minting ${amount} privately...`);
|
|
181
|
+
const secret = Fr.random();
|
|
182
|
+
const secretHash = await computeSecretHash(secret);
|
|
183
|
+
const { receipt } = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
|
|
184
|
+
|
|
185
|
+
await this.addPendingShieldNoteToPXE(asset, this.adminAddress, amount, secretHash, receipt.txHash);
|
|
186
|
+
await asset.methods.redeem_shield(this.adminAddress, amount, secret).send({ from: this.adminAddress });
|
|
187
|
+
this.logger.verbose(`Minting complete.`);
|
|
188
|
+
|
|
189
|
+
tokenSim.mintPublic(this.adminAddress, amount);
|
|
190
|
+
|
|
191
|
+
const { result: publicBalance } = await asset.methods
|
|
192
|
+
.balance_of_public(this.adminAddress)
|
|
193
|
+
.simulate({ from: this.adminAddress });
|
|
194
|
+
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
195
|
+
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(this.adminAddress));
|
|
196
|
+
|
|
197
|
+
tokenSim.mintPrivate(this.adminAddress, amount);
|
|
198
|
+
const { result: privateBalance } = await asset.methods
|
|
199
|
+
.balance_of_private(this.adminAddress)
|
|
200
|
+
.simulate({ from: this.adminAddress });
|
|
201
|
+
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
202
|
+
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(this.adminAddress));
|
|
203
|
+
|
|
204
|
+
const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: this.adminAddress });
|
|
205
|
+
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
206
|
+
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
3
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
4
|
+
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
5
|
+
import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
|
|
6
|
+
import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
|
|
7
|
+
|
|
8
|
+
import { jest } from '@jest/globals';
|
|
9
|
+
|
|
10
|
+
import { ensureAuthRegistryPublished } from '../../fixtures/setup.js';
|
|
11
|
+
import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
12
|
+
import { TokenSimulator } from '../../simulators/token_simulator.js';
|
|
13
|
+
import { AutomineTestContext, type AutomineTestOpts } from '../automine_test_context.js';
|
|
14
|
+
|
|
15
|
+
const { METRICS_PORT: metricsPort } = process.env;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Token-domain harness over the automine topology: extends {@link AutomineTestContext} with a
|
|
19
|
+
* {@link TokenSimulator}, the USDC Token deploy plus a bad-account and authwit proxy, and an optional
|
|
20
|
+
* mint. Base setup is opt-in via {@link applyBaseSnapshots} (run during `setup()`); {@link applyMint}
|
|
21
|
+
* is called explicitly after `setup()`.
|
|
22
|
+
*/
|
|
23
|
+
export class TokenContractTest extends AutomineTestContext {
|
|
24
|
+
static TOKEN_NAME = 'USDC';
|
|
25
|
+
static TOKEN_SYMBOL = 'USD';
|
|
26
|
+
static TOKEN_DECIMALS = 18n;
|
|
27
|
+
metricsPort?: number;
|
|
28
|
+
asset!: TokenContract;
|
|
29
|
+
tokenSim!: TokenSimulator;
|
|
30
|
+
node!: AztecNode;
|
|
31
|
+
|
|
32
|
+
badAccount!: InvalidAccountContract;
|
|
33
|
+
authwitProxy!: GenericProxyContract;
|
|
34
|
+
adminAddress!: AztecAddress;
|
|
35
|
+
otherAddress!: AztecAddress;
|
|
36
|
+
account2Address!: AztecAddress;
|
|
37
|
+
|
|
38
|
+
private shouldApplyBaseSetup = false;
|
|
39
|
+
private testName: string;
|
|
40
|
+
|
|
41
|
+
constructor(testName: string) {
|
|
42
|
+
super();
|
|
43
|
+
this.testName = testName;
|
|
44
|
+
this.metricsPort = metricsPort ? parseInt(metricsPort) : undefined;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Registers that base setup should be applied during setup().
|
|
49
|
+
* Call this before setup() to deploy 3 accounts, publicly deploy accounts, token contract and a "bad account".
|
|
50
|
+
*/
|
|
51
|
+
applyBaseSnapshots() {
|
|
52
|
+
this.shouldApplyBaseSetup = true;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Applies base setup: deploys 3 accounts, publicly deploys accounts, token contract and a "bad account".
|
|
57
|
+
*/
|
|
58
|
+
private async applyBaseSetup() {
|
|
59
|
+
// Adding a timeout of 2 minutes in here such that it is propagated to the underlying tests
|
|
60
|
+
jest.setTimeout(120_000);
|
|
61
|
+
|
|
62
|
+
this.node = this.context.aztecNodeService;
|
|
63
|
+
this.wallet = this.context.wallet;
|
|
64
|
+
[this.adminAddress, this.otherAddress, this.account2Address] = this.context.accounts;
|
|
65
|
+
|
|
66
|
+
this.logger.info('Applying base setup - deploying token contract');
|
|
67
|
+
await ensureAuthRegistryPublished(this.wallet, this.adminAddress);
|
|
68
|
+
|
|
69
|
+
this.logger.verbose(`Deploying TokenContract...`);
|
|
70
|
+
({ contract: this.asset } = await TokenContract.deploy(
|
|
71
|
+
this.wallet,
|
|
72
|
+
this.adminAddress,
|
|
73
|
+
TokenContractTest.TOKEN_NAME,
|
|
74
|
+
TokenContractTest.TOKEN_SYMBOL,
|
|
75
|
+
TokenContractTest.TOKEN_DECIMALS,
|
|
76
|
+
).send({ from: this.adminAddress }));
|
|
77
|
+
this.logger.verbose(`Token deployed to ${this.asset.address}`);
|
|
78
|
+
|
|
79
|
+
this.logger.verbose(`Deploying bad account...`);
|
|
80
|
+
({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
|
|
81
|
+
from: this.adminAddress,
|
|
82
|
+
}));
|
|
83
|
+
this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
|
|
84
|
+
|
|
85
|
+
// Deploy a proxy contract for "on behalf of other" tests. The note owner must be the tx sender
|
|
86
|
+
// (so their notes are in scope), but msg_sender in the target must differ from the note owner
|
|
87
|
+
// to trigger authwit validation. The proxy forwards calls so that msg_sender != tx sender.
|
|
88
|
+
this.logger.verbose(`Deploying generic proxy...`);
|
|
89
|
+
({ contract: this.authwitProxy } = await GenericProxyContract.deploy(this.wallet).send({
|
|
90
|
+
from: this.adminAddress,
|
|
91
|
+
}));
|
|
92
|
+
this.logger.verbose(`Deployed to ${this.authwitProxy.address}.`);
|
|
93
|
+
|
|
94
|
+
this.tokenSim = new TokenSimulator(this.asset, this.wallet, this.adminAddress, this.logger, [
|
|
95
|
+
this.adminAddress,
|
|
96
|
+
this.otherAddress,
|
|
97
|
+
]);
|
|
98
|
+
|
|
99
|
+
expect((await this.asset.methods.get_admin().simulate({ from: this.adminAddress })).result).toBe(
|
|
100
|
+
this.adminAddress.toBigInt(),
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
override async setup(opts: AutomineTestOpts = {}) {
|
|
105
|
+
await super.setup({ numberOfAccounts: 3, metricsPort: this.metricsPort, ...opts });
|
|
106
|
+
// hydrateFromContext repoints `this.logger` at the context logger; restore the harness-named one.
|
|
107
|
+
this.logger = createLogger(`e2e:automine:token:${this.testName}`);
|
|
108
|
+
|
|
109
|
+
if (this.shouldApplyBaseSetup) {
|
|
110
|
+
await this.applyBaseSetup();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Mints an initial public and private balance to the admin account. Call after {@link setup}. */
|
|
115
|
+
async applyMint() {
|
|
116
|
+
this.logger.info('Applying mint setup');
|
|
117
|
+
const { asset, adminAddress, tokenSim } = this;
|
|
118
|
+
const amount = 10000n;
|
|
119
|
+
|
|
120
|
+
this.logger.verbose(`Minting ${amount} publicly...`);
|
|
121
|
+
await asset.methods.mint_to_public(adminAddress, amount).send({ from: adminAddress });
|
|
122
|
+
tokenSim.mintPublic(adminAddress, amount);
|
|
123
|
+
|
|
124
|
+
const { result: publicBalance } = await asset.methods
|
|
125
|
+
.balance_of_public(adminAddress)
|
|
126
|
+
.simulate({ from: adminAddress });
|
|
127
|
+
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
128
|
+
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(adminAddress));
|
|
129
|
+
|
|
130
|
+
this.logger.verbose(`Minting ${amount} privately...`);
|
|
131
|
+
await mintTokensToPrivate(asset, adminAddress, adminAddress, amount);
|
|
132
|
+
tokenSim.mintPrivate(adminAddress, amount);
|
|
133
|
+
|
|
134
|
+
const { result: privateBalance } = await asset.methods
|
|
135
|
+
.balance_of_private(adminAddress)
|
|
136
|
+
.simulate({ from: adminAddress });
|
|
137
|
+
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
138
|
+
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(adminAddress));
|
|
139
|
+
|
|
140
|
+
const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: adminAddress });
|
|
141
|
+
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
142
|
+
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
143
|
+
|
|
144
|
+
this.logger.verbose(`Minting complete.`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -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,9 +5,16 @@ 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
|
-
import type {
|
|
11
|
+
import type {
|
|
12
|
+
ProvingStats,
|
|
13
|
+
ProvingTimings,
|
|
14
|
+
RoundTripStats,
|
|
15
|
+
SimulationStats,
|
|
16
|
+
SimulationTimings,
|
|
17
|
+
} from '@aztec/stdlib/tx';
|
|
11
18
|
|
|
12
19
|
import assert from 'node:assert';
|
|
13
20
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
@@ -119,6 +126,7 @@ type ClientFlowBenchmark = {
|
|
|
119
126
|
timings: Omit<ProvingTimings & SimulationTimings, 'perFunction'> & { witgen: number };
|
|
120
127
|
maxMemory: number;
|
|
121
128
|
rpc: Record<string, CallRecording>;
|
|
129
|
+
roundTrips: RoundTripStats;
|
|
122
130
|
proverType: ProverType;
|
|
123
131
|
minimumTrace: StructuredTrace;
|
|
124
132
|
totalGateCount: number;
|
|
@@ -212,6 +220,10 @@ export function generateBenchmark(
|
|
|
212
220
|
}, []);
|
|
213
221
|
const timings = stats.timings;
|
|
214
222
|
const totalGateCount = steps[steps.length - 1].accGateCount;
|
|
223
|
+
const nodeRPCCalls = stats.nodeRPCCalls ?? {
|
|
224
|
+
perMethod: {},
|
|
225
|
+
roundTrips: { roundTrips: 0, totalBlockingTime: 0, roundTripDurations: [], roundTripMethods: [] },
|
|
226
|
+
};
|
|
215
227
|
return {
|
|
216
228
|
name: flow,
|
|
217
229
|
timings: {
|
|
@@ -221,7 +233,7 @@ export function generateBenchmark(
|
|
|
221
233
|
unaccounted: timings.unaccounted,
|
|
222
234
|
witgen: timings.perFunction.reduce((acc, fn) => acc + fn.time, 0),
|
|
223
235
|
},
|
|
224
|
-
rpc: Object.entries(
|
|
236
|
+
rpc: Object.entries(nodeRPCCalls.perMethod).reduce(
|
|
225
237
|
(acc, [RPCName, RPCCalls]) => {
|
|
226
238
|
const total = RPCCalls.times.reduce((sum, time) => sum + time, 0);
|
|
227
239
|
const calls = RPCCalls.times.length;
|
|
@@ -236,6 +248,7 @@ export function generateBenchmark(
|
|
|
236
248
|
},
|
|
237
249
|
{} as Record<string, CallRecording>,
|
|
238
250
|
),
|
|
251
|
+
roundTrips: nodeRPCCalls.roundTrips,
|
|
239
252
|
maxMemory,
|
|
240
253
|
proverType,
|
|
241
254
|
minimumTrace: minimumTrace!,
|
|
@@ -280,6 +293,16 @@ export function convertProfileToGHBenchmark(benchmark: ClientFlowBenchmark): Git
|
|
|
280
293
|
value: totalRPCCalls,
|
|
281
294
|
unit: 'calls',
|
|
282
295
|
},
|
|
296
|
+
{
|
|
297
|
+
name: `${benchmark.name}/round_trips`,
|
|
298
|
+
value: benchmark.roundTrips.roundTrips,
|
|
299
|
+
unit: 'round_trips',
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: `${benchmark.name}/round_trips_blocking_time`,
|
|
303
|
+
value: benchmark.roundTrips.totalBlockingTime,
|
|
304
|
+
unit: 'ms',
|
|
305
|
+
},
|
|
283
306
|
];
|
|
284
307
|
if (benchmark.timings.proving) {
|
|
285
308
|
benches.push({
|
|
@@ -298,6 +321,26 @@ export function convertProfileToGHBenchmark(benchmark: ClientFlowBenchmark): Git
|
|
|
298
321
|
return benches;
|
|
299
322
|
}
|
|
300
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
|
+
|
|
301
344
|
export async function captureProfile(
|
|
302
345
|
label: string,
|
|
303
346
|
interaction: ContractFunctionInteraction | DeployMethod,
|