@@ -323,105 +323,32 @@ impl<T: SlotClock + 'static, E: EthSpec> BlockService<T, E> {
323
323
)
324
324
}
325
325
326
- if self . validator_store . produce_block_v3 ( ) {
327
- for validator_pubkey in proposers {
328
- let builder_boost_factor = self . get_builder_boost_factor ( & validator_pubkey) ;
329
- let service = self . clone ( ) ;
330
- let log = log. clone ( ) ;
331
- self . inner . context . executor . spawn (
332
- async move {
333
- let result = service
334
- . publish_block_v3 ( slot, validator_pubkey, builder_boost_factor)
335
- . await ;
336
-
337
- match result {
338
- Ok ( _) => { }
339
- Err ( BlockError :: Recoverable ( e) ) | Err ( BlockError :: Irrecoverable ( e) ) => {
340
- error ! (
341
- log,
342
- "Error whilst producing block" ;
343
- "error" => ?e,
344
- "block_slot" => ?slot,
345
- "info" => "block v3 proposal failed, this error may or may not result in a missed block"
346
- ) ;
347
- }
326
+ for validator_pubkey in proposers {
327
+ let builder_boost_factor = self . get_builder_boost_factor ( & validator_pubkey) ;
328
+ let service = self . clone ( ) ;
329
+ let log = log. clone ( ) ;
330
+ self . inner . context . executor . spawn (
331
+ async move {
332
+ let result = service
333
+ . publish_block ( slot, validator_pubkey, builder_boost_factor)
334
+ . await ;
335
+
336
+ match result {
337
+ Ok ( _) => { }
338
+ Err ( BlockError :: Recoverable ( e) ) | Err ( BlockError :: Irrecoverable ( e) ) => {
339
+ error ! (
340
+ log,
341
+ "Error whilst producing block" ;
342
+ "error" => ?e,
343
+ "block_slot" => ?slot,
344
+ "info" => "block v3 proposal failed, this error may or may not result in a missed block"
345
+ ) ;
348
346
}
349
- } ,
350
- "block service" ,
351
- )
352
- }
353
- } else {
354
- for validator_pubkey in proposers {
355
- let builder_proposals = self
356
- . validator_store
357
- . get_builder_proposals ( & validator_pubkey) ;
358
- let service = self . clone ( ) ;
359
- let log = log. clone ( ) ;
360
- self . inner . context . executor . spawn (
361
- async move {
362
- if builder_proposals {
363
- let result = service
364
- . publish_block ( slot, validator_pubkey, true )
365
- . await ;
366
-
367
- match result {
368
- Err ( BlockError :: Recoverable ( e) ) => {
369
- error ! (
370
- log,
371
- "Error whilst producing block" ;
372
- "error" => ?e,
373
- "block_slot" => ?slot,
374
- "info" => "blinded proposal failed, attempting full block"
375
- ) ;
376
- if let Err ( e) = service
377
- . publish_block ( slot, validator_pubkey, false )
378
- . await
379
- {
380
- // Log a `crit` since a full block
381
- // (non-builder) proposal failed.
382
- crit ! (
383
- log,
384
- "Error whilst producing block" ;
385
- "error" => ?e,
386
- "block_slot" => ?slot,
387
- "info" => "full block attempted after a blinded failure" ,
388
- ) ;
389
- }
390
- }
391
- Err ( BlockError :: Irrecoverable ( e) ) => {
392
- // Only log an `error` since it's common for
393
- // builders to timeout on their response, only
394
- // to publish the block successfully themselves.
395
- error ! (
396
- log,
397
- "Error whilst producing block" ;
398
- "error" => ?e,
399
- "block_slot" => ?slot,
400
- "info" => "this error may or may not result in a missed block" ,
401
- )
402
- }
403
- Ok ( _) => { }
404
- } ;
405
- } else if let Err ( e) = service
406
- . publish_block ( slot, validator_pubkey, false )
407
- . await
408
- {
409
- // Log a `crit` since a full block (non-builder)
410
- // proposal failed.
411
- crit ! (
412
- log,
413
- "Error whilst producing block" ;
414
- "message" => ?e,
415
- "block_slot" => ?slot,
416
- "info" => "proposal did not use a builder" ,
417
- ) ;
418
- }
419
- } ,
420
- "block service" ,
421
- )
422
- }
347
+ }
348
+ } ,
349
+ "block service" ,
350
+ )
423
351
}
424
-
425
352
Ok ( ( ) )
426
353
}
427
354
@@ -513,7 +440,7 @@ impl<T: SlotClock + 'static, E: EthSpec> BlockService<T, E> {
513
440
Ok ( ( ) )
514
441
}
515
442
516
- async fn publish_block_v3 (
443
+ async fn publish_block (
517
444
self ,
518
445
slot : Slot ,
519
446
validator_pubkey : PublicKeyBytes ,
@@ -584,7 +511,7 @@ impl<T: SlotClock + 'static, E: EthSpec> BlockService<T, E> {
584
511
& metrics:: BLOCK_SERVICE_TIMES ,
585
512
& [ metrics:: BEACON_BLOCK_HTTP_GET ] ,
586
513
) ;
587
- let block_response = Self :: get_validator_block_v3 (
514
+ Self :: get_validator_block (
588
515
beacon_node,
589
516
slot,
590
517
randao_reveal_ref,
@@ -599,103 +526,7 @@ impl<T: SlotClock + 'static, E: EthSpec> BlockService<T, E> {
599
526
"Error from beacon node when producing block: {:?}" ,
600
527
e
601
528
) )
602
- } ) ;
603
-
604
- Ok :: < _ , BlockError > ( block_response)
605
- } ,
606
- )
607
- . await ??;
608
-
609
- self_ref
610
- . sign_and_publish_block (
611
- proposer_fallback,
612
- slot,
613
- graffiti,
614
- & validator_pubkey,
615
- unsigned_block,
616
- )
617
- . await ?;
618
-
619
- Ok ( ( ) )
620
- }
621
-
622
- /// Produce a block at the given slot for validator_pubkey
623
- async fn publish_block (
624
- & self ,
625
- slot : Slot ,
626
- validator_pubkey : PublicKeyBytes ,
627
- builder_proposal : bool ,
628
- ) -> Result < ( ) , BlockError > {
629
- let log = self . context . log ( ) ;
630
- let _timer =
631
- metrics:: start_timer_vec ( & metrics:: BLOCK_SERVICE_TIMES , & [ metrics:: BEACON_BLOCK ] ) ;
632
-
633
- let randao_reveal = match self
634
- . validator_store
635
- . randao_reveal ( validator_pubkey, slot. epoch ( E :: slots_per_epoch ( ) ) )
636
- . await
637
- {
638
- Ok ( signature) => signature. into ( ) ,
639
- Err ( ValidatorStoreError :: UnknownPubkey ( pubkey) ) => {
640
- // A pubkey can be missing when a validator was recently removed
641
- // via the API.
642
- warn ! (
643
- log,
644
- "Missing pubkey for block" ;
645
- "info" => "a validator may have recently been removed from this VC" ,
646
- "pubkey" => ?pubkey,
647
- "slot" => ?slot
648
- ) ;
649
- return Ok ( ( ) ) ;
650
- }
651
- Err ( e) => {
652
- return Err ( BlockError :: Recoverable ( format ! (
653
- "Unable to sign block: {:?}" ,
654
- e
655
- ) ) )
656
- }
657
- } ;
658
-
659
- let graffiti = determine_graffiti (
660
- & validator_pubkey,
661
- log,
662
- self . graffiti_file . clone ( ) ,
663
- self . validator_store . graffiti ( & validator_pubkey) ,
664
- self . graffiti ,
665
- ) ;
666
-
667
- let randao_reveal_ref = & randao_reveal;
668
- let self_ref = & self ;
669
- let proposer_index = self . validator_store . validator_index ( & validator_pubkey) ;
670
- let proposer_fallback = ProposerFallback {
671
- beacon_nodes : self . beacon_nodes . clone ( ) ,
672
- proposer_nodes : self . proposer_nodes . clone ( ) ,
673
- } ;
674
-
675
- info ! (
676
- log,
677
- "Requesting unsigned block" ;
678
- "slot" => slot. as_u64( ) ,
679
- ) ;
680
-
681
- // Request block from first responsive beacon node.
682
- //
683
- // Try the proposer nodes last, since it's likely that they don't have a
684
- // great view of attestations on the network.
685
- let unsigned_block = proposer_fallback
686
- . request_proposers_last (
687
- RequireSynced :: No ,
688
- OfflineOnFailure :: Yes ,
689
- move |beacon_node| {
690
- Self :: get_validator_block (
691
- beacon_node,
692
- slot,
693
- randao_reveal_ref,
694
- graffiti,
695
- proposer_index,
696
- builder_proposal,
697
- log,
698
- )
529
+ } )
699
530
} ,
700
531
)
701
532
. await ?;
@@ -745,7 +576,7 @@ impl<T: SlotClock + 'static, E: EthSpec> BlockService<T, E> {
745
576
Ok :: < _ , BlockError > ( ( ) )
746
577
}
747
578
748
- async fn get_validator_block_v3 (
579
+ async fn get_validator_block (
749
580
beacon_node : & BeaconNodeHttpClient ,
750
581
slot : Slot ,
751
582
randao_reveal_ref : & SignatureBytes ,
@@ -788,65 +619,6 @@ impl<T: SlotClock + 'static, E: EthSpec> BlockService<T, E> {
788
619
Ok :: < _ , BlockError > ( unsigned_block)
789
620
}
790
621
791
- async fn get_validator_block (
792
- beacon_node : & BeaconNodeHttpClient ,
793
- slot : Slot ,
794
- randao_reveal_ref : & SignatureBytes ,
795
- graffiti : Option < Graffiti > ,
796
- proposer_index : Option < u64 > ,
797
- builder_proposal : bool ,
798
- log : & Logger ,
799
- ) -> Result < UnsignedBlock < E > , BlockError > {
800
- let unsigned_block = if !builder_proposal {
801
- let _get_timer = metrics:: start_timer_vec (
802
- & metrics:: BLOCK_SERVICE_TIMES ,
803
- & [ metrics:: BEACON_BLOCK_HTTP_GET ] ,
804
- ) ;
805
- UnsignedBlock :: Full (
806
- beacon_node
807
- . get_validator_blocks :: < E > ( slot, randao_reveal_ref, graffiti. as_ref ( ) )
808
- . await
809
- . map_err ( |e| {
810
- BlockError :: Recoverable ( format ! (
811
- "Error from beacon node when producing block: {:?}" ,
812
- e
813
- ) )
814
- } ) ?
815
- . data ,
816
- )
817
- } else {
818
- let _get_timer = metrics:: start_timer_vec (
819
- & metrics:: BLOCK_SERVICE_TIMES ,
820
- & [ metrics:: BLINDED_BEACON_BLOCK_HTTP_GET ] ,
821
- ) ;
822
- UnsignedBlock :: Blinded (
823
- beacon_node
824
- . get_validator_blinded_blocks :: < E > ( slot, randao_reveal_ref, graffiti. as_ref ( ) )
825
- . await
826
- . map_err ( |e| {
827
- BlockError :: Recoverable ( format ! (
828
- "Error from beacon node when producing block: {:?}" ,
829
- e
830
- ) )
831
- } ) ?
832
- . data ,
833
- )
834
- } ;
835
-
836
- info ! (
837
- log,
838
- "Received unsigned block" ;
839
- "slot" => slot. as_u64( ) ,
840
- ) ;
841
- if proposer_index != Some ( unsigned_block. proposer_index ( ) ) {
842
- return Err ( BlockError :: Recoverable (
843
- "Proposer index does not match block proposer. Beacon chain re-orged" . to_string ( ) ,
844
- ) ) ;
845
- }
846
-
847
- Ok :: < _ , BlockError > ( unsigned_block)
848
- }
849
-
850
622
/// Returns the builder boost factor of the given public key.
851
623
/// The priority order for fetching this value is:
852
624
///
0 commit comments