@aztec/end-to-end 0.0.1-commit.993d240 → 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 +215 -27
- 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 +18 -40
- 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 +22 -39
- 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 +1 -1
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +3 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +5 -5
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +34 -25
- 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 +95 -6
- 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/e2e_prover_test.d.ts +12 -9
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +48 -28
- package/dest/fixtures/fixtures.d.ts +20 -14
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +27 -15
- 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 +2 -2
- package/dest/fixtures/ha_setup.d.ts +3 -3
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +4 -1
- 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/setup.d.ts +52 -40
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +207 -221
- package/dest/fixtures/setup_p2p_test.d.ts +1 -1
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +3 -3
- 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 +21 -1
- 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_service.js +3 -3
- 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 +10 -2
- package/dest/p2p/p2p_network.d.ts.map +1 -0
- package/dest/{e2e_p2p → p2p}/p2p_network.js +41 -16
- 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 +6 -19
- 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 +3 -3
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +24 -16
- package/dest/shared/gas_portal_test_harness.d.ts +2 -2
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +10 -8
- 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 +8 -19
- package/dest/shared/wait_for_l1_to_l2_message.js +1 -1
- package/dest/simulators/lending_simulator.js +1 -1
- 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/{e2e_fees → single-node/fees}/fees_test.js +129 -66
- 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 +1 -1
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +24 -10
- package/dest/spartan/tx_metrics.d.ts +10 -1
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +32 -0
- package/dest/test-wallet/test_wallet.d.ts +23 -3
- package/dest/test-wallet/test_wallet.d.ts.map +1 -1
- package/dest/test-wallet/test_wallet.js +56 -9
- package/dest/test-wallet/utils.d.ts +36 -1
- package/dest/test-wallet/utils.d.ts.map +1 -1
- package/dest/test-wallet/utils.js +64 -4
- package/dest/test-wallet/wallet_worker_script.js +10 -2
- package/dest/test-wallet/worker_wallet.d.ts +5 -5
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet.js +6 -4
- package/dest/test-wallet/worker_wallet_schema.d.ts +3 -159
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet_schema.js +2 -1
- package/package.json +41 -41
- 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 +20 -57
- package/src/{e2e_token_contract → automine/token}/token_contract_test.ts +24 -57
- package/src/automine/token/token_test_helpers.ts +138 -0
- package/src/bench/client_flows/benchmark.ts +3 -1
- package/src/bench/client_flows/client_flows_benchmark.ts +48 -32
- package/src/bench/client_flows/data_extractor.ts +1 -0
- package/src/bench/utils.ts +109 -6
- package/src/composed/ha/ha_full_setup.ts +466 -0
- package/src/fixtures/e2e_prover_test.ts +60 -47
- package/src/fixtures/fixtures.ts +29 -15
- package/src/fixtures/get_acvm_config.ts +2 -8
- package/src/fixtures/get_bb_config.ts +1 -2
- package/src/fixtures/ha_setup.ts +7 -3
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/setup.ts +255 -281
- package/src/fixtures/setup_p2p_test.ts +3 -3
- package/src/fixtures/standard_contracts_genesis.ts +28 -0
- package/src/fixtures/timing.ts +97 -0
- package/src/fixtures/token_utils.ts +39 -4
- package/src/fixtures/utils.ts +0 -3
- package/src/fixtures/wait_helpers.ts +333 -0
- package/src/forward-compatibility/wallet_service.ts +6 -4
- package/src/guides/up_quick_start.sh +5 -0
- package/src/infra/README.md +12 -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 +40 -13
- package/src/{e2e_p2p → p2p}/reqresp/utils.ts +7 -18
- package/src/p2p/shared.ts +329 -0
- package/src/shared/cross_chain_test_harness.ts +22 -13
- package/src/shared/gas_portal_test_harness.ts +15 -8
- package/src/shared/submit-transactions.ts +13 -5
- package/src/shared/timing_env.d.mts +39 -0
- package/src/shared/timing_env.mjs +363 -0
- package/src/shared/uniswap_l1_l2.ts +38 -21
- package/src/shared/wait_for_l1_to_l2_message.ts +1 -1
- package/src/simulators/lending_simulator.ts +1 -1
- 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/{e2e_fees → single-node/fees}/fees_test.ts +146 -76
- 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 +28 -10
- package/src/spartan/tx_metrics.ts +26 -0
- package/src/test-wallet/test_wallet.ts +60 -10
- package/src/test-wallet/utils.ts +102 -5
- package/src/test-wallet/wallet_worker_script.ts +9 -3
- package/src/test-wallet/worker_wallet.ts +11 -13
- package/src/test-wallet/worker_wallet_schema.ts +3 -2
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -56
- 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 -58
- 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 -161
- 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 -51
- package/dest/e2e_epochs/epochs_test.d.ts +0 -125
- package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
- package/dest/e2e_epochs/epochs_test.js +0 -460
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
- package/dest/e2e_fees/fees_test.d.ts +0 -91
- package/dest/e2e_fees/fees_test.d.ts.map +0 -1
- package/dest/e2e_l1_publisher/write_json.d.ts +0 -11
- package/dest/e2e_l1_publisher/write_json.d.ts.map +0 -1
- package/dest/e2e_l1_publisher/write_json.js +0 -56
- package/dest/e2e_multi_validator/utils.d.ts +0 -12
- package/dest/e2e_multi_validator/utils.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +0 -26
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +0 -55
- 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 -138
- 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 -64
- package/dest/e2e_p2p/shared.d.ts.map +0 -1
- package/dest/e2e_p2p/shared.js +0 -204
- 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 -231
- package/src/e2e_deploy_contract/deploy_test.ts +0 -86
- package/src/e2e_epochs/epochs_test.ts +0 -575
- package/src/e2e_l1_publisher/write_json.ts +0 -77
- package/src/e2e_nested_contract/nested_contract_test.ts +0 -77
- package/src/e2e_p2p/inactivity_slash_test.ts +0 -181
- package/src/e2e_p2p/shared.ts +0 -318
- /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,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
|
+
}
|
|
@@ -73,4 +73,4 @@ export declare function convertProfileToGHBenchmark(benchmark: ClientFlowBenchma
|
|
|
73
73
|
export declare function expectedExecutionSteps(apps: number): number;
|
|
74
74
|
export declare function captureProfile(label: string, interaction: ContractFunctionInteraction | DeployMethod, opts: Omit<ProfileInteractionOptions & DeployOptions, 'profileMode'>, expectedSteps?: number): Promise<import("@aztec/stdlib/tx").TxProfileResult>;
|
|
75
75
|
export {};
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVuY2htYXJrLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmVuY2gvY2xpZW50X2Zsb3dzL2JlbmNobWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLFlBQVksRUFDWixLQUFLLGFBQWEsRUFDbEIsS0FBSyx5QkFBeUIsRUFDL0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdsRCxPQUFPLEVBQUUsS0FBSyxvQkFBb0IsRUFBa0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRyxPQUFPLEtBQUssRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLGNBQWMsRUFDZCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2xCLE1BQU0sa0JBQWtCLENBQUM7QUFNMUIsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJL0QsUUFBQSxNQUFNLFFBQVEsb0ZBQXFGLENBQUM7QUFDcEcsS0FBSyxRQUFRLEdBQUcsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTFDLE1BQU0sTUFBTSxHQUFHLEdBQUc7SUFDaEIsSUFBSSxFQUFFLFFBQVEsQ0FBQztJQUNmLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNYLENBQUM7QUFFRixRQUFBLE1BQU0sVUFBVSwwS0FhTixDQUFDO0FBRVgsS0FBSyxRQUFRLEdBQUcsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTVDLEtBQUssZUFBZSxHQUFHO0tBQ3BCLENBQUMsSUFBSSxRQUFRLEdBQUcsTUFBTTtDQUN4QixDQUFDO0FBRUYscUJBQWEsV0FBVztJQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBYztJQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFhO0lBRXpCLE9BQU8sZUFBaUI7SUFFeEIsTUFBTSxDQUFDLE1BQU0sU0FFWjtJQUVELE1BQU0sQ0FBQyxXQUFXLGdCQUVqQjtJQUVELFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FlbkM7SUFFRCxPQUFPLENBQUMsU0FBUztJQUlWLFNBQVMsU0FFZjtJQUVNLE9BQU8sVUFFYjtDQUNGO0FBRUQsTUFBTSxNQUFNLFVBQVUsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBRTNDLEtBQUssYUFBYSxHQUFHO0lBRW5CLEtBQUssRUFBRSxNQUFNLENBQUM7SUFFZCxHQUFHLEVBQUUsTUFBTSxDQUFDO0lBRVosR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUVaLEdBQUcsRUFBRSxNQUFNLENBQUM7SUFFWixLQUFLLEVBQUUsTUFBTSxDQUFDO0NBQ2YsQ0FBQztBQUVGLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxjQUFjLEdBQUcsV0FBVyxDQUFDLEdBQUc7SUFDckUsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN0QixPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztDQUN4QyxDQUFDO0FBRUYsS0FBSyxtQkFBbUIsR0FBRztJQUN6QixJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLEdBQUc7UUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUN0RixTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ25DLFVBQVUsRUFBRSxjQUFjLENBQUM7SUFDM0IsVUFBVSxFQUFFLFVBQVUsQ0FBQztJQUN2QixZQUFZLEVBQUUsZUFBZSxDQUFDO0lBQzlCLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDdkIsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2QsS0FBSyxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7Q0FDM0IsQ0FBQztBQTBDRix3QkFBZ0IsaUJBQWlCLENBQy9CLElBQUksRUFBRSxNQUFNLEVBQ1osSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUNYLEtBQUssRUFBRSxZQUFZLEdBQUcsZUFBZSxFQUNyQyxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxFQUM3QyxVQUFVLEVBQUUsVUFBVSxFQUN0QixLQUFLLEVBQUUsTUFBTSxHQUFHLFNBQVMsR0FDeEIsbUJBQW1CLENBMkVyQjtBQUVELHdCQUFnQiwyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLEdBQUcsMkJBQTJCLEVBQUUsQ0E2RHpHO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUszRDtBQUVELHdCQUFzQixjQUFjLENBQ2xDLEtBQUssRUFBRSxNQUFNLEVBQ2IsV0FBVyxFQUFFLDJCQUEyQixHQUFHLFlBQVksRUFDdkQsSUFBSSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxhQUFhLEVBQUUsYUFBYSxDQUFDLEVBQ3BFLGFBQWEsQ0FBQyxFQUFFLE1BQU0sdURBb0N2QiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/benchmark.ts"],"names":[],"mappings":"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
|
|
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;AAGlD,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,sBAAsB,CAAC;AACjG,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAI/D,QAAA,MAAM,QAAQ,oFAAqF,CAAC;AACpG,KAAK,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1C,MAAM,MAAM,GAAG,GAAG;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,QAAA,MAAM,UAAU,0KAaN,CAAC;AAEX,KAAK,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5C,KAAK,eAAe,GAAG;KACpB,CAAC,IAAI,QAAQ,GAAG,MAAM;CACxB,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO,CAAC,IAAI,CAAa;IAEzB,OAAO,eAAiB;IAExB,MAAM,CAAC,MAAM,SAEZ;IAED,MAAM,CAAC,WAAW,gBAEjB;IAED,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAenC;IAED,OAAO,CAAC,SAAS;IAIV,SAAS,SAEf;IAEM,OAAO,UAEb;CACF;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3C,KAAK,aAAa,GAAG;IAEnB,KAAK,EAAE,MAAM,CAAC;IAEd,GAAG,EAAE,MAAM,CAAC;IAEZ,GAAG,EAAE,MAAM,CAAC;IAEZ,GAAG,EAAE,MAAM,CAAC;IAEZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,WAAW,CAAC,GAAG;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACxC,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC,cAAc,GAAG,iBAAiB,EAAE,aAAa,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnC,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,eAAe,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AA0CF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EAAE,EACX,KAAK,EAAE,YAAY,GAAG,eAAe,EACrC,qBAAqB,EAAE,oBAAoB,EAAE,EAC7C,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,mBAAmB,CA2ErB;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,mBAAmB,GAAG,2BAA2B,EAAE,CA6DzG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,2BAA2B,GAAG,YAAY,EACvD,IAAI,EAAE,IAAI,CAAC,yBAAyB,GAAG,aAAa,EAAE,aAAa,CAAC,EACpE,aAAa,CAAC,EAAE,MAAM,uDAoCvB"}
|
|
@@ -254,7 +254,9 @@ export function convertProfileToGHBenchmark(benchmark) {
|
|
|
254
254
|
* not match this formula.
|
|
255
255
|
*/ export function expectedExecutionSteps(apps) {
|
|
256
256
|
const kernels = Math.ceil(apps / MAX_APPS_PER_KERNEL);
|
|
257
|
-
|
|
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 */ ;
|
|
258
260
|
}
|
|
259
261
|
export async function captureProfile(label, interaction, opts, expectedSteps) {
|
|
260
262
|
// Make sure the proxy logger starts from a clean slate
|
|
@@ -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;
|
|
@@ -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":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,KAAK,gBAAgB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAiC,MAAM,sBAAsB,CAAC;AAGjF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAE5F,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
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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"}
|
|
@@ -2,6 +2,7 @@ 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';
|
|
5
6
|
import { getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
|
|
6
7
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
7
8
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
@@ -9,21 +10,19 @@ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
|
9
10
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
10
11
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
11
12
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
13
|
+
import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
|
|
12
14
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
13
15
|
import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
|
|
14
16
|
import { TestERC20Bytecode } from '@aztec/l1-artifacts/TestERC20Bytecode';
|
|
15
17
|
import { AMMContract } from '@aztec/noir-contracts.js/AMM';
|
|
16
18
|
import { FPCContract } from '@aztec/noir-contracts.js/FPC';
|
|
17
|
-
import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
|
|
18
19
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
19
|
-
import {
|
|
20
|
-
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
21
|
-
import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
20
|
+
import { TestTokenContract as BananaCoin, TestTokenContract } from '@aztec/noir-test-contracts.js/TestToken';
|
|
22
21
|
import { getPXEConfig } from '@aztec/pxe/server';
|
|
23
|
-
import { GasSettings } from '@aztec/stdlib/gas';
|
|
24
|
-
import {
|
|
25
|
-
import { AUTOMINE_E2E_OPTS, MNEMONIC, getPaddedMaxFeesPerGas } from '../../fixtures/fixtures.js';
|
|
26
|
-
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';
|
|
27
26
|
import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
28
27
|
import { setupSponsoredFPC } from '../../fixtures/utils.js';
|
|
29
28
|
import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
|
|
@@ -115,11 +114,11 @@ export class ClientFlowsBenchmark {
|
|
|
115
114
|
async setup() {
|
|
116
115
|
this.logger.info('Setting up subsystems from fresh');
|
|
117
116
|
// Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
118
|
-
|
|
119
|
-
|
|
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, {
|
|
120
120
|
...this.setupOptions,
|
|
121
121
|
fundSponsoredFPC: true,
|
|
122
|
-
skipAccountDeployment: true,
|
|
123
122
|
l1ContractsArgs: this.setupOptions,
|
|
124
123
|
txPublicSetupAllowListExtend: [
|
|
125
124
|
...this.setupOptions.txPublicSetupAllowListExtend ?? [],
|
|
@@ -162,7 +161,7 @@ export class ClientFlowsBenchmark {
|
|
|
162
161
|
const salt = Fr.random();
|
|
163
162
|
let benchysPrivateSigningKey;
|
|
164
163
|
if (type === 'schnorr') {
|
|
165
|
-
benchysPrivateSigningKey =
|
|
164
|
+
benchysPrivateSigningKey = GrumpkinScalar.random();
|
|
166
165
|
return wallet.createSchnorrAccount(benchysSecret, salt, benchysPrivateSigningKey);
|
|
167
166
|
} else if (type === 'ecdsar1') {
|
|
168
167
|
benchysPrivateSigningKey = randomBytes(32);
|
|
@@ -177,18 +176,13 @@ export class ClientFlowsBenchmark {
|
|
|
177
176
|
}
|
|
178
177
|
async applyInitialAccounts() {
|
|
179
178
|
this.logger.info('Applying initial accounts setup');
|
|
180
|
-
const
|
|
181
|
-
wallet: this.context.wallet,
|
|
182
|
-
initialFundedAccounts: this.context.initialFundedAccounts
|
|
183
|
-
});
|
|
184
|
-
const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
|
|
179
|
+
const [adminAddress, sequencerAddress] = this.context.accounts;
|
|
185
180
|
this.adminWallet = this.context.wallet;
|
|
186
181
|
this.aztecNode = this.context.aztecNodeService;
|
|
187
182
|
this.cheatCodes = this.context.cheatCodes;
|
|
188
183
|
this.adminAddress = adminAddress;
|
|
189
184
|
this.sequencerAddress = sequencerAddress;
|
|
190
|
-
|
|
191
|
-
this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
|
|
185
|
+
this.feeJuiceContract = FeeJuiceContract.withWallet(this.adminWallet);
|
|
192
186
|
this.coinbase = EthAddress.random();
|
|
193
187
|
const userPXEConfig = getPXEConfig();
|
|
194
188
|
const userPXEConfigWithContracts = {
|
|
@@ -198,16 +192,30 @@ export class ClientFlowsBenchmark {
|
|
|
198
192
|
this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
|
|
199
193
|
loggers: {
|
|
200
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
|
+
})
|
|
201
207
|
}
|
|
202
208
|
});
|
|
203
209
|
}
|
|
204
210
|
async applySetupFeeJuice() {
|
|
205
211
|
this.logger.info('Applying fee juice setup');
|
|
206
|
-
this.feeJuiceContract = FeeJuiceContract.
|
|
212
|
+
this.feeJuiceContract = FeeJuiceContract.withWallet(this.adminWallet);
|
|
207
213
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
208
214
|
aztecNode: this.context.aztecNodeService,
|
|
209
215
|
aztecNodeAdmin: this.context.aztecNodeService,
|
|
210
|
-
|
|
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),
|
|
211
219
|
wallet: this.adminWallet,
|
|
212
220
|
logger: this.logger
|
|
213
221
|
});
|
|
@@ -223,7 +231,7 @@ export class ClientFlowsBenchmark {
|
|
|
223
231
|
}
|
|
224
232
|
async applyDeployCandyBarToken() {
|
|
225
233
|
this.logger.info('Applying candy bar token deployment');
|
|
226
|
-
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await
|
|
234
|
+
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TestTokenContract.deploy(this.adminWallet, this.adminAddress, 'CBC', 'CBC', 18n).send({
|
|
227
235
|
from: this.adminAddress
|
|
228
236
|
});
|
|
229
237
|
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
@@ -264,7 +272,6 @@ export class ClientFlowsBenchmark {
|
|
|
264
272
|
}
|
|
265
273
|
async createAndFundBenchmarkingAccountOnUserWallet(accountType) {
|
|
266
274
|
const benchysAccountManager = await this.createBenchmarkingAccountManager(this.adminWallet, accountType);
|
|
267
|
-
const benchysAccount = await benchysAccountManager.getAccount();
|
|
268
275
|
const benchysAddress = benchysAccountManager.address;
|
|
269
276
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
|
|
270
277
|
const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
|
|
@@ -276,7 +283,7 @@ export class ClientFlowsBenchmark {
|
|
|
276
283
|
});
|
|
277
284
|
// Register benchy on the user's Wallet, where we're going to be interacting from
|
|
278
285
|
const accountManager = await this.userWallet.createAccount({
|
|
279
|
-
secret:
|
|
286
|
+
secret: benchysAccountManager.getSecretKey(),
|
|
280
287
|
salt: new Fr(benchysAccountManager.getInstance().salt),
|
|
281
288
|
contract: benchysAccountManager.getAccountContract()
|
|
282
289
|
});
|
|
@@ -284,7 +291,7 @@ export class ClientFlowsBenchmark {
|
|
|
284
291
|
}
|
|
285
292
|
async applyDeployAmm() {
|
|
286
293
|
this.logger.info('Applying AMM deployment');
|
|
287
|
-
const { contract: liquidityToken, instance: liquidityTokenInstance } = await
|
|
294
|
+
const { contract: liquidityToken, instance: liquidityTokenInstance } = await TestTokenContract.deploy(this.adminWallet, this.adminAddress, 'LPT', 'LPT', 18n).send({
|
|
288
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({
|
|
@@ -307,7 +314,9 @@ export class ClientFlowsBenchmark {
|
|
|
307
314
|
// The private fee paying method assembled on the app side requires knowledge of the maximum
|
|
308
315
|
// fee the user is willing to pay
|
|
309
316
|
const maxFeesPerGas = await getPaddedMaxFeesPerGas(this.aztecNode);
|
|
317
|
+
const gasLimits = Gas.from((await this.aztecNode.getNodeInfo()).txsLimits.gas);
|
|
310
318
|
const gasSettings = GasSettings.fallback({
|
|
319
|
+
gasLimits,
|
|
311
320
|
maxFeesPerGas
|
|
312
321
|
});
|
|
313
322
|
return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
|
package/dest/bench/utils.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type { MetricDefinition } from '@aztec/telemetry-client';
|
|
|
5
5
|
import type { BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
|
|
6
6
|
import { type EndToEndContext, type SetupOptions } from '../fixtures/utils.js';
|
|
7
7
|
/**
|
|
8
|
-
* Setup for benchmarks. Initializes a remote node with a
|
|
8
|
+
* Setup for benchmarks. Initializes a remote node with a funded hardcoded account and deploys a benchmark contract.
|
|
9
9
|
*/
|
|
10
10
|
export declare function benchmarkSetup(opts: Partial<SetupOptions> & {
|
|
11
11
|
/** What metrics to export */ metrics: (MetricDefinition | MetricFilter)[];
|
|
@@ -13,7 +13,7 @@ export declare function benchmarkSetup(opts: Partial<SetupOptions> & {
|
|
|
13
13
|
benchOutput?: string;
|
|
14
14
|
}): Promise<{
|
|
15
15
|
telemetry: BenchmarkTelemetryClient;
|
|
16
|
-
context: EndToEndContext
|
|
16
|
+
context: EndToEndContext<unknown>;
|
|
17
17
|
contract: BenchmarkingContract;
|
|
18
18
|
sequencer: import("@aztec/sequencer-client").SequencerClient;
|
|
19
19
|
}>;
|
|
@@ -42,4 +42,4 @@ export type GithubActionBenchmarkResult = {
|
|
|
42
42
|
export declare function sendTxs(txCount: number, context: EndToEndContext, contract: BenchmarkingContract, heavyPublicCompute?: boolean): Promise<TxHash[]>;
|
|
43
43
|
export declare function waitTxs(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts): Promise<void>;
|
|
44
44
|
export {};
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iZW5jaC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQXNCLEtBQUssUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBNEMsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU14SCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSxzQkFBc0IsQ0FBQztBQU90Rjs7R0FFRztBQUNILHdCQUFzQixjQUFjLENBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUc7SUFDNUIsNkJBQTZCLENBQUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQztJQUMzRSxrRkFBa0Y7SUFDbEYsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ3RCOzs7OztHQWlDRjtBQVVELEtBQUssWUFBWSxHQUFHO0lBQ2xCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQztJQUN6QixTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2YsQ0FBQztBQUdGLE1BQU0sTUFBTSwyQkFBMkIsR0FBRztJQUN4QyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUNkLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNmLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDaEIsQ0FBQztBQW9FRjs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQixPQUFPLENBQzNCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLGVBQWUsRUFDeEIsUUFBUSxFQUFFLG9CQUFvQixFQUM5QixrQkFBa0IsR0FBRSxPQUFlLEdBQ2xDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQVduQjtBQUVELHdCQUFzQixPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLEVBQUUsUUFBUSxpQkFJM0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/bench/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/bench/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAI9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAElF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAA4C,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAMxH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAS,MAAM,sBAAsB,CAAC;AAOtF;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;IAC5B,6BAA6B,CAAC,OAAO,EAAE,CAAC,gBAAgB,GAAG,YAAY,CAAC,EAAE,CAAC;IAC3E,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;;;;;GAiCF;AAUD,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAoEF;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,oBAAoB,EAC9B,kBAAkB,GAAE,OAAe,GAClC,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,QAAQ,iBAI3F"}
|
package/dest/bench/utils.js
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import { BatchCall, NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
3
3
|
import { waitForTx } from '@aztec/aztec.js/node';
|
|
4
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
4
5
|
import { mean, stdDev, times } from '@aztec/foundation/collection';
|
|
5
6
|
import { BenchmarkingContract } from '@aztec/noir-test-contracts.js/Benchmarking';
|
|
7
|
+
import { SequencerState } from '@aztec/sequencer-client';
|
|
6
8
|
import { mkdirSync, writeFileSync } from 'fs';
|
|
7
9
|
import path from 'path';
|
|
8
10
|
import { PIPELINING_SETUP_OPTS } from '../fixtures/fixtures.js';
|
|
9
11
|
import { setup } from '../fixtures/utils.js';
|
|
12
|
+
const MAX_BENCH_WAIT_BLOCKS = 6;
|
|
13
|
+
const BENCH_FINAL_WAIT_TIMEOUT_SECONDS = 10;
|
|
14
|
+
const SEQUENCER_IDLE_TIMEOUT_MS = 60_000;
|
|
15
|
+
const DEFAULT_L1_PUBLISHING_TIME_SECONDS = 12;
|
|
10
16
|
/**
|
|
11
|
-
* Setup for benchmarks. Initializes a remote node with a
|
|
17
|
+
* Setup for benchmarks. Initializes a remote node with a funded hardcoded account and deploys a benchmark contract.
|
|
12
18
|
*/ export async function benchmarkSetup(opts) {
|
|
13
19
|
const context = await setup(1, {
|
|
14
20
|
...PIPELINING_SETUP_OPTS,
|
|
@@ -17,12 +23,19 @@ import { setup } from '../fixtures/utils.js';
|
|
|
17
23
|
benchmark: true
|
|
18
24
|
}
|
|
19
25
|
});
|
|
20
|
-
const defaultAccountAddress = context.accounts
|
|
21
|
-
const
|
|
22
|
-
|
|
26
|
+
const [defaultAccountAddress] = context.accounts;
|
|
27
|
+
const sequencer = getSequencerClient(context);
|
|
28
|
+
await waitForSequencerIdle(sequencer.getSequencer());
|
|
29
|
+
const deployment = BenchmarkingContract.deploy(context.wallet);
|
|
30
|
+
const { txHash } = await deployment.send({
|
|
31
|
+
from: defaultAccountAddress,
|
|
32
|
+
wait: NO_WAIT
|
|
23
33
|
});
|
|
34
|
+
await waitTxs([
|
|
35
|
+
txHash
|
|
36
|
+
], context);
|
|
37
|
+
const contract = await deployment.register();
|
|
24
38
|
context.logger.info(`Deployed benchmarking contract at ${contract.address}`);
|
|
25
|
-
const sequencer = context.aztecNode.getSequencer();
|
|
26
39
|
const telemetry = context.telemetryClient;
|
|
27
40
|
context.logger.warn(`Cleared benchmark data points from setup`);
|
|
28
41
|
telemetry.clear();
|
|
@@ -49,6 +62,13 @@ import { setup } from '../fixtures/utils.js';
|
|
|
49
62
|
sequencer
|
|
50
63
|
};
|
|
51
64
|
}
|
|
65
|
+
function getSequencerClient(context) {
|
|
66
|
+
const sequencer = context.aztecNode.getSequencer();
|
|
67
|
+
if (!sequencer) {
|
|
68
|
+
throw new Error('Benchmark setup requires a local sequencer');
|
|
69
|
+
}
|
|
70
|
+
return sequencer;
|
|
71
|
+
}
|
|
52
72
|
function isMetricDefinition(f) {
|
|
53
73
|
return 'description' in f;
|
|
54
74
|
}
|
|
@@ -137,9 +157,78 @@ function getMetricValues(points) {
|
|
|
137
157
|
}
|
|
138
158
|
export async function waitTxs(txs, context, txWaitOpts) {
|
|
139
159
|
context.logger.info(`Awaiting ${txs.length} txs to be mined`);
|
|
140
|
-
await
|
|
160
|
+
await waitTxsWithBlockMining(txs, context, txWaitOpts);
|
|
141
161
|
context.logger.info(`${txs.length} txs have been mined`);
|
|
142
162
|
}
|
|
163
|
+
async function waitTxsWithBlockMining(txs, context, txWaitOpts) {
|
|
164
|
+
const sequencer = getSequencerClient(context).getSequencer();
|
|
165
|
+
for(let attempt = 0; attempt <= MAX_BENCH_WAIT_BLOCKS; attempt++){
|
|
166
|
+
if (await haveAllTxsMined(txs, context, txWaitOpts)) {
|
|
167
|
+
await waitForSequencerIdle(sequencer);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
await waitForSequencerIdle(sequencer);
|
|
171
|
+
context.logger.info('Mining next benchmark block while waiting for txs', {
|
|
172
|
+
attempt,
|
|
173
|
+
txs: txs.length
|
|
174
|
+
});
|
|
175
|
+
await mineNextBenchmarkBlock(context, sequencer);
|
|
176
|
+
}
|
|
177
|
+
await Promise.all(txs.map((txHash)=>waitForTx(context.aztecNode, txHash, {
|
|
178
|
+
...txWaitOpts,
|
|
179
|
+
timeout: txWaitOpts?.timeout ?? BENCH_FINAL_WAIT_TIMEOUT_SECONDS
|
|
180
|
+
})));
|
|
181
|
+
}
|
|
182
|
+
async function haveAllTxsMined(txs, context, txWaitOpts) {
|
|
183
|
+
const receipts = await Promise.all(txs.map((txHash)=>context.aztecNode.getTxReceipt(txHash)));
|
|
184
|
+
for (const receipt of receipts){
|
|
185
|
+
if (receipt.isDropped()) {
|
|
186
|
+
throw new Error(`Transaction ${receipt.txHash.toString()} was dropped. Reason: ${receipt.error ?? 'unknown'}`);
|
|
187
|
+
}
|
|
188
|
+
if (!receipt.isMined()) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
if (!receipt.hasExecutionSucceeded() && !txWaitOpts?.dontThrowOnRevert) {
|
|
192
|
+
throw new Error(`Transaction ${receipt.txHash.toString()} reverted: ${receipt.executionResult}. Reason: ${receipt.error ?? 'unknown'}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
async function mineNextBenchmarkBlock(context, sequencer) {
|
|
198
|
+
const l1PublishingTime = BigInt(context.config.l1PublishingTime ?? DEFAULT_L1_PUBLISHING_TIME_SECONDS);
|
|
199
|
+
const currentTimestamp = BigInt(await context.cheatCodes.eth.lastBlockTimestamp());
|
|
200
|
+
let targetSlot = SlotNumber(await context.cheatCodes.rollup.getSlot() + 1);
|
|
201
|
+
let targetTimestamp = await context.cheatCodes.rollup.getTimestampForSlot(targetSlot);
|
|
202
|
+
while(targetTimestamp - l1PublishingTime - 1n <= currentTimestamp){
|
|
203
|
+
targetSlot = SlotNumber(targetSlot + 1);
|
|
204
|
+
targetTimestamp = await context.cheatCodes.rollup.getTimestampForSlot(targetSlot);
|
|
205
|
+
}
|
|
206
|
+
const triggerTimestamp = targetTimestamp - l1PublishingTime - 1n;
|
|
207
|
+
await context.cheatCodes.eth.warp(triggerTimestamp, {
|
|
208
|
+
resetBlockInterval: true
|
|
209
|
+
});
|
|
210
|
+
await context.aztecNode.mineBlock();
|
|
211
|
+
await waitForSequencerIdle(sequencer);
|
|
212
|
+
}
|
|
213
|
+
function waitForSequencerIdle(sequencer, timeout = SEQUENCER_IDLE_TIMEOUT_MS) {
|
|
214
|
+
if (sequencer.status().state === SequencerState.IDLE) {
|
|
215
|
+
return Promise.resolve();
|
|
216
|
+
}
|
|
217
|
+
return new Promise((resolve, reject)=>{
|
|
218
|
+
const timer = setTimeout(()=>{
|
|
219
|
+
sequencer.off('state-changed', handler);
|
|
220
|
+
reject(new Error('Timeout waiting for sequencer IDLE state'));
|
|
221
|
+
}, timeout);
|
|
222
|
+
const handler = (args)=>{
|
|
223
|
+
if (args.newState === SequencerState.IDLE) {
|
|
224
|
+
clearTimeout(timer);
|
|
225
|
+
sequencer.off('state-changed', handler);
|
|
226
|
+
resolve();
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
sequencer.on('state-changed', handler);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
143
232
|
function randomBytesAsBigInts(length) {
|
|
144
233
|
return [
|
|
145
234
|
...Array(length)
|