@@ -12,6 +12,7 @@ import (
12
12
13
13
builderApi "github.com/attestantio/go-builder-client/api"
14
14
builderApiDeneb "github.com/attestantio/go-builder-client/api/deneb"
15
+ builderApiV1 "github.com/attestantio/go-builder-client/api/v1"
15
16
builderSpec "github.com/attestantio/go-builder-client/spec"
16
17
"github.com/attestantio/go-eth2-client/spec"
17
18
"github.com/attestantio/go-eth2-client/spec/capella"
@@ -496,31 +497,26 @@ type SaveBidAndUpdateTopBidResponse struct {
496
497
PrevTopBidValue * big.Int
497
498
498
499
TimePrep time.Duration
499
- TimeSavePayload time.Duration
500
500
TimeSaveBid time.Duration
501
501
TimeSaveTrace time.Duration
502
+ TimeSavePayload time.Duration
502
503
TimeUpdateTopBid time.Duration
503
504
TimeUpdateFloor time.Duration
504
505
}
505
506
506
- func (r * RedisCache ) SaveBidAndUpdateTopBid (ctx context.Context , pipeliner redis.Pipeliner , trace * common. BidTraceV2WithBlobFields , payload * common.VersionedSubmitBlockRequest , getPayloadResponse * builderApi.VersionedSubmitBlindedBlockResponse , getHeaderResponse * builderSpec.VersionedSignedBuilderBid , reqReceivedAt time.Time , isCancellationEnabled bool , floorValue * big.Int ) (state SaveBidAndUpdateTopBidResponse , err error ) {
507
+ func (r * RedisCache ) SaveBidAndUpdateTopBid (ctx context.Context , pipeliner redis.Pipeliner , trace * builderApiV1. BidTrace , blockSubmission * common.BlockSubmissionInfo , getPayloadResponse * builderApi.VersionedSubmitBlindedBlockResponse , getHeaderResponse * builderSpec.VersionedSignedBuilderBid , reqReceivedAt time.Time , isCancellationEnabled bool , floorValue * big.Int ) (state SaveBidAndUpdateTopBidResponse , err error ) {
507
508
var prevTime , nextTime time.Time
508
509
prevTime = time .Now ()
509
510
510
- submission , err := common .GetBlockSubmissionInfo (payload )
511
- if err != nil {
512
- return state , err
513
- }
514
-
515
511
// Load latest bids for a given slot+parent+proposer
516
- builderBids , err := NewBuilderBidsFromRedis (ctx , r , pipeliner , submission . BidTrace . Slot , submission . BidTrace . ParentHash .String (), submission . BidTrace .ProposerPubkey .String ())
512
+ builderBids , err := NewBuilderBidsFromRedis (ctx , r , pipeliner , trace . Slot , trace . ParentHash .String (), trace .ProposerPubkey .String ())
517
513
if err != nil {
518
514
return state , err
519
515
}
520
516
521
517
// Load floor value (if not passed in already)
522
518
if floorValue == nil {
523
- floorValue , err = r .GetFloorBidValue (ctx , pipeliner , submission . BidTrace . Slot , submission . BidTrace . ParentHash .String (), submission . BidTrace .ProposerPubkey .String ())
519
+ floorValue , err = r .GetFloorBidValue (ctx , pipeliner , trace . Slot , trace . ParentHash .String (), trace .ProposerPubkey .String ())
524
520
if err != nil {
525
521
return state , err
526
522
}
@@ -534,7 +530,7 @@ func (r *RedisCache) SaveBidAndUpdateTopBid(ctx context.Context, pipeliner redis
534
530
state .PrevTopBidValue = state .TopBidValue
535
531
536
532
// Abort now if non-cancellation bid is lower than floor value
537
- isBidAboveFloor := submission . BidTrace .Value .ToBig ().Cmp (floorValue ) == 1
533
+ isBidAboveFloor := trace .Value .ToBig ().Cmp (floorValue ) == 1
538
534
if ! isCancellationEnabled && ! isBidAboveFloor {
539
535
return state , nil
540
536
}
@@ -547,61 +543,73 @@ func (r *RedisCache) SaveBidAndUpdateTopBid(ctx context.Context, pipeliner redis
547
543
//
548
544
// Time to save things in Redis
549
545
//
550
- // 1. Save the execution payload
551
- switch payload .Version {
552
- case spec .DataVersionCapella :
553
- err = r .SaveExecutionPayloadCapella (ctx , pipeliner , submission .BidTrace .Slot , submission .BidTrace .ProposerPubkey .String (), submission .BidTrace .BlockHash .String (), getPayloadResponse .Capella )
554
- if err != nil {
555
- return state , err
556
- }
557
- case spec .DataVersionDeneb :
558
- err = r .SavePayloadContentsDeneb (ctx , pipeliner , submission .BidTrace .Slot , submission .BidTrace .ProposerPubkey .String (), submission .BidTrace .BlockHash .String (), getPayloadResponse .Deneb )
559
- if err != nil {
560
- return state , err
561
- }
562
- case spec .DataVersionUnknown , spec .DataVersionPhase0 , spec .DataVersionAltair , spec .DataVersionBellatrix :
563
- return state , fmt .Errorf ("unsupported payload version: %s" , payload .Version ) //nolint:goerr113
564
- }
565
-
566
- // Record time needed to save payload
567
- nextTime = time .Now ().UTC ()
568
- state .TimeSavePayload = nextTime .Sub (prevTime )
569
- prevTime = nextTime
570
-
571
- // 2. Save latest bid for this builder
572
- err = r .SaveBuilderBid (ctx , pipeliner , submission .BidTrace .Slot , submission .BidTrace .ParentHash .String (), submission .BidTrace .ProposerPubkey .String (), submission .BidTrace .BuilderPubkey .String (), reqReceivedAt , getHeaderResponse )
546
+ // 1. Save latest bid for this builder
547
+ err = r .SaveBuilderBid (ctx , pipeliner , trace .Slot , trace .ParentHash .String (), trace .ProposerPubkey .String (), trace .BuilderPubkey .String (), reqReceivedAt , getHeaderResponse )
573
548
if err != nil {
574
549
return state , err
575
550
}
576
- builderBids .bidValues [submission . BidTrace . BuilderPubkey .String ()] = submission . BidTrace .Value .ToBig ()
551
+ builderBids .bidValues [trace . BuilderPubkey .String ()] = trace .Value .ToBig ()
577
552
578
553
// Record time needed to save bid
579
554
nextTime = time .Now ().UTC ()
580
555
state .TimeSaveBid = nextTime .Sub (prevTime )
581
556
prevTime = nextTime
582
557
583
- // 3. Save the bid trace
584
- err = r .SaveBidTrace (ctx , pipeliner , trace )
585
- if err != nil {
586
- return state , err
558
+ // 2. Save the bid trace
559
+ if blockSubmission != nil {
560
+ bidTrace := common.BidTraceV2WithBlobFields {
561
+ BidTrace : * trace ,
562
+ BlockNumber : blockSubmission .BlockNumber ,
563
+ NumTx : uint64 (len (blockSubmission .Transactions )),
564
+ NumBlobs : uint64 (len (blockSubmission .Blobs )),
565
+ BlobGasUsed : blockSubmission .BlobGasUsed ,
566
+ ExcessBlobGas : blockSubmission .ExcessBlobGas ,
567
+ }
568
+ err = r .SaveBidTrace (ctx , pipeliner , & bidTrace )
569
+ if err != nil {
570
+ return state , err
571
+ }
572
+
573
+ // Record time needed to save trace
574
+ nextTime = time .Now ().UTC ()
575
+ state .TimeSaveTrace = nextTime .Sub (prevTime )
576
+ prevTime = nextTime
587
577
}
588
578
589
- // Record time needed to save trace
590
- nextTime = time .Now ().UTC ()
591
- state .TimeSaveTrace = nextTime .Sub (prevTime )
592
- prevTime = nextTime
579
+ // 3. Save the execution payload
580
+ if getPayloadResponse != nil {
581
+ switch getPayloadResponse .Version {
582
+ case spec .DataVersionCapella :
583
+ err = r .SaveExecutionPayloadCapella (ctx , pipeliner , trace .Slot , trace .ProposerPubkey .String (), trace .BlockHash .String (), getPayloadResponse .Capella )
584
+ if err != nil {
585
+ return state , err
586
+ }
587
+ case spec .DataVersionDeneb :
588
+ err = r .SavePayloadContentsDeneb (ctx , pipeliner , trace .Slot , trace .ProposerPubkey .String (), trace .BlockHash .String (), getPayloadResponse .Deneb )
589
+ if err != nil {
590
+ return state , err
591
+ }
592
+ case spec .DataVersionUnknown , spec .DataVersionPhase0 , spec .DataVersionAltair , spec .DataVersionBellatrix :
593
+ return state , fmt .Errorf ("unsupported payload version: %s" , getPayloadResponse .Version ) //nolint:goerr113
594
+ }
595
+
596
+ // Record time needed to save payload
597
+ nextTime = time .Now ().UTC ()
598
+ state .TimeSavePayload = nextTime .Sub (prevTime )
599
+ prevTime = nextTime
600
+ }
593
601
594
602
// If top bid value hasn't change, abort now
595
603
_ , state .TopBidValue = builderBids .getTopBid ()
596
604
if state .TopBidValue .Cmp (state .PrevTopBidValue ) == 0 {
597
605
return state , nil
598
606
}
599
607
600
- state , err = r ._updateTopBid (ctx , pipeliner , state , builderBids , submission . BidTrace . Slot , submission . BidTrace . ParentHash .String (), submission . BidTrace .ProposerPubkey .String (), floorValue )
608
+ state , err = r ._updateTopBid (ctx , pipeliner , state , builderBids , trace . Slot , trace . ParentHash .String (), trace .ProposerPubkey .String (), floorValue )
601
609
if err != nil {
602
610
return state , err
603
611
}
604
- state .IsNewTopBid = submission . BidTrace .Value .ToBig ().Cmp (state .TopBidValue ) == 0
612
+ state .IsNewTopBid = trace .Value .ToBig ().Cmp (state .TopBidValue ) == 0
605
613
// An Exec happens in _updateTopBid.
606
614
state .WasBidSaved = true
607
615
@@ -615,8 +623,8 @@ func (r *RedisCache) SaveBidAndUpdateTopBid(ctx context.Context, pipeliner redis
615
623
}
616
624
617
625
// Non-cancellable bid above floor should set new floor
618
- keyBidSource := r .keyLatestBidByBuilder (submission . BidTrace . Slot , submission . BidTrace . ParentHash .String (), submission . BidTrace . ProposerPubkey .String (), submission . BidTrace .BuilderPubkey .String ())
619
- keyFloorBid := r .keyFloorBid (submission . BidTrace . Slot , submission . BidTrace . ParentHash .String (), submission . BidTrace .ProposerPubkey .String ())
626
+ keyBidSource := r .keyLatestBidByBuilder (trace . Slot , trace . ParentHash .String (), trace . ProposerPubkey .String (), trace .BuilderPubkey .String ())
627
+ keyFloorBid := r .keyFloorBid (trace . Slot , trace . ParentHash .String (), trace .ProposerPubkey .String ())
620
628
c := pipeliner .Copy (ctx , keyBidSource , keyFloorBid , 0 , true )
621
629
_ , err = pipeliner .Exec (ctx )
622
630
if err != nil {
@@ -634,8 +642,8 @@ func (r *RedisCache) SaveBidAndUpdateTopBid(ctx context.Context, pipeliner redis
634
642
return state , err
635
643
}
636
644
637
- keyFloorBidValue := r .keyFloorBidValue (submission . BidTrace . Slot , submission . BidTrace . ParentHash .String (), submission . BidTrace .ProposerPubkey .String ())
638
- err = pipeliner .Set (ctx , keyFloorBidValue , submission . BidTrace .Value .Dec (), expiryBidCache ).Err ()
645
+ keyFloorBidValue := r .keyFloorBidValue (trace . Slot , trace . ParentHash .String (), trace .ProposerPubkey .String ())
646
+ err = pipeliner .Set (ctx , keyFloorBidValue , trace .Value .Dec (), expiryBidCache ).Err ()
639
647
if err != nil {
640
648
return state , err
641
649
}
0 commit comments