@@ -615,32 +615,45 @@ func (api *ConsensusAPI) GetBlobsV2(hashes []common.Hash) ([]*engine.BlobAndProo
615615// Helper for NewPayload* methods.
616616var invalidStatus = engine.PayloadStatusV1 {Status : engine .INVALID }
617617
618- // startNewPayloadSpan starts a tracing span for a new payload.
619- func startNewPayloadSpan (ctx context.Context , name string , params engine.ExecutableData ) (context.Context , trace.Span ) {
618+ // startNewPayloadSpan starts a tracing span for a new payload and returns a cleanup
619+ // function that should be deferred. spanEnd() will record errors and set
620+ // span status based on the error value at the time of execution.
621+ func startNewPayloadSpan (ctx context.Context , name string , params engine.ExecutableData ) (context.Context , func (* error )) {
622+ parentSpan := trace .SpanFromContext (ctx )
620623 tracer := otel .Tracer ("" )
621624 ctx , span := tracer .Start (ctx , name )
622625 span .SetAttributes (
623626 attribute .Int64 ("block.number" , int64 (params .Number )),
624627 attribute .String ("block.hash" , params .BlockHash .Hex ()),
625628 attribute .Int ("tx.count" , len (params .Transactions )),
626629 )
627- return ctx , span
630+ spanEnd := func (err * error ) {
631+ if * err != nil {
632+ span .RecordError (* err )
633+ span .SetStatus (codes .Error , (* err ).Error ())
634+ parentSpan .SetStatus (codes .Error , (* err ).Error ())
635+ } else {
636+ span .SetStatus (codes .Ok , "" )
637+ }
638+ span .End ()
639+ }
640+ return ctx , spanEnd
628641}
629642
630643// NewPayloadV1 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
631- func (api * ConsensusAPI ) NewPayloadV1 (ctx context.Context , params engine.ExecutableData ) (engine.PayloadStatusV1 , error ) {
632- ctx , span := startNewPayloadSpan (ctx , "engine.newPayloadV1" , params )
633- defer span . End ( )
644+ func (api * ConsensusAPI ) NewPayloadV1 (ctx context.Context , params engine.ExecutableData ) (result engine.PayloadStatusV1 , err error ) {
645+ ctx , spanEnd := startNewPayloadSpan (ctx , "engine.newPayloadV1" , params )
646+ defer spanEnd ( & err )
634647 if params .Withdrawals != nil {
635648 return invalidStatus , paramsErr ("withdrawals not supported in V1" )
636649 }
637650 return api .newPayload (ctx , params , nil , nil , nil , false )
638651}
639652
640653// NewPayloadV2 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
641- func (api * ConsensusAPI ) NewPayloadV2 (ctx context.Context , params engine.ExecutableData ) (engine.PayloadStatusV1 , error ) {
642- ctx , span := startNewPayloadSpan (ctx , "engine.newPayloadV2" , params )
643- defer span . End ( )
654+ func (api * ConsensusAPI ) NewPayloadV2 (ctx context.Context , params engine.ExecutableData ) (result engine.PayloadStatusV1 , err error ) {
655+ ctx , spanEnd := startNewPayloadSpan (ctx , "engine.newPayloadV2" , params )
656+ defer spanEnd ( & err )
644657 var (
645658 cancun = api .config ().IsCancun (api .config ().LondonBlock , params .Timestamp )
646659 shanghai = api .config ().IsShanghai (api .config ().LondonBlock , params .Timestamp )
@@ -661,9 +674,9 @@ func (api *ConsensusAPI) NewPayloadV2(ctx context.Context, params engine.Executa
661674}
662675
663676// NewPayloadV3 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
664- func (api * ConsensusAPI ) NewPayloadV3 (ctx context.Context , params engine.ExecutableData , versionedHashes []common.Hash , beaconRoot * common.Hash ) (engine.PayloadStatusV1 , error ) {
665- ctx , span := startNewPayloadSpan (ctx , "engine.newPayloadV3" , params )
666- defer span . End ( )
677+ func (api * ConsensusAPI ) NewPayloadV3 (ctx context.Context , params engine.ExecutableData , versionedHashes []common.Hash , beaconRoot * common.Hash ) (result engine.PayloadStatusV1 , err error ) {
678+ ctx , spanEnd := startNewPayloadSpan (ctx , "engine.newPayloadV3" , params )
679+ defer spanEnd ( & err )
667680 switch {
668681 case params .Withdrawals == nil :
669682 return invalidStatus , paramsErr ("nil withdrawals post-shanghai" )
@@ -682,9 +695,9 @@ func (api *ConsensusAPI) NewPayloadV3(ctx context.Context, params engine.Executa
682695}
683696
684697// NewPayloadV4 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
685- func (api * ConsensusAPI ) NewPayloadV4 (ctx context.Context , params engine.ExecutableData , versionedHashes []common.Hash , beaconRoot * common.Hash , executionRequests []hexutil.Bytes ) (engine.PayloadStatusV1 , error ) {
686- ctx , span := startNewPayloadSpan (ctx , "engine.newPayloadV4" , params )
687- defer span . End ( )
698+ func (api * ConsensusAPI ) NewPayloadV4 (ctx context.Context , params engine.ExecutableData , versionedHashes []common.Hash , beaconRoot * common.Hash , executionRequests []hexutil.Bytes ) (result engine.PayloadStatusV1 , err error ) {
699+ ctx , spanEnd := startNewPayloadSpan (ctx , "engine.newPayloadV4" , params )
700+ defer spanEnd ( & err )
688701 switch {
689702 case params .Withdrawals == nil :
690703 return invalidStatus , paramsErr ("nil withdrawals post-shanghai" )
@@ -702,7 +715,7 @@ func (api *ConsensusAPI) NewPayloadV4(ctx context.Context, params engine.Executa
702715 return invalidStatus , unsupportedForkErr ("newPayloadV4 must only be called for prague/osaka payloads" )
703716 }
704717 requests := convertRequests (executionRequests )
705- if err : = validateRequests (requests ); err != nil {
718+ if err = validateRequests (requests ); err != nil {
706719 return engine.PayloadStatusV1 {Status : engine .INVALID }, engine .InvalidParams .With (err )
707720 }
708721 return api .newPayload (ctx , params , versionedHashes , beaconRoot , requests , false )
0 commit comments