@@ -257,3 +257,116 @@ def run_test_full_random_operations(spec, state, rng=Random(2080)):
257
257
258
258
yield 'blocks' , [signed_block ]
259
259
yield 'post' , state
260
+
261
+
262
+ def get_random_execution_requests (spec , state , rng ):
263
+ deposits = get_random_deposits_requests (spec , state , rng )
264
+ withdrawals = get_random_withdrawals_requests (spec , state , rng )
265
+ consolidations = get_random_consolidations_requests (spec , state , rng )
266
+
267
+ execution_requests = spec .ExecutionRequests (
268
+ deposits = deposits ,
269
+ withdrawals = withdrawals ,
270
+ consolidations = consolidations
271
+ )
272
+
273
+ return execution_requests
274
+
275
+
276
+ def get_random_deposits_requests (spec , state , rng , num_deposits = None ):
277
+ if num_deposits is None :
278
+ num_deposits = rng .randint (0 , spec .MAX_DEPOSIT_REQUESTS_PER_PAYLOAD )
279
+
280
+ deposit_data_leaves = [spec .DepositData () for _ in range (len (state .validators ))]
281
+
282
+ deposits_requests = []
283
+
284
+ for i in range (num_deposits ):
285
+ index = rng .randrange (0 , num_deposits )
286
+ withdrawal_pubkey = pubkeys [index ]
287
+ withdrawal_credentials = spec .BLS_WITHDRAWAL_PREFIX + spec .hash (withdrawal_pubkey )[1 :]
288
+
289
+ deposit , _ , _ = build_deposit (
290
+ spec ,
291
+ deposit_data_leaves ,
292
+ pubkeys [index ],
293
+ privkeys [index ],
294
+ rng .randint (spec .EFFECTIVE_BALANCE_INCREMENT , 2 * spec .MAX_EFFECTIVE_BALANCE_ELECTRA ),
295
+ withdrawal_credentials = withdrawal_credentials ,
296
+ signed = True ,
297
+ )
298
+
299
+ deposit_request = spec .DepositRequest (
300
+ pubkey = deposit .data .pubkey ,
301
+ withdrawal_credentials = deposit .data .withdrawal_credentials ,
302
+ amount = deposit .data .amount ,
303
+ signature = deposit .data .signature ,
304
+ index = deposit .data .index ,
305
+ )
306
+
307
+ deposits_requests .append (deposit_request )
308
+
309
+ return deposits_requests
310
+
311
+
312
+ def get_random_withdrawals_requests (spec , state , rng , num_withdrawals = None ):
313
+ if num_withdrawals is None :
314
+ num_withdrawals = rng .randint (0 , spec .MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD )
315
+
316
+ withdrawals_requests = []
317
+
318
+ state .slot += spec .config .SHARD_COMMITTEE_PERIOD * spec .SLOTS_PER_EPOCH
319
+
320
+ current_epoch = spec .get_current_epoch (state )
321
+ active_validator_indices = spec .get_active_validator_indices (state , current_epoch )
322
+
323
+ for _ in range (num_withdrawals ):
324
+ if not active_validator_indices :
325
+ break
326
+
327
+ address = rng .getrandbits (160 ).to_bytes (20 , 'big' )
328
+
329
+ validator_index = rng .choice (active_validator_indices )
330
+ validator = state .validators [validator_index ]
331
+ validator_balance = state .balances [validator_index ]
332
+
333
+ withdrawal_request = spec .WithdrawalRequest (
334
+ source_address = address ,
335
+ validator_pubkey = validator .pubkey ,
336
+ amount = rng .randint (0 , validator_balance ),
337
+ )
338
+
339
+ withdrawals_requests .append (withdrawal_request )
340
+
341
+ return withdrawals_requests
342
+
343
+
344
+ def get_random_consolidations_requests (spec , state , rng , num_consolidations = None ):
345
+ if num_consolidations is None :
346
+ num_consolidations = rng .randint (0 , spec .MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD )
347
+
348
+ consolidations_requests = []
349
+
350
+ state .slot += spec .config .SHARD_COMMITTEE_PERIOD * spec .SLOTS_PER_EPOCH
351
+
352
+ current_epoch = spec .get_current_epoch (state )
353
+ active_validator_indices = spec .get_active_validator_indices (state , current_epoch )
354
+
355
+ for _ in range (num_consolidations ):
356
+ source_address = rng .getrandbits (160 ).to_bytes (20 , 'big' )
357
+
358
+ source_index = rng .choice (active_validator_indices )
359
+ target_index = rng .choice (active_validator_indices )
360
+
361
+ source_validator = state .validators [source_index ]
362
+ target_validator = state .validators [target_index ]
363
+
364
+ consolidation_request = spec .ConsolidationRequest (
365
+ source_address = source_address ,
366
+ source_pubkey = source_validator .pubkey ,
367
+ target_pubkey = target_validator .pubkey ,
368
+ )
369
+
370
+ consolidations_requests .append (consolidation_request )
371
+
372
+ return consolidations_requests
0 commit comments