@aztec/end-to-end 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0
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/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 +50 -54
- 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 +44 -49
- 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 +6 -6
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +68 -44
- 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 +7 -6
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +108 -12
- 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 +85 -74
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +83 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +86 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +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 +113 -60
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +330 -326
- 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 +46 -35
- 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 +28 -7
- 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 +99 -35
- 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 +8 -7
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +44 -39
- package/dest/shared/gas_portal_test_harness.d.ts +8 -5
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +27 -15
- 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 +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 +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +67 -55
- 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 +29 -17
- 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 +18 -5
- package/dest/single-node/fees/fees_test.d.ts +93 -0
- package/dest/single-node/fees/fees_test.d.ts.map +1 -0
- package/dest/{e2e_fees → single-node/fees}/fees_test.js +96 -70
- 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 +12 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +153 -49
- package/dest/spartan/tx_metrics.d.ts +64 -5
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +280 -21
- 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 -260
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -942
- 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 +56 -69
- package/src/{e2e_token_contract → automine/token}/token_contract_test.ts +51 -59
- 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 +111 -90
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +1 -0
- package/src/bench/utils.ts +123 -12
- 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 +102 -103
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +110 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +192 -0
- package/src/fixtures/index.ts +2 -0
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +421 -444
- package/src/fixtures/setup_p2p_test.ts +54 -54
- package/src/fixtures/timing.ts +97 -0
- package/src/fixtures/token_utils.ts +46 -10
- 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 +95 -0
- package/src/multi-node/block-production/setup.ts +272 -0
- package/src/multi-node/governance/setup.ts +172 -0
- package/src/multi-node/multi_node_test_context.ts +447 -0
- package/src/multi-node/slashing/inactivity_setup.ts +139 -0
- package/src/multi-node/slashing/setup.ts +433 -0
- package/src/p2p/README.md +78 -0
- package/src/{e2e_p2p → p2p}/p2p_network.ts +132 -57
- package/src/p2p/reqresp/utils.ts +263 -0
- package/src/p2p/shared.ts +329 -0
- package/src/shared/cross_chain_test_harness.ts +52 -41
- package/src/shared/gas_portal_test_harness.ts +34 -16
- 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 +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 +109 -74
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +35 -17
- 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 +20 -9
- package/src/{e2e_fees → single-node/fees}/fees_test.ts +120 -95
- package/src/single-node/l1-reorgs/setup.ts +93 -0
- package/src/single-node/partial-proofs/setup.ts +8 -0
- package/src/single-node/proving/setup.ts +15 -0
- package/src/single-node/recovery/setup.ts +8 -0
- package/src/single-node/setup.ts +63 -0
- package/src/single-node/single_node_test_context.ts +1041 -0
- package/src/spartan/setup_test_wallets.ts +208 -34
- package/src/spartan/tx_metrics.ts +255 -26
- 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 -1246
- 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 -94
- package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
- package/dest/e2e_epochs/epochs_test.js +0 -339
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.d.ts +0 -88
- package/dest/e2e_fees/fees_test.d.ts.map +0 -1
- package/dest/e2e_l1_publisher/write_json.d.ts +0 -10
- package/dest/e2e_l1_publisher/write_json.d.ts.map +0 -1
- package/dest/e2e_l1_publisher/write_json.js +0 -62
- 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 -184
- 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 -451
- package/src/e2e_l1_publisher/write_json.ts +0 -82
- package/src/e2e_nested_contract/nested_contract_test.ts +0 -75
- package/src/e2e_p2p/inactivity_slash_test.ts +0 -179
- package/src/e2e_p2p/shared.ts +0 -290
- /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,213 @@
|
|
|
1
|
+
import { type InitialAccountData, generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
2
|
+
import type { FieldLike } from '@aztec/aztec.js/abi';
|
|
3
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
4
|
+
import type { AztecAddress, CompleteAddress } from '@aztec/aztec.js/addresses';
|
|
5
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
6
|
+
import type { AccountManager } from '@aztec/aztec.js/wallet';
|
|
7
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
8
|
+
import { type DeliveryEvent, OnchainDeliveryTestContract } from '@aztec/noir-test-contracts.js/OnchainDeliveryTest';
|
|
9
|
+
import type { CustomRequest, ResolveCustomRequest, ResolveTaggingSecretStrategy } from '@aztec/pxe/config';
|
|
10
|
+
import type { AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
|
|
11
|
+
|
|
12
|
+
import { jest } from '@jest/globals';
|
|
13
|
+
|
|
14
|
+
import { AUTOMINE_E2E_OPTS } from '../../fixtures/fixtures.js';
|
|
15
|
+
import { ensureHandshakeRegistryPublished, setup, setupPXEAndGetWallet } from '../../fixtures/setup.js';
|
|
16
|
+
import { TestWallet } from '../../test-wallet/test_wallet.js';
|
|
17
|
+
|
|
18
|
+
// Builds the hook serving custom requests issued during the sender's simulations. Installed on the sender PXE at
|
|
19
|
+
// creation but built only once the recipient exists, since serving typically needs the recipient's wallet and keys.
|
|
20
|
+
export type CustomRequestResponder = (
|
|
21
|
+
recipient: TestWallet,
|
|
22
|
+
recipientAccount: InitialAccountData,
|
|
23
|
+
recipientCompleteAddress: CompleteAddress,
|
|
24
|
+
) => ResolveCustomRequest;
|
|
25
|
+
|
|
26
|
+
export type Mode = 'constrained' | 'unconstrained';
|
|
27
|
+
|
|
28
|
+
// A single mode applies to both the event and note sends; `{ events, notes }` sends each in its own mode, which
|
|
29
|
+
// exercises cross-mode handshake reuse: bootstrap in one mode, deliver in the other on the same handshake.
|
|
30
|
+
export type DeliveryMode = Mode | { events: Mode; notes: Mode };
|
|
31
|
+
|
|
32
|
+
const formatMode = (mode: DeliveryMode): string => (typeof mode === 'string' ? mode : `${mode.events}->${mode.notes}`);
|
|
33
|
+
|
|
34
|
+
// Onchain private delivery has two orthogonal axes: the delivery MODE (constrained = nullifier-chained sequence;
|
|
35
|
+
// unconstrained = no nullifier, windowed scan) and the tagging-secret SOURCE, which the wallet's
|
|
36
|
+
// `resolveTaggingSecretStrategy` hook selects. This harness exercises (strategy, mode) cells end to end across two
|
|
37
|
+
// PXEs that share only a node: the sender PXE sends, the recipient PXE discovers purely from onchain logs plus the
|
|
38
|
+
// HandshakeRegistry.
|
|
39
|
+
//
|
|
40
|
+
// Cross-PXE is the meaningful setup: the recipient PXE holds no sender state, so a cell only "discovers" a message if
|
|
41
|
+
// the source truly reached it.
|
|
42
|
+
export function buildMessageDeliveryTest(opts: {
|
|
43
|
+
// Names the tagging-secret source, e.g. 'non-interactive handshake' or 'arbitrary secret'. The describe title is
|
|
44
|
+
// derived as `${strategy} x ${mode}`.
|
|
45
|
+
strategy: string;
|
|
46
|
+
mode: DeliveryMode;
|
|
47
|
+
// Required: every cell states its source explicitly rather than leaning on the PXE default (covered by unit tests).
|
|
48
|
+
senderHook: ResolveTaggingSecretStrategy;
|
|
49
|
+
// Recipient-side setup the source requires (e.g. registering a raw arbitrary secret); runs once after deployment.
|
|
50
|
+
recipientRegistration?: (
|
|
51
|
+
recipient: TestWallet,
|
|
52
|
+
recipientAddress: AztecAddress,
|
|
53
|
+
sender: AztecAddress,
|
|
54
|
+
) => Promise<void>;
|
|
55
|
+
// Serves the custom requests issued during the sender's simulations (e.g. the registry's interactive-handshake
|
|
56
|
+
// signature request).
|
|
57
|
+
customRequestResponder?: CustomRequestResponder;
|
|
58
|
+
// Extra `it()`s to register in this cell's suite, e.g. assertions against state a custom `senderHook` recorded.
|
|
59
|
+
// Called inside the same `describe`, after the two baseline assertions below, so it shares their `beforeAll`
|
|
60
|
+
// instead of depending on Jest's cross-`describe` execution order.
|
|
61
|
+
additionalTests?: () => void;
|
|
62
|
+
}) {
|
|
63
|
+
const { strategy, mode, senderHook, recipientRegistration, customRequestResponder, additionalTests } = opts;
|
|
64
|
+
const description = `${strategy} x ${formatMode(mode)}`;
|
|
65
|
+
|
|
66
|
+
describe(description, () => {
|
|
67
|
+
jest.setTimeout(300_000);
|
|
68
|
+
|
|
69
|
+
const eventValues = [10n, 20n, 30n];
|
|
70
|
+
const noteValues = [40n, 50n, 60n];
|
|
71
|
+
|
|
72
|
+
let aztecNode: AztecNode & AztecNodeDebug;
|
|
73
|
+
let walletSender: TestWallet;
|
|
74
|
+
let walletRecipient: TestWallet;
|
|
75
|
+
let sender: AztecAddress;
|
|
76
|
+
let recipient: AztecAddress;
|
|
77
|
+
let contractSender: OnchainDeliveryTestContract;
|
|
78
|
+
let teardownSender: () => Promise<void>;
|
|
79
|
+
let teardownRecipient: () => Promise<void>;
|
|
80
|
+
// Discovery results captured in beforeAll, so the assertions in the actual tests below stay pure.
|
|
81
|
+
// A failure during delivery fails beforeAll loudly instead of being swallowed as an expected red.
|
|
82
|
+
let discoveredEvents: FieldLike[];
|
|
83
|
+
let readNotes: bigint[];
|
|
84
|
+
|
|
85
|
+
const { events: eventMode, notes: noteMode } = typeof mode === 'string' ? { events: mode, notes: mode } : mode;
|
|
86
|
+
const sendEvent = (value: bigint) =>
|
|
87
|
+
eventMode === 'constrained'
|
|
88
|
+
? contractSender.methods.emit_event(recipient, value)
|
|
89
|
+
: contractSender.methods.emit_event_unconstrained(recipient, value);
|
|
90
|
+
const sendNote = (value: bigint) =>
|
|
91
|
+
noteMode === 'constrained'
|
|
92
|
+
? contractSender.methods.emit_note(recipient, value)
|
|
93
|
+
: contractSender.methods.emit_note_unconstrained(recipient, value);
|
|
94
|
+
|
|
95
|
+
let additionallyFundedAccounts: InitialAccountData[];
|
|
96
|
+
let recipientAccount: AccountManager | undefined;
|
|
97
|
+
let customRequestCount = 0;
|
|
98
|
+
|
|
99
|
+
beforeAll(async () => {
|
|
100
|
+
// The sender PXE holds the sender and carries this cell's tagging-secret-strategy hook. The recipient is funded
|
|
101
|
+
// at genesis here but created and deployed on the isolated recipient PXE below, so it carries no sender state
|
|
102
|
+
// from other cells.
|
|
103
|
+
({
|
|
104
|
+
aztecNode,
|
|
105
|
+
additionallyFundedAccounts,
|
|
106
|
+
wallet: walletSender,
|
|
107
|
+
accounts: [sender],
|
|
108
|
+
teardown: teardownSender,
|
|
109
|
+
} = await setup(1, {
|
|
110
|
+
...AUTOMINE_E2E_OPTS,
|
|
111
|
+
additionallyFundedAccounts: await generateSchnorrAccounts(1, 'schnorr'),
|
|
112
|
+
pxeCreationOptions: {
|
|
113
|
+
hooks: {
|
|
114
|
+
resolveTaggingSecretStrategy: senderHook,
|
|
115
|
+
resolveCustomRequest: async (request: CustomRequest) => {
|
|
116
|
+
if (!customRequestResponder) {
|
|
117
|
+
throw new Error('A custom request arrived but this test cell has no customRequestResponder configured');
|
|
118
|
+
}
|
|
119
|
+
if (!recipientAccount) {
|
|
120
|
+
throw new Error('A custom request arrived before the recipient wallet was created');
|
|
121
|
+
}
|
|
122
|
+
customRequestCount++;
|
|
123
|
+
const respond = customRequestResponder(
|
|
124
|
+
walletRecipient,
|
|
125
|
+
additionallyFundedAccounts[0],
|
|
126
|
+
await recipientAccount.getCompleteAddress(),
|
|
127
|
+
);
|
|
128
|
+
return respond(request);
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
}));
|
|
133
|
+
|
|
134
|
+
({ wallet: walletRecipient, teardown: teardownRecipient } = await setupPXEAndGetWallet(
|
|
135
|
+
aztecNode,
|
|
136
|
+
aztecNode,
|
|
137
|
+
{},
|
|
138
|
+
undefined,
|
|
139
|
+
'pxe-recipient',
|
|
140
|
+
));
|
|
141
|
+
recipientAccount = await walletRecipient.createSchnorrAccount(
|
|
142
|
+
additionallyFundedAccounts[0].secret,
|
|
143
|
+
additionallyFundedAccounts[0].salt,
|
|
144
|
+
additionallyFundedAccounts[0].signingKey,
|
|
145
|
+
);
|
|
146
|
+
await (await recipientAccount.getDeployMethod()).send({ from: NO_FROM });
|
|
147
|
+
recipient = recipientAccount.address;
|
|
148
|
+
|
|
149
|
+
await ensureHandshakeRegistryPublished(walletSender, sender);
|
|
150
|
+
const { contract: deployed, instance } = await OnchainDeliveryTestContract.deploy(walletSender).send({
|
|
151
|
+
from: sender,
|
|
152
|
+
});
|
|
153
|
+
contractSender = deployed;
|
|
154
|
+
|
|
155
|
+
await ensureHandshakeRegistryPublished(walletRecipient, recipient);
|
|
156
|
+
await walletRecipient.registerContract(instance, OnchainDeliveryTestContract.artifact);
|
|
157
|
+
|
|
158
|
+
await recipientRegistration?.(walletRecipient, recipient, sender);
|
|
159
|
+
|
|
160
|
+
// Constrained sends to one pair are strictly ordered, so deliver one tx at a time. The first send bootstraps the
|
|
161
|
+
// handshake (when the source is a handshake); the rest reuse it.
|
|
162
|
+
const blockNumbers: number[] = [];
|
|
163
|
+
for (const value of eventValues) {
|
|
164
|
+
const { receipt } = await sendEvent(value).send({ from: sender });
|
|
165
|
+
blockNumbers.push(receipt.blockNumber!);
|
|
166
|
+
}
|
|
167
|
+
for (const value of noteValues) {
|
|
168
|
+
await sendNote(value).send({ from: sender });
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
await walletRecipient.sync();
|
|
172
|
+
|
|
173
|
+
const events = await walletRecipient.getPrivateEvents<DeliveryEvent>(
|
|
174
|
+
OnchainDeliveryTestContract.events.DeliveryEvent,
|
|
175
|
+
{
|
|
176
|
+
contractAddress: contractSender.address,
|
|
177
|
+
fromBlock: BlockNumber(Math.min(...blockNumbers)),
|
|
178
|
+
toBlock: BlockNumber(Math.max(...blockNumbers) + 1),
|
|
179
|
+
scopes: [recipient],
|
|
180
|
+
},
|
|
181
|
+
);
|
|
182
|
+
discoveredEvents = events.map(e => e.event.value);
|
|
183
|
+
|
|
184
|
+
const contractRecipient = OnchainDeliveryTestContract.at(contractSender.address, walletRecipient);
|
|
185
|
+
const { result } = await contractRecipient.methods.get_note_values(recipient).simulate({ from: recipient });
|
|
186
|
+
readNotes = result.storage.slice(0, Number(result.len));
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
afterAll(async () => {
|
|
190
|
+
await teardownRecipient();
|
|
191
|
+
await teardownSender();
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
it('the recipient PXE discovers the events delivered by the sender PXE', () => {
|
|
195
|
+
expect(discoveredEvents.length).toBe(eventValues.length);
|
|
196
|
+
for (const value of eventValues) {
|
|
197
|
+
expect(discoveredEvents).toContainEqual(value);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it('the recipient PXE reads back the notes delivered by the sender PXE', () => {
|
|
202
|
+
expect(readNotes).toEqual(noteValues);
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
if (customRequestResponder) {
|
|
206
|
+
it('the custom request hook fires exactly once, on the send that bootstraps the tagging secret', () => {
|
|
207
|
+
expect(customRequestCount).toBe(1);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
additionalTests?.();
|
|
212
|
+
});
|
|
213
|
+
}
|
package/src/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.ts
RENAMED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import { computeSecretHash } from '@aztec/aztec.js/crypto';
|
|
3
3
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
|
-
import {
|
|
5
|
-
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
4
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
6
5
|
import type { TxHash } from '@aztec/aztec.js/tx';
|
|
7
|
-
import type { CheatCodes } from '@aztec/aztec/testing';
|
|
8
6
|
import type { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
9
7
|
import { TokenBlacklistContract } from '@aztec/noir-contracts.js/TokenBlacklist';
|
|
8
|
+
import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
|
|
10
9
|
import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
|
|
11
|
-
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
12
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
13
10
|
|
|
14
11
|
import { jest } from '@jest/globals';
|
|
15
12
|
|
|
16
|
-
import {
|
|
17
|
-
import { TokenSimulator } from '
|
|
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';
|
|
18
16
|
|
|
19
17
|
export class Role {
|
|
20
18
|
private isAdmin = false;
|
|
@@ -43,34 +41,33 @@ export class Role {
|
|
|
43
41
|
}
|
|
44
42
|
}
|
|
45
43
|
|
|
46
|
-
|
|
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 {
|
|
47
50
|
// This value MUST match the same value that we have in the contract
|
|
48
51
|
static CHANGE_ROLES_DELAY = 86400;
|
|
49
52
|
|
|
50
|
-
context!: EndToEndContext;
|
|
51
|
-
logger: Logger;
|
|
52
|
-
wallet!: TestWallet;
|
|
53
53
|
asset!: TokenBlacklistContract;
|
|
54
54
|
tokenSim!: TokenSimulator;
|
|
55
55
|
badAccount!: InvalidAccountContract;
|
|
56
|
-
|
|
57
|
-
sequencer!: SequencerClient;
|
|
58
|
-
aztecNode!: AztecNode;
|
|
56
|
+
authwitProxy!: GenericProxyContract;
|
|
59
57
|
|
|
60
58
|
adminAddress!: AztecAddress;
|
|
61
59
|
otherAddress!: AztecAddress;
|
|
62
60
|
blacklistedAddress!: AztecAddress;
|
|
63
61
|
|
|
62
|
+
private testName: string;
|
|
63
|
+
|
|
64
64
|
constructor(testName: string) {
|
|
65
|
-
|
|
65
|
+
super();
|
|
66
|
+
this.testName = testName;
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
async crossTimestampOfChange() {
|
|
69
|
-
await this.
|
|
70
|
-
this.sequencer,
|
|
71
|
-
this.aztecNode,
|
|
72
|
-
BlacklistTokenContractTest.CHANGE_ROLES_DELAY,
|
|
73
|
-
);
|
|
70
|
+
await this.markProvenAndWarp(BlacklistTokenContractTest.CHANGE_ROLES_DELAY);
|
|
74
71
|
}
|
|
75
72
|
|
|
76
73
|
/**
|
|
@@ -79,41 +76,40 @@ export class BlacklistTokenContractTest {
|
|
|
79
76
|
* 2. Publicly deploy accounts, deploy token contract and a "bad account".
|
|
80
77
|
*/
|
|
81
78
|
async applyBaseSetup() {
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
this.logger.info('Deploying 3 accounts');
|
|
86
|
-
const { deployedAccounts } = await deployAccounts(
|
|
87
|
-
3,
|
|
88
|
-
this.logger,
|
|
89
|
-
)({
|
|
90
|
-
wallet: this.context.wallet,
|
|
91
|
-
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
92
|
-
});
|
|
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);
|
|
93
82
|
|
|
94
83
|
this.cheatCodes = this.context.cheatCodes;
|
|
95
|
-
this.aztecNode = this.context.aztecNodeService
|
|
84
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
96
85
|
this.sequencer = this.context.sequencer!;
|
|
97
86
|
this.wallet = this.context.wallet;
|
|
98
|
-
this.adminAddress =
|
|
99
|
-
this.otherAddress = deployedAccounts[1].address;
|
|
100
|
-
this.blacklistedAddress = deployedAccounts[2].address;
|
|
87
|
+
[this.adminAddress, this.otherAddress, this.blacklistedAddress] = this.context.accounts;
|
|
101
88
|
|
|
102
89
|
this.logger.info('Setting up blacklist token contract');
|
|
103
|
-
|
|
104
|
-
this.logger.verbose(`Public deploy accounts...`);
|
|
105
|
-
await publicDeployAccounts(this.wallet, [this.adminAddress, this.otherAddress, this.blacklistedAddress]);
|
|
90
|
+
await ensureAuthRegistryPublished(this.wallet, this.adminAddress);
|
|
106
91
|
|
|
107
92
|
this.logger.verbose(`Deploying TokenContract...`);
|
|
108
|
-
this.asset = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress)
|
|
109
|
-
|
|
110
|
-
|
|
93
|
+
({ contract: this.asset } = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
|
|
94
|
+
from: this.adminAddress,
|
|
95
|
+
}));
|
|
111
96
|
this.logger.verbose(`Token deployed to ${this.asset.address}`);
|
|
112
97
|
|
|
113
98
|
this.logger.verbose(`Deploying bad account...`);
|
|
114
|
-
this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({
|
|
99
|
+
({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
|
|
100
|
+
from: this.adminAddress,
|
|
101
|
+
}));
|
|
115
102
|
this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
|
|
116
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
|
+
|
|
117
113
|
await this.crossTimestampOfChange();
|
|
118
114
|
|
|
119
115
|
this.tokenSim = new TokenSimulator(
|
|
@@ -124,24 +120,18 @@ export class BlacklistTokenContractTest {
|
|
|
124
120
|
[this.adminAddress, this.otherAddress, this.blacklistedAddress],
|
|
125
121
|
);
|
|
126
122
|
|
|
127
|
-
expect(
|
|
128
|
-
|
|
129
|
-
);
|
|
123
|
+
expect(
|
|
124
|
+
(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
|
|
125
|
+
).toEqual(new Role().withAdmin().toNoirStruct());
|
|
130
126
|
}
|
|
131
127
|
|
|
132
|
-
async setup() {
|
|
133
|
-
|
|
134
|
-
this.context
|
|
135
|
-
|
|
136
|
-
skipAccountDeployment: true,
|
|
137
|
-
});
|
|
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}`);
|
|
138
132
|
await this.applyBaseSetup();
|
|
139
133
|
}
|
|
140
134
|
|
|
141
|
-
async teardown() {
|
|
142
|
-
await teardown(this.context);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
135
|
async addPendingShieldNoteToPXE(
|
|
146
136
|
contract: TokenBlacklistContract,
|
|
147
137
|
recipient: AztecAddress,
|
|
@@ -171,50 +161,47 @@ export class BlacklistTokenContractTest {
|
|
|
171
161
|
const adminMinterRole = new Role().withAdmin().withMinter();
|
|
172
162
|
await this.asset.methods
|
|
173
163
|
.update_roles(this.adminAddress, adminMinterRole.toNoirStruct())
|
|
174
|
-
.send({ from: this.adminAddress })
|
|
175
|
-
.wait();
|
|
164
|
+
.send({ from: this.adminAddress });
|
|
176
165
|
|
|
177
166
|
const blacklistRole = new Role().withBlacklisted();
|
|
178
167
|
await this.asset.methods
|
|
179
168
|
.update_roles(this.blacklistedAddress, blacklistRole.toNoirStruct())
|
|
180
|
-
.send({ from: this.adminAddress })
|
|
181
|
-
.wait();
|
|
169
|
+
.send({ from: this.adminAddress });
|
|
182
170
|
|
|
183
171
|
await this.crossTimestampOfChange();
|
|
184
172
|
|
|
185
|
-
expect(
|
|
186
|
-
|
|
187
|
-
);
|
|
173
|
+
expect(
|
|
174
|
+
(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
|
|
175
|
+
).toEqual(adminMinterRole.toNoirStruct());
|
|
188
176
|
|
|
189
177
|
this.logger.verbose(`Minting ${amount} publicly...`);
|
|
190
|
-
await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress })
|
|
178
|
+
await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress });
|
|
191
179
|
|
|
192
180
|
this.logger.verbose(`Minting ${amount} privately...`);
|
|
193
181
|
const secret = Fr.random();
|
|
194
182
|
const secretHash = await computeSecretHash(secret);
|
|
195
|
-
const receipt = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress })
|
|
183
|
+
const { receipt } = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
|
|
196
184
|
|
|
197
185
|
await this.addPendingShieldNoteToPXE(asset, this.adminAddress, amount, secretHash, receipt.txHash);
|
|
198
|
-
|
|
199
|
-
await txClaim.wait();
|
|
186
|
+
await asset.methods.redeem_shield(this.adminAddress, amount, secret).send({ from: this.adminAddress });
|
|
200
187
|
this.logger.verbose(`Minting complete.`);
|
|
201
188
|
|
|
202
189
|
tokenSim.mintPublic(this.adminAddress, amount);
|
|
203
190
|
|
|
204
|
-
const publicBalance = await asset.methods
|
|
191
|
+
const { result: publicBalance } = await asset.methods
|
|
205
192
|
.balance_of_public(this.adminAddress)
|
|
206
193
|
.simulate({ from: this.adminAddress });
|
|
207
194
|
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
208
195
|
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(this.adminAddress));
|
|
209
196
|
|
|
210
197
|
tokenSim.mintPrivate(this.adminAddress, amount);
|
|
211
|
-
const privateBalance = await asset.methods
|
|
198
|
+
const { result: privateBalance } = await asset.methods
|
|
212
199
|
.balance_of_private(this.adminAddress)
|
|
213
200
|
.simulate({ from: this.adminAddress });
|
|
214
201
|
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
215
202
|
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(this.adminAddress));
|
|
216
203
|
|
|
217
|
-
const totalSupply = await asset.methods.total_supply().simulate({ from: this.adminAddress });
|
|
204
|
+
const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: this.adminAddress });
|
|
218
205
|
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
219
206
|
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
220
207
|
}
|
|
@@ -1,40 +1,46 @@
|
|
|
1
1
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
-
import {
|
|
2
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
3
3
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
4
4
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
5
|
+
import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
|
|
5
6
|
import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
|
|
6
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
7
7
|
|
|
8
8
|
import { jest } from '@jest/globals';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import { mintTokensToPrivate } from '
|
|
12
|
-
import { TokenSimulator } from '
|
|
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';
|
|
13
14
|
|
|
14
15
|
const { METRICS_PORT: metricsPort } = process.env;
|
|
15
16
|
|
|
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 {
|
|
17
24
|
static TOKEN_NAME = 'USDC';
|
|
18
25
|
static TOKEN_SYMBOL = 'USD';
|
|
19
26
|
static TOKEN_DECIMALS = 18n;
|
|
20
|
-
context!: EndToEndContext;
|
|
21
|
-
logger: Logger;
|
|
22
27
|
metricsPort?: number;
|
|
23
28
|
asset!: TokenContract;
|
|
24
29
|
tokenSim!: TokenSimulator;
|
|
25
30
|
node!: AztecNode;
|
|
26
31
|
|
|
27
32
|
badAccount!: InvalidAccountContract;
|
|
28
|
-
|
|
33
|
+
authwitProxy!: GenericProxyContract;
|
|
29
34
|
adminAddress!: AztecAddress;
|
|
30
|
-
|
|
35
|
+
otherAddress!: AztecAddress;
|
|
31
36
|
account2Address!: AztecAddress;
|
|
32
37
|
|
|
33
38
|
private shouldApplyBaseSetup = false;
|
|
34
|
-
private
|
|
39
|
+
private testName: string;
|
|
35
40
|
|
|
36
41
|
constructor(testName: string) {
|
|
37
|
-
|
|
42
|
+
super();
|
|
43
|
+
this.testName = testName;
|
|
38
44
|
this.metricsPort = metricsPort ? parseInt(metricsPort) : undefined;
|
|
39
45
|
}
|
|
40
46
|
|
|
@@ -46,14 +52,6 @@ export class TokenContractTest {
|
|
|
46
52
|
this.shouldApplyBaseSetup = true;
|
|
47
53
|
}
|
|
48
54
|
|
|
49
|
-
/**
|
|
50
|
-
* Registers that mint should be applied during setup().
|
|
51
|
-
* Call this before setup() to mint tokens to the admin account.
|
|
52
|
-
*/
|
|
53
|
-
applyMintSnapshot() {
|
|
54
|
-
this.shouldApplyMint = true;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
55
|
/**
|
|
58
56
|
* Applies base setup: deploys 3 accounts, publicly deploys accounts, token contract and a "bad account".
|
|
59
57
|
*/
|
|
@@ -61,79 +59,71 @@ export class TokenContractTest {
|
|
|
61
59
|
// Adding a timeout of 2 minutes in here such that it is propagated to the underlying tests
|
|
62
60
|
jest.setTimeout(120_000);
|
|
63
61
|
|
|
64
|
-
this.
|
|
65
|
-
const { deployedAccounts } = await deployAccounts(
|
|
66
|
-
3,
|
|
67
|
-
this.logger,
|
|
68
|
-
)({
|
|
69
|
-
wallet: this.context.wallet,
|
|
70
|
-
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
this.node = this.context.aztecNodeService!;
|
|
62
|
+
this.node = this.context.aztecNodeService;
|
|
74
63
|
this.wallet = this.context.wallet;
|
|
75
|
-
[this.adminAddress, this.
|
|
64
|
+
[this.adminAddress, this.otherAddress, this.account2Address] = this.context.accounts;
|
|
76
65
|
|
|
77
66
|
this.logger.info('Applying base setup - deploying token contract');
|
|
78
|
-
this.
|
|
79
|
-
await publicDeployAccounts(this.wallet, [this.adminAddress, this.account1Address]);
|
|
67
|
+
await ensureAuthRegistryPublished(this.wallet, this.adminAddress);
|
|
80
68
|
|
|
81
69
|
this.logger.verbose(`Deploying TokenContract...`);
|
|
82
|
-
this.asset = await TokenContract.deploy(
|
|
70
|
+
({ contract: this.asset } = await TokenContract.deploy(
|
|
83
71
|
this.wallet,
|
|
84
72
|
this.adminAddress,
|
|
85
73
|
TokenContractTest.TOKEN_NAME,
|
|
86
74
|
TokenContractTest.TOKEN_SYMBOL,
|
|
87
75
|
TokenContractTest.TOKEN_DECIMALS,
|
|
88
|
-
)
|
|
89
|
-
.send({ from: this.adminAddress })
|
|
90
|
-
.deployed();
|
|
76
|
+
).send({ from: this.adminAddress }));
|
|
91
77
|
this.logger.verbose(`Token deployed to ${this.asset.address}`);
|
|
92
78
|
|
|
93
79
|
this.logger.verbose(`Deploying bad account...`);
|
|
94
|
-
this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({
|
|
80
|
+
({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
|
|
81
|
+
from: this.adminAddress,
|
|
82
|
+
}));
|
|
95
83
|
this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
|
|
96
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
|
+
|
|
97
94
|
this.tokenSim = new TokenSimulator(this.asset, this.wallet, this.adminAddress, this.logger, [
|
|
98
95
|
this.adminAddress,
|
|
99
|
-
this.
|
|
96
|
+
this.otherAddress,
|
|
100
97
|
]);
|
|
101
98
|
|
|
102
|
-
expect(await this.asset.methods.get_admin().simulate({ from: this.adminAddress })).toBe(
|
|
99
|
+
expect((await this.asset.methods.get_admin().simulate({ from: this.adminAddress })).result).toBe(
|
|
103
100
|
this.adminAddress.toBigInt(),
|
|
104
101
|
);
|
|
105
102
|
}
|
|
106
103
|
|
|
107
|
-
async setup() {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
skipAccountDeployment: true,
|
|
112
|
-
});
|
|
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}`);
|
|
113
108
|
|
|
114
109
|
if (this.shouldApplyBaseSetup) {
|
|
115
110
|
await this.applyBaseSetup();
|
|
116
111
|
}
|
|
117
|
-
|
|
118
|
-
if (this.shouldApplyMint) {
|
|
119
|
-
await this.applyMint();
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
async teardown() {
|
|
124
|
-
await teardown(this.context);
|
|
125
112
|
}
|
|
126
113
|
|
|
127
|
-
private
|
|
114
|
+
/** Mints an initial public and private balance to the admin account. Call after {@link setup}. */
|
|
115
|
+
async applyMint() {
|
|
128
116
|
this.logger.info('Applying mint setup');
|
|
129
117
|
const { asset, adminAddress, tokenSim } = this;
|
|
130
118
|
const amount = 10000n;
|
|
131
119
|
|
|
132
120
|
this.logger.verbose(`Minting ${amount} publicly...`);
|
|
133
|
-
await asset.methods.mint_to_public(adminAddress, amount).send({ from: adminAddress })
|
|
121
|
+
await asset.methods.mint_to_public(adminAddress, amount).send({ from: adminAddress });
|
|
134
122
|
tokenSim.mintPublic(adminAddress, amount);
|
|
135
123
|
|
|
136
|
-
const publicBalance = await asset.methods
|
|
124
|
+
const { result: publicBalance } = await asset.methods
|
|
125
|
+
.balance_of_public(adminAddress)
|
|
126
|
+
.simulate({ from: adminAddress });
|
|
137
127
|
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
138
128
|
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(adminAddress));
|
|
139
129
|
|
|
@@ -141,11 +131,13 @@ export class TokenContractTest {
|
|
|
141
131
|
await mintTokensToPrivate(asset, adminAddress, adminAddress, amount);
|
|
142
132
|
tokenSim.mintPrivate(adminAddress, amount);
|
|
143
133
|
|
|
144
|
-
const privateBalance = await asset.methods
|
|
134
|
+
const { result: privateBalance } = await asset.methods
|
|
135
|
+
.balance_of_private(adminAddress)
|
|
136
|
+
.simulate({ from: adminAddress });
|
|
145
137
|
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
146
138
|
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(adminAddress));
|
|
147
139
|
|
|
148
|
-
const totalSupply = await asset.methods.total_supply().simulate({ from: adminAddress });
|
|
140
|
+
const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: adminAddress });
|
|
149
141
|
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
150
142
|
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
151
143
|
|