Source code for uniswap.v3.models

from dataclasses import dataclass

from eth_typing import ChecksumAddress
from web3.contract.contract import ContractFunction

from uniswap.utils.consts import EXACT_INPUT, EXACT_OUTPUT


[docs]@dataclass class Token: chainId: int decimals: int symbol: str name: str isNative: bool isToken: bool address: ChecksumAddress
[docs]@dataclass class PoolImmutablesRaw: """Immutable Pool's data""" factory: ChecksumAddress token0: ChecksumAddress token1: ChecksumAddress fee: int tickSpacing: int maxLiquidityPerTick: int
[docs]@dataclass class PoolStateRaw: """Mutable Pool's data""" liquidity: int sqrtPriceX96: int tick: int observationIndex: int observationCardinality: int observationCardinalityNext: int feeProtocol: int unlocked: bool
[docs]@dataclass class PoolData: """Human-readable pool data""" immutables: PoolImmutablesRaw state: PoolStateRaw token0: Token token1: Token address: ChecksumAddress token0Price: float token1Price: float
[docs]@dataclass class UncheckedTradeRaw: route: list[ChecksumAddress] fee: int inputAmount: int outputAmount: int tradeType: EXACT_INPUT | EXACT_OUTPUT
[docs]@dataclass class UncheckedTrade: raw: UncheckedTradeRaw route: list[Token] fee: float inputAmount: float outputAmount: float tradeType: EXACT_INPUT | EXACT_OUTPUT
[docs]@dataclass class NftPositionUriData: name: str description: str image: str def __repr__(self): # generate very noisy output # for full content use implicitly __str__ method return ( f"{self.__class__.__name__}(name={self.name}," "description=..., image=...)" )
[docs]@dataclass class NftPositionRaw: token_id: int nonce: int operator: ChecksumAddress token0: ChecksumAddress token1: ChecksumAddress fee: int tickLower: int tickUpper: int liquidity: int feeGrowthInside0LastX128: int feeGrowthInside1LastX128: int tokensOwed0: int tokensOwed1: int token_URI_data: None
# TODO: Model too wordy, need to clean up
[docs]@dataclass class NftPosition: token_id: int raw: NftPositionRaw pool: PoolData amount0: int = 0 amount1: int = 0 amount0HR: float = 0.0 amount1HR: float = 0.0 unclaimedfeesamount0: int = 0 unclaimedfeesamount1: int = 0 unclaimedfeesamount0HR: float = 0.0 unclaimedfeesamount1HR: float = 0.0 lower_price: float = 0.0 upper_price: float = 0.0 lower_price_inverse: float = 0.0 upper_price_inverse: float = 0.0 token0: Token = None token1: Token = None fee: float = 0.0
[docs]@dataclass class UncheckedNftPositionRaw: pool: PoolData current_tick: int current_price_x96: int lower_tick: int upper_tick: int amount0: int amount1: int
[docs]@dataclass class UncheckedNftPosition: raw: UncheckedNftPositionRaw lower_price: float = 0.0 upper_price: float = 0.0 amount0: int = 0 amount1: int = 0 amount0HR: float = 0.0 amount1HR: float = 0.0 token0: Token = None token1: Token = None fee: float = 0.0 # adjusted data (by tickSpacing) adj_amount0: int = 0 adj_amount1: int = 0 adj_amount0HR: float = 0.0 adj_amount1HR: float = 0.0 adj_lower_price: float = 0.0 adj_upper_price: float = 0.0
[docs]@dataclass class Multicall2Call: """This is a helper dataclass for the Multicall2.""" func_call: ContractFunction name: str = "" returns: list[tuple] = None outputs: list[dict] = None block_number: int = 0