@@ -524,22 +524,44 @@ impl<S: ValidatorStore + 'static, T: SlotClock + 'static> BlockService<S, T> {
524
524
proposer_index : Option < u64 > ,
525
525
builder_boost_factor : Option < u64 > ,
526
526
) -> Result < UnsignedBlock < S :: E > , BlockError > {
527
- let ( block_response, _ ) = beacon_node
528
- . get_validator_blocks_v3 :: < S :: E > (
527
+ let block_response = match beacon_node
528
+ . get_validator_blocks_v3_ssz :: < S :: E > (
529
529
slot,
530
530
randao_reveal_ref,
531
531
graffiti. as_ref ( ) ,
532
532
builder_boost_factor,
533
533
)
534
534
. await
535
- . map_err ( |e| {
536
- BlockError :: Recoverable ( format ! (
537
- "Error from beacon node when producing block: {:?}" ,
538
- e
539
- ) )
540
- } ) ?;
535
+ {
536
+ Ok ( ( ssz_block_response, _) ) => ssz_block_response,
537
+ Err ( e) => {
538
+ warn ! (
539
+ slot = slot. as_u64( ) ,
540
+ error = %e,
541
+ "Beacon node does not support SSZ in block production, falling back to JSON"
542
+ ) ;
543
+
544
+ let ( json_block_response, _) = beacon_node
545
+ . get_validator_blocks_v3 :: < S :: E > (
546
+ slot,
547
+ randao_reveal_ref,
548
+ graffiti. as_ref ( ) ,
549
+ builder_boost_factor,
550
+ )
551
+ . await
552
+ . map_err ( |e| {
553
+ BlockError :: Recoverable ( format ! (
554
+ "Error from beacon node when producing block: {:?}" ,
555
+ e
556
+ ) )
557
+ } ) ?;
558
+
559
+ // Extract ProduceBlockV3Response (data field of the struct ForkVersionedResponse)
560
+ json_block_response. data
561
+ }
562
+ } ;
541
563
542
- let ( block_proposer, unsigned_block) = match block_response. data {
564
+ let ( block_proposer, unsigned_block) = match block_response {
543
565
eth2:: types:: ProduceBlockV3Response :: Full ( block) => {
544
566
( block. block ( ) . proposer_index ( ) , UnsignedBlock :: Full ( block) )
545
567
}
0 commit comments