mev_engine/
errors.rs

1use starknet::{
2    core::types::{Felt, U256},
3    providers::ProviderError,
4};
5use std::time::SystemTimeError;
6use thiserror::Error;
7use tokio::task::JoinError;
8
9#[derive(Error, Debug)]
10pub enum AMMError {
11    #[error(transparent)]
12    JoinError(#[from] JoinError),
13    #[error(transparent)]
14    SerdeJsonError(#[from] serde_json::error::Error),
15    #[error(transparent)]
16    IOError(#[from] std::io::Error),
17    #[error("Error when converting from hex to U256")]
18    FromHexError,
19    #[error("Pair for token_a/token_b does not exist in provided dexes")]
20    PairDoesNotExistInDexes(Felt, Felt),
21    #[error("Could not initialize new pool from event log")]
22    UnrecognizedPoolCreatedEventLog,
23    #[error("Error when syncing pool")]
24    SyncError(Felt),
25    #[error("Error when getting pool data")]
26    PoolDataError,
27    #[error(transparent)]
28    ArithmeticError(#[from] ArithmeticError),
29    #[error("No initialized ticks during v3 swap simulation")]
30    NoInitializedTicks,
31    #[error("No liquidity net found during v3 swap simulation")]
32    NoLiquidityNet,
33    #[error("Incongruent AMMS supplied to batch request")]
34    IncongruentAMMs,
35    #[error("Invalid ERC4626 fee")]
36    InvalidERC4626Fee,
37    #[error(transparent)]
38    EventLogError(#[from] EventLogError),
39    #[error("Block number not found")]
40    BlockNumberNotFound,
41    #[error(transparent)]
42    SwapSimulationError(#[from] SwapSimulationError),
43    #[error(transparent)]
44    CheckpointError(#[from] CheckpointError),
45    #[error(transparent)]
46    ProviderError(#[from] ProviderError),
47}
48
49#[derive(Error, Debug)]
50pub enum ArithmeticError {
51    #[error("Shadow overflow")]
52    ShadowOverflow(U256),
53    #[error("Rounding Error")]
54    RoundingError,
55    #[error("Y is zero")]
56    YIsZero,
57    #[error("Sqrt price overflow")]
58    SqrtPriceOverflow,
59    #[error("U128 conversion error")]
60    U128ConversionError,
61    #[error("base token does not exist in pool")]
62    BaseTokenDoesNotExist,
63    #[error("quote token does not exist in pool")]
64    QuoteTokenDoesNotExist,
65}
66
67#[derive(Error, Debug)]
68pub enum EventLogError {
69    #[error("Invalid event signature")]
70    InvalidEventSignature,
71    #[error("Log Block number not found")]
72    LogBlockNumberNotFound,
73}
74
75#[derive(Error, Debug)]
76pub enum SwapSimulationError {
77    #[error("Could not get next tick")]
78    InvalidTick,
79    #[error("Liquidity underflow")]
80    LiquidityUnderflow,
81    #[error(transparent)]
82    ArithmeticError(#[from] ArithmeticError),
83}
84
85#[derive(Error, Debug)]
86pub enum CheckpointError {
87    #[error(transparent)]
88    SystemTimeError(#[from] SystemTimeError),
89    #[error(transparent)]
90    SerdeJsonError(#[from] serde_json::error::Error)
91}