@aztec/end-to-end 0.0.1-commit.e3c1de76 → 0.0.1-commit.e588bc7e5

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 (192) hide show
  1. package/dest/bench/client_flows/client_flows_benchmark.d.ts +2 -2
  2. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/client_flows_benchmark.js +21 -28
  4. package/dest/bench/client_flows/config.d.ts +2 -2
  5. package/dest/bench/client_flows/config.d.ts.map +1 -1
  6. package/dest/bench/client_flows/config.js +18 -0
  7. package/dest/bench/utils.d.ts +1 -1
  8. package/dest/bench/utils.d.ts.map +1 -1
  9. package/dest/bench/utils.js +6 -3
  10. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +4 -2
  11. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  12. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +22 -12
  13. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +2 -2
  14. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  15. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +3 -2
  16. package/dest/e2e_deploy_contract/deploy_test.d.ts +2 -2
  17. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  18. package/dest/e2e_epochs/epochs_test.d.ts +11 -7
  19. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  20. package/dest/e2e_epochs/epochs_test.js +62 -34
  21. package/dest/e2e_fees/fees_test.d.ts +2 -2
  22. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  23. package/dest/e2e_fees/fees_test.js +18 -11
  24. package/dest/e2e_nested_contract/nested_contract_test.d.ts +1 -1
  25. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  26. package/dest/e2e_nested_contract/nested_contract_test.js +4 -6
  27. package/dest/e2e_p2p/inactivity_slash_test.js +1 -1
  28. package/dest/e2e_p2p/p2p_network.d.ts +5 -4
  29. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  30. package/dest/e2e_p2p/p2p_network.js +24 -7
  31. package/dest/e2e_p2p/reqresp/utils.d.ts +3 -3
  32. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
  33. package/dest/e2e_p2p/reqresp/utils.js +45 -8
  34. package/dest/e2e_p2p/shared.d.ts +22 -2
  35. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  36. package/dest/e2e_p2p/shared.js +38 -3
  37. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  38. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  39. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  40. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  41. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  42. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  43. package/dest/e2e_token_contract/token_contract_test.d.ts +4 -2
  44. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  45. package/dest/e2e_token_contract/token_contract_test.js +19 -9
  46. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  47. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  48. package/dest/fixtures/authwit_proxy.js +30 -0
  49. package/dest/fixtures/e2e_prover_test.d.ts +7 -6
  50. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  51. package/dest/fixtures/e2e_prover_test.js +36 -48
  52. package/dest/fixtures/elu_monitor.d.ts +21 -0
  53. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  54. package/dest/fixtures/elu_monitor.js +102 -0
  55. package/dest/fixtures/fixtures.d.ts +5 -1
  56. package/dest/fixtures/fixtures.d.ts.map +1 -1
  57. package/dest/fixtures/fixtures.js +6 -0
  58. package/dest/fixtures/get_bb_config.d.ts +1 -1
  59. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  60. package/dest/fixtures/get_bb_config.js +5 -5
  61. package/dest/fixtures/ha_setup.d.ts +71 -0
  62. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  63. package/dest/fixtures/ha_setup.js +116 -0
  64. package/dest/fixtures/index.d.ts +2 -1
  65. package/dest/fixtures/index.d.ts.map +1 -1
  66. package/dest/fixtures/index.js +1 -0
  67. package/dest/fixtures/setup.d.ts +44 -23
  68. package/dest/fixtures/setup.d.ts.map +1 -1
  69. package/dest/fixtures/setup.js +70 -156
  70. package/dest/fixtures/setup_p2p_test.d.ts +15 -7
  71. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  72. package/dest/fixtures/setup_p2p_test.js +18 -12
  73. package/dest/fixtures/token_utils.d.ts +2 -2
  74. package/dest/fixtures/token_utils.d.ts.map +1 -1
  75. package/dest/fixtures/token_utils.js +5 -7
  76. package/dest/shared/cross_chain_test_harness.d.ts +1 -1
  77. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  78. package/dest/shared/cross_chain_test_harness.js +13 -13
  79. package/dest/shared/gas_portal_test_harness.js +2 -2
  80. package/dest/shared/index.d.ts +2 -1
  81. package/dest/shared/index.d.ts.map +1 -1
  82. package/dest/shared/index.js +1 -0
  83. package/dest/shared/jest_setup.js +41 -1
  84. package/dest/shared/mock_state_view.d.ts +86 -0
  85. package/dest/shared/mock_state_view.d.ts.map +1 -0
  86. package/dest/shared/mock_state_view.js +186 -0
  87. package/dest/shared/submit-transactions.d.ts +2 -2
  88. package/dest/shared/submit-transactions.d.ts.map +1 -1
  89. package/dest/shared/submit-transactions.js +1 -1
  90. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  91. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  92. package/dest/shared/uniswap_l1_l2.js +16 -17
  93. package/dest/simulators/lending_simulator.d.ts +1 -1
  94. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  95. package/dest/simulators/lending_simulator.js +4 -4
  96. package/dest/simulators/token_simulator.d.ts +1 -1
  97. package/dest/simulators/token_simulator.d.ts.map +1 -1
  98. package/dest/simulators/token_simulator.js +3 -24
  99. package/dest/spartan/setup_test_wallets.d.ts +12 -3
  100. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  101. package/dest/spartan/setup_test_wallets.js +110 -18
  102. package/dest/spartan/tx_metrics.js +1 -1
  103. package/dest/spartan/utils/bot.d.ts +3 -2
  104. package/dest/spartan/utils/bot.d.ts.map +1 -1
  105. package/dest/spartan/utils/bot.js +2 -1
  106. package/dest/spartan/utils/config.d.ts +10 -1
  107. package/dest/spartan/utils/config.d.ts.map +1 -1
  108. package/dest/spartan/utils/config.js +4 -1
  109. package/dest/spartan/utils/index.d.ts +5 -3
  110. package/dest/spartan/utils/index.d.ts.map +1 -1
  111. package/dest/spartan/utils/index.js +5 -1
  112. package/dest/spartan/utils/k8s.d.ts +3 -1
  113. package/dest/spartan/utils/k8s.d.ts.map +1 -1
  114. package/dest/spartan/utils/k8s.js +6 -0
  115. package/dest/spartan/utils/nodes.d.ts +4 -5
  116. package/dest/spartan/utils/nodes.d.ts.map +1 -1
  117. package/dest/spartan/utils/nodes.js +9 -9
  118. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  119. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  120. package/dest/spartan/utils/pod_logs.js +74 -0
  121. package/dest/spartan/utils/scripts.d.ts +18 -4
  122. package/dest/spartan/utils/scripts.d.ts.map +1 -1
  123. package/dest/spartan/utils/scripts.js +19 -4
  124. package/dest/test-wallet/test_wallet.d.ts +76 -0
  125. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  126. package/dest/test-wallet/test_wallet.js +213 -0
  127. package/dest/test-wallet/utils.d.ts +41 -0
  128. package/dest/test-wallet/utils.d.ts.map +1 -0
  129. package/dest/test-wallet/utils.js +71 -0
  130. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  131. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  132. package/dest/test-wallet/wallet_worker_script.js +48 -0
  133. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  134. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  135. package/dest/test-wallet/worker_wallet.js +151 -0
  136. package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
  137. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  138. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  139. package/package.json +45 -43
  140. package/src/bench/client_flows/client_flows_benchmark.ts +30 -17
  141. package/src/bench/client_flows/config.ts +9 -1
  142. package/src/bench/utils.ts +8 -3
  143. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +28 -15
  144. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +7 -8
  145. package/src/e2e_deploy_contract/deploy_test.ts +3 -3
  146. package/src/e2e_epochs/epochs_test.ts +83 -61
  147. package/src/e2e_fees/bridging_race.notest.ts +1 -1
  148. package/src/e2e_fees/fees_test.ts +20 -28
  149. package/src/e2e_nested_contract/nested_contract_test.ts +7 -5
  150. package/src/e2e_p2p/inactivity_slash_test.ts +5 -5
  151. package/src/e2e_p2p/p2p_network.ts +36 -10
  152. package/src/e2e_p2p/reqresp/utils.ts +61 -12
  153. package/src/e2e_p2p/shared.ts +58 -3
  154. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  155. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  156. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  157. package/src/e2e_token_contract/token_contract_test.ts +26 -9
  158. package/src/fixtures/authwit_proxy.ts +50 -0
  159. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  160. package/src/fixtures/e2e_prover_test.ts +42 -54
  161. package/src/fixtures/elu_monitor.ts +126 -0
  162. package/src/fixtures/fixtures.ts +10 -0
  163. package/src/fixtures/get_bb_config.ts +7 -6
  164. package/src/fixtures/ha_setup.ts +186 -0
  165. package/src/fixtures/index.ts +1 -0
  166. package/src/fixtures/setup.ts +106 -217
  167. package/src/fixtures/setup_p2p_test.ts +25 -24
  168. package/src/fixtures/token_utils.ts +3 -3
  169. package/src/guides/up_quick_start.sh +3 -3
  170. package/src/shared/cross_chain_test_harness.ts +13 -9
  171. package/src/shared/gas_portal_test_harness.ts +1 -1
  172. package/src/shared/index.ts +1 -0
  173. package/src/shared/jest_setup.ts +51 -1
  174. package/src/shared/mock_state_view.ts +188 -0
  175. package/src/shared/submit-transactions.ts +3 -2
  176. package/src/shared/uniswap_l1_l2.ts +38 -33
  177. package/src/simulators/lending_simulator.ts +8 -4
  178. package/src/simulators/token_simulator.ts +6 -30
  179. package/src/spartan/setup_test_wallets.ts +148 -13
  180. package/src/spartan/tx_metrics.ts +1 -1
  181. package/src/spartan/utils/bot.ts +4 -1
  182. package/src/spartan/utils/config.ts +3 -0
  183. package/src/spartan/utils/index.ts +8 -1
  184. package/src/spartan/utils/k8s.ts +8 -0
  185. package/src/spartan/utils/nodes.ts +15 -10
  186. package/src/spartan/utils/pod_logs.ts +99 -0
  187. package/src/spartan/utils/scripts.ts +43 -7
  188. package/src/test-wallet/test_wallet.ts +301 -0
  189. package/src/test-wallet/utils.ts +112 -0
  190. package/src/test-wallet/wallet_worker_script.ts +60 -0
  191. package/src/test-wallet/worker_wallet.ts +213 -0
  192. package/src/test-wallet/worker_wallet_schema.ts +13 -0
@@ -0,0 +1,186 @@
1
+ import { EthAddress } from '@aztec/aztec.js/addresses';
2
+ import { Fr } from '@aztec/aztec.js/fields';
3
+ import type { Logger } from '@aztec/aztec.js/log';
4
+ import { SecretValue } from '@aztec/foundation/config';
5
+
6
+ import { Pool } from 'pg';
7
+ import { privateKeyToAccount } from 'viem/accounts';
8
+
9
+ /**
10
+ * Configuration for HA database connection
11
+ */
12
+ export interface HADatabaseConfig {
13
+ /** PostgreSQL connection URL */
14
+ databaseUrl: string;
15
+ /** Node ID for HA coordination */
16
+ nodeId: string;
17
+ /** Enable HA signing */
18
+ haSigningEnabled: boolean;
19
+ /** Polling interval in ms */
20
+ pollingIntervalMs: number;
21
+ /** Signing timeout in ms */
22
+ signingTimeoutMs: number;
23
+ /** Max stuck duties age in ms */
24
+ maxStuckDutiesAgeMs: number;
25
+ }
26
+
27
+ /**
28
+ * Get database configuration from environment variables
29
+ */
30
+ export function createHADatabaseConfig(nodeId: string): HADatabaseConfig {
31
+ const databaseUrl = process.env.DATABASE_URL || 'postgresql://aztec:aztec@localhost:5432/aztec_ha_test';
32
+
33
+ return {
34
+ databaseUrl,
35
+ nodeId,
36
+ haSigningEnabled: true,
37
+ pollingIntervalMs: 100,
38
+ signingTimeoutMs: 3000,
39
+ maxStuckDutiesAgeMs: 72000,
40
+ };
41
+ }
42
+
43
+ /**
44
+ * Setup PostgreSQL database connection pool for HA tests
45
+ *
46
+ * Note: Database migrations should be run separately before starting tests,
47
+ * either via docker-compose entrypoint or manually with: aztec migrate-ha-db up
48
+ */
49
+ export function setupHADatabase(databaseUrl: string, logger?: Logger): Pool {
50
+ try {
51
+ // Create connection pool for test usage
52
+ // Migrations are already run by docker-compose entrypoint before tests start
53
+ const pool = new Pool({ connectionString: databaseUrl });
54
+
55
+ logger?.info('Connected to HA database (migrations should already be applied)');
56
+
57
+ return pool;
58
+ } catch (error) {
59
+ logger?.error(`Failed to connect to HA database: ${error}`);
60
+ throw error;
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Clean up HA database - drop all tables
66
+ * Use this between tests to ensure clean state
67
+ */
68
+ export async function cleanupHADatabase(pool: Pool, logger?: Logger): Promise<void> {
69
+ try {
70
+ // Drop all HA tables
71
+ await pool.query('DROP TABLE IF EXISTS validator_duties CASCADE');
72
+ await pool.query('DROP TABLE IF EXISTS schema_version CASCADE');
73
+ // Drop migration tracking table (node-pg-migrate uses 'pgmigrations' by default)
74
+ // This ensures migrations will run fresh on next startup
75
+ await pool.query('DROP TABLE IF EXISTS pgmigrations CASCADE');
76
+
77
+ logger?.info('HA database cleaned up successfully');
78
+ } catch (error) {
79
+ logger?.error(`Failed to cleanup HA database: ${error}`);
80
+ throw error;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Query validator duties from the database
86
+ */
87
+ export async function getValidatorDuties(
88
+ pool: Pool,
89
+ slot: bigint,
90
+ dutyType?: 'ATTESTATION' | 'BLOCK_PROPOSAL' | 'GOVERNANCE_VOTE' | 'SLASHING_VOTE',
91
+ ): Promise<
92
+ Array<{
93
+ slot: string;
94
+ dutyType: string;
95
+ validatorAddress: string;
96
+ nodeId: string;
97
+ startedAt: Date;
98
+ completedAt: Date | undefined;
99
+ }>
100
+ > {
101
+ const query = dutyType
102
+ ? 'SELECT slot, duty_type, validator_address, node_id, started_at, completed_at FROM validator_duties WHERE slot = $1 AND duty_type = $2 ORDER BY started_at'
103
+ : 'SELECT slot, duty_type, validator_address, node_id, started_at, completed_at FROM validator_duties WHERE slot = $1 ORDER BY started_at';
104
+
105
+ const params = dutyType ? [slot.toString(), dutyType] : [slot.toString()];
106
+
107
+ const result = await pool.query<{
108
+ slot: string;
109
+ duty_type: string;
110
+ validator_address: string;
111
+ node_id: string;
112
+ started_at: Date;
113
+ completed_at: Date | undefined;
114
+ }>(query, params);
115
+
116
+ return result.rows.map(row => ({
117
+ slot: row.slot,
118
+ dutyType: row.duty_type,
119
+ validatorAddress: row.validator_address,
120
+ nodeId: row.node_id,
121
+ startedAt: row.started_at,
122
+ completedAt: row.completed_at,
123
+ }));
124
+ }
125
+
126
+ /**
127
+ * Convert private keys to Ethereum addresses
128
+ */
129
+ export function getAddressesFromPrivateKeys(privateKeys: `0x${string}`[]): string[] {
130
+ return privateKeys.map(pk => {
131
+ const account = privateKeyToAccount(pk);
132
+ return account.address;
133
+ });
134
+ }
135
+
136
+ /**
137
+ * Create initial validators from private keys for L1 contract deployment
138
+ */
139
+ export function createInitialValidatorsFromPrivateKeys(attesterPrivateKeys: `0x${string}`[]): Array<{
140
+ attester: EthAddress;
141
+ withdrawer: EthAddress;
142
+ privateKey: `0x${string}`;
143
+ bn254SecretKey: SecretValue<bigint>;
144
+ }> {
145
+ return attesterPrivateKeys.map(pk => {
146
+ const account = privateKeyToAccount(pk);
147
+ return {
148
+ attester: EthAddress.fromString(account.address),
149
+ withdrawer: EthAddress.fromString(account.address),
150
+ privateKey: pk,
151
+ bn254SecretKey: new SecretValue(Fr.random().toBigInt()),
152
+ };
153
+ });
154
+ }
155
+
156
+ /**
157
+ * Verify no duplicate attestations per validator (HA coordination check)
158
+ * Groups duties by validator address and verifies each validator attested exactly once
159
+ */
160
+ export function verifyNoDuplicateAttestations(
161
+ attestationDuties: Array<{
162
+ validatorAddress: string;
163
+ nodeId: string;
164
+ completedAt: Date | undefined;
165
+ }>,
166
+ logger?: Logger,
167
+ ): Map<string, typeof attestationDuties> {
168
+ const dutiesByValidator = new Map<string, typeof attestationDuties>();
169
+ for (const duty of attestationDuties) {
170
+ const existing = dutiesByValidator.get(duty.validatorAddress) || [];
171
+ existing.push(duty);
172
+ dutiesByValidator.set(duty.validatorAddress, existing);
173
+ }
174
+
175
+ for (const [validatorAddress, validatorDuties] of dutiesByValidator.entries()) {
176
+ if (validatorDuties.length !== 1) {
177
+ throw new Error(`Validator ${validatorAddress} attested ${validatorDuties.length} times (expected exactly once)`);
178
+ }
179
+ if (!validatorDuties[0].completedAt) {
180
+ throw new Error(`Validator ${validatorAddress} attestation duty not completed`);
181
+ }
182
+ logger?.info(`Validator ${validatorAddress} attested once via node ${validatorDuties[0].nodeId}`);
183
+ }
184
+
185
+ return dutiesByValidator;
186
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './fixtures.js';
2
+ export * from './ha_setup.js';
2
3
  export * from './logging.js';
3
4
  export * from './utils.js';
4
5
  export * from './token_utils.js';