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}