@aztec/end-to-end 0.0.0-test.0 → 0.0.1-commit.023c3e5
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 +321 -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 +106 -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 +41 -72
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +26 -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 +114 -102
- 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 +104 -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 +71 -22
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +260 -54
- 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 +162 -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 +37 -41
- 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 +281 -27
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +237 -175
- 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 +153 -0
- package/dest/e2e_p2p/shared.d.ts +44 -8
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +165 -27
- package/dest/e2e_token_contract/token_contract_test.d.ts +27 -14
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +96 -74
- 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 +278 -0
- package/dest/fixtures/fixtures.d.ts +6 -8
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +5 -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/index.d.ts +1 -1
- 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 +218 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +695 -0
- package/dest/fixtures/setup_p2p_test.d.ts +15 -15
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +96 -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 +31 -12
- 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 +105 -51
- 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 +2 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/jest_setup.d.ts +1 -1
- package/dest/shared/jest_setup.js +1 -1
- 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 +176 -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 +16 -13
- package/dest/spartan/setup_test_wallets.d.ts +27 -11
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +233 -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 +27 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +141 -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 +36 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +20 -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 +9 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +18 -0
- package/dest/spartan/utils/k8s.d.ts +126 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +375 -0
- package/dest/spartan/utils/nodes.d.ts +41 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +461 -0
- package/dest/spartan/utils/scripts.d.ts +16 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +66 -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/package.json +66 -58
- package/src/bench/client_flows/benchmark.ts +363 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +384 -0
- package/src/bench/client_flows/config.ts +61 -0
- package/src/bench/client_flows/data_extractor.ts +89 -0
- package/src/bench/utils.ts +41 -85
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +134 -169
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +156 -182
- package/src/e2e_deploy_contract/deploy_test.ts +40 -48
- package/src/e2e_epochs/epochs_test.ts +341 -81
- package/src/e2e_fees/bridging_race.notest.ts +74 -0
- package/src/e2e_fees/fees_test.ts +220 -258
- 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 +46 -59
- package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
- package/src/e2e_p2p/p2p_network.ts +341 -234
- package/src/e2e_p2p/reqresp/utils.ts +207 -0
- package/src/e2e_p2p/shared.ts +260 -39
- package/src/e2e_token_contract/token_contract_test.ts +115 -126
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +336 -0
- package/src/fixtures/fixtures.ts +5 -7
- package/src/fixtures/get_acvm_config.ts +4 -12
- package/src/fixtures/get_bb_config.ts +18 -13
- package/src/fixtures/l1_to_l2_messaging.ts +56 -24
- package/src/fixtures/setup.ts +1017 -0
- package/src/fixtures/setup_p2p_test.ts +133 -50
- package/src/fixtures/token_utils.ts +33 -15
- 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 +7 -15
- 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 +103 -91
- package/src/shared/gas_portal_test_harness.ts +59 -50
- package/src/shared/index.ts +1 -1
- package/src/shared/jest_setup.ts +1 -1
- package/src/shared/submit-transactions.ts +18 -20
- package/src/shared/uniswap_l1_l2.ts +197 -221
- package/src/simulators/lending_simulator.ts +16 -17
- package/src/simulators/token_simulator.ts +21 -13
- package/src/spartan/DEVELOP.md +128 -0
- package/src/spartan/setup_test_wallets.ts +308 -95
- package/src/spartan/tx_metrics.ts +376 -0
- package/src/spartan/utils/bot.ts +185 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +26 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +64 -0
- package/src/spartan/utils/k8s.ts +527 -0
- package/src/spartan/utils/nodes.ts +538 -0
- package/src/spartan/utils/scripts.ts +63 -0
- package/src/spartan/utils.ts +1 -582
- 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,6 +1,8 @@
|
|
|
1
1
|
// Convenience struct to hold an account's address and secret that can easily be passed around.
|
|
2
|
-
import { AztecAddress
|
|
3
|
-
import {
|
|
2
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
5
|
+
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
4
6
|
/**
|
|
5
7
|
* Contains utilities to compute the "key" for private holdings in the public state.
|
|
6
8
|
*/ export class LendingAccount {
|
|
@@ -14,7 +16,7 @@ import { pedersenHash } from '@aztec/foundation/crypto';
|
|
|
14
16
|
* Computes the key for the private holdings of this account.
|
|
15
17
|
* @returns Key in public space
|
|
16
18
|
*/ key() {
|
|
17
|
-
return
|
|
19
|
+
return poseidon2Hash([
|
|
18
20
|
this.address,
|
|
19
21
|
this.secret
|
|
20
22
|
]);
|
|
@@ -76,23 +78,16 @@ const computeMultiplier = (rate, dt)=>{
|
|
|
76
78
|
}
|
|
77
79
|
async prepare() {
|
|
78
80
|
this.accumulator = BASE;
|
|
79
|
-
const slot = await this.rollup.
|
|
80
|
-
|
|
81
|
-
]);
|
|
82
|
-
this.time = Number(await this.rollup.read.getTimestampForSlot([
|
|
83
|
-
slot
|
|
84
|
-
]));
|
|
81
|
+
const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.timestamp()) + BigInt(this.ethereumSlotDuration));
|
|
82
|
+
this.time = Number(await this.rollup.getTimestampForSlot(slot));
|
|
85
83
|
}
|
|
86
84
|
async progressSlots(diff, dateProvider) {
|
|
87
85
|
if (diff <= 1) {
|
|
88
86
|
return;
|
|
89
87
|
}
|
|
90
|
-
const slot = await this.rollup.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const ts = Number(await this.rollup.read.getTimestampForSlot([
|
|
94
|
-
slot + BigInt(diff)
|
|
95
|
-
]));
|
|
88
|
+
const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.timestamp()));
|
|
89
|
+
const targetSlot = SlotNumber(slot + diff);
|
|
90
|
+
const ts = Number(await this.rollup.getTimestampForSlot(targetSlot));
|
|
96
91
|
const timeDiff = ts - this.time;
|
|
97
92
|
this.time = ts;
|
|
98
93
|
// Mine ethereum blocks such that the next block will be in a new slot
|
|
@@ -100,7 +95,7 @@ const computeMultiplier = (rate, dt)=>{
|
|
|
100
95
|
if (dateProvider) {
|
|
101
96
|
dateProvider.setTime(this.time * 1000);
|
|
102
97
|
}
|
|
103
|
-
await this.cc.rollup.markAsProven(await this.rollup.
|
|
98
|
+
await this.cc.rollup.markAsProven(await this.rollup.getCheckpointNumber());
|
|
104
99
|
this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(timeDiff)), BASE);
|
|
105
100
|
}
|
|
106
101
|
depositPrivate(from, onBehalfOf, amount) {
|
|
@@ -157,7 +152,9 @@ const computeMultiplier = (rate, dt)=>{
|
|
|
157
152
|
const totalCollateral = Object.values(this.collateral).reduce((a, b)=>new Fr(a.value + b.value), Fr.ZERO);
|
|
158
153
|
expect(totalCollateral).toEqual(new Fr(this.collateralAsset.balanceOfPublic(this.lendingContract.address)));
|
|
159
154
|
expect(this.borrowed).toEqual(this.stableCoin.totalSupply - this.mintedOutside);
|
|
160
|
-
const asset = await this.lendingContract.methods.get_asset(0).simulate(
|
|
155
|
+
const asset = await this.lendingContract.methods.get_asset(0).simulate({
|
|
156
|
+
from: this.account.address
|
|
157
|
+
});
|
|
161
158
|
const interestAccumulator = asset['interest_accumulator'];
|
|
162
159
|
expect(interestAccumulator).toEqual(this.accumulator);
|
|
163
160
|
expect(asset['last_updated_ts']).toEqual(BigInt(this.time));
|
|
@@ -165,7 +162,9 @@ const computeMultiplier = (rate, dt)=>{
|
|
|
165
162
|
this.account.address,
|
|
166
163
|
AztecAddress.fromField(await this.account.key())
|
|
167
164
|
]){
|
|
168
|
-
const privatePos = await this.lendingContract.methods.get_position(key).simulate(
|
|
165
|
+
const privatePos = await this.lendingContract.methods.get_position(key).simulate({
|
|
166
|
+
from: this.account.address
|
|
167
|
+
});
|
|
169
168
|
expect(new Fr(privatePos['collateral'])).toEqual(this.collateral[key.toString()] ?? Fr.ZERO);
|
|
170
169
|
expect(new Fr(privatePos['static_debt'])).toEqual(this.staticDebt[key.toString()] ?? Fr.ZERO);
|
|
171
170
|
expect(privatePos['debt']).toEqual(muldivUp((this.staticDebt[key.toString()] ?? Fr.ZERO).value, this.accumulator, BASE));
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import type { Logger } from '@aztec/aztec.js/log';
|
|
3
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
2
4
|
import type { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
3
5
|
export declare class TokenSimulator {
|
|
4
6
|
protected token: TokenContract;
|
|
5
7
|
protected defaultWallet: Wallet;
|
|
8
|
+
protected defaultAddress: AztecAddress;
|
|
6
9
|
protected logger: Logger;
|
|
7
10
|
protected accounts: AztecAddress[];
|
|
8
11
|
private balancesPrivate;
|
|
9
12
|
private balancePublic;
|
|
10
13
|
totalSupply: bigint;
|
|
11
14
|
private lookupProvider;
|
|
12
|
-
constructor(token: TokenContract, defaultWallet: Wallet, logger: Logger, accounts: AztecAddress[]);
|
|
15
|
+
constructor(token: TokenContract, defaultWallet: Wallet, defaultAddress: AztecAddress, logger: Logger, accounts: AztecAddress[]);
|
|
13
16
|
addAccount(account: AztecAddress): void;
|
|
14
17
|
setLookupProvider(account: AztecAddress, wallet: Wallet): void;
|
|
15
18
|
mintPrivate(to: AztecAddress, amount: bigint): void;
|
|
@@ -26,4 +29,4 @@ export declare class TokenSimulator {
|
|
|
26
29
|
checkPrivate(): Promise<void>;
|
|
27
30
|
check(): Promise<void>;
|
|
28
31
|
}
|
|
29
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fc2ltdWxhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2ltdWxhdG9ycy90b2tlbl9zaW11bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFOUQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJcEUscUJBQWEsY0FBYztJQVF2QixTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWE7SUFDOUIsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNO0lBQy9CLFNBQVMsQ0FBQyxjQUFjLEVBQUUsWUFBWTtJQUN0QyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU07SUFDeEIsU0FBUyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUU7SUFYcEMsT0FBTyxDQUFDLGVBQWUsQ0FBa0M7SUFDekQsT0FBTyxDQUFDLGFBQWEsQ0FBa0M7SUFDaEQsV0FBVyxFQUFFLE1BQU0sQ0FBTTtJQUVoQyxPQUFPLENBQUMsY0FBYyxDQUFrQztJQUV4RCxZQUNZLEtBQUssRUFBRSxhQUFhLEVBQ3BCLGFBQWEsRUFBRSxNQUFNLEVBQ3JCLGNBQWMsRUFBRSxZQUFZLEVBQzVCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsUUFBUSxFQUFFLFlBQVksRUFBRSxFQUNoQztJQUVHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxRQUV0QztJQUVNLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFFN0Q7SUFFTSxXQUFXLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUdsRDtJQUVNLFVBQVUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBSWpEO0lBRU0sY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQU96RTtJQUVNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFPMUU7SUFFTSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFNNUU7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFNM0U7SUFFTSxXQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQU1wRDtJQUVNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBTW5EO0lBRU0sZUFBZSxDQUFDLE9BQU8sRUFBRSxZQUFZLFVBRTNDO0lBRU0sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksVUFFNUM7SUFFSyxXQUFXLGtCQWtCaEI7SUFFSyxZQUFZLGtCQW9DakI7SUFFWSxLQUFLLGtCQUdqQjtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token_simulator.d.ts","sourceRoot":"","sources":["../../src/simulators/token_simulator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token_simulator.d.ts","sourceRoot":"","sources":["../../src/simulators/token_simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAIpE,qBAAa,cAAc;IAQvB,SAAS,CAAC,KAAK,EAAE,aAAa;IAC9B,SAAS,CAAC,aAAa,EAAE,MAAM;IAC/B,SAAS,CAAC,cAAc,EAAE,YAAY;IACtC,SAAS,CAAC,MAAM,EAAE,MAAM;IACxB,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE;IAXpC,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAkC;IAChD,WAAW,EAAE,MAAM,CAAM;IAEhC,OAAO,CAAC,cAAc,CAAkC;IAExD,YACY,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,YAAY,EAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EAAE,EAChC;IAEG,UAAU,CAAC,OAAO,EAAE,YAAY,QAEtC;IAEM,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAE7D;IAEM,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAGlD;IAEM,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAIjD;IAEM,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAOzE;IAEM,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAO1E;IAEM,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAM5E;IAEM,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAM3E;IAEM,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAMpD;IAEM,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAMnD;IAEM,eAAe,CAAC,OAAO,EAAE,YAAY,UAE3C;IAEM,gBAAgB,CAAC,OAAO,EAAE,YAAY,UAE5C;IAEK,WAAW,kBAkBhB;IAEK,YAAY,kBAoCjB;IAEY,KAAK,kBAGjB;CACF"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
import { BatchCall } from '@aztec/aztec.js/contracts';
|
|
2
2
|
import chunk from 'lodash.chunk';
|
|
3
3
|
export class TokenSimulator {
|
|
4
4
|
token;
|
|
5
5
|
defaultWallet;
|
|
6
|
+
defaultAddress;
|
|
6
7
|
logger;
|
|
7
8
|
accounts;
|
|
8
9
|
balancesPrivate;
|
|
9
10
|
balancePublic;
|
|
10
11
|
totalSupply;
|
|
11
12
|
lookupProvider;
|
|
12
|
-
constructor(token, defaultWallet, logger, accounts){
|
|
13
|
+
constructor(token, defaultWallet, defaultAddress, logger, accounts){
|
|
13
14
|
this.token = token;
|
|
14
15
|
this.defaultWallet = defaultWallet;
|
|
16
|
+
this.defaultAddress = defaultAddress;
|
|
15
17
|
this.logger = logger;
|
|
16
18
|
this.accounts = accounts;
|
|
17
19
|
this.balancesPrivate = new Map();
|
|
@@ -83,12 +85,12 @@ export class TokenSimulator {
|
|
|
83
85
|
async checkPublic() {
|
|
84
86
|
// public calls
|
|
85
87
|
const calls = [
|
|
86
|
-
|
|
88
|
+
this.token.methods.total_supply(),
|
|
89
|
+
...this.accounts.map((address)=>this.token.methods.balance_of_public(address))
|
|
87
90
|
];
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const results = (await Promise.all(chunk(calls, 4).map((batch)=>new BatchCall(this.defaultWallet, batch).simulate()))).flat();
|
|
91
|
+
const results = (await Promise.all(chunk(calls, 5).map((batch)=>new BatchCall(this.defaultWallet, batch).simulate({
|
|
92
|
+
from: this.defaultAddress
|
|
93
|
+
})))).flat();
|
|
92
94
|
expect(results[0]).toEqual(this.totalSupply);
|
|
93
95
|
// Check that all our balances match
|
|
94
96
|
for(let i = 0; i < this.accounts.length; i++){
|
|
@@ -106,11 +108,10 @@ export class TokenSimulator {
|
|
|
106
108
|
defaultLookups.push(address);
|
|
107
109
|
}
|
|
108
110
|
}
|
|
109
|
-
const defaultCalls =
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const results = (await Promise.all(chunk(defaultCalls, 4).map((batch)=>new BatchCall(this.defaultWallet, batch).simulate()))).flat();
|
|
111
|
+
const defaultCalls = defaultLookups.map((address)=>this.token.methods.balance_of_private(address));
|
|
112
|
+
const results = (await Promise.all(chunk(defaultCalls, 4).map((batch)=>new BatchCall(this.defaultWallet, batch).simulate({
|
|
113
|
+
from: this.defaultAddress
|
|
114
|
+
})))).flat();
|
|
114
115
|
for(let i = 0; i < defaultLookups.length; i++){
|
|
115
116
|
expect(results[i]).toEqual(this.balanceOfPrivate(defaultLookups[i]));
|
|
116
117
|
}
|
|
@@ -121,7 +122,9 @@ export class TokenSimulator {
|
|
|
121
122
|
const asset = wallet ? this.token.withWallet(wallet) : this.token;
|
|
122
123
|
const actualPrivateBalance = await asset.methods.balance_of_private({
|
|
123
124
|
address
|
|
124
|
-
}).simulate(
|
|
125
|
+
}).simulate({
|
|
126
|
+
from: this.defaultAddress
|
|
127
|
+
});
|
|
125
128
|
expect(actualPrivateBalance).toEqual(this.balanceOfPrivate(address));
|
|
126
129
|
}
|
|
127
130
|
}
|
|
@@ -1,20 +1,36 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type FeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
3
|
+
import { type AztecNode } from '@aztec/aztec.js/node';
|
|
2
4
|
import type { Logger } from '@aztec/foundation/log';
|
|
3
5
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
import { TestWallet } from '@aztec/test-wallet/server';
|
|
7
|
+
export interface TestAccounts {
|
|
8
|
+
aztecNode: AztecNode;
|
|
9
|
+
wallet: TestWallet;
|
|
10
|
+
accounts: AztecAddress[];
|
|
11
|
+
tokenContract: TokenContract;
|
|
12
|
+
tokenAdminAddress: AztecAddress;
|
|
8
13
|
tokenName: string;
|
|
9
|
-
|
|
14
|
+
recipientAddress: AztecAddress;
|
|
10
15
|
tokenAddress: AztecAddress;
|
|
11
16
|
}
|
|
12
|
-
export
|
|
13
|
-
export declare function
|
|
14
|
-
export declare function
|
|
15
|
-
|
|
17
|
+
export type TestAccountsWithoutTokens = Omit<TestAccounts, 'tokenAddress' | 'tokenContract' | 'tokenName' | 'tokenAdminAddress'>;
|
|
18
|
+
export declare function setupTestAccountsWithTokens(nodeUrl: string, mintAmount: bigint, logger: Logger): Promise<TestAccounts>;
|
|
19
|
+
export declare function deploySponsoredTestAccountsWithTokens(wallet: TestWallet, aztecNode: AztecNode, mintAmount: bigint, logger: Logger, numberOfFundedWallets?: number): Promise<TestAccounts>;
|
|
20
|
+
export declare function deploySponsoredTestAccounts(wallet: TestWallet, aztecNode: AztecNode, logger: Logger, numberOfFundedWallets?: number): Promise<TestAccountsWithoutTokens>;
|
|
21
|
+
export declare function deployTestAccountsWithTokens(nodeUrl: string, l1RpcUrls: string[], mnemonicOrPrivateKey: string, mintAmount: bigint, logger: Logger, numberOfFundedWallets?: number): Promise<TestAccounts>;
|
|
22
|
+
export declare function performTransfers({ wallet, testAccounts, rounds, transferAmount, logger, feePaymentMethod }: {
|
|
23
|
+
wallet: TestWallet;
|
|
24
|
+
testAccounts: TestAccounts;
|
|
16
25
|
rounds: number;
|
|
17
26
|
transferAmount: bigint;
|
|
18
27
|
logger: Logger;
|
|
28
|
+
feePaymentMethod?: FeePaymentMethod;
|
|
19
29
|
}): Promise<void>;
|
|
20
|
-
|
|
30
|
+
export type WalletWrapper = {
|
|
31
|
+
wallet: TestWallet;
|
|
32
|
+
aztecNode: AztecNode;
|
|
33
|
+
cleanup: () => Promise<void>;
|
|
34
|
+
};
|
|
35
|
+
export declare function createWalletAndAztecNodeClient(nodeUrl: string, proverEnabled: boolean, logger: Logger): Promise<WalletWrapper>;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBfdGVzdF93YWxsZXRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BhcnRhbi9zZXR1cF90ZXN0X3dhbGxldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSXpELE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUE2QixNQUFNLHFCQUFxQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBb0MsTUFBTSxzQkFBc0IsQ0FBQztBQUl4RixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0QsT0FBTyxFQUFFLFVBQVUsRUFBaUUsTUFBTSwyQkFBMkIsQ0FBQztBQU10SCxNQUFNLFdBQVcsWUFBWTtJQUMzQixTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxVQUFVLENBQUM7SUFDbkIsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxhQUFhLENBQUM7SUFDN0IsaUJBQWlCLEVBQUUsWUFBWSxDQUFDO0lBQ2hDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDO0lBQy9CLFlBQVksRUFBRSxZQUFZLENBQUM7Q0FDNUI7QUFFRCxNQUFNLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUMxQyxZQUFZLEVBQ1osY0FBYyxHQUFHLGVBQWUsR0FBRyxXQUFXLEdBQUcsbUJBQW1CLENBQ3JFLENBQUM7QUFNRix3QkFBc0IsMkJBQTJCLENBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQ2YsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsWUFBWSxDQUFDLENBeUJ2QjtBQUVELHdCQUFzQixxQ0FBcUMsQ0FDekQsTUFBTSxFQUFFLFVBQVUsRUFDbEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxxQkFBcUIsU0FBSSxHQUN4QixPQUFPLENBQUMsWUFBWSxDQUFDLENBdUN2QjtBQW1ERCx3QkFBc0IsMkJBQTJCLENBQy9DLE1BQU0sRUFBRSxVQUFVLEVBQ2xCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLE1BQU0sRUFBRSxNQUFNLEVBQ2QscUJBQXFCLFNBQUksR0FDeEIsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBa0JwQztBQUVELHdCQUFzQiw0QkFBNEIsQ0FDaEQsT0FBTyxFQUFFLE1BQU0sRUFDZixTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQ25CLG9CQUFvQixFQUFFLE1BQU0sRUFDNUIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxxQkFBcUIsU0FBSSxHQUN4QixPQUFPLENBQUMsWUFBWSxDQUFDLENBK0N2QjtBQWlGRCx3QkFBc0IsZ0JBQWdCLENBQUMsRUFDckMsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLE1BQU0sRUFDTixnQkFBZ0IsRUFDakIsRUFBRTtJQUNELE1BQU0sRUFBRSxVQUFVLENBQUM7SUFDbkIsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUMzQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsZ0JBQWdCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztDQUNyQyxpQkFxQkE7QUFFRCxNQUFNLE1BQU0sYUFBYSxHQUFHO0lBQzFCLE1BQU0sRUFBRSxVQUFVLENBQUM7SUFDbkIsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUNyQixPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDOUIsQ0FBQztBQUVGLHdCQUFzQiw4QkFBOEIsQ0FDbEQsT0FBTyxFQUFFLE1BQU0sRUFDZixhQUFhLEVBQUUsT0FBTyxFQUN0QixNQUFNLEVBQUUsTUFBTSxHQUNiLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FxQnhCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup_test_wallets.d.ts","sourceRoot":"","sources":["../../src/spartan/setup_test_wallets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup_test_wallets.d.ts","sourceRoot":"","sources":["../../src/spartan/setup_test_wallets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,OAAO,EAAE,KAAK,gBAAgB,EAA6B,MAAM,qBAAqB,CAAC;AAEvF,OAAO,EAAE,KAAK,SAAS,EAAoC,MAAM,sBAAsB,CAAC;AAIxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAiE,MAAM,2BAA2B,CAAC;AAMtH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,YAAY,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,YAAY,EACZ,cAAc,GAAG,eAAe,GAAG,WAAW,GAAG,mBAAmB,CACrE,CAAC;AAMF,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CAyBvB;AAED,wBAAsB,qCAAqC,CACzD,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,qBAAqB,SAAI,GACxB,OAAO,CAAC,YAAY,CAAC,CAuCvB;AAmDD,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,qBAAqB,SAAI,GACxB,OAAO,CAAC,yBAAyB,CAAC,CAkBpC;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EAAE,EACnB,oBAAoB,EAAE,MAAM,EAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,qBAAqB,SAAI,GACxB,OAAO,CAAC,YAAY,CAAC,CA+CvB;AAiFD,wBAAsB,gBAAgB,CAAC,EACrC,MAAM,EACN,YAAY,EACZ,MAAM,EACN,cAAc,EACd,MAAM,EACN,gBAAgB,EACjB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,iBAqBA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
|
|
@@ -1,99 +1,270 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
2
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
+
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
4
|
+
import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum';
|
|
5
|
+
import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
6
|
+
import { SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
7
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
8
|
+
import { createAztecNodeClient, waitForTx } from '@aztec/aztec.js/node';
|
|
9
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
10
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
11
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
5
12
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
13
|
+
import { TestWallet, proveInteraction, registerInitialLocalNetworkAccountsInWallet } from '@aztec/test-wallet/server';
|
|
14
|
+
import { getACVMConfig } from '../fixtures/get_acvm_config.js';
|
|
15
|
+
import { getBBConfig } from '../fixtures/get_bb_config.js';
|
|
16
|
+
import { getSponsoredFPCAddress, registerSponsoredFPC } from '../fixtures/utils.js';
|
|
6
17
|
const TOKEN_NAME = 'USDC';
|
|
7
18
|
const TOKEN_SYMBOL = 'USD';
|
|
8
19
|
const TOKEN_DECIMALS = 18n;
|
|
9
|
-
export async function
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
20
|
+
export async function setupTestAccountsWithTokens(nodeUrl, mintAmount, logger) {
|
|
21
|
+
const ACCOUNT_COUNT = 1; // TODO fix this to allow for 16 wallets again
|
|
22
|
+
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
23
|
+
const wallet = await TestWallet.create(aztecNode);
|
|
24
|
+
const [recipientAccount, ...accounts] = (await registerInitialLocalNetworkAccountsInWallet(wallet)).slice(0, ACCOUNT_COUNT + 1);
|
|
25
|
+
const tokenAdmin = accounts[0];
|
|
26
|
+
const tokenAddress = await deployTokenAndMint(wallet, accounts, tokenAdmin, mintAmount, undefined, logger);
|
|
27
|
+
const tokenContract = TokenContract.at(tokenAddress, wallet);
|
|
16
28
|
return {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
29
|
+
aztecNode,
|
|
30
|
+
accounts,
|
|
31
|
+
wallet,
|
|
32
|
+
tokenAdminAddress: tokenAdmin,
|
|
20
33
|
tokenName: TOKEN_NAME,
|
|
21
34
|
tokenAddress,
|
|
22
|
-
|
|
35
|
+
tokenContract,
|
|
36
|
+
recipientAddress: recipientAccount
|
|
23
37
|
};
|
|
24
38
|
}
|
|
25
|
-
export async function
|
|
26
|
-
const pxe = await createCompatibleClient(pxeUrl, logger);
|
|
27
|
-
const node = createAztecNodeClient(nodeUrl);
|
|
39
|
+
export async function deploySponsoredTestAccountsWithTokens(wallet, aztecNode, mintAmount, logger, numberOfFundedWallets = 1) {
|
|
28
40
|
const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
|
|
29
|
-
const
|
|
30
|
-
const fundedAccounts = await Promise.all(funded.map((a)=>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
await
|
|
34
|
-
await
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
|
|
42
|
+
const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
|
|
43
|
+
await registerSponsoredFPC(wallet);
|
|
44
|
+
const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
45
|
+
const recipientDeployMethod = await recipientAccount.getDeployMethod();
|
|
46
|
+
await recipientDeployMethod.send({
|
|
47
|
+
from: AztecAddress.ZERO,
|
|
48
|
+
fee: {
|
|
49
|
+
paymentMethod
|
|
50
|
+
},
|
|
51
|
+
wait: {
|
|
52
|
+
timeout: 2400
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
await Promise.all(fundedAccounts.map(async (a)=>{
|
|
56
|
+
const deployMethod = await a.getDeployMethod();
|
|
57
|
+
await deployMethod.send({
|
|
58
|
+
from: AztecAddress.ZERO,
|
|
59
|
+
fee: {
|
|
60
|
+
paymentMethod
|
|
61
|
+
},
|
|
62
|
+
wait: {
|
|
63
|
+
timeout: 2400
|
|
64
|
+
}
|
|
65
|
+
}); // increase timeout on purpose in order to account for two empty epochs
|
|
66
|
+
logger.info(`Account deployed at ${a.address}`);
|
|
67
|
+
}));
|
|
68
|
+
const tokenAdmin = fundedAccounts[0];
|
|
69
|
+
const tokenAddress = await deployTokenAndMint(wallet, fundedAccounts.map((acc)=>acc.address), tokenAdmin.address, mintAmount, new SponsoredFeePaymentMethod(await getSponsoredFPCAddress()), logger);
|
|
70
|
+
const tokenContract = TokenContract.at(tokenAddress, wallet);
|
|
71
|
+
return {
|
|
72
|
+
aztecNode,
|
|
73
|
+
wallet,
|
|
74
|
+
accounts: fundedAccounts.map((acc)=>acc.address),
|
|
75
|
+
tokenAdminAddress: tokenAdmin.address,
|
|
76
|
+
tokenName: TOKEN_NAME,
|
|
77
|
+
tokenAddress,
|
|
78
|
+
tokenContract,
|
|
79
|
+
recipientAddress: recipientAccount.address
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async function deployAccountWithDiagnostics(account, paymentMethod, aztecNode, logger, accountLabel) {
|
|
83
|
+
const deployMethod = await account.getDeployMethod();
|
|
84
|
+
let txHash;
|
|
85
|
+
try {
|
|
86
|
+
txHash = await deployMethod.send({
|
|
87
|
+
from: AztecAddress.ZERO,
|
|
88
|
+
fee: {
|
|
89
|
+
paymentMethod
|
|
90
|
+
},
|
|
91
|
+
wait: NO_WAIT
|
|
92
|
+
});
|
|
93
|
+
await waitForTx(aztecNode, txHash, {
|
|
94
|
+
timeout: 2400
|
|
95
|
+
});
|
|
96
|
+
logger.info(`${accountLabel} deployed at ${account.address}`);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
const blockNumber = await aztecNode.getBlockNumber();
|
|
99
|
+
let receipt;
|
|
100
|
+
try {
|
|
101
|
+
receipt = await aztecNode.getTxReceipt(txHash);
|
|
102
|
+
} catch {
|
|
103
|
+
receipt = 'unavailable';
|
|
104
|
+
}
|
|
105
|
+
logger.error(`${accountLabel} deployment failed`, {
|
|
106
|
+
txHash: txHash.toString(),
|
|
107
|
+
receipt: JSON.stringify(receipt),
|
|
108
|
+
currentBlockNumber: blockNumber,
|
|
109
|
+
error: String(error)
|
|
110
|
+
});
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async function deployAccountsInBatches(accounts, paymentMethod, aztecNode, logger, labelPrefix, batchSize = 2) {
|
|
115
|
+
for(let i = 0; i < accounts.length; i += batchSize){
|
|
116
|
+
const batch = accounts.slice(i, i + batchSize);
|
|
117
|
+
await Promise.all(batch.map((account, idx)=>deployAccountWithDiagnostics(account, paymentMethod, aztecNode, logger, `${labelPrefix}${i + idx + 1}`)));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export async function deploySponsoredTestAccounts(wallet, aztecNode, logger, numberOfFundedWallets = 1) {
|
|
121
|
+
const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
|
|
122
|
+
const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
|
|
123
|
+
const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
|
|
124
|
+
await registerSponsoredFPC(wallet);
|
|
125
|
+
const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
126
|
+
await deployAccountWithDiagnostics(recipientAccount, paymentMethod, aztecNode, logger, 'Recipient account');
|
|
127
|
+
await deployAccountsInBatches(fundedAccounts, paymentMethod, aztecNode, logger, 'Funded account ', 2);
|
|
128
|
+
return {
|
|
129
|
+
aztecNode,
|
|
130
|
+
wallet,
|
|
131
|
+
accounts: fundedAccounts.map((acc)=>acc.address),
|
|
132
|
+
recipientAddress: recipientAccount.address
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export async function deployTestAccountsWithTokens(nodeUrl, l1RpcUrls, mnemonicOrPrivateKey, mintAmount, logger, numberOfFundedWallets = 1) {
|
|
136
|
+
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
137
|
+
const wallet = await TestWallet.create(aztecNode);
|
|
138
|
+
const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
|
|
139
|
+
const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
|
|
140
|
+
const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
|
|
141
|
+
const claims = await Promise.all(fundedAccounts.map((a)=>bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, aztecNode, a.address, undefined, logger)));
|
|
142
|
+
// Progress by 3 L2 blocks so that the l1ToL2Message added above will be available to use on L2.
|
|
143
|
+
await advanceL2Block(aztecNode);
|
|
144
|
+
await advanceL2Block(aztecNode);
|
|
145
|
+
await advanceL2Block(aztecNode);
|
|
146
|
+
await Promise.all(fundedAccounts.map(async (a, i)=>{
|
|
147
|
+
const paymentMethod = new FeeJuicePaymentMethodWithClaim(a.address, claims[i]);
|
|
148
|
+
const deployMethod = await a.getDeployMethod();
|
|
149
|
+
await deployMethod.send({
|
|
150
|
+
from: AztecAddress.ZERO,
|
|
39
151
|
fee: {
|
|
40
152
|
paymentMethod
|
|
41
153
|
}
|
|
42
|
-
})
|
|
43
|
-
logger.info(`Account deployed at ${a.
|
|
44
|
-
return wallet;
|
|
154
|
+
});
|
|
155
|
+
logger.info(`Account deployed at ${a.address}`);
|
|
45
156
|
}));
|
|
46
|
-
const tokenAdmin =
|
|
47
|
-
const tokenAddress = await deployTokenAndMint(
|
|
48
|
-
const
|
|
157
|
+
const tokenAdmin = fundedAccounts[0];
|
|
158
|
+
const tokenAddress = await deployTokenAndMint(wallet, fundedAccounts.map((acc)=>acc.address), tokenAdmin.address, mintAmount, undefined, logger);
|
|
159
|
+
const tokenContract = TokenContract.at(tokenAddress, wallet);
|
|
49
160
|
return {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
161
|
+
aztecNode,
|
|
162
|
+
wallet,
|
|
163
|
+
accounts: fundedAccounts.map((acc)=>acc.address),
|
|
164
|
+
tokenAdminAddress: tokenAdmin.address,
|
|
53
165
|
tokenName: TOKEN_NAME,
|
|
54
166
|
tokenAddress,
|
|
55
|
-
|
|
167
|
+
tokenContract,
|
|
168
|
+
recipientAddress: recipientAccount.address
|
|
56
169
|
};
|
|
57
170
|
}
|
|
58
|
-
async function bridgeL1FeeJuice(
|
|
59
|
-
const { l1ChainId } = await
|
|
60
|
-
const chain = createEthereumChain(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const { publicClient, walletClient } = createL1Clients(chain.rpcUrls, mnemonicOrPrivateKey, chain.chainInfo);
|
|
64
|
-
const portal = await L1FeeJuicePortalManager.new(pxe, publicClient, walletClient, log);
|
|
171
|
+
async function bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, aztecNode, recipient, amount, log) {
|
|
172
|
+
const { l1ChainId } = await aztecNode.getNodeInfo();
|
|
173
|
+
const chain = createEthereumChain(l1RpcUrls, l1ChainId);
|
|
174
|
+
const l1Client = createExtendedL1Client(chain.rpcUrls, mnemonicOrPrivateKey, chain.chainInfo);
|
|
175
|
+
const portal = await L1FeeJuicePortalManager.new(aztecNode, l1Client, log);
|
|
65
176
|
const claim = await portal.bridgeTokensPublic(recipient, amount, true);
|
|
66
|
-
const isSynced = async ()=>await
|
|
177
|
+
const isSynced = async ()=>await aztecNode.getL1ToL2MessageBlock(Fr.fromHexString(claim.messageHash)) !== undefined;
|
|
67
178
|
await retryUntil(isSynced, `message ${claim.messageHash} sync`, 24, 0.5);
|
|
68
179
|
log.info(`Created a claim for ${amount} L1 fee juice to ${recipient}.`, claim);
|
|
69
180
|
return claim;
|
|
70
181
|
}
|
|
71
|
-
async function advanceL2Block(
|
|
72
|
-
const initialBlockNumber = await
|
|
73
|
-
|
|
74
|
-
|
|
182
|
+
async function advanceL2Block(aztecNode, nodeAdmin) {
|
|
183
|
+
const initialBlockNumber = await aztecNode.getBlockNumber();
|
|
184
|
+
let minTxsPerBlock = undefined;
|
|
185
|
+
if (nodeAdmin) {
|
|
186
|
+
({ minTxsPerBlock } = await nodeAdmin.getConfig());
|
|
187
|
+
await nodeAdmin.setConfig({
|
|
188
|
+
minTxsPerBlock: 0
|
|
189
|
+
}); // Set to 0 to ensure we can advance the block
|
|
190
|
+
}
|
|
191
|
+
await retryUntil(async ()=>await aztecNode.getBlockNumber() >= initialBlockNumber + 1);
|
|
192
|
+
if (nodeAdmin && minTxsPerBlock !== undefined) {
|
|
193
|
+
await nodeAdmin.setConfig({
|
|
194
|
+
minTxsPerBlock
|
|
195
|
+
});
|
|
196
|
+
}
|
|
75
197
|
}
|
|
76
|
-
async function deployTokenAndMint(
|
|
198
|
+
async function deployTokenAndMint(wallet, accounts, admin, mintAmount, paymentMethod, logger) {
|
|
77
199
|
logger.verbose(`Deploying TokenContract...`);
|
|
78
|
-
const tokenContract = await TokenContract.deploy(
|
|
79
|
-
|
|
200
|
+
const { contract: tokenContract } = await TokenContract.deploy(wallet, admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS).send({
|
|
201
|
+
from: admin,
|
|
202
|
+
fee: {
|
|
203
|
+
paymentMethod
|
|
204
|
+
},
|
|
205
|
+
wait: {
|
|
206
|
+
timeout: 600,
|
|
207
|
+
returnReceipt: true
|
|
208
|
+
}
|
|
80
209
|
});
|
|
81
210
|
const tokenAddress = tokenContract.address;
|
|
82
|
-
logger.verbose(`Minting ${mintAmount} public assets to the ${
|
|
83
|
-
await Promise.all(
|
|
84
|
-
|
|
211
|
+
logger.verbose(`Minting ${mintAmount} public assets to the ${accounts.length} accounts...`);
|
|
212
|
+
await Promise.all(accounts.map((acc)=>TokenContract.at(tokenAddress, wallet).methods.mint_to_public(acc, mintAmount).send({
|
|
213
|
+
from: admin,
|
|
214
|
+
fee: {
|
|
215
|
+
paymentMethod
|
|
216
|
+
},
|
|
217
|
+
wait: {
|
|
218
|
+
timeout: 600
|
|
219
|
+
}
|
|
85
220
|
})));
|
|
86
221
|
logger.verbose(`Minting complete.`);
|
|
87
222
|
return tokenAddress;
|
|
88
223
|
}
|
|
89
|
-
export async function performTransfers({
|
|
90
|
-
const recipient =
|
|
224
|
+
export async function performTransfers({ wallet, testAccounts, rounds, transferAmount, logger, feePaymentMethod }) {
|
|
225
|
+
const recipient = testAccounts.recipientAddress;
|
|
226
|
+
// Default to sponsored fee payment if no fee method is provided
|
|
227
|
+
const defaultFeePaymentMethod = feePaymentMethod || new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
91
228
|
for(let i = 0; i < rounds; i++){
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
229
|
+
const txs = testAccounts.accounts.map((acc)=>{
|
|
230
|
+
const token = TokenContract.at(testAccounts.tokenAddress, testAccounts.wallet);
|
|
231
|
+
return proveInteraction(wallet, token.methods.transfer_in_public(acc, recipient, transferAmount, 0), {
|
|
232
|
+
from: acc,
|
|
233
|
+
fee: {
|
|
234
|
+
paymentMethod: defaultFeePaymentMethod
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
const provenTxs = await Promise.all(txs);
|
|
239
|
+
await Promise.all(provenTxs.map((t)=>t.send({
|
|
240
|
+
wait: {
|
|
241
|
+
timeout: 600
|
|
242
|
+
}
|
|
96
243
|
})));
|
|
97
244
|
logger.info(`Completed round ${i + 1} / ${rounds}`);
|
|
98
245
|
}
|
|
99
246
|
}
|
|
247
|
+
export async function createWalletAndAztecNodeClient(nodeUrl, proverEnabled, logger) {
|
|
248
|
+
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
249
|
+
const [bbConfig, acvmConfig] = await Promise.all([
|
|
250
|
+
getBBConfig(logger),
|
|
251
|
+
getACVMConfig(logger)
|
|
252
|
+
]);
|
|
253
|
+
const pxeConfig = {
|
|
254
|
+
dataDirectory: undefined,
|
|
255
|
+
dataStoreMapSizeKb: 1024 * 1024,
|
|
256
|
+
...bbConfig,
|
|
257
|
+
...acvmConfig,
|
|
258
|
+
proverEnabled
|
|
259
|
+
};
|
|
260
|
+
const wallet = await TestWallet.create(aztecNode, pxeConfig);
|
|
261
|
+
return {
|
|
262
|
+
wallet,
|
|
263
|
+
aztecNode,
|
|
264
|
+
async cleanup () {
|
|
265
|
+
await wallet.stop();
|
|
266
|
+
await bbConfig?.cleanup();
|
|
267
|
+
await acvmConfig?.cleanup();
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
}
|