Skip to main content

forest/message_pool/
errors.rs

1// Copyright 2019-2026 ChainSafe Systems
2// SPDX-License-Identifier: Apache-2.0, MIT
3
4use crate::chain::Error as ChainError;
5use fvm_ipld_encoding::Error as EncodeError;
6use thiserror::Error;
7
8/// `MessagePool` error.
9#[derive(Debug, PartialEq, Eq, Error)]
10pub enum Error {
11    /// Error indicating message that's too large
12    #[error("Message is too big")]
13    MessageTooBig,
14    #[error("gas price is lower than min gas price")]
15    GasPriceTooLow,
16    #[error("gas fee cap is too low")]
17    GasFeeCapTooLow,
18    #[error("Cannot send more Filecoin than will ever exist")]
19    MessageValueTooHigh,
20    #[error("Message sequence too low")]
21    SequenceTooLow,
22    #[error("Not enough funds to execute transaction")]
23    NotEnoughFunds,
24    #[cfg(test)]
25    #[error("Invalid to address for message")]
26    InvalidToAddr,
27    #[error("Invalid from address")]
28    InvalidFromAddr,
29    #[error("Message with sequence already in mempool")]
30    DuplicateSequence,
31    #[error("unfulfilled nonce gap")]
32    NonceGap,
33    #[error("Validation Error: {0}")]
34    SoftValidationFailure(String),
35    #[error("Too many pending messages from actor {0} (trusted: {1})")]
36    TooManyPendingMessages(String, bool),
37    #[error("{0}")]
38    Other(String),
39}
40
41impl From<ChainError> for Error {
42    fn from(ce: ChainError) -> Self {
43        Error::Other(ce.to_string())
44    }
45}
46
47impl From<EncodeError> for Error {
48    fn from(ee: EncodeError) -> Self {
49        Error::Other(ee.to_string())
50    }
51}
52
53impl From<anyhow::Error> for Error {
54    fn from(e: anyhow::Error) -> Self {
55        Error::Other(format!("{e:#}"))
56    }
57}