@aztec/end-to-end 0.0.1-commit.001888fc → 0.0.1-commit.017a351
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 +27 -0
- package/dest/bench/client_flows/benchmark.d.ts +15 -1
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +17 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +2 -2
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +27 -38
- package/dest/bench/utils.d.ts +1 -1
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +2 -0
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +5 -4
- 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 +14 -5
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +15 -4
- 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 +39 -7
- package/dest/e2e_deploy_contract/deploy_test.d.ts +3 -3
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +2 -1
- package/dest/e2e_epochs/epochs_test.d.ts +25 -2
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +86 -13
- package/dest/e2e_fees/fees_test.d.ts +5 -2
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +32 -6
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +3 -3
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +2 -1
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +4 -3
- package/dest/e2e_p2p/p2p_network.d.ts +10 -9
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +46 -27
- package/dest/e2e_p2p/reqresp/utils.d.ts +1 -1
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
- package/dest/e2e_p2p/reqresp/utils.js +29 -13
- package/dest/e2e_p2p/shared.d.ts +23 -14
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +62 -57
- package/dest/e2e_token_contract/token_contract_test.d.ts +3 -3
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +4 -2
- package/dest/fixtures/authwit_proxy.d.ts +1 -1
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
- package/dest/fixtures/authwit_proxy.js +4 -0
- package/dest/fixtures/e2e_prover_test.d.ts +6 -5
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +9 -13
- package/dest/fixtures/fixtures.d.ts +70 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +65 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +2 -2
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +1 -1
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
- package/dest/fixtures/setup.d.ts +44 -11
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +157 -28
- package/dest/fixtures/setup_p2p_test.d.ts +10 -6
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +8 -8
- package/dest/fixtures/token_utils.d.ts +1 -1
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +2 -5
- 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/forward-compatibility/wallet_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/install_legacy_contracts.d.cts +10 -0
- package/dest/install_legacy_contracts.d.cts.map +1 -0
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/shared/cross_chain_test_harness.d.ts +4 -2
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +9 -5
- package/dest/shared/gas_portal_test_harness.d.ts +8 -5
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +17 -8
- 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 +50 -32
- package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
- package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
- package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
- package/dest/simulators/lending_simulator.d.ts +10 -3
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +24 -12
- package/dest/simulators/token_simulator.js +1 -1
- 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 +72 -48
- package/dest/spartan/tx_metrics.d.ts +18 -4
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +73 -20
- package/dest/spartan/utils/config.d.ts +9 -35
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/nodes.js +2 -2
- package/dest/test-wallet/test_wallet.d.ts +25 -23
- package/dest/test-wallet/test_wallet.d.ts.map +1 -1
- package/dest/test-wallet/test_wallet.js +146 -87
- package/dest/test-wallet/utils.d.ts +3 -3
- package/dest/test-wallet/utils.d.ts.map +1 -1
- package/dest/test-wallet/utils.js +2 -7
- package/dest/test-wallet/wallet_worker_script.js +7 -2
- package/dest/test-wallet/worker_wallet.d.ts +5 -4
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet.js +6 -2
- package/dest/test-wallet/worker_wallet_schema.d.ts +110 -224
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet_schema.js +14 -2
- package/package.json +46 -41
- package/src/bench/client_flows/benchmark.ts +19 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +64 -53
- package/src/bench/utils.ts +2 -1
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +24 -10
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +49 -11
- package/src/e2e_deploy_contract/deploy_test.ts +3 -2
- package/src/e2e_epochs/epochs_test.ts +98 -11
- package/src/e2e_fees/fees_test.ts +37 -4
- package/src/e2e_nested_contract/nested_contract_test.ts +3 -1
- package/src/e2e_p2p/inactivity_slash_test.ts +4 -3
- package/src/e2e_p2p/p2p_network.ts +57 -39
- package/src/e2e_p2p/reqresp/utils.ts +30 -12
- package/src/e2e_p2p/shared.ts +60 -71
- package/src/e2e_token_contract/token_contract_test.ts +12 -2
- package/src/fixtures/authwit_proxy.ts +4 -0
- package/src/fixtures/e2e_prover_test.ts +15 -18
- package/src/fixtures/fixtures.ts +83 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +4 -2
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +186 -33
- package/src/fixtures/setup_p2p_test.ts +13 -9
- package/src/fixtures/token_utils.ts +1 -4
- package/src/fixtures/utils.ts +2 -0
- package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +104 -0
- package/src/guides/up_quick_start.sh +0 -2
- package/src/install_legacy_contracts.cjs +75 -0
- package/src/legacy-jest-resolver.cjs +112 -0
- package/src/shared/cross_chain_test_harness.ts +14 -4
- package/src/shared/gas_portal_test_harness.ts +20 -10
- package/src/shared/uniswap_l1_l2.ts +84 -40
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +28 -12
- package/src/simulators/token_simulator.ts +1 -1
- package/src/spartan/setup_test_wallets.ts +69 -43
- package/src/spartan/tx_metrics.ts +81 -23
- package/src/spartan/utils/nodes.ts +2 -2
- package/src/test-wallet/test_wallet.ts +174 -104
- package/src/test-wallet/utils.ts +3 -7
- package/src/test-wallet/wallet_worker_script.ts +5 -2
- package/src/test-wallet/worker_wallet.ts +10 -5
- package/src/test-wallet/worker_wallet_schema.ts +2 -2
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
2
|
+
/**
|
|
3
|
+
* Waits until the archiver has seen the L1 to L2 message and indexed it. Unlike
|
|
4
|
+
* {@link waitForL1ToL2MessageReady} from `@aztec/aztec.js/messaging`, this does not
|
|
5
|
+
* require the L2 chain to have advanced to the message's checkpoint — it only confirms
|
|
6
|
+
* the message has been picked up from L1. Use this in tests that explicitly produce L2
|
|
7
|
+
* blocks afterwards to make the message consumable.
|
|
8
|
+
*/ export function waitForL1ToL2MessageSeen(node, l1ToL2MessageHash, opts) {
|
|
9
|
+
return retryUntil(async ()=>await node.getL1ToL2MessageCheckpoint(l1ToL2MessageHash) !== undefined, `L1 to L2 message ${l1ToL2MessageHash.toString()} seen`, opts.timeoutSeconds, 1);
|
|
10
|
+
}
|
|
@@ -4,6 +4,7 @@ import { CheatCodes } from '@aztec/aztec/testing';
|
|
|
4
4
|
import type { RollupContract } from '@aztec/ethereum/contracts';
|
|
5
5
|
import type { TestDateProvider } from '@aztec/foundation/timer';
|
|
6
6
|
import type { LendingContract } from '@aztec/noir-contracts.js/Lending';
|
|
7
|
+
import type { AztecNode, AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
|
|
7
8
|
import type { TokenSimulator } from './token_simulator.js';
|
|
8
9
|
/**
|
|
9
10
|
* Contains utilities to compute the "key" for private holdings in the public state.
|
|
@@ -53,8 +54,14 @@ export declare class LendingSimulator {
|
|
|
53
54
|
collateralAsset: TokenSimulator,
|
|
54
55
|
/** the stable-coin borrowed in the lending contract */
|
|
55
56
|
stableCoin: TokenSimulator);
|
|
56
|
-
prepare():
|
|
57
|
-
|
|
57
|
+
prepare(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Advances the simulator's accumulator and clock to match a block timestamp observed on chain.
|
|
60
|
+
* Call this BEFORE applying any accumulator-sensitive mutation (borrow/repay) so the mutation
|
|
61
|
+
* sees the same accumulator as the contract did during execution.
|
|
62
|
+
*/
|
|
63
|
+
observeBlockTimestamp(ts: number): void;
|
|
64
|
+
progressSlots(diff: number, _dateProvider?: TestDateProvider, node?: AztecNode & AztecNodeDebug): Promise<void>;
|
|
58
65
|
depositPrivate(from: AztecAddress, onBehalfOf: Fr, amount: bigint): void;
|
|
59
66
|
depositPublic(from: AztecAddress, onBehalfOf: Fr, amount: bigint): void;
|
|
60
67
|
private deposit;
|
|
@@ -66,4 +73,4 @@ export declare class LendingSimulator {
|
|
|
66
73
|
mintStableCoinOutsideLoan(recipient: AztecAddress, amount: bigint, priv?: boolean): void;
|
|
67
74
|
check(): Promise<void>;
|
|
68
75
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVuZGluZ19zaW11bGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW11bGF0b3JzL2xlbmRpbmdfc2ltdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2hFLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpGLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTNEOztHQUVHO0FBQ0gscUJBQWEsY0FBYztJQUN6Qix5Q0FBeUM7SUFDekMsU0FBZ0IsT0FBTyxFQUFFLFlBQVksQ0FBQztJQUN0QywyQ0FBMkM7SUFDM0MsU0FBZ0IsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUUzQixZQUFZLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFHNUM7SUFFRDs7O09BR0c7SUFDSSxHQUFHLGdCQUVUO0NBQ0Y7QUFnQ0Q7O0dBRUc7QUFDSCxxQkFBYSxnQkFBZ0I7SUFZekIsT0FBTyxDQUFDLEVBQUU7SUFDVixPQUFPLENBQUMsT0FBTztJQUNmLE9BQU8sQ0FBQyxJQUFJO0lBQ1osT0FBTyxDQUFDLG9CQUFvQjtJQUM1QiwwQkFBMEI7SUFDbkIsTUFBTSxFQUFFLGNBQWM7SUFDN0IsMkJBQTJCO0lBQ3BCLGVBQWUsRUFBRSxlQUFlO0lBQ3ZDLHdEQUF3RDtJQUNqRCxlQUFlLEVBQUUsY0FBYztJQUN0Qyx1REFBdUQ7SUFDaEQsVUFBVSxFQUFFLGNBQWM7SUF0Qm5DLGdDQUFnQztJQUN6QixXQUFXLEVBQUUsTUFBTSxDQUFNO0lBQ2hDLG9DQUFvQztJQUM3QixJQUFJLEVBQUUsTUFBTSxDQUFLO0lBRXhCLE9BQU8sQ0FBQyxVQUFVLENBQTZCO0lBQy9DLE9BQU8sQ0FBQyxVQUFVLENBQTZCO0lBQy9DLE9BQU8sQ0FBQyxRQUFRLENBQWM7SUFDOUIsT0FBTyxDQUFDLGFBQWEsQ0FBYztJQUVuQyxZQUNVLEVBQUUsRUFBRSxVQUFVLEVBQ2QsT0FBTyxFQUFFLGNBQWMsRUFDdkIsSUFBSSxFQUFFLE1BQU0sRUFDWixvQkFBb0IsRUFBRSxNQUFNO0lBQ3BDLDBCQUEwQjtJQUNuQixNQUFNLEVBQUUsY0FBYztJQUM3QiwyQkFBMkI7SUFDcEIsZUFBZSxFQUFFLGVBQWU7SUFDdkMsd0RBQXdEO0lBQ2pELGVBQWUsRUFBRSxjQUFjO0lBQ3RDLHVEQUF1RDtJQUNoRCxVQUFVLEVBQUUsY0FBYyxFQUMvQjtJQUVKLE9BQU8sU0FHTjtJQUVEOzs7O09BSUc7SUFDSCxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQU0vQjtJQUVLLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVMsR0FBRyxjQUFjLGlCQXFCcEc7SUFFRCxjQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBR2hFO0lBRUQsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUcvRDtJQUVELE9BQU8sQ0FBQyxPQUFPO0lBS2YsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUkxRDtJQUVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFPeEQ7SUFFRCxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBRzlEO0lBRUQsV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUc3RDtJQUVELE9BQU8sQ0FBQyxLQUFLO0lBUWIseUJBQXlCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksVUFBUSxRQU85RTtJQUVLLEtBQUssa0JBMkJWO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lending_simulator.d.ts","sourceRoot":"","sources":["../../src/simulators/lending_simulator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"lending_simulator.d.ts","sourceRoot":"","sources":["../../src/simulators/lending_simulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,27 +76,39 @@ const computeMultiplier = (rate, dt)=>{
|
|
|
76
76
|
this.borrowed = 0n;
|
|
77
77
|
this.mintedOutside = 0n;
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
prepare() {
|
|
80
80
|
this.accumulator = BASE;
|
|
81
|
-
|
|
82
|
-
this.time = Number(await this.rollup.getTimestampForSlot(slot));
|
|
81
|
+
this.time = 0;
|
|
83
82
|
}
|
|
84
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Advances the simulator's accumulator and clock to match a block timestamp observed on chain.
|
|
85
|
+
* Call this BEFORE applying any accumulator-sensitive mutation (borrow/repay) so the mutation
|
|
86
|
+
* sees the same accumulator as the contract did during execution.
|
|
87
|
+
*/ observeBlockTimestamp(ts) {
|
|
88
|
+
const diff = ts - this.time;
|
|
89
|
+
if (diff > 0) {
|
|
90
|
+
this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(diff)), BASE);
|
|
91
|
+
}
|
|
92
|
+
this.time = ts;
|
|
93
|
+
}
|
|
94
|
+
async progressSlots(diff, _dateProvider, node) {
|
|
85
95
|
if (diff <= 1) {
|
|
86
96
|
return;
|
|
87
97
|
}
|
|
88
|
-
const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.
|
|
98
|
+
const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.lastBlockTimestamp()));
|
|
89
99
|
const targetSlot = SlotNumber(slot + diff);
|
|
90
100
|
const ts = Number(await this.rollup.getTimestampForSlot(targetSlot));
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
// Queue-aware warp under AutomineSequencer: atomic warp + mineBlock that advances L2 time to the
|
|
102
|
+
// target slot. The cheat code routes through the AutomineSequencer queue when one is installed,
|
|
103
|
+
// and otherwise falls back to a manual warp + mineBlock loop.
|
|
104
|
+
if (node) {
|
|
105
|
+
await this.cc.warpL2TimeAtLeastTo(node, ts);
|
|
106
|
+
} else {
|
|
107
|
+
await this.cc.eth.warp(ts - this.ethereumSlotDuration);
|
|
97
108
|
}
|
|
109
|
+
// Mark the latest checkpoint as proven so the rollup does not reorg pending checkpoints when
|
|
110
|
+
// time jumps far enough forward to cross an unproven epoch boundary.
|
|
98
111
|
await this.cc.rollup.markAsProven(await this.rollup.getCheckpointNumber());
|
|
99
|
-
this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(timeDiff)), BASE);
|
|
100
112
|
}
|
|
101
113
|
depositPrivate(from, onBehalfOf, amount) {
|
|
102
114
|
this.collateralAsset.transferToPublic(from, this.lendingContract.address, amount);
|
|
@@ -90,7 +90,7 @@ export class TokenSimulator {
|
|
|
90
90
|
];
|
|
91
91
|
const results = (await Promise.all(chunk(calls, 5).map((batch)=>new BatchCall(this.defaultWallet, batch).simulate({
|
|
92
92
|
from: this.defaultAddress
|
|
93
|
-
})))).
|
|
93
|
+
})))).flatMap((r)=>r.result).map((r)=>r.result);
|
|
94
94
|
expect(results[0]).toEqual(this.totalSupply);
|
|
95
95
|
// Check that all our balances match
|
|
96
96
|
for(let i = 0; i < this.accounts.length; i++){
|
|
@@ -42,4 +42,4 @@ export type WorkerWalletWrapper = {
|
|
|
42
42
|
cleanup: () => Promise<void>;
|
|
43
43
|
};
|
|
44
44
|
export declare function createWorkerWalletClient(nodeUrl: string, proverEnabled: boolean, logger: Logger): Promise<WorkerWalletWrapper>;
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBfdGVzdF93YWxsZXRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BhcnRhbi9zZXR1cF90ZXN0X3dhbGxldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSXpELE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUE2QixNQUFNLHFCQUFxQixDQUFDO0FBR3ZGLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBb0MsTUFBTSxzQkFBc0IsQ0FBQztBQUl4RixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFRL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRCxNQUFNLFdBQVcsWUFBWTtJQUMzQixTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxVQUFVLENBQUM7SUFDbkIsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxhQUFhLENBQUM7SUFDN0IsaUJBQWlCLEVBQUUsWUFBWSxDQUFDO0lBQ2hDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDO0lBQy9CLFlBQVksRUFBRSxZQUFZLENBQUM7Q0FDNUI7QUFFRCxNQUFNLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUMxQyxZQUFZLEVBQ1osY0FBYyxHQUFHLGVBQWUsR0FBRyxXQUFXLEdBQUcsbUJBQW1CLENBQ3JFLENBQUM7QUFNRix3QkFBc0IsMkJBQTJCLENBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQ2YsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsWUFBWSxDQUFDLENBeUJ2QjtBQUVELHdCQUFzQixxQ0FBcUMsQ0FDekQsTUFBTSxFQUFFLFVBQVUsRUFDbEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxxQkFBcUIsU0FBSSxHQUN4QixPQUFPLENBQUMsWUFBWSxDQUFDLENBK0N2QjtBQTZGRCx3QkFBc0IsMkJBQTJCLENBQy9DLE1BQU0sRUFBRSxVQUFVLEVBQ2xCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLE1BQU0sRUFBRSxNQUFNLEVBQ2QscUJBQXFCLFNBQUksRUFDekIsSUFBSSxDQUFDLEVBQUU7SUFBRSxXQUFXLENBQUMsRUFBRSxPQUFPLENBQUE7Q0FBRSxHQUMvQixPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FpQ3BDO0FBRUQsd0JBQXNCLDRCQUE0QixDQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUNmLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFDbkIsb0JBQW9CLEVBQUUsTUFBTSxFQUM1QixVQUFVLEVBQUUsTUFBTSxFQUNsQixNQUFNLEVBQUUsTUFBTSxFQUNkLHFCQUFxQixTQUFJLEdBQ3hCLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0ErQ3ZCO0FBK0VELHdCQUFzQixnQkFBZ0IsQ0FBQyxFQUNyQyxNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsTUFBTSxFQUNOLGdCQUFnQixFQUNqQixFQUFFO0lBQ0QsTUFBTSxFQUFFLFVBQVUsQ0FBQztJQUNuQixZQUFZLEVBQUUsWUFBWSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixjQUFjLEVBQUUsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixnQkFBZ0IsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0NBQ3JDLGlCQXVCQTtBQUVELE1BQU0sTUFBTSxhQUFhLEdBQUc7SUFDMUIsTUFBTSxFQUFFLFVBQVUsQ0FBQztJQUNuQixTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM5QixDQUFDO0FBRUYsd0JBQXNCLDhCQUE4QixDQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUNmLGFBQWEsRUFBRSxPQUFPLEVBQ3RCLE1BQU0sRUFBRSxNQUFNLEdBQ2IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQXFCeEI7QUFFRCxNQUFNLE1BQU0sbUJBQW1CLEdBQUc7SUFDaEMsTUFBTSxFQUFFLFlBQVksQ0FBQztJQUNyQixTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM5QixDQUFDO0FBRUYsd0JBQXNCLHdCQUF3QixDQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUNmLGFBQWEsRUFBRSxPQUFPLEVBQ3RCLE1BQU0sRUFBRSxNQUFNLEdBQ2IsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBMkI5QiJ9
|
|
@@ -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":"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"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
2
|
-
import {
|
|
2
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
3
3
|
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
4
4
|
import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum';
|
|
5
5
|
import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
6
6
|
import { SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
7
7
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
8
|
+
import { waitForL1ToL2MessageReady } from '@aztec/aztec.js/messaging';
|
|
8
9
|
import { createAztecNodeClient, waitForTx } from '@aztec/aztec.js/node';
|
|
9
10
|
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
10
11
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
11
|
-
import { retryUntil } from '@aztec/foundation/retry';
|
|
12
|
+
import { makeBackoff, retry, retryUntil } from '@aztec/foundation/retry';
|
|
12
13
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
14
|
+
import { TxStatus } from '@aztec/stdlib/tx';
|
|
13
15
|
import { registerInitialLocalNetworkAccountsInWallet } from '@aztec/wallets/testing';
|
|
14
16
|
import { getACVMConfig } from '../fixtures/get_acvm_config.js';
|
|
15
17
|
import { getBBConfig } from '../fixtures/get_bb_config.js';
|
|
@@ -47,7 +49,7 @@ export async function deploySponsoredTestAccountsWithTokens(wallet, aztecNode, m
|
|
|
47
49
|
const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
48
50
|
const recipientDeployMethod = await recipientAccount.getDeployMethod();
|
|
49
51
|
await recipientDeployMethod.send({
|
|
50
|
-
from:
|
|
52
|
+
from: NO_FROM,
|
|
51
53
|
fee: {
|
|
52
54
|
paymentMethod
|
|
53
55
|
},
|
|
@@ -58,7 +60,7 @@ export async function deploySponsoredTestAccountsWithTokens(wallet, aztecNode, m
|
|
|
58
60
|
await Promise.all(fundedAccounts.map(async (a)=>{
|
|
59
61
|
const deployMethod = await a.getDeployMethod();
|
|
60
62
|
await deployMethod.send({
|
|
61
|
-
from:
|
|
63
|
+
from: NO_FROM,
|
|
62
64
|
fee: {
|
|
63
65
|
paymentMethod
|
|
64
66
|
},
|
|
@@ -84,48 +86,67 @@ export async function deploySponsoredTestAccountsWithTokens(wallet, aztecNode, m
|
|
|
84
86
|
}
|
|
85
87
|
async function deployAccountWithDiagnostics(account, paymentMethod, aztecNode, logger, accountLabel, estimateGas) {
|
|
86
88
|
const deployMethod = await account.getDeployMethod();
|
|
87
|
-
let
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
let gasSettings;
|
|
90
|
+
if (estimateGas) {
|
|
91
|
+
const sim = await deployMethod.simulate({
|
|
92
|
+
from: NO_FROM,
|
|
93
|
+
fee: {
|
|
94
|
+
paymentMethod
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
gasSettings = sim.estimatedGas;
|
|
98
|
+
logger.info(`${accountLabel} estimated gas: DA=${gasSettings.gasLimits.daGas} L2=${gasSettings.gasLimits.l2Gas}`);
|
|
99
|
+
}
|
|
100
|
+
// Track the tx hash across retries so we don't re-send when the previous tx is still pending.
|
|
101
|
+
let sentTxHash;
|
|
102
|
+
await retry(async ()=>{
|
|
103
|
+
// Check if already deployed (handles case where previous attempt succeeded but waitForTx timed out)
|
|
104
|
+
const existing = await aztecNode.getContract(account.address);
|
|
105
|
+
if (existing) {
|
|
106
|
+
logger.info(`${accountLabel} already deployed at ${account.address}, skipping`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// If we already sent a tx, check if it was dropped before deciding to re-send.
|
|
110
|
+
if (sentTxHash) {
|
|
111
|
+
const prevReceipt = await aztecNode.getTxReceipt(sentTxHash.txHash);
|
|
112
|
+
if (prevReceipt.isDropped()) {
|
|
113
|
+
logger.info(`${accountLabel} previous tx ${sentTxHash.txHash} was dropped, re-sending`);
|
|
114
|
+
sentTxHash = undefined;
|
|
115
|
+
} else {
|
|
116
|
+
logger.info(`${accountLabel} previous tx ${sentTxHash.txHash} still pending, waiting again...`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (!sentTxHash) {
|
|
120
|
+
const deployResult = await deployMethod.send({
|
|
121
|
+
from: NO_FROM,
|
|
93
122
|
fee: {
|
|
94
|
-
paymentMethod
|
|
95
|
-
|
|
123
|
+
paymentMethod,
|
|
124
|
+
gasSettings
|
|
125
|
+
},
|
|
126
|
+
wait: NO_WAIT
|
|
127
|
+
});
|
|
128
|
+
sentTxHash = {
|
|
129
|
+
txHash: deployResult.txHash
|
|
130
|
+
};
|
|
131
|
+
logger.info(`${accountLabel} tx sent`, {
|
|
132
|
+
txHash: sentTxHash.txHash.toString()
|
|
96
133
|
});
|
|
97
|
-
gasSettings = sim.estimatedGas;
|
|
98
|
-
logger.info(`${accountLabel} estimated gas: DA=${gasSettings.gasLimits.daGas} L2=${gasSettings.gasLimits.l2Gas}`);
|
|
99
134
|
}
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
fee: {
|
|
103
|
-
paymentMethod,
|
|
104
|
-
gasSettings
|
|
105
|
-
},
|
|
106
|
-
wait: NO_WAIT
|
|
135
|
+
const receipt = await waitForTx(aztecNode, sentTxHash.txHash, {
|
|
136
|
+
timeout: 600
|
|
107
137
|
});
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
});
|
|
112
|
-
logger.info(`${accountLabel} deployed at ${account.address}`);
|
|
113
|
-
} catch (error) {
|
|
114
|
-
const blockNumber = await aztecNode.getBlockNumber();
|
|
115
|
-
let receipt;
|
|
116
|
-
try {
|
|
117
|
-
receipt = await aztecNode.getTxReceipt(txHash);
|
|
118
|
-
} catch {
|
|
119
|
-
receipt = 'unavailable';
|
|
138
|
+
if (receipt.isDropped()) {
|
|
139
|
+
sentTxHash = undefined;
|
|
140
|
+
throw new Error(`${accountLabel} tx was dropped, retrying...`);
|
|
120
141
|
}
|
|
121
|
-
logger.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
142
|
+
logger.info(`${accountLabel} deployed at ${account.address}`);
|
|
143
|
+
}, `deploy ${accountLabel}`, makeBackoff([
|
|
144
|
+
1,
|
|
145
|
+
2,
|
|
146
|
+
4,
|
|
147
|
+
8,
|
|
148
|
+
16
|
|
149
|
+
]), logger);
|
|
129
150
|
}
|
|
130
151
|
async function deployAccountsInBatches(accounts, paymentMethod, aztecNode, logger, labelPrefix, batchSize = 2, estimateGas) {
|
|
131
152
|
for(let i = 0; i < accounts.length; i += batchSize){
|
|
@@ -163,7 +184,7 @@ export async function deployTestAccountsWithTokens(nodeUrl, l1RpcUrls, mnemonicO
|
|
|
163
184
|
const paymentMethod = new FeeJuicePaymentMethodWithClaim(a.address, claims[i]);
|
|
164
185
|
const deployMethod = await a.getDeployMethod();
|
|
165
186
|
await deployMethod.send({
|
|
166
|
-
from:
|
|
187
|
+
from: NO_FROM,
|
|
167
188
|
fee: {
|
|
168
189
|
paymentMethod
|
|
169
190
|
}
|
|
@@ -190,8 +211,9 @@ async function bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, aztecNode, reci
|
|
|
190
211
|
const l1Client = createExtendedL1Client(chain.rpcUrls, mnemonicOrPrivateKey, chain.chainInfo);
|
|
191
212
|
const portal = await L1FeeJuicePortalManager.new(aztecNode, l1Client, log);
|
|
192
213
|
const claim = await portal.bridgeTokensPublic(recipient, amount, true);
|
|
193
|
-
|
|
194
|
-
|
|
214
|
+
await waitForL1ToL2MessageReady(aztecNode, Fr.fromHexString(claim.messageHash), {
|
|
215
|
+
timeoutSeconds: 24
|
|
216
|
+
});
|
|
195
217
|
log.info(`Created a claim for ${amount} L1 fee juice to ${recipient}.`, claim);
|
|
196
218
|
return claim;
|
|
197
219
|
}
|
|
@@ -213,14 +235,13 @@ async function advanceL2Block(aztecNode, nodeAdmin) {
|
|
|
213
235
|
}
|
|
214
236
|
async function deployTokenAndMint(wallet, accounts, admin, mintAmount, paymentMethod, logger) {
|
|
215
237
|
logger.verbose(`Deploying TokenContract...`);
|
|
216
|
-
const {
|
|
238
|
+
const { contract: tokenContract } = await TokenContract.deploy(wallet, admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS).send({
|
|
217
239
|
from: admin,
|
|
218
240
|
fee: {
|
|
219
241
|
paymentMethod
|
|
220
242
|
},
|
|
221
243
|
wait: {
|
|
222
|
-
timeout: 600
|
|
223
|
-
returnReceipt: true
|
|
244
|
+
timeout: 600
|
|
224
245
|
}
|
|
225
246
|
});
|
|
226
247
|
const tokenAddress = tokenContract.address;
|
|
@@ -252,9 +273,12 @@ export async function performTransfers({ wallet, testAccounts, rounds, transferA
|
|
|
252
273
|
});
|
|
253
274
|
});
|
|
254
275
|
const provenTxs = await Promise.all(txs);
|
|
276
|
+
// Wait only for the txs to be proposed, not checkpointed. This is enough to keep the chain
|
|
277
|
+
// loaded for the reorg scenario, and avoids each round blocking on the (slower) checkpoint lag.
|
|
255
278
|
await Promise.all(provenTxs.map((t)=>t.send({
|
|
256
279
|
wait: {
|
|
257
|
-
timeout: 600
|
|
280
|
+
timeout: 600,
|
|
281
|
+
waitForStatus: TxStatus.PROPOSED
|
|
258
282
|
}
|
|
259
283
|
})));
|
|
260
284
|
logger.info(`Completed round ${i + 1} / ${rounds}`);
|
|
@@ -38,9 +38,12 @@ export declare class ProvingMetrics {
|
|
|
38
38
|
}
|
|
39
39
|
export type TxInclusionData = {
|
|
40
40
|
txHash: string;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
/** Wall-clock at client when the tx was submitted, in ms (Date.now()). */
|
|
42
|
+
sentAtMs: number;
|
|
43
|
+
/** Wall-clock at client when the block containing the tx first became visible, in ms (Date.now()). -1 if never observed. */
|
|
44
|
+
minedAtMs: number;
|
|
45
|
+
/** Reserved for future attestation-observed-at signal; -1 today. */
|
|
46
|
+
attestedAtMs: number;
|
|
44
47
|
blocknumber: number;
|
|
45
48
|
priorityFee: number;
|
|
46
49
|
totalFee: number;
|
|
@@ -61,7 +64,18 @@ export declare class TxInclusionMetrics {
|
|
|
61
64
|
private mempoolMinedDelay;
|
|
62
65
|
constructor(aztecNode: AztecNode, logger?: Logger | undefined);
|
|
63
66
|
recordSentTx(tx: Tx, group: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Stamp mined-at metadata for any tracked tx contained in this block, using
|
|
69
|
+
* `observedAtMs` (caller-supplied wall-clock at the moment they first saw the
|
|
70
|
+
* block). Idempotent: existing minedAtMs is preserved so the first observer
|
|
71
|
+
* wins (typically the block-watcher; recordMinedTx is a fallback).
|
|
72
|
+
*/
|
|
73
|
+
observeBlockForMinedTxs(blockNumber: number, txHashes: ReadonlyArray<{
|
|
74
|
+
toString(): string;
|
|
75
|
+
}>, observedAtMs: number): void;
|
|
64
76
|
recordMinedTx(txReceipt: TxReceipt): Promise<void>;
|
|
77
|
+
/** Per-tx inclusion records for a group. Used to serialise out for downstream tooling. */
|
|
78
|
+
getInclusionRecords(group?: string): TxInclusionData[];
|
|
65
79
|
inclusionTimeInSeconds(group: string): {
|
|
66
80
|
count: number;
|
|
67
81
|
group: string;
|
|
@@ -85,4 +99,4 @@ export declare class TxInclusionMetrics {
|
|
|
85
99
|
extra?: string;
|
|
86
100
|
}>;
|
|
87
101
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfbWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NwYXJ0YW4vdHhfbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJdEQsb0RBQW9EO0FBQ3BELHFCQUFhLGNBQWM7SUFjYixPQUFPLENBQUMsTUFBTTtJQWIxQixPQUFPLENBQUMsYUFBYSxDQUFxQjtJQUMxQyxPQUFPLENBQUMsYUFBYSxDQUFxQjtJQUMxQyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsVUFBVSxDQUFxQjtJQUN2QyxPQUFPLENBQUMsV0FBVyxDQUFxQjtJQUN4QyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsb0JBQW9CLENBQXFCO0lBQ2pELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBcUI7SUFDL0MsT0FBTyxDQUFDLFlBQVksQ0FBcUI7SUFFekMsWUFBb0IsTUFBTSxFQUFFLE1BQU0sRUFBSTtJQUV0QyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FFdkM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FFekM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FFdEM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_metrics.d.ts","sourceRoot":"","sources":["../../src/spartan/tx_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAItD,oDAAoD;AACpD,qBAAa,cAAc;IAcb,OAAO,CAAC,MAAM;IAb1B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,oBAAoB,CAAqB;IACjD,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,YAAY,CAAqB;IAEzC,YAAoB,MAAM,EAAE,MAAM,EAAI;IAEtC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEvC;IAED,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzC;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEnC;IAED,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpC;IAED,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAElC;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;IAED,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5C;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,2BAA2B,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CA0DlF;CACF;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"tx_metrics.d.ts","sourceRoot":"","sources":["../../src/spartan/tx_metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -180,9 +180,9 @@ export class TxInclusionMetrics {
|
|
|
180
180
|
}
|
|
181
181
|
this.data.set(txHash, {
|
|
182
182
|
txHash,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
183
|
+
sentAtMs: Date.now(),
|
|
184
|
+
minedAtMs: -1,
|
|
185
|
+
attestedAtMs: -1,
|
|
186
186
|
blocknumber: -1,
|
|
187
187
|
priorityFee: Number(priorityFees.feePerDaGas + priorityFees.feePerL2Gas),
|
|
188
188
|
totalFee: -1,
|
|
@@ -191,6 +191,22 @@ export class TxInclusionMetrics {
|
|
|
191
191
|
});
|
|
192
192
|
this.groups.add(group);
|
|
193
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Stamp mined-at metadata for any tracked tx contained in this block, using
|
|
196
|
+
* `observedAtMs` (caller-supplied wall-clock at the moment they first saw the
|
|
197
|
+
* block). Idempotent: existing minedAtMs is preserved so the first observer
|
|
198
|
+
* wins (typically the block-watcher; recordMinedTx is a fallback).
|
|
199
|
+
*/ observeBlockForMinedTxs(blockNumber, txHashes, observedAtMs) {
|
|
200
|
+
txHashes.forEach((txHash, position)=>{
|
|
201
|
+
const data = this.data.get(txHash.toString());
|
|
202
|
+
if (!data || data.minedAtMs !== -1) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
data.blocknumber = blockNumber;
|
|
206
|
+
data.minedAtMs = observedAtMs;
|
|
207
|
+
data.positionInBlock = position;
|
|
208
|
+
});
|
|
209
|
+
}
|
|
194
210
|
async recordMinedTx(txReceipt) {
|
|
195
211
|
const { txHash, blockNumber } = txReceipt;
|
|
196
212
|
if (!txReceipt.isMined() || !txReceipt.hasExecutionSucceeded() || !blockNumber) {
|
|
@@ -201,17 +217,6 @@ export class TxInclusionMetrics {
|
|
|
201
217
|
});
|
|
202
218
|
return;
|
|
203
219
|
}
|
|
204
|
-
if (!this.blocks.has(blockNumber)) {
|
|
205
|
-
this.blocks.set(blockNumber, this.aztecNode.getBlock(blockNumber));
|
|
206
|
-
}
|
|
207
|
-
const block = await this.blocks.get(blockNumber);
|
|
208
|
-
if (!block) {
|
|
209
|
-
this.logger?.warn('Failed to load block for mined tx receipt', {
|
|
210
|
-
txHash: txHash.toString(),
|
|
211
|
-
blockNumber
|
|
212
|
-
});
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
220
|
const data = this.data.get(txHash.toString());
|
|
216
221
|
if (!data) {
|
|
217
222
|
const message = `Missing sent tx record for mined tx ${txHash.toString()}`;
|
|
@@ -221,19 +226,67 @@ export class TxInclusionMetrics {
|
|
|
221
226
|
});
|
|
222
227
|
throw new Error(message);
|
|
223
228
|
}
|
|
224
|
-
data.blocknumber = blockNumber;
|
|
225
|
-
data.minedAt = Number(block.header.globalVariables.timestamp);
|
|
226
|
-
data.attestedAt = -1;
|
|
227
229
|
data.totalFee = Number(txReceipt.transactionFee ?? 0n);
|
|
228
|
-
|
|
230
|
+
// Fallback path for txs the block-watcher missed (e.g. observed only after
|
|
231
|
+
// the watcher stopped). Stamp with the block's L2 slot timestamp; this is
|
|
232
|
+
// earlier than the true client-observed time by attestation+propagation
|
|
233
|
+
// lag, but it's the only deterministic timestamp available post-hoc.
|
|
234
|
+
if (data.minedAtMs === -1) {
|
|
235
|
+
if (!this.blocks.has(blockNumber)) {
|
|
236
|
+
this.blocks.set(blockNumber, this.aztecNode.getBlock(blockNumber, {
|
|
237
|
+
includeTransactions: true
|
|
238
|
+
}));
|
|
239
|
+
}
|
|
240
|
+
const block = await this.blocks.get(blockNumber);
|
|
241
|
+
if (!block) {
|
|
242
|
+
this.logger?.warn('Failed to load block for mined tx receipt', {
|
|
243
|
+
txHash: txHash.toString(),
|
|
244
|
+
blockNumber
|
|
245
|
+
});
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
data.blocknumber = blockNumber;
|
|
249
|
+
data.minedAtMs = Number(block.header.globalVariables.timestamp) * 1000;
|
|
250
|
+
data.positionInBlock = block.body.txEffects.findIndex((txEffect)=>txEffect.txHash.equals(txHash));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/** Per-tx inclusion records for a group. Used to serialise out for downstream tooling. */ getInclusionRecords(group) {
|
|
254
|
+
const out = [];
|
|
255
|
+
for (const tx of this.data.values()){
|
|
256
|
+
if (group !== undefined && tx.group !== group) {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
out.push({
|
|
260
|
+
...tx
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
return out;
|
|
229
264
|
}
|
|
230
265
|
inclusionTimeInSeconds(group) {
|
|
231
266
|
const histogram = createHistogram({});
|
|
267
|
+
let nonPositive = 0;
|
|
232
268
|
for (const tx of this.data.values()){
|
|
233
|
-
if (!tx.blocknumber || tx.group !== group || tx.
|
|
269
|
+
if (!tx.blocknumber || tx.group !== group || tx.minedAtMs === -1) {
|
|
234
270
|
continue;
|
|
235
271
|
}
|
|
236
|
-
|
|
272
|
+
// Both timestamps are client wall-clock (ms). A negative delta should be
|
|
273
|
+
// impossible since the watcher stamps minedAtMs strictly after sentAtMs,
|
|
274
|
+
// but the fallback path (recordMinedTx via L2 slot timestamp) can stamp
|
|
275
|
+
// earlier than sentAtMs. perf_hooks.createHistogram rejects <=0; skip
|
|
276
|
+
// those instead of crashing.
|
|
277
|
+
const deltaMs = tx.minedAtMs - tx.sentAtMs;
|
|
278
|
+
if (deltaMs <= 0) {
|
|
279
|
+
nonPositive++;
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
// Histogram is recorded in seconds (rounded) to match the existing
|
|
283
|
+
// toGithubActionBenchmarkJSON output unit; per-tx records carry the raw ms.
|
|
284
|
+
histogram.record(Math.max(1, Math.round(deltaMs / 1000)));
|
|
285
|
+
}
|
|
286
|
+
if (nonPositive > 0) {
|
|
287
|
+
this.logger?.debug(`Dropped ${nonPositive} tx inclusion samples with non-positive delta`, {
|
|
288
|
+
group
|
|
289
|
+
});
|
|
237
290
|
}
|
|
238
291
|
if (histogram.count === 0) {
|
|
239
292
|
return {
|
|
@@ -1,45 +1,19 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
declare const testConfigSchema: z.ZodObject<{
|
|
3
3
|
NAMESPACE: z.ZodDefault<z.ZodString>;
|
|
4
|
-
REAL_VERIFIER: z.ZodDefault<z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.
|
|
5
|
-
DEBUG_FORCE_TX_PROOF_VERIFICATION: z.ZodDefault<z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.
|
|
6
|
-
CREATE_ETH_DEVNET: z.ZodDefault<z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.
|
|
4
|
+
REAL_VERIFIER: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodNumber & z.ZodType<0 | 1, number, z.core.$ZodTypeInternals<0 | 1, number>>, z.ZodTransform<boolean, 0 | 1>>, z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<boolean, string>>]>>>;
|
|
5
|
+
DEBUG_FORCE_TX_PROOF_VERIFICATION: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodNumber & z.ZodType<0 | 1, number, z.core.$ZodTypeInternals<0 | 1, number>>, z.ZodTransform<boolean, 0 | 1>>, z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<boolean, string>>]>>>;
|
|
6
|
+
CREATE_ETH_DEVNET: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodNumber & z.ZodType<0 | 1, number, z.core.$ZodTypeInternals<0 | 1, number>>, z.ZodTransform<boolean, 0 | 1>>, z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<boolean, string>>]>>>;
|
|
7
7
|
L1_RPC_URLS_JSON: z.ZodOptional<z.ZodString>;
|
|
8
8
|
L1_ACCOUNT_MNEMONIC: z.ZodOptional<z.ZodString>;
|
|
9
|
-
AZTEC_SLOT_DURATION: z.ZodDefault<z.ZodOptional<z.
|
|
10
|
-
AZTEC_EPOCH_DURATION: z.ZodDefault<z.ZodOptional<z.
|
|
11
|
-
AZTEC_PROOF_SUBMISSION_WINDOW: z.ZodDefault<z.ZodOptional<z.
|
|
12
|
-
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: z.ZodDefault<z.ZodOptional<z.
|
|
9
|
+
AZTEC_SLOT_DURATION: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
10
|
+
AZTEC_EPOCH_DURATION: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
11
|
+
AZTEC_PROOF_SUBMISSION_WINDOW: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
12
|
+
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
13
13
|
FUNDING_PRIVATE_KEY: z.ZodOptional<z.ZodString>;
|
|
14
14
|
AZTEC_ADMIN_API_KEY: z.ZodOptional<z.ZodString>;
|
|
15
|
-
},
|
|
16
|
-
NAMESPACE: string;
|
|
17
|
-
REAL_VERIFIER: boolean;
|
|
18
|
-
DEBUG_FORCE_TX_PROOF_VERIFICATION: boolean;
|
|
19
|
-
CREATE_ETH_DEVNET: boolean;
|
|
20
|
-
L1_RPC_URLS_JSON?: string | undefined;
|
|
21
|
-
L1_ACCOUNT_MNEMONIC?: string | undefined;
|
|
22
|
-
AZTEC_SLOT_DURATION: number;
|
|
23
|
-
AZTEC_EPOCH_DURATION: number;
|
|
24
|
-
AZTEC_PROOF_SUBMISSION_WINDOW: number;
|
|
25
|
-
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: number;
|
|
26
|
-
FUNDING_PRIVATE_KEY?: string | undefined;
|
|
27
|
-
AZTEC_ADMIN_API_KEY?: string | undefined;
|
|
28
|
-
}, {
|
|
29
|
-
NAMESPACE?: string | undefined;
|
|
30
|
-
REAL_VERIFIER?: string | number | boolean | undefined;
|
|
31
|
-
DEBUG_FORCE_TX_PROOF_VERIFICATION?: string | number | boolean | undefined;
|
|
32
|
-
CREATE_ETH_DEVNET?: string | number | boolean | undefined;
|
|
33
|
-
L1_RPC_URLS_JSON?: string | undefined;
|
|
34
|
-
L1_ACCOUNT_MNEMONIC?: string | undefined;
|
|
35
|
-
AZTEC_SLOT_DURATION?: number | undefined;
|
|
36
|
-
AZTEC_EPOCH_DURATION?: number | undefined;
|
|
37
|
-
AZTEC_PROOF_SUBMISSION_WINDOW?: number | undefined;
|
|
38
|
-
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET?: number | undefined;
|
|
39
|
-
FUNDING_PRIVATE_KEY?: string | undefined;
|
|
40
|
-
AZTEC_ADMIN_API_KEY?: string | undefined;
|
|
41
|
-
}>;
|
|
15
|
+
}, z.core.$strip>;
|
|
42
16
|
export type TestConfig = z.infer<typeof testConfigSchema>;
|
|
43
17
|
export declare function setupEnvironment(env: unknown): TestConfig;
|
|
44
18
|
export {};
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3BhcnRhbi91dGlscy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUl4QixRQUFBLE1BQU0sZ0JBQWdCOzs7Ozs7Ozs7Ozs7O2lCQWFwQixDQUFDO0FBRUgsTUFBTSxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQztBQUUxRCx3QkFBZ0IsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxVQUFVLENBSXpEIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/spartan/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/spartan/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;iBAapB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAIzD"}
|