kona_engine/task_queue/tasks/build/
error.rs1use crate::{
4 EngineTaskError, ForkchoiceTaskError, InsertTaskError,
5 task_queue::tasks::task::EngineTaskErrorSeverity,
6};
7use alloy_rpc_types_engine::PayloadStatusEnum;
8use alloy_transport::{RpcError, TransportErrorKind};
9use kona_protocol::FromBlockError;
10use op_alloy_rpc_types_engine::OpExecutionPayloadEnvelope;
11use thiserror::Error;
12use tokio::sync::mpsc;
13
14#[derive(Debug, Error)]
16pub enum BuildTaskError {
17 #[error("No forkchoice update needed")]
19 NoForkchoiceUpdateNeeded,
20 #[error("Attempting to update forkchoice state while EL syncing")]
22 EngineSyncing,
23 #[error("Missing payload ID")]
25 MissingPayloadId,
26 #[error(transparent)]
28 ForkchoiceUpdateFailed(#[from] ForkchoiceTaskError),
29 #[error(transparent)]
31 PayloadInsertionFailed(#[from] InsertTaskError),
32 #[error("Unexpected payload status: {0}")]
34 UnexpectedPayloadStatus(PayloadStatusEnum),
35 #[error(transparent)]
37 GetPayloadFailed(RpcError<TransportErrorKind>),
38 #[error(transparent)]
40 NewPayloadFailed(RpcError<TransportErrorKind>),
41 #[error("Deposit-only payload failed to import")]
43 DepositOnlyPayloadFailed,
44 #[error("Failed to re-attempt payload import with deposit-only payload")]
46 DepositOnlyPayloadReattemptFailed,
47 #[error("Invalid payload, must flush post-holocene")]
50 HoloceneInvalidFlush,
51 #[error(transparent)]
56 FromBlock(#[from] FromBlockError),
57 #[error(transparent)]
59 MpscSend(#[from] mpsc::error::SendError<OpExecutionPayloadEnvelope>),
60}
61
62impl EngineTaskError for BuildTaskError {
63 fn severity(&self) -> EngineTaskErrorSeverity {
64 match self {
65 Self::ForkchoiceUpdateFailed(inner) => inner.severity(),
66 Self::PayloadInsertionFailed(inner) => inner.severity(),
67 Self::NoForkchoiceUpdateNeeded => EngineTaskErrorSeverity::Temporary,
68 Self::EngineSyncing => EngineTaskErrorSeverity::Temporary,
69 Self::GetPayloadFailed(_) => EngineTaskErrorSeverity::Temporary,
70 Self::NewPayloadFailed(_) => EngineTaskErrorSeverity::Temporary,
71 Self::HoloceneInvalidFlush => EngineTaskErrorSeverity::Flush,
72 Self::MissingPayloadId => EngineTaskErrorSeverity::Critical,
73 Self::UnexpectedPayloadStatus(_) => EngineTaskErrorSeverity::Critical,
74 Self::DepositOnlyPayloadReattemptFailed => EngineTaskErrorSeverity::Critical,
75 Self::DepositOnlyPayloadFailed => EngineTaskErrorSeverity::Critical,
76 Self::FromBlock(_) => EngineTaskErrorSeverity::Critical,
77 Self::MpscSend(_) => EngineTaskErrorSeverity::Critical,
78 }
79 }
80}