@aztec/end-to-end 0.0.0-test.0 → 0.0.1-commit.001888fc
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/dest/bench/client_flows/benchmark.d.ts +62 -0
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/benchmark.js +281 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +79 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/client_flows_benchmark.js +329 -0
- package/dest/bench/client_flows/config.d.ts +14 -0
- package/dest/bench/client_flows/config.d.ts.map +1 -0
- package/dest/bench/client_flows/config.js +124 -0
- package/dest/bench/client_flows/data_extractor.d.ts +2 -0
- package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
- package/dest/bench/client_flows/data_extractor.js +79 -0
- package/dest/bench/utils.d.ts +16 -41
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +44 -72
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +28 -19
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +125 -103
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +32 -32
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +105 -104
- package/dest/e2e_deploy_contract/deploy_test.d.ts +19 -10
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +26 -27
- package/dest/e2e_epochs/epochs_test.d.ts +75 -24
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +290 -58
- package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/e2e_fees/bridging_race.notest.js +61 -0
- package/dest/e2e_fees/fees_test.d.ts +38 -23
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +169 -183
- package/dest/e2e_l1_publisher/write_json.d.ts +11 -0
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
- package/dest/e2e_l1_publisher/write_json.js +56 -0
- package/dest/e2e_multi_validator/utils.d.ts +12 -0
- package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
- package/dest/e2e_multi_validator/utils.js +214 -0
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +15 -15
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +36 -42
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
- package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
- package/dest/e2e_p2p/p2p_network.d.ts +282 -27
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +255 -176
- package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/e2e_p2p/reqresp/utils.js +190 -0
- package/dest/e2e_p2p/shared.d.ts +64 -8
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +200 -27
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
- package/dest/e2e_token_contract/token_contract_test.d.ts +29 -14
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +107 -75
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +30 -0
- package/dest/fixtures/e2e_prover_test.d.ts +55 -0
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
- package/dest/fixtures/e2e_prover_test.js +271 -0
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +10 -8
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +11 -5
- package/dest/fixtures/get_acvm_config.d.ts +2 -2
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_acvm_config.js +3 -15
- package/dest/fixtures/get_bb_config.d.ts +2 -2
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +10 -17
- package/dest/fixtures/ha_setup.d.ts +71 -0
- package/dest/fixtures/ha_setup.d.ts.map +1 -0
- package/dest/fixtures/ha_setup.js +116 -0
- 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/l1_to_l2_messaging.d.ts +11 -7
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +45 -19
- package/dest/fixtures/logging.d.ts +1 -1
- package/dest/fixtures/setup.d.ts +239 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +606 -0
- package/dest/fixtures/setup_p2p_test.d.ts +23 -15
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +102 -31
- package/dest/fixtures/token_utils.d.ts +10 -4
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +33 -13
- package/dest/fixtures/utils.d.ts +5 -153
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -552
- package/dest/fixtures/web3signer.d.ts +5 -0
- package/dest/fixtures/web3signer.d.ts.map +1 -0
- package/dest/fixtures/web3signer.js +53 -0
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/index.d.ts +1 -1
- package/dest/quality_of_service/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +44 -27
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +107 -53
- package/dest/shared/gas_portal_test_harness.d.ts +33 -25
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +51 -30
- package/dest/shared/index.d.ts +3 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.d.ts +1 -1
- package/dest/shared/jest_setup.js +42 -2
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +6 -4
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +15 -16
- package/dest/shared/uniswap_l1_l2.d.ts +3 -25
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +175 -126
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +7 -7
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +17 -18
- package/dest/simulators/token_simulator.d.ts +6 -3
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +12 -30
- package/dest/spartan/setup_test_wallets.d.ts +36 -11
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +276 -62
- package/dest/spartan/tx_metrics.d.ts +88 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +422 -0
- package/dest/spartan/utils/bot.d.ts +28 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +142 -0
- package/dest/spartan/utils/chaos.d.ts +79 -0
- package/dest/spartan/utils/chaos.d.ts.map +1 -0
- package/dest/spartan/utils/chaos.js +142 -0
- package/dest/spartan/utils/clients.d.ts +39 -0
- package/dest/spartan/utils/clients.d.ts.map +1 -0
- package/dest/spartan/utils/clients.js +90 -0
- package/dest/spartan/utils/config.d.ts +45 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +23 -0
- package/dest/spartan/utils/health.d.ts +63 -0
- package/dest/spartan/utils/health.d.ts.map +1 -0
- package/dest/spartan/utils/health.js +202 -0
- package/dest/spartan/utils/helm.d.ts +15 -0
- package/dest/spartan/utils/helm.d.ts.map +1 -0
- package/dest/spartan/utils/helm.js +47 -0
- package/dest/spartan/utils/index.d.ts +11 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +22 -0
- package/dest/spartan/utils/k8s.d.ts +128 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +381 -0
- package/dest/spartan/utils/nodes.d.ts +40 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +461 -0
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/spartan/utils/scripts.d.ts +30 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +81 -0
- package/dest/spartan/utils.d.ts +2 -415
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -445
- package/dest/test-wallet/test_wallet.d.ts +83 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +214 -0
- package/dest/test-wallet/utils.d.ts +41 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +71 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +48 -0
- package/dest/test-wallet/worker_wallet.d.ts +52 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +151 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +10 -0
- package/package.json +72 -62
- package/src/bench/client_flows/benchmark.ts +363 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +388 -0
- package/src/bench/client_flows/config.ts +69 -0
- package/src/bench/client_flows/data_extractor.ts +89 -0
- package/src/bench/utils.ts +47 -86
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +149 -171
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +155 -182
- package/src/e2e_deploy_contract/deploy_test.ts +40 -48
- package/src/e2e_epochs/epochs_test.ts +364 -93
- package/src/e2e_fees/bridging_race.notest.ts +74 -0
- package/src/e2e_fees/fees_test.ts +213 -259
- package/src/e2e_l1_publisher/write_json.ts +77 -0
- package/src/e2e_multi_validator/utils.ts +258 -0
- package/src/e2e_nested_contract/nested_contract_test.ts +48 -59
- package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
- package/src/e2e_p2p/p2p_network.ts +367 -234
- package/src/e2e_p2p/reqresp/utils.ts +256 -0
- package/src/e2e_p2p/shared.ts +315 -39
- package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
- package/src/e2e_token_contract/token_contract_test.ts +132 -126
- package/src/fixtures/authwit_proxy.ts +50 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +332 -0
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +15 -7
- package/src/fixtures/get_acvm_config.ts +4 -12
- package/src/fixtures/get_bb_config.ts +18 -13
- package/src/fixtures/ha_setup.ts +186 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/l1_to_l2_messaging.ts +56 -24
- package/src/fixtures/setup.ts +903 -0
- package/src/fixtures/setup_p2p_test.ts +134 -50
- package/src/fixtures/token_utils.ts +37 -16
- package/src/fixtures/utils.ts +27 -820
- package/src/fixtures/web3signer.ts +63 -0
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +9 -17
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +2 -2
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +110 -94
- package/src/shared/gas_portal_test_harness.ts +59 -50
- package/src/shared/index.ts +2 -1
- package/src/shared/jest_setup.ts +52 -2
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +19 -20
- package/src/shared/uniswap_l1_l2.ts +207 -226
- package/src/simulators/lending_simulator.ts +18 -17
- package/src/simulators/token_simulator.ts +18 -34
- package/src/spartan/DEVELOP.md +128 -0
- package/src/spartan/setup_test_wallets.ts +393 -95
- package/src/spartan/tx_metrics.ts +376 -0
- package/src/spartan/utils/bot.ts +188 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +29 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +71 -0
- package/src/spartan/utils/k8s.ts +535 -0
- package/src/spartan/utils/nodes.ts +543 -0
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +99 -0
- package/src/spartan/utils.ts +1 -582
- package/src/test-wallet/test_wallet.ts +306 -0
- package/src/test-wallet/utils.ts +112 -0
- package/src/test-wallet/wallet_worker_script.ts +60 -0
- package/src/test-wallet/worker_wallet.ts +213 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
- package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
- package/dest/e2e_prover/e2e_prover_test.js +0 -291
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/dest/fixtures/snapshot_manager.d.ts +0 -87
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -479
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/dest/sample-dapp/connect.js +0 -12
- package/dest/sample-dapp/contracts.js +0 -10
- package/dest/sample-dapp/deploy.js +0 -35
- package/dest/sample-dapp/index.js +0 -98
- package/src/e2e_prover/e2e_prover_test.ts +0 -418
- package/src/fixtures/setup_l1_contracts.ts +0 -27
- package/src/fixtures/snapshot_manager.ts +0 -617
- package/src/sample-dapp/connect.mjs +0 -16
- package/src/sample-dapp/contracts.mjs +0 -14
- package/src/sample-dapp/deploy.mjs +0 -40
- package/src/sample-dapp/index.mjs +0 -128
|
@@ -1,71 +1,63 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
createLogger,
|
|
11
|
-
sleep,
|
|
12
|
-
} from '@aztec/aztec.js';
|
|
13
|
-
import { FEE_FUNDING_FOR_TESTER_ACCOUNT } from '@aztec/constants';
|
|
14
|
-
import { type DeployL1ContractsArgs, RollupContract, createL1Clients } from '@aztec/ethereum';
|
|
1
|
+
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
3
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
4
|
+
import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
|
|
5
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
6
|
+
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
7
|
+
import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
8
|
+
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
9
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
15
10
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
16
|
-
import {
|
|
11
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
12
|
+
import { TestERC20Abi } from '@aztec/l1-artifacts';
|
|
17
13
|
import { AppSubscriptionContract } from '@aztec/noir-contracts.js/AppSubscription';
|
|
18
|
-
import { CounterContract } from '@aztec/noir-contracts.js/Counter';
|
|
19
14
|
import { FPCContract } from '@aztec/noir-contracts.js/FPC';
|
|
20
15
|
import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
|
|
16
|
+
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
21
17
|
import { TokenContract as BananaCoin } from '@aztec/noir-contracts.js/Token';
|
|
18
|
+
import { CounterContract } from '@aztec/noir-test-contracts.js/Counter';
|
|
22
19
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
23
20
|
import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
24
|
-
import { computePartialAddress } from '@aztec/stdlib/contract';
|
|
25
21
|
import { GasSettings } from '@aztec/stdlib/gas';
|
|
22
|
+
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
26
23
|
|
|
27
24
|
import { getContract } from 'viem';
|
|
28
25
|
|
|
29
26
|
import { MNEMONIC } from '../fixtures/fixtures.js';
|
|
30
27
|
import {
|
|
31
|
-
type
|
|
32
|
-
type
|
|
33
|
-
createSnapshotManager,
|
|
28
|
+
type EndToEndContext,
|
|
29
|
+
type SetupOptions,
|
|
34
30
|
deployAccounts,
|
|
35
|
-
|
|
31
|
+
publicDeployAccounts,
|
|
32
|
+
setup,
|
|
33
|
+
teardown,
|
|
34
|
+
} from '../fixtures/setup.js';
|
|
36
35
|
import { mintTokensToPrivate } from '../fixtures/token_utils.js';
|
|
37
|
-
import {
|
|
38
|
-
type BalancesFn,
|
|
39
|
-
type SetupOptions,
|
|
40
|
-
ensureAccountsPubliclyDeployed,
|
|
41
|
-
getBalancesFn,
|
|
42
|
-
setupCanonicalFeeJuice,
|
|
43
|
-
} from '../fixtures/utils.js';
|
|
36
|
+
import { type BalancesFn, getBalancesFn, setupSponsoredFPC } from '../fixtures/utils.js';
|
|
44
37
|
import { FeeJuicePortalTestingHarnessFactory, type GasBridgingTestHarness } from '../shared/gas_portal_test_harness.js';
|
|
45
|
-
|
|
46
|
-
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
38
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
47
39
|
|
|
48
40
|
/**
|
|
49
|
-
* Test fixture for testing fees. Provides the following
|
|
41
|
+
* Test fixture for testing fees. Provides the following setup steps:
|
|
50
42
|
* InitialAccounts: Initializes 3 Schnorr account contracts.
|
|
51
43
|
* PublicDeployAccounts: Deploys the accounts publicly.
|
|
52
44
|
* DeployFeeJuice: Deploys the Fee Juice contract.
|
|
53
45
|
* FPCSetup: Deploys BananaCoin and FPC contracts, and bridges gas from L1.
|
|
46
|
+
* SponsoredFPCSetup: Deploys Sponsored FPC contract, and bridges gas from L1.
|
|
54
47
|
* FundAlice: Mints private and public bananas to Alice.
|
|
55
48
|
* SetupSubscription: Deploys a counter contract and a subscription contract, and mints Fee Juice to the subscription contract.
|
|
56
49
|
*/
|
|
57
50
|
export class FeesTest {
|
|
58
|
-
private
|
|
59
|
-
|
|
51
|
+
private accounts: AztecAddress[] = [];
|
|
52
|
+
public context!: EndToEndContext;
|
|
60
53
|
|
|
61
54
|
public logger: Logger;
|
|
62
|
-
public pxe!: PXE;
|
|
63
55
|
public aztecNode!: AztecNode;
|
|
56
|
+
public aztecNodeAdmin!: AztecNodeAdmin;
|
|
64
57
|
public cheatCodes!: CheatCodes;
|
|
65
58
|
|
|
66
|
-
public
|
|
59
|
+
public wallet!: TestWallet;
|
|
67
60
|
public aliceAddress!: AztecAddress;
|
|
68
|
-
public bobWallet!: AccountWallet;
|
|
69
61
|
public bobAddress!: AztecAddress;
|
|
70
62
|
public sequencerAddress!: AztecAddress;
|
|
71
63
|
public coinbase!: EthAddress;
|
|
@@ -74,14 +66,16 @@ export class FeesTest {
|
|
|
74
66
|
|
|
75
67
|
public gasSettings!: GasSettings;
|
|
76
68
|
|
|
69
|
+
public rollupContract!: RollupContract;
|
|
70
|
+
|
|
77
71
|
public feeJuiceContract!: FeeJuiceContract;
|
|
78
72
|
public bananaCoin!: BananaCoin;
|
|
79
73
|
public bananaFPC!: FPCContract;
|
|
74
|
+
public sponsoredFPC!: SponsoredFPCContract;
|
|
80
75
|
public counterContract!: CounterContract;
|
|
81
76
|
public subscriptionContract!: AppSubscriptionContract;
|
|
82
77
|
public feeJuiceBridgeTestHarness!: GasBridgingTestHarness;
|
|
83
78
|
|
|
84
|
-
public context!: SubsystemsContext;
|
|
85
79
|
public chainMonitor!: ChainMonitor;
|
|
86
80
|
|
|
87
81
|
public getCoinbaseBalance!: () => Promise<bigint>;
|
|
@@ -89,7 +83,7 @@ export class FeesTest {
|
|
|
89
83
|
public getGasBalanceFn!: BalancesFn;
|
|
90
84
|
public getBananaPublicBalanceFn!: BalancesFn;
|
|
91
85
|
public getBananaPrivateBalanceFn!: BalancesFn;
|
|
92
|
-
public getProverFee!: (blockNumber:
|
|
86
|
+
public getProverFee!: (blockNumber: BlockNumber) => Promise<bigint>;
|
|
93
87
|
|
|
94
88
|
public readonly ALICE_INITIAL_BANANAS = BigInt(1e22);
|
|
95
89
|
public readonly SUBSCRIPTION_AMOUNT = BigInt(1e19);
|
|
@@ -98,33 +92,40 @@ export class FeesTest {
|
|
|
98
92
|
constructor(
|
|
99
93
|
testName: string,
|
|
100
94
|
private numberOfAccounts = 3,
|
|
101
|
-
setupOptions: Partial<SetupOptions &
|
|
95
|
+
private setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs> = {},
|
|
102
96
|
) {
|
|
103
97
|
if (!numberOfAccounts) {
|
|
104
98
|
throw new Error('There must be at least 1 initial account.');
|
|
105
99
|
}
|
|
100
|
+
setupOptions.coinbase ??= EthAddress.random();
|
|
101
|
+
this.coinbase = setupOptions.coinbase!;
|
|
106
102
|
this.logger = createLogger(`e2e:e2e_fees:${testName}`);
|
|
107
|
-
this.snapshotManager = createSnapshotManager(
|
|
108
|
-
`e2e_fees/${testName}-${numberOfAccounts}`,
|
|
109
|
-
dataPath,
|
|
110
|
-
{ startProverNode: true, ...setupOptions },
|
|
111
|
-
{ ...setupOptions },
|
|
112
|
-
);
|
|
113
103
|
}
|
|
114
104
|
|
|
115
105
|
async setup() {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
106
|
+
this.logger.verbose('Setting up fresh context...');
|
|
107
|
+
// Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
108
|
+
const tokenAllowList = await getTokenAllowedSetupFunctions();
|
|
109
|
+
this.context = await setup(0, {
|
|
110
|
+
startProverNode: true,
|
|
111
|
+
...this.setupOptions,
|
|
112
|
+
fundSponsoredFPC: true,
|
|
113
|
+
skipAccountDeployment: true,
|
|
114
|
+
l1ContractsArgs: { ...this.setupOptions },
|
|
115
|
+
txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
this.rollupContract = RollupContract.getFromConfig(this.context.config);
|
|
119
|
+
this.chainMonitor = new ChainMonitor(this.rollupContract, this.context.dateProvider, this.logger, 200).start();
|
|
120
|
+
|
|
121
|
+
await this.applyBaseSetup();
|
|
121
122
|
|
|
122
123
|
return this;
|
|
123
124
|
}
|
|
124
125
|
|
|
125
126
|
async teardown() {
|
|
126
|
-
this.chainMonitor.stop();
|
|
127
|
-
await this.
|
|
127
|
+
await this.chainMonitor.stop();
|
|
128
|
+
await teardown(this.context);
|
|
128
129
|
}
|
|
129
130
|
|
|
130
131
|
setIsMarkingAsProven(b: boolean) {
|
|
@@ -138,240 +139,193 @@ export class FeesTest {
|
|
|
138
139
|
}
|
|
139
140
|
}
|
|
140
141
|
|
|
141
|
-
async
|
|
142
|
-
const
|
|
142
|
+
async getBlockRewards() {
|
|
143
|
+
const blockReward = await this.rollupContract.getCheckpointReward();
|
|
144
|
+
const rewardConfig = await this.rollupContract.getRewardConfig();
|
|
145
|
+
|
|
146
|
+
const balance = await this.feeJuiceBridgeTestHarness.getL1FeeJuiceBalance(rewardConfig.rewardDistributor);
|
|
147
|
+
|
|
148
|
+
const toDistribute = balance > blockReward ? blockReward : balance;
|
|
149
|
+
const sequencerBlockRewards = (toDistribute * BigInt(rewardConfig.sequencerBps)) / 10000n;
|
|
150
|
+
const proverBlockRewards = toDistribute - sequencerBlockRewards;
|
|
151
|
+
|
|
152
|
+
return { sequencerBlockRewards, proverBlockRewards };
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
async mintAndBridgeFeeJuice(minter: AztecAddress, recipient: AztecAddress) {
|
|
156
|
+
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(recipient);
|
|
143
157
|
const { claimSecret: secret, messageLeafIndex: index } = claim;
|
|
144
|
-
await this.feeJuiceContract.methods.claim(
|
|
158
|
+
await this.feeJuiceContract.methods.claim(recipient, claim.claimAmount, secret, index).send({ from: minter });
|
|
145
159
|
}
|
|
146
160
|
|
|
147
161
|
/** Alice mints bananaCoin tokens privately to the target address and redeems them. */
|
|
148
162
|
async mintPrivateBananas(amount: bigint, address: AztecAddress) {
|
|
149
|
-
const balanceBefore = await this.bananaCoin.methods
|
|
163
|
+
const { result: balanceBefore } = await this.bananaCoin.methods
|
|
164
|
+
.balance_of_private(address)
|
|
165
|
+
.simulate({ from: address });
|
|
150
166
|
|
|
151
|
-
await mintTokensToPrivate(this.bananaCoin, this.
|
|
167
|
+
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
|
|
152
168
|
|
|
153
|
-
const balanceAfter = await this.bananaCoin.methods
|
|
169
|
+
const { result: balanceAfter } = await this.bananaCoin.methods
|
|
170
|
+
.balance_of_private(address)
|
|
171
|
+
.simulate({ from: address });
|
|
154
172
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
155
173
|
}
|
|
156
174
|
|
|
157
|
-
public async
|
|
158
|
-
await this.
|
|
159
|
-
await this.
|
|
160
|
-
await this.
|
|
161
|
-
await this.
|
|
175
|
+
public async applyBaseSetup() {
|
|
176
|
+
await this.applyInitialAccounts();
|
|
177
|
+
await this.applyPublicDeployAccounts();
|
|
178
|
+
await this.applySetupFeeJuice();
|
|
179
|
+
await this.applyDeployBananaToken();
|
|
162
180
|
}
|
|
163
181
|
|
|
164
|
-
async
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
const { publicClient, walletClient } = createL1Clients(aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
190
|
-
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
191
|
-
aztecNode: aztecNode,
|
|
192
|
-
pxeService: pxe,
|
|
193
|
-
publicClient: publicClient,
|
|
194
|
-
walletClient: walletClient,
|
|
195
|
-
wallet: this.aliceWallet,
|
|
196
|
-
logger: this.logger,
|
|
197
|
-
});
|
|
198
|
-
},
|
|
199
|
-
);
|
|
182
|
+
async applyInitialAccounts() {
|
|
183
|
+
this.logger.info('Applying initial accounts setup');
|
|
184
|
+
|
|
185
|
+
const { deployedAccounts } = await deployAccounts(
|
|
186
|
+
this.numberOfAccounts,
|
|
187
|
+
this.logger,
|
|
188
|
+
)({
|
|
189
|
+
wallet: this.context.wallet,
|
|
190
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
this.wallet = this.context.wallet;
|
|
194
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
195
|
+
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
196
|
+
this.gasSettings = GasSettings.default({ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2) });
|
|
197
|
+
this.cheatCodes = this.context.cheatCodes;
|
|
198
|
+
this.accounts = deployedAccounts.map(a => a.address);
|
|
199
|
+
this.accounts.forEach((a, i) => this.logger.verbose(`Account ${i} address: ${a}`));
|
|
200
|
+
[this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.accounts.slice(0, 3);
|
|
201
|
+
|
|
202
|
+
// We set Alice as the FPC admin to avoid the need for deployment of another account.
|
|
203
|
+
this.fpcAdmin = this.aliceAddress;
|
|
204
|
+
|
|
205
|
+
const canonicalFeeJuice = await getCanonicalFeeJuice();
|
|
206
|
+
this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.wallet);
|
|
200
207
|
}
|
|
201
208
|
|
|
202
|
-
async
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
);
|
|
209
|
+
async applyPublicDeployAccounts() {
|
|
210
|
+
this.logger.info('Applying public deploy accounts setup');
|
|
211
|
+
await publicDeployAccounts(this.wallet, this.accounts);
|
|
206
212
|
}
|
|
207
213
|
|
|
208
|
-
async
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
223
|
-
aztecNode: context.aztecNode,
|
|
224
|
-
pxeService: context.pxe,
|
|
225
|
-
publicClient: publicClient,
|
|
226
|
-
walletClient: walletClient,
|
|
227
|
-
wallet: this.aliceWallet,
|
|
228
|
-
logger: this.logger,
|
|
229
|
-
});
|
|
230
|
-
},
|
|
231
|
-
);
|
|
214
|
+
async applySetupFeeJuice() {
|
|
215
|
+
this.logger.info('Applying fee juice setup');
|
|
216
|
+
|
|
217
|
+
this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
|
|
218
|
+
|
|
219
|
+
this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.logger);
|
|
220
|
+
|
|
221
|
+
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
222
|
+
aztecNode: this.context.aztecNodeService,
|
|
223
|
+
aztecNodeAdmin: this.context.aztecNodeService,
|
|
224
|
+
l1Client: this.context.deployL1ContractsValues.l1Client,
|
|
225
|
+
wallet: this.wallet,
|
|
226
|
+
logger: this.logger,
|
|
227
|
+
});
|
|
232
228
|
}
|
|
233
229
|
|
|
234
|
-
async
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
230
|
+
async applyDeployBananaToken() {
|
|
231
|
+
this.logger.info('Applying deploy banana token setup');
|
|
232
|
+
|
|
233
|
+
const { contract: bananaCoin } = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
|
|
234
|
+
from: this.aliceAddress,
|
|
235
|
+
});
|
|
236
|
+
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
237
|
+
|
|
238
|
+
this.bananaCoin = bananaCoin;
|
|
239
|
+
this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.logger);
|
|
240
|
+
this.getBananaPrivateBalanceFn = getBalancesFn(
|
|
241
|
+
'🍌.private',
|
|
242
|
+
this.bananaCoin.methods.balance_of_private,
|
|
243
|
+
this.logger,
|
|
247
244
|
);
|
|
248
245
|
}
|
|
249
246
|
|
|
250
|
-
public async
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
return mana * provingCostPerMana;
|
|
319
|
-
};
|
|
320
|
-
},
|
|
321
|
-
);
|
|
247
|
+
public async applyFPCSetup() {
|
|
248
|
+
this.logger.info('Applying FPC setup');
|
|
249
|
+
|
|
250
|
+
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
251
|
+
expect((await this.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
252
|
+
|
|
253
|
+
const bananaCoin = this.bananaCoin;
|
|
254
|
+
const { contract: bananaFPC } = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
|
|
255
|
+
from: this.aliceAddress,
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
259
|
+
|
|
260
|
+
await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.aliceAddress);
|
|
261
|
+
|
|
262
|
+
this.bananaFPC = bananaFPC;
|
|
263
|
+
|
|
264
|
+
const l1FeeJuiceAddress = this.feeJuiceBridgeTestHarness.l1FeeJuiceAddress;
|
|
265
|
+
|
|
266
|
+
this.getCoinbaseBalance = async () => {
|
|
267
|
+
const l1Client = createExtendedL1Client(this.context.config.l1RpcUrls, MNEMONIC);
|
|
268
|
+
const gasL1 = getContract({
|
|
269
|
+
address: l1FeeJuiceAddress.toString(),
|
|
270
|
+
abi: TestERC20Abi,
|
|
271
|
+
client: l1Client,
|
|
272
|
+
});
|
|
273
|
+
return await gasL1.read.balanceOf([this.coinbase.toString()]);
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
this.getCoinbaseSequencerRewards = async () => {
|
|
277
|
+
return await this.rollupContract.getSequencerRewards(this.coinbase);
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
this.getProverFee = async (blockNumber: BlockNumber) => {
|
|
281
|
+
const block = await this.aztecNode.getBlock(blockNumber);
|
|
282
|
+
|
|
283
|
+
// @todo @lherskind As we deal with #13601
|
|
284
|
+
// Right now the value is from `FeeLib.sol`
|
|
285
|
+
const L1_GAS_PER_EPOCH_VERIFIED = 3600000n;
|
|
286
|
+
|
|
287
|
+
// We round up
|
|
288
|
+
const mulDiv = (a: bigint, b: bigint, c: bigint) => (a * b) / c + ((a * b) % c > 0n ? 1n : 0n);
|
|
289
|
+
|
|
290
|
+
const { baseFee } = await this.rollupContract.getL1FeesAt(block!.header.globalVariables.timestamp);
|
|
291
|
+
const proverCost =
|
|
292
|
+
mulDiv(
|
|
293
|
+
mulDiv(L1_GAS_PER_EPOCH_VERIFIED, baseFee, BigInt(await this.rollupContract.getEpochDuration())),
|
|
294
|
+
1n,
|
|
295
|
+
await this.rollupContract.getManaTarget(),
|
|
296
|
+
) + (await this.rollupContract.getProvingCostPerMana());
|
|
297
|
+
|
|
298
|
+
const price = await this.rollupContract.getEthPerFeeAsset();
|
|
299
|
+
|
|
300
|
+
const mana = block!.header.totalManaUsed.toBigInt();
|
|
301
|
+
return mulDiv(mana * proverCost, 10n ** 12n, price);
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
public async applySponsoredFPCSetup() {
|
|
306
|
+
this.logger.info('Applying sponsored FPC setup');
|
|
307
|
+
|
|
308
|
+
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
309
|
+
expect((await this.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
310
|
+
|
|
311
|
+
const sponsoredFPCInstance = await setupSponsoredFPC(this.wallet);
|
|
312
|
+
this.logger.info(`SponsoredFPC at ${sponsoredFPCInstance.address}`);
|
|
313
|
+
|
|
314
|
+
this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCInstance.address, this.wallet);
|
|
322
315
|
}
|
|
323
316
|
|
|
324
317
|
public async applyFundAliceWithBananas() {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
}
|
|
331
|
-
() => Promise.resolve(),
|
|
332
|
-
);
|
|
318
|
+
this.logger.info('Applying fund Alice with bananas setup');
|
|
319
|
+
|
|
320
|
+
await this.mintPrivateBananas(this.ALICE_INITIAL_BANANAS, this.aliceAddress);
|
|
321
|
+
await this.bananaCoin.methods
|
|
322
|
+
.mint_to_public(this.aliceAddress, this.ALICE_INITIAL_BANANAS)
|
|
323
|
+
.send({ from: this.aliceAddress });
|
|
333
324
|
}
|
|
334
325
|
|
|
335
326
|
public async applyFundAliceWithPrivateBananas() {
|
|
336
|
-
|
|
337
|
-
'fund_alice_with_private_bananas',
|
|
338
|
-
async () => {
|
|
339
|
-
await this.mintPrivateBananas(this.ALICE_INITIAL_BANANAS, this.aliceAddress);
|
|
340
|
-
},
|
|
341
|
-
() => Promise.resolve(),
|
|
342
|
-
);
|
|
343
|
-
}
|
|
327
|
+
this.logger.info('Applying fund Alice with private bananas setup');
|
|
344
328
|
|
|
345
|
-
|
|
346
|
-
await this.snapshotManager.snapshot(
|
|
347
|
-
'setup_subscription',
|
|
348
|
-
async () => {
|
|
349
|
-
const counterContract = await CounterContract.deploy(this.bobWallet, 0, this.bobAddress).send().deployed();
|
|
350
|
-
|
|
351
|
-
// Deploy subscription contract, that allows subscriptions for SUBSCRIPTION_AMOUNT of bananas
|
|
352
|
-
const subscriptionContract = await AppSubscriptionContract.deploy(
|
|
353
|
-
this.bobWallet,
|
|
354
|
-
counterContract.address,
|
|
355
|
-
this.bobAddress,
|
|
356
|
-
this.bananaCoin.address,
|
|
357
|
-
this.SUBSCRIPTION_AMOUNT,
|
|
358
|
-
this.APP_SPONSORED_TX_GAS_LIMIT,
|
|
359
|
-
)
|
|
360
|
-
.send()
|
|
361
|
-
.deployed();
|
|
362
|
-
|
|
363
|
-
// Mint some Fee Juice to the subscription contract
|
|
364
|
-
// Could also use bridgeFromL1ToL2 from the harness, but this is more direct
|
|
365
|
-
await this.mintAndBridgeFeeJuice(subscriptionContract.address, FEE_FUNDING_FOR_TESTER_ACCOUNT);
|
|
366
|
-
return {
|
|
367
|
-
counterContractAddress: counterContract.address,
|
|
368
|
-
subscriptionContractAddress: subscriptionContract.address,
|
|
369
|
-
};
|
|
370
|
-
},
|
|
371
|
-
async ({ counterContractAddress, subscriptionContractAddress }) => {
|
|
372
|
-
this.counterContract = await CounterContract.at(counterContractAddress, this.bobWallet);
|
|
373
|
-
this.subscriptionContract = await AppSubscriptionContract.at(subscriptionContractAddress, this.bobWallet);
|
|
374
|
-
},
|
|
375
|
-
);
|
|
329
|
+
await this.mintPrivateBananas(this.ALICE_INITIAL_BANANAS, this.aliceAddress);
|
|
376
330
|
}
|
|
377
331
|
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
|
+
import { BatchedBlob, Blob, getEthBlobEvaluationInputs, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
|
|
4
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
+
import { L2Block } from '@aztec/stdlib/block';
|
|
6
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
7
|
+
|
|
8
|
+
import { writeFile } from 'fs/promises';
|
|
9
|
+
|
|
10
|
+
const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Creates a json object that can be used to test the solidity contract.
|
|
14
|
+
* The json object must be put into
|
|
15
|
+
*/
|
|
16
|
+
export async function writeJson(
|
|
17
|
+
fileName: string,
|
|
18
|
+
checkpointHeader: CheckpointHeader,
|
|
19
|
+
block: L2Block,
|
|
20
|
+
l1ToL2Content: Fr[],
|
|
21
|
+
blobs: Blob[],
|
|
22
|
+
batchedBlob: BatchedBlob,
|
|
23
|
+
recipientAddress: AztecAddress,
|
|
24
|
+
deployerAddress: `0x${string}`,
|
|
25
|
+
): Promise<void> {
|
|
26
|
+
if (!AZTEC_GENERATE_TEST_DATA) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// Path relative to the package.json in the end-to-end folder
|
|
30
|
+
const path = `../../l1-contracts/test/fixtures/${fileName}.json`;
|
|
31
|
+
|
|
32
|
+
const asHex = (value: Fr | Buffer | EthAddress | AztecAddress, size = 64) => {
|
|
33
|
+
const buffer = Buffer.isBuffer(value) ? value : value.toBuffer();
|
|
34
|
+
return `0x${buffer.toString('hex').padStart(size, '0')}`;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const jsonObject = {
|
|
38
|
+
populate: {
|
|
39
|
+
l1ToL2Content: l1ToL2Content.map(value => asHex(value)),
|
|
40
|
+
recipient: asHex(recipientAddress.toField()),
|
|
41
|
+
sender: deployerAddress,
|
|
42
|
+
},
|
|
43
|
+
messages: {
|
|
44
|
+
l2ToL1Messages: block.body.txEffects.flatMap(txEffect => txEffect.l2ToL1Msgs).map(value => asHex(value)),
|
|
45
|
+
},
|
|
46
|
+
checkpoint: {
|
|
47
|
+
// The json formatting in forge is a bit brittle, so we convert Fr to a number in the few values below.
|
|
48
|
+
// This should not be a problem for testing as long as the values are not larger than u32.
|
|
49
|
+
archive: asHex(block.archive.root),
|
|
50
|
+
blobCommitments: getPrefixedEthBlobCommitments(blobs),
|
|
51
|
+
batchedBlobInputs: getEthBlobEvaluationInputs(batchedBlob),
|
|
52
|
+
checkpointNumber: block.number,
|
|
53
|
+
body: `0x${block.body.toBuffer().toString('hex')}`,
|
|
54
|
+
header: {
|
|
55
|
+
lastArchiveRoot: asHex(checkpointHeader.lastArchiveRoot),
|
|
56
|
+
blockHeadersHash: asHex(checkpointHeader.blockHeadersHash),
|
|
57
|
+
blobsHash: asHex(checkpointHeader.blobsHash),
|
|
58
|
+
inHash: asHex(checkpointHeader.inHash),
|
|
59
|
+
outHash: asHex(checkpointHeader.epochOutHash),
|
|
60
|
+
slotNumber: Number(checkpointHeader.slotNumber),
|
|
61
|
+
timestamp: Number(checkpointHeader.timestamp),
|
|
62
|
+
coinbase: asHex(checkpointHeader.coinbase, 40),
|
|
63
|
+
feeRecipient: asHex(checkpointHeader.feeRecipient),
|
|
64
|
+
gasFees: {
|
|
65
|
+
feePerDaGas: Number(checkpointHeader.gasFees.feePerDaGas),
|
|
66
|
+
feePerL2Gas: Number(checkpointHeader.gasFees.feePerL2Gas),
|
|
67
|
+
},
|
|
68
|
+
totalManaUsed: checkpointHeader.totalManaUsed.toNumber(),
|
|
69
|
+
},
|
|
70
|
+
headerHash: asHex(checkpointHeader.hash()),
|
|
71
|
+
numTxs: block.body.txEffects.length,
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const output = JSON.stringify(jsonObject, null, 2);
|
|
76
|
+
await writeFile(path, output, 'utf8');
|
|
77
|
+
}
|