@aztec/end-to-end 0.0.0-test.0 → 0.0.1-commit.21caa21

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 (174) 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 +334 -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 +19 -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 +50 -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 +59 -18
  26. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  27. package/dest/e2e_epochs/epochs_test.js +226 -44
  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 +21 -10
  32. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  33. package/dest/e2e_fees/fees_test.js +103 -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 +139 -0
  46. package/dest/e2e_p2p/p2p_network.d.ts +275 -23
  47. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  48. package/dest/e2e_p2p/p2p_network.js +184 -131
  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 +63 -0
  56. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
  57. package/dest/{e2e_prover → fixtures}/e2e_prover_test.js +104 -105
  58. package/dest/fixtures/fixtures.d.ts +6 -7
  59. package/dest/fixtures/fixtures.d.ts.map +1 -1
  60. package/dest/fixtures/fixtures.js +4 -3
  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 +2 -14
  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 +9 -6
  69. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  70. package/dest/fixtures/l1_to_l2_messaging.js +44 -18
  71. package/dest/fixtures/logging.d.ts +1 -1
  72. package/dest/fixtures/setup_l1_contracts.d.ts +476 -5
  73. package/dest/fixtures/setup_l1_contracts.d.ts.map +1 -1
  74. package/dest/fixtures/setup_l1_contracts.js +4 -4
  75. package/dest/fixtures/setup_p2p_test.d.ts +15 -14
  76. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  77. package/dest/fixtures/setup_p2p_test.js +81 -21
  78. package/dest/fixtures/snapshot_manager.d.ts +17 -9
  79. package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
  80. package/dest/fixtures/snapshot_manager.js +147 -121
  81. package/dest/fixtures/token_utils.d.ts +10 -4
  82. package/dest/fixtures/token_utils.d.ts.map +1 -1
  83. package/dest/fixtures/token_utils.js +28 -12
  84. package/dest/fixtures/utils.d.ts +524 -40
  85. package/dest/fixtures/utils.d.ts.map +1 -1
  86. package/dest/fixtures/utils.js +464 -369
  87. package/dest/fixtures/web3signer.d.ts +5 -0
  88. package/dest/fixtures/web3signer.d.ts.map +1 -0
  89. package/dest/fixtures/web3signer.js +53 -0
  90. package/dest/fixtures/with_telemetry_utils.d.ts +1 -1
  91. package/dest/index.d.ts +1 -1
  92. package/dest/quality_of_service/alert_checker.d.ts +2 -2
  93. package/dest/quality_of_service/alert_checker.d.ts.map +1 -1
  94. package/dest/shared/cross_chain_test_harness.d.ts +39 -34
  95. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  96. package/dest/shared/cross_chain_test_harness.js +104 -50
  97. package/dest/shared/gas_portal_test_harness.d.ts +29 -31
  98. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  99. package/dest/shared/gas_portal_test_harness.js +51 -30
  100. package/dest/shared/index.d.ts +1 -1
  101. package/dest/shared/jest_setup.d.ts +1 -1
  102. package/dest/shared/jest_setup.js +1 -1
  103. package/dest/shared/submit-transactions.d.ts +6 -4
  104. package/dest/shared/submit-transactions.d.ts.map +1 -1
  105. package/dest/shared/submit-transactions.js +8 -7
  106. package/dest/shared/uniswap_l1_l2.d.ts +14 -12
  107. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  108. package/dest/shared/uniswap_l1_l2.js +146 -116
  109. package/dest/simulators/index.d.ts +1 -1
  110. package/dest/simulators/lending_simulator.d.ts +7 -11
  111. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  112. package/dest/simulators/lending_simulator.js +15 -16
  113. package/dest/simulators/token_simulator.d.ts +6 -3
  114. package/dest/simulators/token_simulator.d.ts.map +1 -1
  115. package/dest/simulators/token_simulator.js +16 -13
  116. package/dest/spartan/setup_test_wallets.d.ts +26 -11
  117. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  118. package/dest/spartan/setup_test_wallets.js +201 -58
  119. package/dest/spartan/utils.d.ts +116 -313
  120. package/dest/spartan/utils.d.ts.map +1 -1
  121. package/dest/spartan/utils.js +434 -130
  122. package/package.json +65 -58
  123. package/src/bench/client_flows/benchmark.ts +341 -0
  124. package/src/bench/client_flows/client_flows_benchmark.ts +447 -0
  125. package/src/bench/client_flows/config.ts +61 -0
  126. package/src/bench/client_flows/data_extractor.ts +89 -0
  127. package/src/bench/utils.ts +22 -76
  128. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +80 -77
  129. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +65 -106
  130. package/src/e2e_deploy_contract/deploy_test.ts +24 -39
  131. package/src/e2e_epochs/epochs_test.ts +276 -55
  132. package/src/e2e_fees/bridging_race.notest.ts +80 -0
  133. package/src/e2e_fees/fees_test.ts +142 -138
  134. package/src/e2e_l1_publisher/write_json.ts +77 -0
  135. package/src/e2e_multi_validator/utils.ts +258 -0
  136. package/src/e2e_nested_contract/nested_contract_test.ts +29 -19
  137. package/src/e2e_p2p/inactivity_slash_test.ts +182 -0
  138. package/src/e2e_p2p/p2p_network.ts +279 -169
  139. package/src/e2e_p2p/shared.ts +247 -29
  140. package/src/e2e_token_contract/token_contract_test.ts +43 -39
  141. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  142. package/src/{e2e_prover → fixtures}/e2e_prover_test.ts +107 -152
  143. package/src/fixtures/fixtures.ts +4 -3
  144. package/src/fixtures/get_acvm_config.ts +3 -11
  145. package/src/fixtures/get_bb_config.ts +18 -13
  146. package/src/fixtures/l1_to_l2_messaging.ts +53 -23
  147. package/src/fixtures/setup_l1_contracts.ts +6 -7
  148. package/src/fixtures/setup_p2p_test.ts +126 -38
  149. package/src/fixtures/snapshot_manager.ts +187 -139
  150. package/src/fixtures/token_utils.ts +32 -15
  151. package/src/fixtures/utils.ts +580 -434
  152. package/src/fixtures/web3signer.ts +63 -0
  153. package/src/guides/up_quick_start.sh +7 -15
  154. package/src/quality_of_service/alert_checker.ts +1 -1
  155. package/src/shared/cross_chain_test_harness.ts +108 -79
  156. package/src/shared/gas_portal_test_harness.ts +59 -50
  157. package/src/shared/jest_setup.ts +1 -1
  158. package/src/shared/submit-transactions.ts +12 -8
  159. package/src/shared/uniswap_l1_l2.ts +181 -184
  160. package/src/simulators/lending_simulator.ts +14 -15
  161. package/src/simulators/token_simulator.ts +21 -13
  162. package/src/spartan/DEVELOP.md +121 -0
  163. package/src/spartan/setup_test_wallets.ts +251 -93
  164. package/src/spartan/utils.ts +490 -130
  165. package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
  166. package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
  167. package/dest/sample-dapp/connect.js +0 -12
  168. package/dest/sample-dapp/contracts.js +0 -10
  169. package/dest/sample-dapp/deploy.js +0 -35
  170. package/dest/sample-dapp/index.js +0 -98
  171. package/src/sample-dapp/connect.mjs +0 -16
  172. package/src/sample-dapp/contracts.mjs +0 -14
  173. package/src/sample-dapp/deploy.mjs +0 -40
  174. package/src/sample-dapp/index.mjs +0 -128
@@ -1,93 +1,115 @@
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 { GSEContract, MultiAdderArtifact, RollupContract, createL1TxUtilsFromViemWallet, deployL1Contract, getL1ContractsConfigEnvVars } from '@aztec/ethereum';
4
+ import { ChainMonitor } from '@aztec/ethereum/test';
5
+ import { EpochNumber } from '@aztec/foundation/branded-types';
6
+ import { SecretValue } from '@aztec/foundation/config';
6
7
  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';
8
+ import { retryUntil } from '@aztec/foundation/retry';
9
+ import { RollupAbi, SlasherAbi, TestERC20Abi } from '@aztec/l1-artifacts';
10
+ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
9
11
  import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
12
+ import { tryStop } from '@aztec/stdlib/interfaces/server';
13
+ import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
14
+ import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
10
15
  import { getGenesisValues } from '@aztec/world-state/testing';
11
16
  import getPort from 'get-port';
12
- import { getContract } from 'viem';
17
+ import { getAddress, getContract } from 'viem';
13
18
  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';
19
+ import { ATTESTER_PRIVATE_KEYS_START_INDEX, createValidatorConfig, generatePrivateKeys } from '../fixtures/setup_p2p_test.js';
15
20
  import { createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
16
- import { getPrivateKeyFromIndex } from '../fixtures/utils.js';
21
+ import { getPrivateKeyFromIndex, getSponsoredFPCAddress } from '../fixtures/utils.js';
17
22
  import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
18
23
  // Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
19
24
  const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
20
25
  const l1ContractsConfig = getL1ContractsConfigEnvVars();
21
26
  export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
22
- export const SHORTENED_BLOCK_TIME_CONFIG = {
27
+ export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
23
28
  aztecSlotDuration: 12,
24
- ethereumSlotDuration: 4
29
+ ethereumSlotDuration: 4,
30
+ aztecProofSubmissionWindow: 640
25
31
  };
26
32
  export class P2PNetworkTest {
33
+ testName;
27
34
  bootstrapNodeEnr;
28
35
  bootNodePort;
36
+ numberOfValidators;
29
37
  numberOfNodes;
30
38
  metricsPort;
31
39
  snapshotManager;
40
+ baseAccountPrivateKey;
32
41
  baseAccount;
33
42
  logger;
34
43
  monitor;
35
44
  ctx;
36
45
  attesterPrivateKeys;
37
46
  attesterPublicKeys;
38
- proposerPrivateKeys;
39
47
  peerIdPrivateKeys;
48
+ validators;
40
49
  deployedAccounts;
41
50
  prefilledPublicData;
42
51
  // The re-execution test needs a wallet and a spam contract
43
52
  wallet;
53
+ defaultAccountAddress;
44
54
  spamContract;
45
55
  bootstrapNode;
46
- cleanupInterval;
47
- gasUtils;
48
- constructor(testName, bootstrapNodeEnr, bootNodePort, numberOfNodes, initialValidatorConfig, // If set enable metrics collection
49
- metricsPort){
56
+ constructor(testName, bootstrapNodeEnr, bootNodePort, numberOfValidators, initialValidatorConfig, numberOfNodes = 0, // If set enable metrics collection
57
+ metricsPort, startProverNode, mockZkPassportVerifier){
58
+ this.testName = testName;
50
59
  this.bootstrapNodeEnr = bootstrapNodeEnr;
51
60
  this.bootNodePort = bootNodePort;
61
+ this.numberOfValidators = numberOfValidators;
52
62
  this.numberOfNodes = numberOfNodes;
53
63
  this.metricsPort = metricsPort;
54
64
  this.attesterPrivateKeys = [];
55
65
  this.attesterPublicKeys = [];
56
- this.proposerPrivateKeys = [];
57
66
  this.peerIdPrivateKeys = [];
67
+ this.validators = [];
58
68
  this.deployedAccounts = [];
59
69
  this.prefilledPublicData = [];
60
- this.cleanupInterval = undefined;
61
- this.gasUtils = undefined;
62
70
  this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
63
71
  // 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);
72
+ this.baseAccountPrivateKey = `0x${getPrivateKeyFromIndex(1).toString('hex')}`;
73
+ this.baseAccount = privateKeyToAccount(this.baseAccountPrivateKey);
74
+ this.attesterPrivateKeys = generatePrivateKeys(ATTESTER_PRIVATE_KEYS_START_INDEX + numberOfNodes, numberOfValidators);
67
75
  this.attesterPublicKeys = this.attesterPrivateKeys.map((privateKey)=>privateKeyToAccount(privateKey).address);
76
+ const zkPassportParams = ZkPassportProofParams.random();
68
77
  this.snapshotManager = createSnapshotManager(`e2e_p2p_network/${testName}`, process.env.E2E_DATA_PATH, {
69
78
  ...initialValidatorConfig,
70
79
  ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
71
80
  aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
72
81
  aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
73
- aztecProofSubmissionWindow: initialValidatorConfig.aztecProofSubmissionWindow ?? l1ContractsConfig.aztecProofSubmissionWindow,
82
+ aztecProofSubmissionEpochs: initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
83
+ slashingRoundSizeInEpochs: initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
84
+ slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
85
+ aztecTargetCommitteeSize: numberOfValidators,
74
86
  salt: 420,
75
87
  metricsPort: metricsPort,
76
- numberOfInitialFundedAccounts: 1
88
+ numberOfInitialFundedAccounts: 2,
89
+ startProverNode
77
90
  }, {
91
+ ...initialValidatorConfig,
78
92
  aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
93
+ slashingRoundSizeInEpochs: initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
94
+ slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
79
95
  ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
80
96
  aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
81
- aztecProofSubmissionWindow: initialValidatorConfig.aztecProofSubmissionWindow ?? l1ContractsConfig.aztecProofSubmissionWindow,
82
- initialValidators: []
97
+ aztecProofSubmissionEpochs: initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
98
+ aztecTargetCommitteeSize: numberOfValidators,
99
+ initialValidators: [],
100
+ zkPassportArgs: {
101
+ mockZkPassportVerifier,
102
+ zkPassportDomain: zkPassportParams.domain,
103
+ zkPassportScope: zkPassportParams.scope
104
+ }
83
105
  });
84
106
  }
85
- static async create({ testName, numberOfNodes, basePort, metricsPort, initialConfig }) {
107
+ static async create({ testName, numberOfNodes, numberOfValidators, basePort, metricsPort, initialConfig, startProverNode, mockZkPassportVerifier }) {
86
108
  const port = basePort || await getPort();
87
109
  const bootstrapNodeENR = await getBootstrapNodeEnr(BOOTSTRAP_NODE_PRIVATE_KEY, port);
88
110
  const bootstrapNodeEnr = bootstrapNodeENR.encodeTxt();
89
111
  const initialValidatorConfig = await createValidatorConfig(initialConfig ?? {}, bootstrapNodeEnr);
90
- return new P2PNetworkTest(testName, bootstrapNodeEnr, port, numberOfNodes, initialValidatorConfig, metricsPort);
112
+ return new P2PNetworkTest(testName, bootstrapNodeEnr, port, numberOfValidators, initialValidatorConfig, numberOfNodes, metricsPort, startProverNode, mockZkPassportVerifier);
91
113
  }
92
114
  get fundedAccount() {
93
115
  if (!this.deployedAccounts[0]) {
@@ -95,110 +117,94 @@ export class P2PNetworkTest {
95
117
  }
96
118
  return this.deployedAccounts[0];
97
119
  }
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() {
120
+ async addBootstrapNode() {
123
121
  await this.snapshotManager.snapshot('add-bootstrap-node', async ({ aztecNodeConfig })=>{
124
122
  const telemetry = getEndToEndTestTelemetryClient(this.metricsPort);
125
123
  this.bootstrapNode = await createBootstrapNodeFromPrivateKey(BOOTSTRAP_NODE_PRIVATE_KEY, this.bootNodePort, telemetry, aztecNodeConfig);
126
124
  // Overwrite enr with updated info
127
125
  this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
128
126
  });
129
- await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, aztecNodeConfig, dateProvider })=>{
127
+ }
128
+ getValidators() {
129
+ const validators = [];
130
+ for(let i = 0; i < this.numberOfValidators; i++){
131
+ const keyIndex = i;
132
+ const attester = privateKeyToAccount(this.attesterPrivateKeys[keyIndex]);
133
+ validators.push({
134
+ attester: EthAddress.fromString(attester.address),
135
+ withdrawer: EthAddress.fromString(attester.address),
136
+ bn254SecretKey: new SecretValue(Fr.random().toBigInt())
137
+ });
138
+ this.logger.info(`Adding attester ${attester.address} as validator`);
139
+ }
140
+ return {
141
+ validators
142
+ };
143
+ }
144
+ async applyBaseSnapshots() {
145
+ await this.addBootstrapNode();
146
+ await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes })=>{
130
147
  const rollup = getContract({
131
148
  address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
132
149
  abi: RollupAbi,
133
- client: deployL1ContractsValues.walletClient
150
+ client: deployL1ContractsValues.l1Client
134
151
  });
135
- this.logger.verbose(`Adding ${this.numberOfNodes} validators`);
152
+ this.logger.info(`Adding ${this.numberOfValidators} validators`);
136
153
  const stakingAsset = getContract({
137
154
  address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
138
155
  abi: TestERC20Abi,
139
- client: deployL1ContractsValues.walletClient
156
+ client: deployL1ContractsValues.l1Client
157
+ });
158
+ const { address: multiAdderAddress } = await deployL1Contract(deployL1ContractsValues.l1Client, MultiAdderArtifact.contractAbi, MultiAdderArtifact.contractBytecode, [
159
+ rollup.address,
160
+ deployL1ContractsValues.l1Client.account.address
161
+ ]);
162
+ const multiAdder = getContract({
163
+ address: multiAdderAddress.toString(),
164
+ abi: MultiAdderArtifact.contractAbi,
165
+ client: deployL1ContractsValues.l1Client
140
166
  });
141
- const stakeNeeded = l1ContractsConfig.minimumStake * BigInt(this.numberOfNodes);
167
+ const stakeNeeded = await rollup.read.getActivationThreshold() * BigInt(this.numberOfValidators);
142
168
  await Promise.all([
143
169
  await stakingAsset.write.mint([
144
- deployL1ContractsValues.walletClient.account.address,
145
- stakeNeeded
146
- ], {}),
147
- await stakingAsset.write.approve([
148
- deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
170
+ multiAdder.address,
149
171
  stakeNeeded
150
172
  ], {})
151
- ].map((txHash)=>deployL1ContractsValues.publicClient.waitForTransactionReceipt({
173
+ ].map((txHash)=>deployL1ContractsValues.l1Client.waitForTransactionReceipt({
152
174
  hash: txHash
153
175
  })));
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`);
176
+ const { validators } = this.getValidators();
177
+ this.validators = validators;
178
+ const gseAddress = deployL1ContractsValues.l1ContractAddresses.gseAddress;
179
+ if (!gseAddress) {
180
+ throw new Error('GSE contract not deployed');
168
181
  }
169
- await deployL1ContractsValues.publicClient.waitForTransactionReceipt({
170
- hash: await rollup.write.cheat__InitialiseValidatorSet([
171
- validators
182
+ const gseContract = new GSEContract(deployL1ContractsValues.l1Client, gseAddress.toString());
183
+ const makeValidatorTuples = async (validator)=>{
184
+ const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
185
+ return {
186
+ attester: validator.attester.toString(),
187
+ withdrawer: validator.withdrawer.toString(),
188
+ ...registrationTuple
189
+ };
190
+ };
191
+ const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
192
+ await deployL1ContractsValues.l1Client.waitForTransactionReceipt({
193
+ hash: await multiAdder.write.addValidators([
194
+ validatorTuples
172
195
  ])
173
196
  });
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
- }
197
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber.fromBigInt(BigInt(await cheatCodes.rollup.getEpoch()) + await rollup.read.getLagInEpochsForValidatorSet() + 1n));
184
198
  // 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);
199
+ await this._sendDummyTx(deployL1ContractsValues.l1Client);
195
200
  });
196
201
  }
197
202
  async setupAccount() {
198
- await this.snapshotManager.snapshot('setup-account', deployAccounts(1, this.logger, false), async ({ deployedAccounts }, { pxe })=>{
203
+ await this.snapshotManager.snapshot('setup-account', deployAccounts(1, this.logger), ({ deployedAccounts }, { wallet })=>{
199
204
  this.deployedAccounts = deployedAccounts;
200
- const [account] = deployedAccounts;
201
- this.wallet = await getSchnorrWalletWithSecretKey(pxe, account.secret, account.signingKey, account.salt);
205
+ [{ address: this.defaultAccountAddress }] = deployedAccounts;
206
+ this.wallet = wallet;
207
+ return Promise.resolve();
202
208
  });
203
209
  }
204
210
  async deploySpamContract() {
@@ -206,46 +212,53 @@ export class P2PNetworkTest {
206
212
  if (!this.wallet) {
207
213
  throw new Error('Call snapshot t.setupAccount before deploying account contract');
208
214
  }
209
- const spamContract = await SpamContract.deploy(this.wallet).send().deployed();
215
+ const spamContract = await SpamContract.deploy(this.wallet).send({
216
+ from: this.defaultAccountAddress
217
+ }).deployed();
210
218
  return {
211
219
  contractAddress: spamContract.address
212
220
  };
213
- }, async ({ contractAddress })=>{
221
+ }, ({ contractAddress })=>{
214
222
  if (!this.wallet) {
215
223
  throw new Error('Call snapshot t.setupAccount before deploying account contract');
216
224
  }
217
- this.spamContract = await SpamContract.at(contractAddress, this.wallet);
225
+ this.spamContract = SpamContract.at(contractAddress, this.wallet);
226
+ return Promise.resolve();
218
227
  });
219
228
  }
220
229
  async removeInitialNode() {
221
- await this.snapshotManager.snapshot('remove-inital-validator', async ({ deployL1ContractsValues, aztecNode, dateProvider })=>{
230
+ await this.snapshotManager.snapshot('remove-initial-validator', async ({ deployL1ContractsValues, aztecNode, dateProvider })=>{
222
231
  // 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({
232
+ const { receipt } = await this._sendDummyTx(deployL1ContractsValues.l1Client);
233
+ const block = await deployL1ContractsValues.l1Client.getBlock({
231
234
  blockNumber: receipt.blockNumber
232
235
  });
233
236
  dateProvider.setTime(Number(block.timestamp) * 1000);
234
237
  await aztecNode.stop();
235
238
  });
236
239
  }
240
+ async sendDummyTx() {
241
+ return await this._sendDummyTx(this.ctx.deployL1ContractsValues.l1Client);
242
+ }
243
+ async _sendDummyTx(l1Client) {
244
+ const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client);
245
+ return await l1TxUtils.sendAndMonitorTransaction({
246
+ to: l1Client.account.address,
247
+ value: 1n
248
+ });
249
+ }
237
250
  async setup() {
238
251
  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();
252
+ const sponsoredFPCAddress = await getSponsoredFPCAddress();
253
+ const initialFundedAccounts = [
254
+ ...this.ctx.initialFundedAccounts.map((a)=>a.address),
255
+ sponsoredFPCAddress
256
+ ];
257
+ const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
258
+ this.prefilledPublicData = prefilledPublicData;
259
+ const rollupContract = RollupContract.getFromL1ContractsValues(this.ctx.deployL1ContractsValues);
260
+ this.monitor = new ChainMonitor(rollupContract, this.ctx.dateProvider).start();
261
+ this.monitor.on('l1-block', ({ timestamp })=>this.ctx.dateProvider.setTime(Number(timestamp) * 1000));
249
262
  }
250
263
  async stopNodes(nodes) {
251
264
  this.logger.info('Stopping nodes');
@@ -256,12 +269,52 @@ export class P2PNetworkTest {
256
269
  await Promise.all(nodes.map((node)=>node.stop()));
257
270
  this.logger.info('Nodes stopped');
258
271
  }
272
+ /**
273
+ * Wait for P2P mesh to be fully formed across all nodes.
274
+ * This ensures that all nodes are connected to each other before proceeding,
275
+ * preventing race conditions where validators propose blocks before the network is ready.
276
+ *
277
+ * @param nodes - Array of nodes to check for P2P connectivity
278
+ * @param expectedNodeCount - Expected number of nodes in the network (defaults to nodes.length)
279
+ * @param timeoutSeconds - Maximum time to wait for connections (default: 30 seconds)
280
+ * @param checkIntervalSeconds - How often to check connectivity (default: 0.1 seconds)
281
+ */ async waitForP2PMeshConnectivity(nodes, expectedNodeCount, timeoutSeconds = 30, checkIntervalSeconds = 0.1) {
282
+ const nodeCount = expectedNodeCount ?? nodes.length;
283
+ const minPeerCount = nodeCount - 1;
284
+ this.logger.warn(`Waiting for all ${nodeCount} nodes to connect to P2P mesh (at least ${minPeerCount} peers each)...`);
285
+ await Promise.all(nodes.map(async (node, index)=>{
286
+ const p2p = node.getP2P();
287
+ await retryUntil(async ()=>{
288
+ const peers = await p2p.getPeers();
289
+ // Each node should be connected to at least N-1 other nodes
290
+ return peers.length >= minPeerCount ? true : undefined;
291
+ }, `Node ${index} to connect to at least ${minPeerCount} peers`, timeoutSeconds, checkIntervalSeconds);
292
+ }));
293
+ this.logger.warn('All nodes connected to P2P mesh');
294
+ }
259
295
  async teardown() {
260
- this.monitor.stop();
261
- await this.bootstrapNode?.stop();
296
+ await this.monitor.stop();
297
+ await tryStop(this.bootstrapNode, this.logger);
262
298
  await this.snapshotManager.teardown();
263
- if (this.cleanupInterval) {
264
- clearInterval(this.cleanupInterval);
299
+ }
300
+ async getContracts() {
301
+ if (!this.ctx.deployL1ContractsValues) {
302
+ throw new Error('DeployL1ContractsValues not set');
265
303
  }
304
+ const rollup = new RollupContract(this.ctx.deployL1ContractsValues.l1Client, this.ctx.deployL1ContractsValues.l1ContractAddresses.rollupAddress);
305
+ const slasherContract = getContract({
306
+ address: getAddress(await rollup.getSlasherAddress()),
307
+ abi: SlasherAbi,
308
+ client: this.ctx.deployL1ContractsValues.l1Client
309
+ });
310
+ // Get the actual slashing proposer from rollup (which handles both empire and tally)
311
+ const slashingProposer = await rollup.getSlashingProposer();
312
+ const slashFactory = new SlashFactoryContract(this.ctx.deployL1ContractsValues.l1Client, getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress.toString()));
313
+ return {
314
+ rollup,
315
+ slasherContract,
316
+ slashingProposer,
317
+ slashFactory
318
+ };
266
319
  }
267
320
  }
@@ -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';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX3AycC9zaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQThDLE1BQU0sMkJBQTJCLENBQUM7QUFFcEcsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEVBQUUsRUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsOEJBQThCLEVBQUUsY0FBYyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLckgsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFJdkUsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU12RSxlQUFPLE1BQU0sa0JBQWtCOzt1QkEyQjlCLENBQUM7QUFHRixlQUFPLE1BQU0sa0JBQWtCLGtIQVc5QixDQUFDO0FBRUYsd0JBQXNCLG1CQUFtQixDQUN2QyxNQUFNLEVBQUUsTUFBTSxFQUNkLElBQUksRUFBRSxnQkFBZ0IsRUFDdEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxhQUFhLEVBQUUsa0JBQWtCLEdBQ2hDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQXFCZjtBQUVELHdCQUFnQixzQkFBc0IsQ0FDcEMsZ0JBQWdCLEVBQUUsOEJBQThCLEdBQUcsNkJBQTZCLEVBQ2hGLGNBQWMsRUFBRSxNQUFNLEVBQ3RCLE1BQU0sRUFBRSxNQUFNLEdBQ2IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQTBCakI7QUFFRCx3QkFBc0Isb0JBQW9CLENBQUMsRUFDekMsTUFBTSxFQUNOLE1BQU0sRUFDUCxFQUFFO0lBQ0QsTUFBTSxFQUFFLGNBQWMsQ0FBQztJQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDO0NBQ2hCLEdBQUcsT0FBTyxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBWXBDO0FBRUQsd0JBQXNCLG9CQUFvQixDQUFDLEVBQ3pDLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsY0FBb0IsRUFDckIsRUFBRTtJQUNELFNBQVMsRUFBRSxjQUFjLENBQUM7SUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztJQUMxQixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLHFCQUFxQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQy9CLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUN6QiwrQ0FrQkE7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0Isb0JBQW9CLENBQUMsRUFDekMsTUFBTSxFQUNOLFVBQVUsRUFDVixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sWUFBWSxFQUNiLEVBQUU7SUFDRCxNQUFNLEVBQUUsY0FBYyxDQUFDO0lBQ3ZCLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQztJQUM3QixTQUFTLEVBQUUsU0FBUyxLQUFLLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDcEMsWUFBWSxFQUFFLG9CQUFvQixDQUFDO0lBQ25DLGdCQUFnQixFQUFFLDhCQUE4QixHQUFHLDZCQUE2QixHQUFHLFNBQVMsQ0FBQztJQUM3RixpQkFBaUIsRUFBRSxNQUFNLENBQUM7SUFDMUIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsWUFBWSxFQUFFLE1BQU0sQ0FBQztDQUN0QixpQkE2RUEifQ==
@@ -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,EAAE,8BAA8B,EAAE,cAAc,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAKrH,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"}