@aztec/end-to-end 0.0.1-commit.96dac018d → 0.0.1-commit.9a89641
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +229 -14
- package/dest/automine/automine_test_context.d.ts +85 -0
- package/dest/automine/automine_test_context.d.ts.map +1 -0
- package/dest/automine/automine_test_context.js +98 -0
- package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fixture.d.ts +1 -1
- package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/automine/delivery/interactive_handshake_responder.d.ts +48 -0
- package/dest/automine/delivery/interactive_handshake_responder.d.ts.map +1 -0
- package/dest/automine/delivery/interactive_handshake_responder.js +76 -0
- package/dest/automine/delivery/onchain_delivery_harness.d.ts +19 -0
- package/dest/automine/delivery/onchain_delivery_harness.d.ts.map +1 -0
- package/dest/automine/delivery/onchain_delivery_harness.js +141 -0
- package/dest/automine/token/blacklist_token_contract_test.d.ts +49 -0
- package/dest/automine/token/blacklist_token_contract_test.d.ts.map +1 -0
- package/dest/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.js +37 -50
- 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 +35 -50
- 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 +65 -59
- package/dest/bench/client_flows/data_extractor.js +1 -0
- package/dest/bench/utils.d.ts +3 -3
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +102 -8
- package/dest/composed/ha/ha_full_setup.d.ts +77 -0
- package/dest/composed/ha/ha_full_setup.d.ts.map +1 -0
- package/dest/composed/ha/ha_full_setup.js +383 -0
- package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts +12 -0
- package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.d.ts +3 -3
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
- package/dest/fixtures/authwit_proxy.js +4 -0
- package/dest/fixtures/e2e_prover_test.d.ts +15 -11
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +60 -44
- package/dest/fixtures/fixtures.d.ts +79 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +80 -0
- package/dest/fixtures/get_acvm_config.d.ts +1 -1
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_acvm_config.js +2 -2
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +6 -6
- package/dest/fixtures/ha_setup.d.ts +4 -4
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +5 -2
- package/dest/fixtures/index.d.ts +2 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
- package/dest/fixtures/setup.d.ts +88 -45
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +297 -202
- package/dest/fixtures/setup_p2p_test.d.ts +10 -6
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +11 -11
- package/dest/fixtures/standard_contracts_genesis.d.ts +16 -0
- package/dest/fixtures/standard_contracts_genesis.d.ts.map +1 -0
- package/dest/fixtures/standard_contracts_genesis.js +25 -0
- package/dest/fixtures/timing.d.ts +42 -0
- package/dest/fixtures/timing.d.ts.map +1 -0
- package/dest/fixtures/timing.js +72 -0
- package/dest/fixtures/token_utils.d.ts +22 -4
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +23 -6
- package/dest/fixtures/utils.d.ts +2 -2
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +1 -1
- package/dest/fixtures/wait_helpers.d.ts +135 -0
- package/dest/fixtures/wait_helpers.d.ts.map +1 -0
- package/dest/fixtures/wait_helpers.js +154 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/install_legacy_contracts.d.cts +10 -0
- package/dest/install_legacy_contracts.d.cts.map +1 -0
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/multi-node/block-production/setup.d.ts +97 -0
- package/dest/multi-node/block-production/setup.d.ts.map +1 -0
- package/dest/multi-node/block-production/setup.js +158 -0
- package/dest/multi-node/governance/setup.d.ts +67 -0
- package/dest/multi-node/governance/setup.d.ts.map +1 -0
- package/dest/multi-node/governance/setup.js +126 -0
- package/dest/multi-node/multi_node_test_context.d.ts +212 -0
- package/dest/multi-node/multi_node_test_context.d.ts.map +1 -0
- package/dest/multi-node/multi_node_test_context.js +347 -0
- package/dest/multi-node/slashing/inactivity_setup.d.ts +27 -0
- package/dest/multi-node/slashing/inactivity_setup.d.ts.map +1 -0
- package/dest/multi-node/slashing/inactivity_setup.js +111 -0
- package/dest/multi-node/slashing/setup.d.ts +167 -0
- package/dest/multi-node/slashing/setup.d.ts.map +1 -0
- package/dest/multi-node/slashing/setup.js +275 -0
- package/dest/{e2e_p2p → p2p}/p2p_network.d.ts +21 -11
- package/dest/p2p/p2p_network.d.ts.map +1 -0
- package/dest/{e2e_p2p → p2p}/p2p_network.js +95 -48
- package/dest/p2p/reqresp/utils.d.ts +19 -0
- package/dest/p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/{e2e_p2p → p2p}/reqresp/utils.js +45 -29
- package/dest/p2p/shared.d.ts +72 -0
- package/dest/p2p/shared.d.ts.map +1 -0
- package/dest/p2p/shared.js +212 -0
- package/dest/shared/cross_chain_test_harness.d.ts +6 -4
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +44 -32
- package/dest/shared/gas_portal_test_harness.d.ts +9 -6
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +28 -17
- package/dest/shared/jest_setup.js +32 -1
- package/dest/shared/submit-transactions.d.ts +1 -1
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +12 -5
- package/dest/shared/timing_env.d.js +5 -0
- package/dest/shared/timing_env.js +365 -0
- package/dest/shared/uniswap_l1_l2.d.ts +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +55 -45
- package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
- package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
- package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
- package/dest/simulators/lending_simulator.d.ts +10 -3
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +27 -15
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +2 -2
- package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts +75 -0
- package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts.map +1 -0
- package/dest/single-node/cross-chain/cross_chain_messaging_test.js +209 -0
- package/dest/single-node/cross-chain/message_test_helpers.d.ts +38 -0
- package/dest/single-node/cross-chain/message_test_helpers.d.ts.map +1 -0
- package/dest/single-node/cross-chain/message_test_helpers.js +70 -0
- package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.d.ts +1 -1
- package/dest/single-node/fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.js +17 -4
- package/dest/single-node/fees/fees_test.d.ts +95 -0
- package/dest/single-node/fees/fees_test.d.ts.map +1 -0
- package/dest/single-node/fees/fees_test.js +344 -0
- package/dest/single-node/l1-reorgs/setup.d.ts +42 -0
- package/dest/single-node/l1-reorgs/setup.d.ts.map +1 -0
- package/dest/single-node/l1-reorgs/setup.js +57 -0
- package/dest/single-node/partial-proofs/setup.d.ts +5 -0
- package/dest/single-node/partial-proofs/setup.d.ts.map +1 -0
- package/dest/single-node/partial-proofs/setup.js +5 -0
- package/dest/single-node/proving/setup.d.ts +5 -0
- package/dest/single-node/proving/setup.d.ts.map +1 -0
- package/dest/single-node/proving/setup.js +5 -0
- package/dest/single-node/recovery/setup.d.ts +5 -0
- package/dest/single-node/recovery/setup.d.ts.map +1 -0
- package/dest/single-node/recovery/setup.js +5 -0
- package/dest/single-node/setup.d.ts +49 -0
- package/dest/single-node/setup.d.ts.map +1 -0
- package/dest/single-node/setup.js +56 -0
- package/dest/single-node/single_node_test_context.d.ts +374 -0
- package/dest/single-node/single_node_test_context.d.ts.map +1 -0
- package/dest/single-node/single_node_test_context.js +847 -0
- package/dest/spartan/setup_test_wallets.d.ts +4 -2
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +93 -46
- package/dest/spartan/tx_metrics.d.ts +27 -4
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +106 -21
- package/dest/spartan/utils/config.d.ts +10 -30
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +3 -1
- package/dest/spartan/utils/index.d.ts +3 -1
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +4 -0
- package/dest/spartan/utils/nodes.js +3 -3
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/test-wallet/test_wallet.d.ts +47 -25
- package/dest/test-wallet/test_wallet.d.ts.map +1 -1
- package/dest/test-wallet/test_wallet.js +197 -91
- package/dest/test-wallet/utils.d.ts +38 -3
- package/dest/test-wallet/utils.d.ts.map +1 -1
- package/dest/test-wallet/utils.js +65 -10
- package/dest/test-wallet/wallet_worker_script.js +12 -4
- package/dest/test-wallet/worker_wallet.d.ts +9 -8
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet.js +10 -4
- package/dest/test-wallet/worker_wallet_schema.d.ts +3 -273
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet_schema.js +15 -2
- package/package.json +50 -47
- package/src/automine/README.md +60 -0
- package/src/automine/automine_test_context.ts +153 -0
- package/src/automine/delivery/interactive_handshake_responder.ts +125 -0
- package/src/automine/delivery/onchain_delivery_harness.ts +213 -0
- package/src/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.ts +42 -61
- package/src/{e2e_token_contract → automine/token}/token_contract_test.ts +41 -56
- package/src/automine/token/token_test_helpers.ts +138 -0
- package/src/bench/client_flows/benchmark.ts +21 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +105 -70
- package/src/bench/client_flows/data_extractor.ts +1 -0
- package/src/bench/utils.ts +116 -7
- package/src/composed/ha/ha_full_setup.ts +466 -0
- package/src/fixtures/authwit_proxy.ts +4 -0
- package/src/fixtures/e2e_prover_test.ts +80 -64
- package/src/fixtures/fixtures.ts +100 -0
- package/src/fixtures/get_acvm_config.ts +2 -8
- package/src/fixtures/get_bb_config.ts +8 -8
- package/src/fixtures/ha_setup.ts +11 -5
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +379 -264
- package/src/fixtures/setup_p2p_test.ts +15 -11
- package/src/fixtures/standard_contracts_genesis.ts +28 -0
- package/src/fixtures/timing.ts +97 -0
- package/src/fixtures/token_utils.ts +40 -6
- package/src/fixtures/utils.ts +2 -3
- package/src/fixtures/wait_helpers.ts +333 -0
- package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +106 -0
- package/src/guides/up_quick_start.sh +5 -2
- package/src/infra/README.md +12 -0
- package/src/install_legacy_contracts.cjs +75 -0
- package/src/legacy-jest-resolver.cjs +112 -0
- package/src/multi-node/README.md +96 -0
- package/src/multi-node/block-production/setup.ts +272 -0
- package/src/multi-node/governance/setup.ts +172 -0
- package/src/multi-node/multi_node_test_context.ts +447 -0
- package/src/multi-node/slashing/inactivity_setup.ts +139 -0
- package/src/multi-node/slashing/setup.ts +433 -0
- package/src/p2p/README.md +78 -0
- package/src/{e2e_p2p → p2p}/p2p_network.ts +115 -66
- package/src/{e2e_p2p → p2p}/reqresp/utils.ts +56 -28
- package/src/p2p/shared.ts +329 -0
- package/src/shared/cross_chain_test_harness.ts +44 -21
- package/src/shared/gas_portal_test_harness.ts +35 -18
- package/src/shared/jest_setup.ts +36 -1
- package/src/shared/submit-transactions.ts +13 -8
- package/src/shared/timing_env.d.mts +39 -0
- package/src/shared/timing_env.mjs +363 -0
- package/src/shared/uniswap_l1_l2.ts +98 -54
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +33 -15
- package/src/simulators/token_simulator.ts +6 -2
- package/src/single-node/README.md +66 -0
- package/src/single-node/cross-chain/cross_chain_messaging_test.ts +302 -0
- package/src/single-node/cross-chain/message_test_helpers.ts +125 -0
- package/src/{e2e_fees → single-node/fees}/bridging_race.notest.ts +19 -5
- package/src/single-node/fees/fees_test.ts +434 -0
- package/src/single-node/l1-reorgs/setup.ts +93 -0
- package/src/single-node/partial-proofs/setup.ts +8 -0
- package/src/single-node/proving/setup.ts +15 -0
- package/src/single-node/recovery/setup.ts +8 -0
- package/src/single-node/setup.ts +63 -0
- package/src/single-node/single_node_test_context.ts +1058 -0
- package/src/spartan/setup_test_wallets.ts +117 -45
- package/src/spartan/tx_metrics.ts +108 -24
- package/src/spartan/utils/config.ts +2 -0
- package/src/spartan/utils/index.ts +6 -0
- package/src/spartan/utils/nodes.ts +3 -3
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/test-wallet/test_wallet.ts +227 -107
- package/src/test-wallet/utils.ts +104 -11
- package/src/test-wallet/wallet_worker_script.ts +11 -5
- package/src/test-wallet/worker_wallet.ts +19 -16
- package/src/test-wallet/worker_wallet_schema.ts +4 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -55
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +0 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +0 -47
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +0 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +0 -129
- package/dest/e2e_deploy_contract/deploy_test.d.ts +0 -37
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +0 -1
- package/dest/e2e_deploy_contract/deploy_test.js +0 -50
- package/dest/e2e_epochs/epochs_test.d.ts +0 -102
- package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
- package/dest/e2e_epochs/epochs_test.js +0 -386
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.d.ts +0 -88
- package/dest/e2e_fees/fees_test.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.js +0 -248
- package/dest/e2e_l1_publisher/write_json.d.ts +0 -11
- package/dest/e2e_l1_publisher/write_json.d.ts.map +0 -1
- package/dest/e2e_l1_publisher/write_json.js +0 -56
- package/dest/e2e_multi_validator/utils.d.ts +0 -12
- package/dest/e2e_multi_validator/utils.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +0 -26
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +0 -56
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +0 -31
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +0 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +0 -136
- package/dest/e2e_p2p/p2p_network.d.ts.map +0 -1
- package/dest/e2e_p2p/reqresp/utils.d.ts +0 -22
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +0 -1
- package/dest/e2e_p2p/shared.d.ts +0 -46
- package/dest/e2e_p2p/shared.d.ts.map +0 -1
- package/dest/e2e_p2p/shared.js +0 -181
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +0 -2
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +0 -1
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +0 -1
- package/dest/e2e_token_contract/token_contract_test.d.ts +0 -44
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +0 -1
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +0 -193
- package/src/e2e_deploy_contract/deploy_test.ts +0 -85
- package/src/e2e_epochs/epochs_test.ts +0 -487
- package/src/e2e_fees/fees_test.ts +0 -324
- package/src/e2e_l1_publisher/write_json.ts +0 -77
- package/src/e2e_nested_contract/nested_contract_test.ts +0 -73
- package/src/e2e_p2p/inactivity_slash_test.ts +0 -179
- package/src/e2e_p2p/shared.ts +0 -290
- /package/dest/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fetcher.js +0 -0
- /package/dest/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fixture.js +0 -0
- /package/dest/{e2e_multi_validator/utils.js → composed/web3signer/multi_validator_keystore_utils.js} +0 -0
- /package/src/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof.json +0 -0
- /package/src/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fetcher.ts +0 -0
- /package/src/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fixture.ts +0 -0
- /package/src/{e2e_multi_validator/utils.ts → composed/web3signer/multi_validator_keystore_utils.ts} +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
import { type AnyTokenContract } from '../../fixtures/token_utils.js';
|
|
8
|
+
import type { TestWallet } from '../../test-wallet/test_wallet.js';
|
|
9
|
+
/** Whether an amount / balance is read from the private or public balance of the token. */
|
|
10
|
+
export type BalanceKind = 'private' | 'public';
|
|
11
|
+
/** The invalid-authwit-nonce assertion the contract raises when `from == msg_sender` but nonce != 0. */
|
|
12
|
+
export declare const INVALID_AUTHWIT_NONCE_ERROR = "Assertion failed: Invalid authwit nonce. When 'from' and 'msg_sender' are the same, 'authwit_nonce' must be zero";
|
|
13
|
+
/** Minimal token shape needed to read balances — satisfied structurally by Token/TestToken/TokenBlacklist. */
|
|
14
|
+
export interface BalanceReadable {
|
|
15
|
+
methods: {
|
|
16
|
+
balance_of_private(owner: AztecAddress): {
|
|
17
|
+
simulate(opts: {
|
|
18
|
+
from: AztecAddress;
|
|
19
|
+
}): Promise<{
|
|
20
|
+
result: bigint;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
balance_of_public(owner: AztecAddress): {
|
|
24
|
+
simulate(opts: {
|
|
25
|
+
from: AztecAddress;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
result: bigint;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** Reads the private or public balance of an account, simulating from that account's own scope. */
|
|
33
|
+
export declare function balanceOf(asset: BalanceReadable, kind: BalanceKind, account: AztecAddress): Promise<bigint>;
|
|
34
|
+
/** Returns half of an account's balance, asserting it is non-zero so the operation under test is meaningful. */
|
|
35
|
+
export declare function halfBalanceOf(asset: BalanceReadable, kind: BalanceKind, owner: AztecAddress): Promise<bigint>;
|
|
36
|
+
/** Returns an amount just above an account's balance (balance + delta), asserting it is non-zero. */
|
|
37
|
+
export declare function amountAboveBalance(asset: BalanceReadable, kind: BalanceKind, owner: AztecAddress, delta?: bigint): Promise<bigint>;
|
|
38
|
+
/**
|
|
39
|
+
* Grants a public authwit for `caller` to run `action` on behalf of `owner`, executes it from `caller`,
|
|
40
|
+
* then asserts a replay of the same call reverts as unauthorized (the authwit is single-use).
|
|
41
|
+
*
|
|
42
|
+
* `onExecuted` runs after the successful execution (before the replay attempt) so callers can update
|
|
43
|
+
* their {@link TokenSimulator} to match the state change the executed action produced.
|
|
44
|
+
*/
|
|
45
|
+
export declare function assertPublicAuthwitReplayRejected(wallet: TestWallet, owner: AztecAddress, action: ContractFunctionInteraction, caller: AztecAddress, onExecuted?: () => void): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Creates a private authwit for `owner`, executes `action` through the authwit proxy (so `msg_sender`
|
|
48
|
+
* differs from the note owner), then asserts a replay reverts with a duplicate-nullifier error.
|
|
49
|
+
*
|
|
50
|
+
* `onExecuted` runs after the successful execution (before the replay attempt) so callers can update
|
|
51
|
+
* their {@link TokenSimulator} to match the state change the executed action produced.
|
|
52
|
+
*/
|
|
53
|
+
export declare function assertAuthwitProxyReplayRejected(proxy: GenericProxyContract, wallet: TestWallet, owner: AztecAddress, action: ContractFunctionInteraction, onExecuted?: () => void): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Deploys an {@link AMMContract} over three freshly deployed tokens (token0, token1, and the liquidity
|
|
56
|
+
* token), makes the AMM the liquidity token's minter, and mints `initialBalance` of token0 and token1 to
|
|
57
|
+
* each liquidity provider plus token0 to the swapper. `deploy` selects the token flavour (Token vs
|
|
58
|
+
* TestToken), so the concrete token type flows through to the caller.
|
|
59
|
+
*/
|
|
60
|
+
export declare function deployAmmWithTokens<T extends AnyTokenContract>(wallet: Wallet, admin: AztecAddress, deploy: (wallet: Wallet, admin: AztecAddress, initialBalance: bigint, logger: Logger) => Promise<{
|
|
61
|
+
contract: T;
|
|
62
|
+
}>, opts: {
|
|
63
|
+
liquidityProviders: AztecAddress[];
|
|
64
|
+
swapper: AztecAddress;
|
|
65
|
+
initialBalance: bigint;
|
|
66
|
+
logger: Logger;
|
|
67
|
+
}): Promise<{
|
|
68
|
+
token0: T;
|
|
69
|
+
token1: T;
|
|
70
|
+
liquidityToken: T;
|
|
71
|
+
amm: AMMContract;
|
|
72
|
+
}>;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fdGVzdF9oZWxwZXJzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXV0b21pbmUvdG9rZW4vdG9rZW5fdGVzdF9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0UsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFJdkYsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQXVCLE1BQU0sK0JBQStCLENBQUM7QUFDM0YsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbkUsMkZBQTJGO0FBQzNGLE1BQU0sTUFBTSxXQUFXLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUUvQyx3R0FBd0c7QUFDeEcsZUFBTyxNQUFNLDJCQUEyQixxSEFDNEUsQ0FBQztBQUVySCxnSEFBOEc7QUFDOUcsTUFBTSxXQUFXLGVBQWU7SUFDOUIsT0FBTyxFQUFFO1FBQ1Asa0JBQWtCLENBQUMsS0FBSyxFQUFFLFlBQVksR0FBRztZQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQTthQUFFLEdBQUcsT0FBTyxDQUFDO2dCQUFFLE1BQU0sRUFBRSxNQUFNLENBQUE7YUFBRSxDQUFDLENBQUE7U0FBRSxDQUFDO1FBQ2pILGlCQUFpQixDQUFDLEtBQUssRUFBRSxZQUFZLEdBQUc7WUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUFFLElBQUksRUFBRSxZQUFZLENBQUE7YUFBRSxHQUFHLE9BQU8sQ0FBQztnQkFBRSxNQUFNLEVBQUUsTUFBTSxDQUFBO2FBQUUsQ0FBQyxDQUFBO1NBQUUsQ0FBQztLQUNqSCxDQUFDO0NBQ0g7QUFFRCxtR0FBbUc7QUFDbkcsd0JBQXNCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBSWpIO0FBRUQsZ0hBQWdIO0FBQ2hILHdCQUFzQixhQUFhLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUluSDtBQUVELHFHQUFxRztBQUNyRyx3QkFBc0Isa0JBQWtCLENBQ3RDLEtBQUssRUFBRSxlQUFlLEVBQ3RCLElBQUksRUFBRSxXQUFXLEVBQ2pCLEtBQUssRUFBRSxZQUFZLEVBQ25CLEtBQUssU0FBSyxHQUNULE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FJakI7QUFFRDs7Ozs7O0dBTUc7QUFDSCx3QkFBc0IsaUNBQWlDLENBQ3JELE1BQU0sRUFBRSxVQUFVLEVBQ2xCLEtBQUssRUFBRSxZQUFZLEVBQ25CLE1BQU0sRUFBRSwyQkFBMkIsRUFDbkMsTUFBTSxFQUFFLFlBQVksRUFDcEIsVUFBVSxDQUFDLEVBQUUsTUFBTSxJQUFJLEdBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FRZjtBQUVEOzs7Ozs7R0FNRztBQUNILHdCQUFzQixnQ0FBZ0MsQ0FDcEQsS0FBSyxFQUFFLG9CQUFvQixFQUMzQixNQUFNLEVBQUUsVUFBVSxFQUNsQixLQUFLLEVBQUUsWUFBWSxFQUNuQixNQUFNLEVBQUUsMkJBQTJCLEVBQ25DLFVBQVUsQ0FBQyxFQUFFLE1BQU0sSUFBSSxHQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLENBU2Y7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFzQixtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsZ0JBQWdCLEVBQ2xFLE1BQU0sRUFBRSxNQUFNLEVBQ2QsS0FBSyxFQUFFLFlBQVksRUFDbkIsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxPQUFPLENBQUM7SUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0NBQUUsQ0FBQyxFQUNqSCxJQUFJLEVBQUU7SUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7SUFBQyxjQUFjLEVBQUUsTUFBTSxDQUFDO0lBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQTtDQUFFLEdBQzFHLE9BQU8sQ0FBQztJQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUFDLEdBQUcsRUFBRSxXQUFXLENBQUE7Q0FBRSxDQUFDLENBMEJ4RSJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token_test_helpers.d.ts","sourceRoot":"","sources":["../../../src/automine/token/token_test_helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { AMMContract } from '@aztec/noir-contracts.js/AMM';
|
|
2
|
+
import { sendThroughAuthwitProxy } from '../../fixtures/authwit_proxy.js';
|
|
3
|
+
import { DUPLICATE_NULLIFIER_ERROR } from '../../fixtures/fixtures.js';
|
|
4
|
+
import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
5
|
+
/** The invalid-authwit-nonce assertion the contract raises when `from == msg_sender` but nonce != 0. */ export const INVALID_AUTHWIT_NONCE_ERROR = "Assertion failed: Invalid authwit nonce. When 'from' and 'msg_sender' are the same, 'authwit_nonce' must be zero";
|
|
6
|
+
/** Reads the private or public balance of an account, simulating from that account's own scope. */ export async function balanceOf(asset, kind, account) {
|
|
7
|
+
const interaction = kind === 'private' ? asset.methods.balance_of_private(account) : asset.methods.balance_of_public(account);
|
|
8
|
+
return (await interaction.simulate({
|
|
9
|
+
from: account
|
|
10
|
+
})).result;
|
|
11
|
+
}
|
|
12
|
+
/** Returns half of an account's balance, asserting it is non-zero so the operation under test is meaningful. */ export async function halfBalanceOf(asset, kind, owner) {
|
|
13
|
+
const amount = await balanceOf(asset, kind, owner) / 2n;
|
|
14
|
+
expect(amount).toBeGreaterThan(0n);
|
|
15
|
+
return amount;
|
|
16
|
+
}
|
|
17
|
+
/** Returns an amount just above an account's balance (balance + delta), asserting it is non-zero. */ export async function amountAboveBalance(asset, kind, owner, delta = 1n) {
|
|
18
|
+
const amount = await balanceOf(asset, kind, owner) + delta;
|
|
19
|
+
expect(amount).toBeGreaterThan(0n);
|
|
20
|
+
return amount;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Grants a public authwit for `caller` to run `action` on behalf of `owner`, executes it from `caller`,
|
|
24
|
+
* then asserts a replay of the same call reverts as unauthorized (the authwit is single-use).
|
|
25
|
+
*
|
|
26
|
+
* `onExecuted` runs after the successful execution (before the replay attempt) so callers can update
|
|
27
|
+
* their {@link TokenSimulator} to match the state change the executed action produced.
|
|
28
|
+
*/ export async function assertPublicAuthwitReplayRejected(wallet, owner, action, caller, onExecuted) {
|
|
29
|
+
const grant = await wallet.setPublicAuthWit(owner, {
|
|
30
|
+
caller,
|
|
31
|
+
action
|
|
32
|
+
}, true);
|
|
33
|
+
await grant.send();
|
|
34
|
+
await action.send({
|
|
35
|
+
from: caller
|
|
36
|
+
});
|
|
37
|
+
onExecuted?.();
|
|
38
|
+
await expect(action.simulate({
|
|
39
|
+
from: caller
|
|
40
|
+
})).rejects.toThrow(/unauthorized/);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Creates a private authwit for `owner`, executes `action` through the authwit proxy (so `msg_sender`
|
|
44
|
+
* differs from the note owner), then asserts a replay reverts with a duplicate-nullifier error.
|
|
45
|
+
*
|
|
46
|
+
* `onExecuted` runs after the successful execution (before the replay attempt) so callers can update
|
|
47
|
+
* their {@link TokenSimulator} to match the state change the executed action produced.
|
|
48
|
+
*/ export async function assertAuthwitProxyReplayRejected(proxy, wallet, owner, action, onExecuted) {
|
|
49
|
+
const witness = await wallet.createAuthWit(owner, {
|
|
50
|
+
caller: proxy.address,
|
|
51
|
+
action
|
|
52
|
+
});
|
|
53
|
+
await sendThroughAuthwitProxy(proxy, action, {
|
|
54
|
+
from: owner,
|
|
55
|
+
authWitnesses: [
|
|
56
|
+
witness
|
|
57
|
+
]
|
|
58
|
+
});
|
|
59
|
+
onExecuted?.();
|
|
60
|
+
await expect(sendThroughAuthwitProxy(proxy, action, {
|
|
61
|
+
from: owner,
|
|
62
|
+
authWitnesses: [
|
|
63
|
+
witness
|
|
64
|
+
]
|
|
65
|
+
})).rejects.toThrow(DUPLICATE_NULLIFIER_ERROR);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Deploys an {@link AMMContract} over three freshly deployed tokens (token0, token1, and the liquidity
|
|
69
|
+
* token), makes the AMM the liquidity token's minter, and mints `initialBalance` of token0 and token1 to
|
|
70
|
+
* each liquidity provider plus token0 to the swapper. `deploy` selects the token flavour (Token vs
|
|
71
|
+
* TestToken), so the concrete token type flows through to the caller.
|
|
72
|
+
*/ export async function deployAmmWithTokens(wallet, admin, deploy, opts) {
|
|
73
|
+
const { liquidityProviders, swapper, initialBalance, logger } = opts;
|
|
74
|
+
const { contract: token0 } = await deploy(wallet, admin, 0n, logger);
|
|
75
|
+
const { contract: token1 } = await deploy(wallet, admin, 0n, logger);
|
|
76
|
+
const { contract: liquidityToken } = await deploy(wallet, admin, 0n, logger);
|
|
77
|
+
const { contract: amm } = await AMMContract.deploy(wallet, token0.address, token1.address, liquidityToken.address).send({
|
|
78
|
+
from: admin
|
|
79
|
+
});
|
|
80
|
+
// TODO(#9480): consider deploying the token by some factory when the AMM is deployed, and making the AMM be the
|
|
81
|
+
// minter there.
|
|
82
|
+
await liquidityToken.methods.set_minter(amm.address, true).send({
|
|
83
|
+
from: admin
|
|
84
|
+
});
|
|
85
|
+
for (const lp of liquidityProviders){
|
|
86
|
+
await mintTokensToPrivate(token0, admin, lp, initialBalance);
|
|
87
|
+
await mintTokensToPrivate(token1, admin, lp, initialBalance);
|
|
88
|
+
}
|
|
89
|
+
// Note that the swapper only holds token0, not token1.
|
|
90
|
+
await mintTokensToPrivate(token0, admin, swapper, initialBalance);
|
|
91
|
+
return {
|
|
92
|
+
token0,
|
|
93
|
+
token1,
|
|
94
|
+
liquidityToken,
|
|
95
|
+
amm
|
|
96
|
+
};
|
|
97
|
+
}
|
|
@@ -57,6 +57,20 @@ type ClientFlowBenchmark = {
|
|
|
57
57
|
};
|
|
58
58
|
export declare function generateBenchmark(flow: string, logs: Log[], stats: ProvingStats | SimulationStats, privateExecutionSteps: PrivateExecutionStep[], proverType: ProverType, error: string | undefined): ClientFlowBenchmark;
|
|
59
59
|
export declare function convertProfileToGHBenchmark(benchmark: ClientFlowBenchmark): GithubActionBenchmarkResult[];
|
|
60
|
+
/**
|
|
61
|
+
* Computes the expected number of `PrivateExecutionStep` entries the orchestrator will produce
|
|
62
|
+
* for a tx with `apps` private function calls.
|
|
63
|
+
*
|
|
64
|
+
* Step layout: `apps` app circuits + kernel iterations + 1 final reset + 1 tail + 1 hiding kernel.
|
|
65
|
+
* Each kernel iteration absorbs up to `MAX_APPS_PER_KERNEL` apps via the `init_K` / `inner_K`
|
|
66
|
+
* variants, so the kernel count is `ceil(apps / MAX_APPS_PER_KERNEL)`.
|
|
67
|
+
*
|
|
68
|
+
* Caveat: this assumes no mid-flow reset is triggered, which would split a batch into two kernels
|
|
69
|
+
* separated by a reset. For the flows currently exercised in this benchmark suite that holds, but
|
|
70
|
+
* a future flow that grows large enough to overflow per-tx limits before consuming all apps will
|
|
71
|
+
* not match this formula.
|
|
72
|
+
*/
|
|
73
|
+
export declare function expectedExecutionSteps(apps: number): number;
|
|
60
74
|
export declare function captureProfile(label: string, interaction: ContractFunctionInteraction | DeployMethod, opts: Omit<ProfileInteractionOptions & DeployOptions, 'profileMode'>, expectedSteps?: number): Promise<import("@aztec/stdlib/tx").TxProfileResult>;
|
|
61
75
|
export {};
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVuY2htYXJrLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmVuY2gvY2xpZW50X2Zsb3dzL2JlbmNobWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLFlBQVksRUFDWixLQUFLLGFBQWEsRUFDbEIsS0FBSyx5QkFBeUIsRUFDL0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdsRCxPQUFPLEVBQUUsS0FBSyxvQkFBb0IsRUFBa0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRyxPQUFPLEtBQUssRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLGNBQWMsRUFDZCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2xCLE1BQU0sa0JBQWtCLENBQUM7QUFNMUIsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJL0QsUUFBQSxNQUFNLFFBQVEsb0ZBQXFGLENBQUM7QUFDcEcsS0FBSyxRQUFRLEdBQUcsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTFDLE1BQU0sTUFBTSxHQUFHLEdBQUc7SUFDaEIsSUFBSSxFQUFFLFFBQVEsQ0FBQztJQUNmLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNYLENBQUM7QUFFRixRQUFBLE1BQU0sVUFBVSwwS0FhTixDQUFDO0FBRVgsS0FBSyxRQUFRLEdBQUcsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTVDLEtBQUssZUFBZSxHQUFHO0tBQ3BCLENBQUMsSUFBSSxRQUFRLEdBQUcsTUFBTTtDQUN4QixDQUFDO0FBRUYscUJBQWEsV0FBVztJQUN0QixPQUFP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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MAX_APPS_PER_KERNEL } from '@aztec/constants';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { serializePrivateExecutionSteps } from '@aztec/stdlib/kernel';
|
|
3
4
|
import assert from 'node:assert';
|
|
@@ -239,6 +240,24 @@ export function convertProfileToGHBenchmark(benchmark) {
|
|
|
239
240
|
}
|
|
240
241
|
return benches;
|
|
241
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Computes the expected number of `PrivateExecutionStep` entries the orchestrator will produce
|
|
245
|
+
* for a tx with `apps` private function calls.
|
|
246
|
+
*
|
|
247
|
+
* Step layout: `apps` app circuits + kernel iterations + 1 final reset + 1 tail + 1 hiding kernel.
|
|
248
|
+
* Each kernel iteration absorbs up to `MAX_APPS_PER_KERNEL` apps via the `init_K` / `inner_K`
|
|
249
|
+
* variants, so the kernel count is `ceil(apps / MAX_APPS_PER_KERNEL)`.
|
|
250
|
+
*
|
|
251
|
+
* Caveat: this assumes no mid-flow reset is triggered, which would split a batch into two kernels
|
|
252
|
+
* separated by a reset. For the flows currently exercised in this benchmark suite that holds, but
|
|
253
|
+
* a future flow that grows large enough to overflow per-tx limits before consuming all apps will
|
|
254
|
+
* not match this formula.
|
|
255
|
+
*/ export function expectedExecutionSteps(apps) {
|
|
256
|
+
const kernels = Math.ceil(apps / MAX_APPS_PER_KERNEL);
|
|
257
|
+
// The final reset and tail are proved as a single circuit (reset_tail or reset_tail_to_public),
|
|
258
|
+
// so they share one execution step.
|
|
259
|
+
return apps + kernels + 1 /* reset+tail */ + 1 /* hiding */ ;
|
|
260
|
+
}
|
|
242
261
|
export async function captureProfile(label, interaction, opts, expectedSteps) {
|
|
243
262
|
// Make sure the proxy logger starts from a clean slate
|
|
244
263
|
ProxyLogger.getInstance().flushLogs();
|
|
@@ -3,6 +3,7 @@ import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
|
3
3
|
import { type FeePaymentMethod, PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
4
4
|
import { type Logger } from '@aztec/aztec.js/log';
|
|
5
5
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
6
|
+
import { FeeJuiceContract } from '@aztec/aztec.js/protocol';
|
|
6
7
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
7
8
|
import { CheatCodes } from '@aztec/aztec/testing';
|
|
8
9
|
import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
@@ -10,9 +11,8 @@ import { ChainMonitor } from '@aztec/ethereum/test';
|
|
|
10
11
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
11
12
|
import { AMMContract } from '@aztec/noir-contracts.js/AMM';
|
|
12
13
|
import { FPCContract } from '@aztec/noir-contracts.js/FPC';
|
|
13
|
-
import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
|
|
14
14
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
15
|
-
import {
|
|
15
|
+
import { TestTokenContract as BananaCoin, TestTokenContract } from '@aztec/noir-test-contracts.js/TestToken';
|
|
16
16
|
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
17
17
|
import { type EndToEndContext, type SetupOptions } from '../../fixtures/setup.js';
|
|
18
18
|
import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
|
|
@@ -38,11 +38,11 @@ export declare class ClientFlowsBenchmark {
|
|
|
38
38
|
bananaCoinInstance: ContractInstanceWithAddress;
|
|
39
39
|
bananaFPC: FPCContract;
|
|
40
40
|
bananaFPCInstance: ContractInstanceWithAddress;
|
|
41
|
-
candyBarCoin:
|
|
41
|
+
candyBarCoin: TestTokenContract;
|
|
42
42
|
candyBarCoinInstance: ContractInstanceWithAddress;
|
|
43
43
|
amm: AMMContract;
|
|
44
44
|
ammInstance: ContractInstanceWithAddress;
|
|
45
|
-
liquidityToken:
|
|
45
|
+
liquidityToken: TestTokenContract;
|
|
46
46
|
liquidityTokenInstance: ContractInstanceWithAddress;
|
|
47
47
|
sponsoredFPC: SponsoredFPCContract;
|
|
48
48
|
sponsoredFPCInstance: ContractInstanceWithAddress;
|
|
@@ -50,7 +50,7 @@ export declare class ClientFlowsBenchmark {
|
|
|
50
50
|
realProofs: boolean;
|
|
51
51
|
paymentMethods: Record<BenchmarkingFeePaymentMethod, {
|
|
52
52
|
forWallet: FeePaymentMethodGetter;
|
|
53
|
-
|
|
53
|
+
apps: number;
|
|
54
54
|
}>;
|
|
55
55
|
config: ClientFlowsConfig;
|
|
56
56
|
private proxyLogger;
|
|
@@ -76,4 +76,4 @@ export declare class ClientFlowsBenchmark {
|
|
|
76
76
|
getPrivateFPCPaymentMethodForWallet(wallet: Wallet, sender: AztecAddress): Promise<PrivateFeePaymentMethod>;
|
|
77
77
|
getSponsoredFPCPaymentMethodForWallet(_wallet: Wallet, _sender: AztecAddress): Promise<SponsoredFeePaymentMethod>;
|
|
78
78
|
}
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50X2Zsb3dzX2JlbmNobWFyay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JlbmNoL2NsaWVudF9mbG93cy9jbGllbnRfZmxvd3NfYmVuY2htYXJrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFpQyxNQUFNLHNCQUFzQixDQUFDO0FBR2pGLE9BQU8sS0FBSyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFNUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSXBELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUU3RyxPQUFP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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client_flows_benchmark.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/client_flows_benchmark.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client_flows_benchmark.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/client_flows_benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
2
2
|
import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
3
3
|
import { PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
4
4
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
5
|
+
import { FeeJuiceContract } from '@aztec/aztec.js/protocol';
|
|
6
|
+
import { getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
|
|
5
7
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
6
8
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
7
9
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
8
10
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
9
11
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
10
12
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
13
|
+
import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
|
|
11
14
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
12
15
|
import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
|
|
13
16
|
import { TestERC20Bytecode } from '@aztec/l1-artifacts/TestERC20Bytecode';
|
|
14
17
|
import { AMMContract } from '@aztec/noir-contracts.js/AMM';
|
|
15
18
|
import { FPCContract } from '@aztec/noir-contracts.js/FPC';
|
|
16
|
-
import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
|
|
17
19
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
18
|
-
import {
|
|
19
|
-
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
20
|
-
import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
20
|
+
import { TestTokenContract as BananaCoin, TestTokenContract } from '@aztec/noir-test-contracts.js/TestToken';
|
|
21
21
|
import { getPXEConfig } from '@aztec/pxe/server';
|
|
22
|
-
import { GasSettings } from '@aztec/stdlib/gas';
|
|
23
|
-
import {
|
|
24
|
-
import { MNEMONIC } from '../../fixtures/fixtures.js';
|
|
25
|
-
import {
|
|
22
|
+
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
23
|
+
import { AppTaggingSecretKind } from '@aztec/stdlib/logs';
|
|
24
|
+
import { AUTOMINE_E2E_OPTS, L1_DIRECT_WRITE_ACCOUNT_INDEX, MNEMONIC, getPaddedMaxFeesPerGas } from '../../fixtures/fixtures.js';
|
|
25
|
+
import { setup, teardown } from '../../fixtures/setup.js';
|
|
26
26
|
import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
27
27
|
import { setupSponsoredFPC } from '../../fixtures/utils.js';
|
|
28
28
|
import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
|
|
@@ -69,29 +69,32 @@ export class ClientFlowsBenchmark {
|
|
|
69
69
|
'true',
|
|
70
70
|
'1'
|
|
71
71
|
].includes(process.env.REAL_PROOFS ?? '');
|
|
72
|
+
// `apps` is the number of private function calls contributed by this payment method.
|
|
73
|
+
// Each app produces one execution step at proving time; the orchestrator additionally produces
|
|
74
|
+
// one kernel step per batch of N apps (see `expectedExecutionSteps` in `benchmark.ts`).
|
|
72
75
|
paymentMethods = {
|
|
73
76
|
// eslint-disable-next-line camelcase
|
|
74
77
|
bridged_fee_juice: {
|
|
75
78
|
forWallet: this.getBridgedFeeJuicePaymentMethodForWallet.bind(this),
|
|
76
|
-
|
|
79
|
+
apps: 1
|
|
77
80
|
},
|
|
78
81
|
// eslint-disable-next-line camelcase
|
|
79
82
|
private_fpc: {
|
|
80
83
|
forWallet: this.getPrivateFPCPaymentMethodForWallet.bind(this),
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
apps: 1 + // FPC entrypoint
|
|
85
|
+
1 + // BananaCoin transfer_to_public
|
|
86
|
+
1 + // Account verify_private_authwit
|
|
87
|
+
1
|
|
85
88
|
},
|
|
86
89
|
// eslint-disable-next-line camelcase
|
|
87
90
|
sponsored_fpc: {
|
|
88
91
|
forWallet: this.getSponsoredFPCPaymentMethodForWallet.bind(this),
|
|
89
|
-
|
|
92
|
+
apps: 1
|
|
90
93
|
},
|
|
91
94
|
// eslint-disable-next-line camelcase
|
|
92
95
|
fee_juice: {
|
|
93
96
|
forWallet: ()=>Promise.resolve(undefined),
|
|
94
|
-
|
|
97
|
+
apps: 0
|
|
95
98
|
}
|
|
96
99
|
};
|
|
97
100
|
config;
|
|
@@ -100,6 +103,7 @@ export class ClientFlowsBenchmark {
|
|
|
100
103
|
constructor(testName, setupOptions = {}){
|
|
101
104
|
this.logger = createLogger(`bench:client_flows${testName ? `:${testName}` : ''}`);
|
|
102
105
|
this.setupOptions = {
|
|
106
|
+
...AUTOMINE_E2E_OPTS,
|
|
103
107
|
startProverNode: true,
|
|
104
108
|
...setupOptions
|
|
105
109
|
};
|
|
@@ -109,11 +113,17 @@ export class ClientFlowsBenchmark {
|
|
|
109
113
|
}
|
|
110
114
|
async setup() {
|
|
111
115
|
this.logger.info('Setting up subsystems from fresh');
|
|
112
|
-
|
|
116
|
+
// Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
117
|
+
// BananaCoin is the codegen'd TestToken here, so the allowlist must key on its class, not canonical Token's.
|
|
118
|
+
const tokenAllowList = await getTokenAllowedSetupFunctions(BananaCoin.artifact);
|
|
119
|
+
this.context = await setup(2, {
|
|
113
120
|
...this.setupOptions,
|
|
114
121
|
fundSponsoredFPC: true,
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
l1ContractsArgs: this.setupOptions,
|
|
123
|
+
txPublicSetupAllowListExtend: [
|
|
124
|
+
...this.setupOptions.txPublicSetupAllowListExtend ?? [],
|
|
125
|
+
...tokenAllowList
|
|
126
|
+
]
|
|
117
127
|
});
|
|
118
128
|
await this.applyBaseSetup();
|
|
119
129
|
await this.context.aztecNodeService.setConfig({
|
|
@@ -126,6 +136,7 @@ export class ClientFlowsBenchmark {
|
|
|
126
136
|
}
|
|
127
137
|
async teardown() {
|
|
128
138
|
await this.chainMonitor.stop();
|
|
139
|
+
await this.userWallet?.stop();
|
|
129
140
|
await teardown(this.context);
|
|
130
141
|
}
|
|
131
142
|
async mintAndBridgeFeeJuice(address) {
|
|
@@ -136,11 +147,11 @@ export class ClientFlowsBenchmark {
|
|
|
136
147
|
});
|
|
137
148
|
}
|
|
138
149
|
/** Admin mints bananaCoin tokens privately to the target address and redeems them. */ async mintPrivateBananas(amount, address) {
|
|
139
|
-
const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
150
|
+
const { result: balanceBefore } = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
140
151
|
from: address
|
|
141
152
|
});
|
|
142
153
|
await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
|
|
143
|
-
const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
154
|
+
const { result: balanceAfter } = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
144
155
|
from: address
|
|
145
156
|
});
|
|
146
157
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
@@ -150,7 +161,7 @@ export class ClientFlowsBenchmark {
|
|
|
150
161
|
const salt = Fr.random();
|
|
151
162
|
let benchysPrivateSigningKey;
|
|
152
163
|
if (type === 'schnorr') {
|
|
153
|
-
benchysPrivateSigningKey =
|
|
164
|
+
benchysPrivateSigningKey = GrumpkinScalar.random();
|
|
154
165
|
return wallet.createSchnorrAccount(benchysSecret, salt, benchysPrivateSigningKey);
|
|
155
166
|
} else if (type === 'ecdsar1') {
|
|
156
167
|
benchysPrivateSigningKey = randomBytes(32);
|
|
@@ -165,18 +176,13 @@ export class ClientFlowsBenchmark {
|
|
|
165
176
|
}
|
|
166
177
|
async applyInitialAccounts() {
|
|
167
178
|
this.logger.info('Applying initial accounts setup');
|
|
168
|
-
const
|
|
169
|
-
wallet: this.context.wallet,
|
|
170
|
-
initialFundedAccounts: this.context.initialFundedAccounts
|
|
171
|
-
});
|
|
172
|
-
const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
|
|
179
|
+
const [adminAddress, sequencerAddress] = this.context.accounts;
|
|
173
180
|
this.adminWallet = this.context.wallet;
|
|
174
181
|
this.aztecNode = this.context.aztecNodeService;
|
|
175
182
|
this.cheatCodes = this.context.cheatCodes;
|
|
176
183
|
this.adminAddress = adminAddress;
|
|
177
184
|
this.sequencerAddress = sequencerAddress;
|
|
178
|
-
|
|
179
|
-
this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
|
|
185
|
+
this.feeJuiceContract = FeeJuiceContract.withWallet(this.adminWallet);
|
|
180
186
|
this.coinbase = EthAddress.random();
|
|
181
187
|
const userPXEConfig = getPXEConfig();
|
|
182
188
|
const userPXEConfigWithContracts = {
|
|
@@ -186,16 +192,30 @@ export class ClientFlowsBenchmark {
|
|
|
186
192
|
this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
|
|
187
193
|
loggers: {
|
|
188
194
|
prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied')
|
|
195
|
+
},
|
|
196
|
+
// The benchmark measures steady-state app cost, not first-send discovery cost. Reproduce the pre-handshake-default
|
|
197
|
+
// behavior of unconstrained delivery: derive the tagging secret from the (sender, recipient) key pair via ECDH
|
|
198
|
+
// instead of taking the current default (a non-interactive handshake, which injects two extra private app
|
|
199
|
+
// executions and a nullifier per cold chain). Constrained delivery is unaffected: the Noir circuit rejects
|
|
200
|
+
// address-derived for constrained, so the hook falls through to a handshake there.
|
|
201
|
+
hooks: {
|
|
202
|
+
resolveTaggingSecretStrategy: ({ deliveryMode })=>Promise.resolve(deliveryMode === AppTaggingSecretKind.UNCONSTRAINED ? {
|
|
203
|
+
type: 'address-derived'
|
|
204
|
+
} : {
|
|
205
|
+
type: 'non-interactive-handshake'
|
|
206
|
+
})
|
|
189
207
|
}
|
|
190
208
|
});
|
|
191
209
|
}
|
|
192
210
|
async applySetupFeeJuice() {
|
|
193
211
|
this.logger.info('Applying fee juice setup');
|
|
194
|
-
this.feeJuiceContract = FeeJuiceContract.
|
|
212
|
+
this.feeJuiceContract = FeeJuiceContract.withWallet(this.adminWallet);
|
|
195
213
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
196
214
|
aztecNode: this.context.aztecNodeService,
|
|
197
215
|
aztecNodeAdmin: this.context.aztecNodeService,
|
|
198
|
-
|
|
216
|
+
// Bridge from a dedicated L1 account so its direct writes don't race the sequencer publisher's
|
|
217
|
+
// txs on the deployer account (see L1_DIRECT_WRITE_ACCOUNT_INDEX).
|
|
218
|
+
l1Client: createExtendedL1Client(this.context.config.l1RpcUrls, MNEMONIC, undefined, undefined, L1_DIRECT_WRITE_ACCOUNT_INDEX),
|
|
199
219
|
wallet: this.adminWallet,
|
|
200
220
|
logger: this.logger
|
|
201
221
|
});
|
|
@@ -203,10 +223,7 @@ export class ClientFlowsBenchmark {
|
|
|
203
223
|
async applyDeployBananaToken() {
|
|
204
224
|
this.logger.info('Applying banana token deployment');
|
|
205
225
|
const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(this.adminWallet, this.adminAddress, 'BC', 'BC', 18n).send({
|
|
206
|
-
from: this.adminAddress
|
|
207
|
-
wait: {
|
|
208
|
-
returnReceipt: true
|
|
209
|
-
}
|
|
226
|
+
from: this.adminAddress
|
|
210
227
|
});
|
|
211
228
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
212
229
|
this.bananaCoin = bananaCoin;
|
|
@@ -214,11 +231,8 @@ export class ClientFlowsBenchmark {
|
|
|
214
231
|
}
|
|
215
232
|
async applyDeployCandyBarToken() {
|
|
216
233
|
this.logger.info('Applying candy bar token deployment');
|
|
217
|
-
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await
|
|
218
|
-
from: this.adminAddress
|
|
219
|
-
wait: {
|
|
220
|
-
returnReceipt: true
|
|
221
|
-
}
|
|
234
|
+
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TestTokenContract.deploy(this.adminWallet, this.adminAddress, 'CBC', 'CBC', 18n).send({
|
|
235
|
+
from: this.adminAddress
|
|
222
236
|
});
|
|
223
237
|
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
224
238
|
this.candyBarCoin = candyBarCoin;
|
|
@@ -230,10 +244,7 @@ export class ClientFlowsBenchmark {
|
|
|
230
244
|
expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
231
245
|
const bananaCoin = this.bananaCoin;
|
|
232
246
|
const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(this.adminWallet, bananaCoin.address, this.adminAddress).send({
|
|
233
|
-
from: this.adminAddress
|
|
234
|
-
wait: {
|
|
235
|
-
returnReceipt: true
|
|
236
|
-
}
|
|
247
|
+
from: this.adminAddress
|
|
237
248
|
});
|
|
238
249
|
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
239
250
|
await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.adminAddress);
|
|
@@ -261,37 +272,30 @@ export class ClientFlowsBenchmark {
|
|
|
261
272
|
}
|
|
262
273
|
async createAndFundBenchmarkingAccountOnUserWallet(accountType) {
|
|
263
274
|
const benchysAccountManager = await this.createBenchmarkingAccountManager(this.adminWallet, accountType);
|
|
264
|
-
const benchysAccount = await benchysAccountManager.getAccount();
|
|
265
275
|
const benchysAddress = benchysAccountManager.address;
|
|
266
276
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
|
|
267
277
|
const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
|
|
268
278
|
await behchysDeployMethod.send({
|
|
269
|
-
from:
|
|
279
|
+
from: NO_FROM,
|
|
270
280
|
fee: {
|
|
271
281
|
paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim)
|
|
272
282
|
}
|
|
273
283
|
});
|
|
274
284
|
// Register benchy on the user's Wallet, where we're going to be interacting from
|
|
275
285
|
const accountManager = await this.userWallet.createAccount({
|
|
276
|
-
secret:
|
|
277
|
-
salt: new Fr(
|
|
286
|
+
secret: benchysAccountManager.getSecretKey(),
|
|
287
|
+
salt: new Fr(benchysAccountManager.getInstance().salt),
|
|
278
288
|
contract: benchysAccountManager.getAccountContract()
|
|
279
289
|
});
|
|
280
290
|
return accountManager.address;
|
|
281
291
|
}
|
|
282
292
|
async applyDeployAmm() {
|
|
283
293
|
this.logger.info('Applying AMM deployment');
|
|
284
|
-
const { contract: liquidityToken, instance: liquidityTokenInstance } = await
|
|
285
|
-
from: this.adminAddress
|
|
286
|
-
wait: {
|
|
287
|
-
returnReceipt: true
|
|
288
|
-
}
|
|
294
|
+
const { contract: liquidityToken, instance: liquidityTokenInstance } = await TestTokenContract.deploy(this.adminWallet, this.adminAddress, 'LPT', 'LPT', 18n).send({
|
|
295
|
+
from: this.adminAddress
|
|
289
296
|
});
|
|
290
297
|
const { contract: amm, instance: ammInstance } = await AMMContract.deploy(this.adminWallet, this.bananaCoin.address, this.candyBarCoin.address, liquidityToken.address).send({
|
|
291
|
-
from: this.adminAddress
|
|
292
|
-
wait: {
|
|
293
|
-
returnReceipt: true
|
|
294
|
-
}
|
|
298
|
+
from: this.adminAddress
|
|
295
299
|
});
|
|
296
300
|
this.logger.info(`AMM deployed at ${amm.address}`);
|
|
297
301
|
await liquidityToken.methods.set_minter(amm.address, true).send({
|
|
@@ -309,8 +313,10 @@ export class ClientFlowsBenchmark {
|
|
|
309
313
|
async getPrivateFPCPaymentMethodForWallet(wallet, sender) {
|
|
310
314
|
// The private fee paying method assembled on the app side requires knowledge of the maximum
|
|
311
315
|
// fee the user is willing to pay
|
|
312
|
-
const maxFeesPerGas =
|
|
313
|
-
const
|
|
316
|
+
const maxFeesPerGas = await getPaddedMaxFeesPerGas(this.aztecNode);
|
|
317
|
+
const gasLimits = Gas.from((await this.aztecNode.getNodeInfo()).txsLimits.gas);
|
|
318
|
+
const gasSettings = GasSettings.fallback({
|
|
319
|
+
gasLimits,
|
|
314
320
|
maxFeesPerGas
|
|
315
321
|
});
|
|
316
322
|
return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
|