Skip to main content

zakura_network/zakura/block_sync/
error.rs

1use super::*;
2
3/// Structured wire and stateless-validation errors for stream 6.
4#[derive(Debug, Error)]
5pub enum BlockSyncWireError {
6    /// A payload or peer-controlled count exceeded its cap.
7    #[error("Zakura block-sync payload length {actual} exceeds cap {max}")]
8    OversizedPayload {
9        /// Actual payload length.
10        actual: usize,
11        /// Maximum allowed payload length.
12        max: usize,
13    },
14
15    /// A decoded request or response block count exceeded its contract.
16    #[error("Zakura block-sync block count {actual} exceeds cap {max}")]
17    BlockCountLimit {
18        /// Actual count.
19        actual: u32,
20        /// Maximum allowed count.
21        max: u32,
22    },
23
24    /// A `GetBlocks`, `BlocksDone`, or `RangeUnavailable` count was zero.
25    #[error("Zakura block-sync count must be non-zero")]
26    ZeroBlockCount,
27
28    /// A decoded block body exceeded the consensus block-size limit.
29    #[error("Zakura block-sync block length {actual} exceeds consensus cap {max}")]
30    OversizedBlock {
31        /// Actual serialized block length.
32        actual: usize,
33        /// Maximum allowed serialized block length.
34        max: usize,
35    },
36
37    /// A height exceeded Zebra's supported height range.
38    #[error("Zakura block-sync height {0} exceeds supported range")]
39    HeightOutOfRange(u32),
40
41    /// A payload used an unknown stream-6 message discriminator.
42    #[error("unknown Zakura block-sync message type {0}")]
43    UnknownMessageType(u8),
44
45    /// A frame used a message type that does not fit stream-6's u8 discriminator.
46    #[error("unknown Zakura block-sync frame message type {0}")]
47    UnknownFrameMessageType(u16),
48
49    /// Frame flags are reserved in stream 6.
50    #[error("unsupported Zakura block-sync frame flags {0}")]
51    UnsupportedFlags(u16),
52
53    /// Frame and payload message types disagreed.
54    #[error("Zakura block-sync frame type {frame} disagrees with payload type {payload}")]
55    MismatchedFrameMessageType {
56        /// Outer frame message type.
57        frame: u16,
58        /// Inner payload message type.
59        payload: u8,
60    },
61
62    /// A decoded payload had trailing bytes.
63    #[error("trailing bytes in Zakura block-sync payload")]
64    TrailingBytes,
65
66    /// A numeric conversion failed while handling bounded data.
67    #[error("numeric overflow while encoding Zakura block-sync {0}")]
68    NumericOverflow(&'static str),
69
70    /// An I/O error while encoding or decoding.
71    #[error("Zakura block-sync wire I/O error: {0}")]
72    Io(#[from] io::Error),
73
74    /// Zcash serialization failed.
75    #[error("Zakura block-sync Zcash serialization error: {0}")]
76    Serialization(#[from] SerializationError),
77}