@@ -240,6 +240,37 @@ where
240
240
}
241
241
}
242
242
243
+ /// Precompute all signers single signatures for the given fixture
244
+ pub async fn precompute_mithril_stake_distribution_signatures (
245
+ signers_fixture : & MithrilFixture ,
246
+ timeout : Duration ,
247
+ ) -> StdResult < Vec < SingleSignatures > > {
248
+ spin_while_waiting ! (
249
+ {
250
+ let signers_fixture = signers_fixture. clone( ) ;
251
+ let signatures = tokio:: task:: spawn_blocking( move || -> Vec <SingleSignatures > {
252
+ let mithril_stake_distribution_message = {
253
+ let mut message = ProtocolMessage :: new( ) ;
254
+ message. set_message_part(
255
+ mithril_common:: entities:: ProtocolMessagePartKey :: NextAggregateVerificationKey ,
256
+ signers_fixture. compute_and_encode_avk( ) ,
257
+ ) ;
258
+
259
+ message
260
+ } ;
261
+
262
+ signers_fixture. sign_all( & mithril_stake_distribution_message)
263
+ } )
264
+ . await ?;
265
+
266
+ Ok ( signatures)
267
+ } ,
268
+ timeout,
269
+ format!( "Precompute signatures for MithrilStakeDistribution signed entity" ) ,
270
+ format!( "Precomputing signatures timeout after {timeout:?}" )
271
+ )
272
+ }
273
+
243
274
/// Wait for certificates
244
275
pub async fn wait_for_certificates (
245
276
aggregator : & Aggregator ,
@@ -291,15 +322,17 @@ pub async fn register_signers_to_aggregator(
291
322
Some ( register_messages. len ( ) as u64 ) ,
292
323
ProgressDrawTarget :: stdout ( ) ,
293
324
) ;
325
+
326
+ let http_client = reqwest:: Client :: new ( ) ;
327
+
294
328
for register in register_messages {
295
329
let endpoint = aggregator. endpoint ( ) ;
330
+ let http_request = http_client
331
+ . post ( format ! ( "{}/register-signer" , endpoint) )
332
+ . json ( & register) ;
333
+
296
334
join_set. spawn ( async move {
297
- let response = reqwest:: Client :: new ( )
298
- . post ( format ! ( "{}/register-signer" , endpoint) )
299
- . json ( & register)
300
- . send ( )
301
- . await
302
- . unwrap ( ) ;
335
+ let response = http_request. send ( ) . await . unwrap ( ) ;
303
336
304
337
match response. status ( ) {
305
338
StatusCode :: CREATED => Ok ( ( ) ) ,
@@ -340,15 +373,17 @@ pub async fn register_signatures_to_aggregator(
340
373
Some ( register_messages. len ( ) as u64 ) ,
341
374
ProgressDrawTarget :: stdout ( ) ,
342
375
) ;
376
+
377
+ let http_client = reqwest:: Client :: new ( ) ;
378
+
343
379
for register in register_messages {
344
380
let endpoint = aggregator. endpoint ( ) ;
381
+ let http_request = http_client
382
+ . post ( format ! ( "{}/register-signatures" , endpoint) )
383
+ . json ( & register) ;
384
+
345
385
join_set. spawn ( async move {
346
- let response = reqwest:: Client :: new ( )
347
- . post ( format ! ( "{}/register-signatures" , endpoint) )
348
- . json ( & register)
349
- . send ( )
350
- . await
351
- . unwrap ( ) ;
386
+ let response = http_request. send ( ) . await . unwrap ( ) ;
352
387
353
388
match response. status ( ) {
354
389
StatusCode :: CREATED => Ok ( ( ) ) ,
@@ -522,13 +557,6 @@ async fn bootstrap_aggregator(
522
557
signers_fixture : & MithrilFixture ,
523
558
current_epoch : & mut Epoch ,
524
559
) -> StdResult < Aggregator > {
525
- // let genesis_signers = {
526
- // let mut signers = signers_fixture.signers();
527
- // // Up to 100 signers for the genesis certificate to avoid registration round errors
528
- // signers.truncate(100);
529
- // signers
530
- // };
531
-
532
560
info ! ( ">> Launch Aggregator" ) ;
533
561
let mut aggregator = Aggregator :: new (
534
562
args. server_port as u64 ,
@@ -616,34 +644,23 @@ async fn bootstrap_aggregator(
616
644
Ok ( aggregator)
617
645
}
618
646
619
- #[ tokio:: main( flavor = "multi_thread" , worker_threads = 20 ) ]
647
+ #[ tokio:: main( flavor = "multi_thread" ) ]
620
648
async fn main ( ) -> StdResult < ( ) > {
621
649
let opts = MainOpts :: parse ( ) ;
622
- let _logger = init_logger ( & opts) ;
650
+ let _logger_guard = init_logger ( & opts) ;
623
651
let args = AggregatorParameters :: new ( & opts) ?;
624
652
let mut current_epoch = Epoch ( 1 ) ;
653
+ let protocol_parameters = ProtocolParameters :: new ( 2422 , 20973 , 0.20 ) ;
625
654
info ! ( ">> Starting stress test with options: {opts:?}" ) ;
626
655
627
656
info ! ( ">> Creation of the Signer Key Registrations payloads" ) ;
628
- let signers_fixture =
629
- generate_signer_data ( opts. num_signers , ProtocolParameters :: new ( 5 , 100 , 0.65 ) ) ;
630
-
631
- info ! ( ">> Precompute message & signatures for MithrilStakeDistribution signed entity" ) ;
632
- let mithril_stake_distribution_message = {
633
- let mut message = ProtocolMessage :: new ( ) ;
634
- message. set_message_part (
635
- mithril_common:: entities:: ProtocolMessagePartKey :: NextAggregateVerificationKey ,
636
- signers_fixture. compute_and_encode_avk ( ) ,
637
- ) ;
638
-
639
- message
640
- } ;
641
- let mithril_stake_distribution_signatures: Vec < SingleSignatures > = signers_fixture
642
- . signers_fixture ( )
643
- . iter ( )
644
- // filter map to exclude signers that could not sign because they lost the lottery
645
- . filter_map ( |s| s. sign ( & mithril_stake_distribution_message) )
646
- . collect ( ) ;
657
+ let signers_fixture = generate_signer_data ( opts. num_signers , protocol_parameters) ;
658
+
659
+ let mithril_stake_distribution_signatures = precompute_mithril_stake_distribution_signatures (
660
+ & signers_fixture,
661
+ Duration :: from_secs ( 180 ) ,
662
+ )
663
+ . await ?;
647
664
648
665
let mut aggregator = bootstrap_aggregator ( & args, & signers_fixture, & mut current_epoch) . await ?;
649
666
0 commit comments