@aztec/end-to-end 0.0.0-test.0 → 0.0.1-commit.03f7ef2

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.
Files changed (181) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +61 -0
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
  3. package/dest/bench/client_flows/benchmark.js +261 -0
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +80 -0
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
  6. package/dest/bench/client_flows/client_flows_benchmark.js +336 -0
  7. package/dest/bench/client_flows/config.d.ts +14 -0
  8. package/dest/bench/client_flows/config.d.ts.map +1 -0
  9. package/dest/bench/client_flows/config.js +106 -0
  10. package/dest/bench/client_flows/data_extractor.d.ts +2 -0
  11. package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
  12. package/dest/bench/client_flows/data_extractor.js +77 -0
  13. package/dest/bench/utils.d.ts +12 -38
  14. package/dest/bench/utils.d.ts.map +1 -1
  15. package/dest/bench/utils.js +26 -66
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +21 -13
  17. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  18. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +85 -57
  19. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +20 -25
  20. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  21. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +51 -70
  22. package/dest/e2e_deploy_contract/deploy_test.d.ts +16 -8
  23. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  24. package/dest/e2e_deploy_contract/deploy_test.js +13 -19
  25. package/dest/e2e_epochs/epochs_test.d.ts +65 -22
  26. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  27. package/dest/e2e_epochs/epochs_test.js +233 -49
  28. package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
  29. package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
  30. package/dest/e2e_fees/bridging_race.notest.js +63 -0
  31. package/dest/e2e_fees/fees_test.d.ts +27 -12
  32. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  33. package/dest/e2e_fees/fees_test.js +106 -109
  34. package/dest/e2e_l1_publisher/write_json.d.ts +10 -0
  35. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
  36. package/dest/e2e_l1_publisher/write_json.js +58 -0
  37. package/dest/e2e_multi_validator/utils.d.ts +12 -0
  38. package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
  39. package/dest/e2e_multi_validator/utils.js +214 -0
  40. package/dest/e2e_nested_contract/nested_contract_test.d.ts +10 -7
  41. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  42. package/dest/e2e_nested_contract/nested_contract_test.js +24 -20
  43. package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
  44. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
  45. package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
  46. package/dest/e2e_p2p/p2p_network.d.ts +276 -23
  47. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  48. package/dest/e2e_p2p/p2p_network.js +188 -133
  49. package/dest/e2e_p2p/shared.d.ts +43 -7
  50. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  51. package/dest/e2e_p2p/shared.js +164 -19
  52. package/dest/e2e_token_contract/token_contract_test.d.ts +12 -6
  53. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  54. package/dest/e2e_token_contract/token_contract_test.js +50 -26
  55. package/dest/fixtures/e2e_prover_test.d.ts +61 -0
  56. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
  57. package/dest/{e2e_prover → fixtures}/e2e_prover_test.js +108 -112
  58. package/dest/fixtures/fixtures.d.ts +6 -8
  59. package/dest/fixtures/fixtures.d.ts.map +1 -1
  60. package/dest/fixtures/fixtures.js +5 -5
  61. package/dest/fixtures/get_acvm_config.d.ts +2 -2
  62. package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
  63. package/dest/fixtures/get_acvm_config.js +3 -15
  64. package/dest/fixtures/get_bb_config.d.ts +2 -2
  65. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  66. package/dest/fixtures/get_bb_config.js +10 -17
  67. package/dest/fixtures/index.d.ts +1 -1
  68. package/dest/fixtures/l1_to_l2_messaging.d.ts +11 -7
  69. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  70. package/dest/fixtures/l1_to_l2_messaging.js +45 -19
  71. package/dest/fixtures/logging.d.ts +1 -1
  72. package/dest/fixtures/setup_p2p_test.d.ts +15 -14
  73. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  74. package/dest/fixtures/setup_p2p_test.js +82 -22
  75. package/dest/fixtures/snapshot_manager.d.ts +20 -14
  76. package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
  77. package/dest/fixtures/snapshot_manager.js +154 -140
  78. package/dest/fixtures/token_utils.d.ts +10 -4
  79. package/dest/fixtures/token_utils.d.ts.map +1 -1
  80. package/dest/fixtures/token_utils.js +28 -12
  81. package/dest/fixtures/utils.d.ts +95 -54
  82. package/dest/fixtures/utils.d.ts.map +1 -1
  83. package/dest/fixtures/utils.js +456 -389
  84. package/dest/fixtures/web3signer.d.ts +5 -0
  85. package/dest/fixtures/web3signer.d.ts.map +1 -0
  86. package/dest/fixtures/web3signer.js +53 -0
  87. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  88. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  89. package/dest/fixtures/with_telemetry_utils.js +2 -2
  90. package/dest/index.d.ts +1 -1
  91. package/dest/quality_of_service/alert_checker.d.ts +2 -2
  92. package/dest/quality_of_service/alert_checker.d.ts.map +1 -1
  93. package/dest/shared/cross_chain_test_harness.d.ts +42 -35
  94. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  95. package/dest/shared/cross_chain_test_harness.js +104 -50
  96. package/dest/shared/gas_portal_test_harness.d.ts +29 -31
  97. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  98. package/dest/shared/gas_portal_test_harness.js +51 -30
  99. package/dest/shared/index.d.ts +1 -1
  100. package/dest/shared/jest_setup.d.ts +1 -1
  101. package/dest/shared/jest_setup.js +1 -1
  102. package/dest/shared/submit-transactions.d.ts +6 -4
  103. package/dest/shared/submit-transactions.d.ts.map +1 -1
  104. package/dest/shared/submit-transactions.js +8 -7
  105. package/dest/shared/uniswap_l1_l2.d.ts +16 -13
  106. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  107. package/dest/shared/uniswap_l1_l2.js +149 -117
  108. package/dest/simulators/index.d.ts +1 -1
  109. package/dest/simulators/lending_simulator.d.ts +7 -11
  110. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  111. package/dest/simulators/lending_simulator.js +16 -17
  112. package/dest/simulators/token_simulator.d.ts +6 -3
  113. package/dest/simulators/token_simulator.d.ts.map +1 -1
  114. package/dest/simulators/token_simulator.js +16 -13
  115. package/dest/spartan/setup_test_wallets.d.ts +26 -11
  116. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  117. package/dest/spartan/setup_test_wallets.js +202 -58
  118. package/dest/spartan/tx_metrics.d.ts +39 -0
  119. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  120. package/dest/spartan/tx_metrics.js +95 -0
  121. package/dest/spartan/utils.d.ts +129 -313
  122. package/dest/spartan/utils.d.ts.map +1 -1
  123. package/dest/spartan/utils.js +559 -151
  124. package/package.json +65 -58
  125. package/src/bench/client_flows/benchmark.ts +341 -0
  126. package/src/bench/client_flows/client_flows_benchmark.ts +450 -0
  127. package/src/bench/client_flows/config.ts +61 -0
  128. package/src/bench/client_flows/data_extractor.ts +89 -0
  129. package/src/bench/utils.ts +22 -76
  130. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +80 -77
  131. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +70 -107
  132. package/src/e2e_deploy_contract/deploy_test.ts +24 -39
  133. package/src/e2e_epochs/epochs_test.ts +299 -65
  134. package/src/e2e_fees/bridging_race.notest.ts +80 -0
  135. package/src/e2e_fees/fees_test.ts +151 -141
  136. package/src/e2e_l1_publisher/write_json.ts +77 -0
  137. package/src/e2e_multi_validator/utils.ts +258 -0
  138. package/src/e2e_nested_contract/nested_contract_test.ts +29 -19
  139. package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
  140. package/src/e2e_p2p/p2p_network.ts +274 -171
  141. package/src/e2e_p2p/shared.ts +251 -29
  142. package/src/e2e_token_contract/token_contract_test.ts +43 -39
  143. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  144. package/src/{e2e_prover → fixtures}/e2e_prover_test.ts +113 -160
  145. package/src/fixtures/fixtures.ts +5 -7
  146. package/src/fixtures/get_acvm_config.ts +4 -12
  147. package/src/fixtures/get_bb_config.ts +18 -13
  148. package/src/fixtures/l1_to_l2_messaging.ts +56 -24
  149. package/src/fixtures/setup_p2p_test.ts +127 -39
  150. package/src/fixtures/snapshot_manager.ts +196 -162
  151. package/src/fixtures/token_utils.ts +32 -15
  152. package/src/fixtures/utils.ts +562 -475
  153. package/src/fixtures/web3signer.ts +63 -0
  154. package/src/fixtures/with_telemetry_utils.ts +2 -2
  155. package/src/guides/up_quick_start.sh +7 -15
  156. package/src/quality_of_service/alert_checker.ts +1 -1
  157. package/src/shared/cross_chain_test_harness.ts +112 -80
  158. package/src/shared/gas_portal_test_harness.ts +59 -50
  159. package/src/shared/jest_setup.ts +1 -1
  160. package/src/shared/submit-transactions.ts +12 -8
  161. package/src/shared/uniswap_l1_l2.ts +187 -192
  162. package/src/simulators/lending_simulator.ts +15 -16
  163. package/src/simulators/token_simulator.ts +21 -13
  164. package/src/spartan/DEVELOP.md +128 -0
  165. package/src/spartan/setup_test_wallets.ts +252 -93
  166. package/src/spartan/tx_metrics.ts +130 -0
  167. package/src/spartan/utils.ts +641 -146
  168. package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
  169. package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
  170. package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
  171. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  172. package/dest/fixtures/setup_l1_contracts.js +0 -17
  173. package/dest/sample-dapp/connect.js +0 -12
  174. package/dest/sample-dapp/contracts.js +0 -10
  175. package/dest/sample-dapp/deploy.js +0 -35
  176. package/dest/sample-dapp/index.js +0 -98
  177. package/src/fixtures/setup_l1_contracts.ts +0 -27
  178. package/src/sample-dapp/connect.mjs +0 -16
  179. package/src/sample-dapp/contracts.mjs +0 -14
  180. package/src/sample-dapp/deploy.mjs +0 -40
  181. package/src/sample-dapp/index.mjs +0 -128
@@ -1,93 +1,117 @@
1
- import { getSchnorrWalletWithSecretKey } from '@aztec/accounts/schnorr';
2
- import { ChainMonitor } from '@aztec/aztec.js/ethereum';
3
- import { RollupContract, getExpectedAddress, getL1ContractsConfigEnvVars } from '@aztec/ethereum';
4
- import { L1TxUtilsWithBlobs } from '@aztec/ethereum/l1-tx-utils-with-blobs';
5
- import { EthCheatCodesWithState } from '@aztec/ethereum/test';
1
+ import { EthAddress } from '@aztec/aztec.js/addresses';
2
+ import { Fr } from '@aztec/aztec.js/fields';
3
+ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
4
+ import { GSEContract, RollupContract } from '@aztec/ethereum/contracts';
5
+ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
6
+ import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
7
+ import { createL1TxUtilsFromViemWallet } from '@aztec/ethereum/l1-tx-utils';
8
+ import { ChainMonitor } from '@aztec/ethereum/test';
9
+ import { EpochNumber } from '@aztec/foundation/branded-types';
10
+ import { SecretValue } from '@aztec/foundation/config';
6
11
  import { createLogger } from '@aztec/foundation/log';
7
- import { ForwarderAbi, ForwarderBytecode, RollupAbi, TestERC20Abi } from '@aztec/l1-artifacts';
8
- import { SpamContract } from '@aztec/noir-contracts.js/Spam';
12
+ import { retryUntil } from '@aztec/foundation/retry';
13
+ import { RollupAbi, SlasherAbi, TestERC20Abi } from '@aztec/l1-artifacts';
14
+ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
9
15
  import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
16
+ import { tryStop } from '@aztec/stdlib/interfaces/server';
17
+ import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
18
+ import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
10
19
  import { getGenesisValues } from '@aztec/world-state/testing';
11
20
  import getPort from 'get-port';
12
- import { getContract } from 'viem';
21
+ import { getAddress, getContract } from 'viem';
13
22
  import { privateKeyToAccount } from 'viem/accounts';
14
- import { ATTESTER_PRIVATE_KEYS_START_INDEX, PROPOSER_PRIVATE_KEYS_START_INDEX, createValidatorConfig, generatePrivateKeys } from '../fixtures/setup_p2p_test.js';
23
+ import { ATTESTER_PRIVATE_KEYS_START_INDEX, createValidatorConfig, generatePrivateKeys } from '../fixtures/setup_p2p_test.js';
15
24
  import { createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
16
- import { getPrivateKeyFromIndex } from '../fixtures/utils.js';
25
+ import { getPrivateKeyFromIndex, getSponsoredFPCAddress } from '../fixtures/utils.js';
17
26
  import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
18
27
  // Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
19
28
  const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
20
29
  const l1ContractsConfig = getL1ContractsConfigEnvVars();
21
30
  export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
22
- export const SHORTENED_BLOCK_TIME_CONFIG = {
31
+ export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
23
32
  aztecSlotDuration: 12,
24
- ethereumSlotDuration: 4
33
+ ethereumSlotDuration: 4,
34
+ aztecProofSubmissionWindow: 640
25
35
  };
26
36
  export class P2PNetworkTest {
37
+ testName;
27
38
  bootstrapNodeEnr;
28
39
  bootNodePort;
40
+ numberOfValidators;
29
41
  numberOfNodes;
30
42
  metricsPort;
31
43
  snapshotManager;
44
+ baseAccountPrivateKey;
32
45
  baseAccount;
33
46
  logger;
34
47
  monitor;
35
48
  ctx;
36
49
  attesterPrivateKeys;
37
50
  attesterPublicKeys;
38
- proposerPrivateKeys;
39
51
  peerIdPrivateKeys;
52
+ validators;
40
53
  deployedAccounts;
41
54
  prefilledPublicData;
42
55
  // The re-execution test needs a wallet and a spam contract
43
56
  wallet;
57
+ defaultAccountAddress;
44
58
  spamContract;
45
59
  bootstrapNode;
46
- cleanupInterval;
47
- gasUtils;
48
- constructor(testName, bootstrapNodeEnr, bootNodePort, numberOfNodes, initialValidatorConfig, // If set enable metrics collection
49
- metricsPort){
60
+ constructor(testName, bootstrapNodeEnr, bootNodePort, numberOfValidators, initialValidatorConfig, numberOfNodes = 0, // If set enable metrics collection
61
+ metricsPort, startProverNode){
62
+ this.testName = testName;
50
63
  this.bootstrapNodeEnr = bootstrapNodeEnr;
51
64
  this.bootNodePort = bootNodePort;
65
+ this.numberOfValidators = numberOfValidators;
52
66
  this.numberOfNodes = numberOfNodes;
53
67
  this.metricsPort = metricsPort;
54
68
  this.attesterPrivateKeys = [];
55
69
  this.attesterPublicKeys = [];
56
- this.proposerPrivateKeys = [];
57
70
  this.peerIdPrivateKeys = [];
71
+ this.validators = [];
58
72
  this.deployedAccounts = [];
59
73
  this.prefilledPublicData = [];
60
- this.cleanupInterval = undefined;
61
- this.gasUtils = undefined;
62
74
  this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
63
75
  // Set up the base account and node private keys for the initial network deployment
64
- this.baseAccount = privateKeyToAccount(`0x${getPrivateKeyFromIndex(0).toString('hex')}`);
65
- this.proposerPrivateKeys = generatePrivateKeys(PROPOSER_PRIVATE_KEYS_START_INDEX, numberOfNodes);
66
- this.attesterPrivateKeys = generatePrivateKeys(ATTESTER_PRIVATE_KEYS_START_INDEX, numberOfNodes);
76
+ this.baseAccountPrivateKey = `0x${getPrivateKeyFromIndex(1).toString('hex')}`;
77
+ this.baseAccount = privateKeyToAccount(this.baseAccountPrivateKey);
78
+ this.attesterPrivateKeys = generatePrivateKeys(ATTESTER_PRIVATE_KEYS_START_INDEX + numberOfNodes, numberOfValidators);
67
79
  this.attesterPublicKeys = this.attesterPrivateKeys.map((privateKey)=>privateKeyToAccount(privateKey).address);
80
+ const zkPassportParams = ZkPassportProofParams.random();
68
81
  this.snapshotManager = createSnapshotManager(`e2e_p2p_network/${testName}`, process.env.E2E_DATA_PATH, {
69
82
  ...initialValidatorConfig,
70
83
  ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
71
84
  aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
72
85
  aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
73
- aztecProofSubmissionWindow: initialValidatorConfig.aztecProofSubmissionWindow ?? l1ContractsConfig.aztecProofSubmissionWindow,
74
- salt: 420,
86
+ aztecProofSubmissionEpochs: initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
87
+ slashingRoundSizeInEpochs: initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
88
+ slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
89
+ aztecTargetCommitteeSize: numberOfValidators,
75
90
  metricsPort: metricsPort,
76
- numberOfInitialFundedAccounts: 1
91
+ numberOfInitialFundedAccounts: 2,
92
+ startProverNode
77
93
  }, {
94
+ ...initialValidatorConfig,
78
95
  aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
96
+ slashingRoundSizeInEpochs: initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
97
+ slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
79
98
  ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
80
99
  aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
81
- aztecProofSubmissionWindow: initialValidatorConfig.aztecProofSubmissionWindow ?? l1ContractsConfig.aztecProofSubmissionWindow,
82
- initialValidators: []
100
+ aztecProofSubmissionEpochs: initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
101
+ aztecTargetCommitteeSize: numberOfValidators,
102
+ initialValidators: [],
103
+ zkPassportArgs: {
104
+ zkPassportDomain: zkPassportParams.domain,
105
+ zkPassportScope: zkPassportParams.scope
106
+ }
83
107
  });
84
108
  }
85
- static async create({ testName, numberOfNodes, basePort, metricsPort, initialConfig }) {
109
+ static async create({ testName, numberOfNodes, numberOfValidators, basePort, metricsPort, initialConfig, startProverNode }) {
86
110
  const port = basePort || await getPort();
87
111
  const bootstrapNodeENR = await getBootstrapNodeEnr(BOOTSTRAP_NODE_PRIVATE_KEY, port);
88
112
  const bootstrapNodeEnr = bootstrapNodeENR.encodeTxt();
89
113
  const initialValidatorConfig = await createValidatorConfig(initialConfig ?? {}, bootstrapNodeEnr);
90
- return new P2PNetworkTest(testName, bootstrapNodeEnr, port, numberOfNodes, initialValidatorConfig, metricsPort);
114
+ return new P2PNetworkTest(testName, bootstrapNodeEnr, port, numberOfValidators, initialValidatorConfig, numberOfNodes, metricsPort, startProverNode);
91
115
  }
92
116
  get fundedAccount() {
93
117
  if (!this.deployedAccounts[0]) {
@@ -95,110 +119,94 @@ export class P2PNetworkTest {
95
119
  }
96
120
  return this.deployedAccounts[0];
97
121
  }
98
- /**
99
- * Start a loop to sync the mock system time with the L1 block time
100
- */ startSyncMockSystemTimeInterval() {
101
- this.cleanupInterval = setInterval(()=>{
102
- void this.syncMockSystemTime().catch((err)=>this.logger.error('Error syncing mock system time', err));
103
- }, l1ContractsConfig.aztecSlotDuration * 1000);
104
- }
105
- /**
106
- * When using fake timers, we need to keep the system and anvil clocks in sync.
107
- */ async syncMockSystemTime() {
108
- this.logger.info('Syncing mock system time');
109
- const { dateProvider, deployL1ContractsValues } = this.ctx;
110
- // Send a tx and only update the time after the tx is mined, as eth time is not continuous
111
- const { receipt } = await this.gasUtils.sendAndMonitorTransaction({
112
- to: this.baseAccount.address,
113
- data: '0x',
114
- value: 1n
115
- });
116
- const timestamp = await deployL1ContractsValues.publicClient.getBlock({
117
- blockNumber: receipt.blockNumber
118
- });
119
- this.logger.info(`Timestamp: ${timestamp.timestamp}`);
120
- dateProvider.setTime(Number(timestamp.timestamp) * 1000);
121
- }
122
- async applyBaseSnapshots() {
122
+ async addBootstrapNode() {
123
123
  await this.snapshotManager.snapshot('add-bootstrap-node', async ({ aztecNodeConfig })=>{
124
- const telemetry = getEndToEndTestTelemetryClient(this.metricsPort);
124
+ const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
125
125
  this.bootstrapNode = await createBootstrapNodeFromPrivateKey(BOOTSTRAP_NODE_PRIVATE_KEY, this.bootNodePort, telemetry, aztecNodeConfig);
126
126
  // Overwrite enr with updated info
127
127
  this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
128
128
  });
129
- await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, aztecNodeConfig, dateProvider })=>{
129
+ }
130
+ getValidators() {
131
+ const validators = [];
132
+ for(let i = 0; i < this.numberOfValidators; i++){
133
+ const keyIndex = i;
134
+ const attester = privateKeyToAccount(this.attesterPrivateKeys[keyIndex]);
135
+ validators.push({
136
+ attester: EthAddress.fromString(attester.address),
137
+ withdrawer: EthAddress.fromString(attester.address),
138
+ bn254SecretKey: new SecretValue(Fr.random().toBigInt())
139
+ });
140
+ this.logger.info(`Adding attester ${attester.address} as validator`);
141
+ }
142
+ return {
143
+ validators
144
+ };
145
+ }
146
+ async applyBaseSnapshots() {
147
+ await this.addBootstrapNode();
148
+ await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes })=>{
130
149
  const rollup = getContract({
131
150
  address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
132
151
  abi: RollupAbi,
133
- client: deployL1ContractsValues.walletClient
152
+ client: deployL1ContractsValues.l1Client
134
153
  });
135
- this.logger.verbose(`Adding ${this.numberOfNodes} validators`);
154
+ this.logger.info(`Adding ${this.numberOfValidators} validators`);
136
155
  const stakingAsset = getContract({
137
156
  address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
138
157
  abi: TestERC20Abi,
139
- client: deployL1ContractsValues.walletClient
158
+ client: deployL1ContractsValues.l1Client
159
+ });
160
+ const { address: multiAdderAddress } = await deployL1Contract(deployL1ContractsValues.l1Client, MultiAdderArtifact.contractAbi, MultiAdderArtifact.contractBytecode, [
161
+ rollup.address,
162
+ deployL1ContractsValues.l1Client.account.address
163
+ ]);
164
+ const multiAdder = getContract({
165
+ address: multiAdderAddress.toString(),
166
+ abi: MultiAdderArtifact.contractAbi,
167
+ client: deployL1ContractsValues.l1Client
140
168
  });
141
- const stakeNeeded = l1ContractsConfig.minimumStake * BigInt(this.numberOfNodes);
169
+ const stakeNeeded = await rollup.read.getActivationThreshold() * BigInt(this.numberOfValidators);
142
170
  await Promise.all([
143
171
  await stakingAsset.write.mint([
144
- deployL1ContractsValues.walletClient.account.address,
145
- stakeNeeded
146
- ], {}),
147
- await stakingAsset.write.approve([
148
- deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
172
+ multiAdder.address,
149
173
  stakeNeeded
150
174
  ], {})
151
- ].map((txHash)=>deployL1ContractsValues.publicClient.waitForTransactionReceipt({
175
+ ].map((txHash)=>deployL1ContractsValues.l1Client.waitForTransactionReceipt({
152
176
  hash: txHash
153
177
  })));
154
- const validators = [];
155
- for(let i = 0; i < this.numberOfNodes; i++){
156
- const attester = privateKeyToAccount(this.attesterPrivateKeys[i]);
157
- const proposerEOA = privateKeyToAccount(this.proposerPrivateKeys[i]);
158
- const forwarder = getExpectedAddress(ForwarderAbi, ForwarderBytecode, [
159
- proposerEOA.address
160
- ], proposerEOA.address).address;
161
- validators.push({
162
- attester: attester.address,
163
- proposer: forwarder,
164
- withdrawer: attester.address,
165
- amount: l1ContractsConfig.minimumStake
166
- });
167
- this.logger.verbose(`Adding (attester, proposer) pair: (${attester.address}, ${forwarder}) as validator`);
178
+ const { validators } = this.getValidators();
179
+ this.validators = validators;
180
+ const gseAddress = deployL1ContractsValues.l1ContractAddresses.gseAddress;
181
+ if (!gseAddress) {
182
+ throw new Error('GSE contract not deployed');
168
183
  }
169
- await deployL1ContractsValues.publicClient.waitForTransactionReceipt({
170
- hash: await rollup.write.cheat__InitialiseValidatorSet([
171
- validators
184
+ const gseContract = new GSEContract(deployL1ContractsValues.l1Client, gseAddress.toString());
185
+ const makeValidatorTuples = async (validator)=>{
186
+ const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
187
+ return {
188
+ attester: validator.attester.toString(),
189
+ withdrawer: validator.withdrawer.toString(),
190
+ ...registrationTuple
191
+ };
192
+ };
193
+ const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
194
+ await deployL1ContractsValues.l1Client.waitForTransactionReceipt({
195
+ hash: await multiAdder.write.addValidators([
196
+ validatorTuples
172
197
  ])
173
198
  });
174
- const slotsInEpoch = await rollup.read.getEpochDuration();
175
- const timestamp = await rollup.read.getTimestampForSlot([
176
- slotsInEpoch
177
- ]);
178
- const cheatCodes = new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls);
179
- try {
180
- await cheatCodes.warp(Number(timestamp));
181
- } catch (err) {
182
- this.logger.debug('Warp failed, time already satisfied');
183
- }
199
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber.fromBigInt(BigInt(await cheatCodes.rollup.getEpoch()) + await rollup.read.getLagInEpochsForValidatorSet() + 1n));
184
200
  // Send and await a tx to make sure we mine a block for the warp to correctly progress.
185
- await deployL1ContractsValues.publicClient.waitForTransactionReceipt({
186
- hash: await deployL1ContractsValues.walletClient.sendTransaction({
187
- to: this.baseAccount.address,
188
- value: 1n,
189
- account: this.baseAccount
190
- })
191
- });
192
- // Set the system time in the node, only after we have warped the time and waited for a block
193
- // Time is only set in the NEXT block
194
- dateProvider.setTime(Number(timestamp) * 1000);
201
+ await this._sendDummyTx(deployL1ContractsValues.l1Client);
195
202
  });
196
203
  }
197
204
  async setupAccount() {
198
- await this.snapshotManager.snapshot('setup-account', deployAccounts(1, this.logger, false), async ({ deployedAccounts }, { pxe })=>{
205
+ await this.snapshotManager.snapshot('setup-account', deployAccounts(1, this.logger), ({ deployedAccounts }, { wallet })=>{
199
206
  this.deployedAccounts = deployedAccounts;
200
- const [account] = deployedAccounts;
201
- this.wallet = await getSchnorrWalletWithSecretKey(pxe, account.secret, account.signingKey, account.salt);
207
+ [{ address: this.defaultAccountAddress }] = deployedAccounts;
208
+ this.wallet = wallet;
209
+ return Promise.resolve();
202
210
  });
203
211
  }
204
212
  async deploySpamContract() {
@@ -206,46 +214,53 @@ export class P2PNetworkTest {
206
214
  if (!this.wallet) {
207
215
  throw new Error('Call snapshot t.setupAccount before deploying account contract');
208
216
  }
209
- const spamContract = await SpamContract.deploy(this.wallet).send().deployed();
217
+ const spamContract = await SpamContract.deploy(this.wallet).send({
218
+ from: this.defaultAccountAddress
219
+ }).deployed();
210
220
  return {
211
221
  contractAddress: spamContract.address
212
222
  };
213
- }, async ({ contractAddress })=>{
223
+ }, ({ contractAddress })=>{
214
224
  if (!this.wallet) {
215
225
  throw new Error('Call snapshot t.setupAccount before deploying account contract');
216
226
  }
217
- this.spamContract = await SpamContract.at(contractAddress, this.wallet);
227
+ this.spamContract = SpamContract.at(contractAddress, this.wallet);
228
+ return Promise.resolve();
218
229
  });
219
230
  }
220
231
  async removeInitialNode() {
221
- await this.snapshotManager.snapshot('remove-inital-validator', async ({ deployL1ContractsValues, aztecNode, dateProvider })=>{
232
+ await this.snapshotManager.snapshot('remove-initial-validator', async ({ deployL1ContractsValues, aztecNode, dateProvider })=>{
222
233
  // Send and await a tx to make sure we mine a block for the warp to correctly progress.
223
- const receipt = await deployL1ContractsValues.publicClient.waitForTransactionReceipt({
224
- hash: await deployL1ContractsValues.walletClient.sendTransaction({
225
- to: this.baseAccount.address,
226
- value: 1n,
227
- account: this.baseAccount
228
- })
229
- });
230
- const block = await deployL1ContractsValues.publicClient.getBlock({
234
+ const { receipt } = await this._sendDummyTx(deployL1ContractsValues.l1Client);
235
+ const block = await deployL1ContractsValues.l1Client.getBlock({
231
236
  blockNumber: receipt.blockNumber
232
237
  });
233
238
  dateProvider.setTime(Number(block.timestamp) * 1000);
234
239
  await aztecNode.stop();
235
240
  });
236
241
  }
242
+ async sendDummyTx() {
243
+ return await this._sendDummyTx(this.ctx.deployL1ContractsValues.l1Client);
244
+ }
245
+ async _sendDummyTx(l1Client) {
246
+ const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client);
247
+ return await l1TxUtils.sendAndMonitorTransaction({
248
+ to: l1Client.account.address,
249
+ value: 1n
250
+ });
251
+ }
237
252
  async setup() {
238
253
  this.ctx = await this.snapshotManager.setup();
239
- this.prefilledPublicData = (await getGenesisValues(this.ctx.initialFundedAccounts.map((a)=>a.address))).prefilledPublicData;
240
- this.startSyncMockSystemTimeInterval();
241
- this.gasUtils = new L1TxUtilsWithBlobs(this.ctx.deployL1ContractsValues.publicClient, this.ctx.deployL1ContractsValues.walletClient, this.logger, {
242
- gasLimitBufferPercentage: 20,
243
- maxGwei: 500n,
244
- maxAttempts: 3,
245
- checkIntervalMs: 100,
246
- stallTimeMs: 1000
247
- });
248
- this.monitor = new ChainMonitor(RollupContract.getFromL1ContractsValues(this.ctx.deployL1ContractsValues)).start();
254
+ const sponsoredFPCAddress = await getSponsoredFPCAddress();
255
+ const initialFundedAccounts = [
256
+ ...this.ctx.initialFundedAccounts.map((a)=>a.address),
257
+ sponsoredFPCAddress
258
+ ];
259
+ const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
260
+ this.prefilledPublicData = prefilledPublicData;
261
+ const rollupContract = RollupContract.getFromL1ContractsValues(this.ctx.deployL1ContractsValues);
262
+ this.monitor = new ChainMonitor(rollupContract, this.ctx.dateProvider).start();
263
+ this.monitor.on('l1-block', ({ timestamp })=>this.ctx.dateProvider.setTime(Number(timestamp) * 1000));
249
264
  }
250
265
  async stopNodes(nodes) {
251
266
  this.logger.info('Stopping nodes');
@@ -256,12 +271,52 @@ export class P2PNetworkTest {
256
271
  await Promise.all(nodes.map((node)=>node.stop()));
257
272
  this.logger.info('Nodes stopped');
258
273
  }
274
+ /**
275
+ * Wait for P2P mesh to be fully formed across all nodes.
276
+ * This ensures that all nodes are connected to each other before proceeding,
277
+ * preventing race conditions where validators propose blocks before the network is ready.
278
+ *
279
+ * @param nodes - Array of nodes to check for P2P connectivity
280
+ * @param expectedNodeCount - Expected number of nodes in the network (defaults to nodes.length)
281
+ * @param timeoutSeconds - Maximum time to wait for connections (default: 30 seconds)
282
+ * @param checkIntervalSeconds - How often to check connectivity (default: 0.1 seconds)
283
+ */ async waitForP2PMeshConnectivity(nodes, expectedNodeCount, timeoutSeconds = 30, checkIntervalSeconds = 0.1) {
284
+ const nodeCount = expectedNodeCount ?? nodes.length;
285
+ const minPeerCount = nodeCount - 1;
286
+ this.logger.warn(`Waiting for all ${nodeCount} nodes to connect to P2P mesh (at least ${minPeerCount} peers each)...`);
287
+ await Promise.all(nodes.map(async (node, index)=>{
288
+ const p2p = node.getP2P();
289
+ await retryUntil(async ()=>{
290
+ const peers = await p2p.getPeers();
291
+ // Each node should be connected to at least N-1 other nodes
292
+ return peers.length >= minPeerCount ? true : undefined;
293
+ }, `Node ${index} to connect to at least ${minPeerCount} peers`, timeoutSeconds, checkIntervalSeconds);
294
+ }));
295
+ this.logger.warn('All nodes connected to P2P mesh');
296
+ }
259
297
  async teardown() {
260
- this.monitor.stop();
261
- await this.bootstrapNode?.stop();
298
+ await this.monitor.stop();
299
+ await tryStop(this.bootstrapNode, this.logger);
262
300
  await this.snapshotManager.teardown();
263
- if (this.cleanupInterval) {
264
- clearInterval(this.cleanupInterval);
301
+ }
302
+ async getContracts() {
303
+ if (!this.ctx.deployL1ContractsValues) {
304
+ throw new Error('DeployAztecL1ContractsValues not set');
265
305
  }
306
+ const rollup = new RollupContract(this.ctx.deployL1ContractsValues.l1Client, this.ctx.deployL1ContractsValues.l1ContractAddresses.rollupAddress);
307
+ const slasherContract = getContract({
308
+ address: getAddress(await rollup.getSlasherAddress()),
309
+ abi: SlasherAbi,
310
+ client: this.ctx.deployL1ContractsValues.l1Client
311
+ });
312
+ // Get the actual slashing proposer from rollup (which handles both empire and tally)
313
+ const slashingProposer = await rollup.getSlashingProposer();
314
+ const slashFactory = new SlashFactoryContract(this.ctx.deployL1ContractsValues.l1Client, getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress.toString()));
315
+ return {
316
+ rollup,
317
+ slasherContract,
318
+ slashingProposer,
319
+ slashFactory
320
+ };
266
321
  }
267
322
  }
@@ -1,10 +1,46 @@
1
1
  import type { InitialAccountData } from '@aztec/accounts/testing';
2
2
  import type { AztecNodeService } from '@aztec/aztec-node';
3
- import { type Logger, type SentTx } from '@aztec/aztec.js';
4
- import type { SpamContract } from '@aztec/noir-contracts.js/Spam';
5
- import type { NodeContext } from '../fixtures/setup_p2p_test.js';
6
- export declare const submitComplexTxsTo: (logger: Logger, spamContract: SpamContract, numTxs: number, opts?: {
7
- callPublic?: boolean;
3
+ import { AztecAddress } from '@aztec/aztec.js/addresses';
4
+ import { type SentTx } from '@aztec/aztec.js/contracts';
5
+ import type { Logger } from '@aztec/aztec.js/log';
6
+ import { Tx } from '@aztec/aztec.js/tx';
7
+ import type { RollupCheatCodes } from '@aztec/aztec/testing';
8
+ import type { EmpireSlashingProposerContract, RollupContract, TallySlashingProposerContract } from '@aztec/ethereum/contracts';
9
+ import type { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
10
+ import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
11
+ import type { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
12
+ export declare const submitComplexTxsTo: (logger: Logger, from: AztecAddress, spamContract: SpamContract, numTxs: number, opts?: {
13
+ callPublic?: boolean | undefined;
8
14
  }) => Promise<SentTx[]>;
9
- export declare const createPXEServiceAndSubmitTransactions: (logger: Logger, node: AztecNodeService, numTxs: number, fundedAccount: InitialAccountData) => Promise<NodeContext>;
10
- //# sourceMappingURL=shared.d.ts.map
15
+ export declare const submitTransactions: (logger: Logger, node: AztecNodeService, numTxs: number, fundedAccount: InitialAccountData) => Promise<SentTx[]>;
16
+ export declare function prepareTransactions(logger: Logger, node: AztecNodeService, numTxs: number, fundedAccount: InitialAccountData): Promise<Tx[]>;
17
+ export declare function awaitProposalExecution(slashingProposer: EmpireSlashingProposerContract | TallySlashingProposerContract, timeoutSeconds: number, logger: Logger): Promise<bigint>;
18
+ export declare function awaitCommitteeExists({ rollup, logger }: {
19
+ rollup: RollupContract;
20
+ logger: Logger;
21
+ }): Promise<readonly `0x${string}`[]>;
22
+ export declare function awaitOffenseDetected({ logger, nodeAdmin, slashingRoundSize, epochDuration, waitUntilOffenseCount, timeoutSeconds }: {
23
+ nodeAdmin: AztecNodeAdmin;
24
+ logger: Logger;
25
+ slashingRoundSize: number;
26
+ epochDuration: number;
27
+ waitUntilOffenseCount?: number;
28
+ timeoutSeconds?: number;
29
+ }): Promise<import("@aztec/slasher").Offense[]>;
30
+ /**
31
+ * Await the committee to be slashed out of the validator set.
32
+ * Currently assumes that the committee is the same size as the validator set.
33
+ */
34
+ export declare function awaitCommitteeKicked({ rollup, cheatCodes, committee, slashFactory, slashingProposer, slashingRoundSize, aztecSlotDuration, aztecEpochDuration, logger, offenseEpoch }: {
35
+ rollup: RollupContract;
36
+ cheatCodes: RollupCheatCodes;
37
+ committee: readonly `0x${string}`[];
38
+ slashFactory: SlashFactoryContract;
39
+ slashingProposer: EmpireSlashingProposerContract | TallySlashingProposerContract | undefined;
40
+ slashingRoundSize: number;
41
+ aztecSlotDuration: number;
42
+ aztecEpochDuration: number;
43
+ logger: Logger;
44
+ offenseEpoch: number;
45
+ }): Promise<void>;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX3AycC9zaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQThDLE1BQU0sMkJBQTJCLENBQUM7QUFFcEcsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEVBQUUsRUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQ1YsOEJBQThCLEVBQzlCLGNBQWMsRUFDZCw2QkFBNkIsRUFDOUIsTUFBTSwyQkFBMkIsQ0FBQztBQUtuQyxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUl2RSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBTXZFLGVBQU8sTUFBTSxrQkFBa0I7O3VCQTJCOUIsQ0FBQztBQUdGLGVBQU8sTUFBTSxrQkFBa0Isa0hBVzlCLENBQUM7QUFFRix3QkFBc0IsbUJBQW1CLENBQ3ZDLE1BQU0sRUFBRSxNQUFNLEVBQ2QsSUFBSSxFQUFFLGdCQUFnQixFQUN0QixNQUFNLEVBQUUsTUFBTSxFQUNkLGFBQWEsRUFBRSxrQkFBa0IsR0FDaEMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBcUJmO0FBRUQsd0JBQWdCLHNCQUFzQixDQUNwQyxnQkFBZ0IsRUFBRSw4QkFBOEIsR0FBRyw2QkFBNkIsRUFDaEYsY0FBYyxFQUFFLE1BQU0sRUFDdEIsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsTUFBTSxDQUFDLENBMEJqQjtBQUVELHdCQUFzQixvQkFBb0IsQ0FBQyxFQUN6QyxNQUFNLEVBQ04sTUFBTSxFQUNQLEVBQUU7SUFDRCxNQUFNLEVBQUUsY0FBYyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUM7Q0FDaEIsR0FBRyxPQUFPLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FZcEM7QUFFRCx3QkFBc0Isb0JBQW9CLENBQUMsRUFDekMsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixjQUFvQixFQUNyQixFQUFFO0lBQ0QsU0FBUyxFQUFFLGNBQWMsQ0FBQztJQUMxQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDL0IsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ3pCLCtDQWtCQTtBQUVEOzs7R0FHRztBQUNILHdCQUFzQixvQkFBb0IsQ0FBQyxFQUN6QyxNQUFNLEVBQ04sVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLE1BQU0sRUFDTixZQUFZLEVBQ2IsRUFBRTtJQUNELE1BQU0sRUFBRSxjQUFjLENBQUM7SUFDdkIsVUFBVSxFQUFFLGdCQUFnQixDQUFDO0lBQzdCLFNBQVMsRUFBRSxTQUFTLEtBQUssTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNwQyxZQUFZLEVBQUUsb0JBQW9CLENBQUM7SUFDbkMsZ0JBQWdCLEVBQUUsOEJBQThCLEdBQUcsNkJBQTZCLEdBQUcsU0FBUyxDQUFDO0lBQzdGLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztJQUMxQixpQkFBaUIsRUFBRSxNQUFNLENBQUM7SUFDMUIsa0JBQWtCLEVBQUUsTUFBTSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixZQUFZLEVBQUUsTUFBTSxDQUFDO0NBQ3RCLGlCQTZFQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAY,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,kBAAkB,WACrB,MAAM,gBACA,YAAY,UAClB,MAAM,SACR;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,sBAwB/B,CAAC;AAGF,eAAO,MAAM,qCAAqC,WACxC,MAAM,QACR,gBAAgB,UACd,MAAM,iBACC,kBAAkB,KAChC,QAAQ,WAAW,CAmBrB,CAAC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAA8C,MAAM,2BAA2B,CAAC;AAEpG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAY,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EACV,8BAA8B,EAC9B,cAAc,EACd,6BAA6B,EAC9B,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAIvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAMvE,eAAO,MAAM,kBAAkB;;uBA2B9B,CAAC;AAGF,eAAO,MAAM,kBAAkB,kHAW9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,kBAAkB,GAChC,OAAO,CAAC,EAAE,EAAE,CAAC,CAqBf;AAED,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,8BAA8B,GAAG,6BAA6B,EAChF,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED,wBAAsB,oBAAoB,CAAC,EACzC,MAAM,EACN,MAAM,EACP,EAAE;IACD,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,SAAS,KAAK,MAAM,EAAE,EAAE,CAAC,CAYpC;AAED,wBAAsB,oBAAoB,CAAC,EACzC,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,cAAoB,EACrB,EAAE;IACD,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,+CAkBA;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,MAAM,EACN,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,EACN,YAAY,EACb,EAAE;IACD,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,SAAS,EAAE,SAAS,KAAK,MAAM,EAAE,EAAE,CAAC;IACpC,YAAY,EAAE,oBAAoB,CAAC;IACnC,gBAAgB,EAAE,8BAA8B,GAAG,6BAA6B,GAAG,SAAS,CAAC;IAC7F,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB,iBA6EA"}