S Price: $0.408007 (-0.94%)

Contract Diff Checker

Contract Name:
Swapx3Data

Contract Source Code:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface Swapx3SC{
    function liquidity() external view returns (uint128);
	function tickSpacing() external view returns (int24);
	function globalState() external view returns (
		uint160 price, 
		int24 tick, 
		uint16 lastFee, 
		uint8 pluginConfig, 
		uint16 communityFee, 
		bool unlocked
	);
	function ticks(int24 tick) external view returns (
		uint256 liquidityTotal,
		int128 liquidityDelta,
		int24 prevTick,
		int24 nextTick,
		uint256 outerFeeGrowth0Token,
		uint256 outerFeeGrowth1Token
    );
	function token0() external view returns (address);
	function token1() external view returns (address);
}

contract Swapx3Data{
	
	struct TickRange{
        int24 lower;
        int24 upper;
    }
	function calculateTickRange(int24 tick, int24 tickSpace) internal pure returns (TickRange memory range) {
        
		if(tick >= 0){
		
            range.lower = int24(int256(tick / tickSpace) * tickSpace);
            range.upper = range.lower + tickSpace;
			
        }else{
			
			if(tick % tickSpace != 0){
			
				range.upper = int24(int256(tick / tickSpace) * tickSpace);
				range.lower = range.upper - tickSpace;
			
			}else{
			
				range.lower = tick;
				range.upper = tick + tickSpace;
			
			}
			
		}
        
        return range;
	}
    
	struct LiquidityNetData{
		int24 tick;
		int128 liquidityNet;
	}
	struct LiquidityNets {
		LiquidityNetData[] lower;
		LiquidityNetData[] upper;
	}
	function getLiquidityNets(Swapx3SC poolSC, TickRange memory tickRange, int24 tickSpacing, uint8 numTicks) internal view returns (LiquidityNets memory liquidityNets){

		LiquidityNetData[] memory liquidityNetsUp = new LiquidityNetData[](numTicks);
		LiquidityNetData[] memory liquidityNetsDown = new LiquidityNetData[](numTicks);
		
		for (uint8 i = 0; i < numTicks; i++) {

			int24 tickStep = (tickSpacing * int24(int8(i)));

            //up
            int24 tickUp = tickRange.upper + tickStep;
            (, int128 lqNetUp, , , , ) = poolSC.ticks(tickUp);
            liquidityNetsUp[i].tick = tickUp;
			liquidityNetsUp[i].liquidityNet = lqNetUp;

            //down
            int24 tickDown = tickRange.lower - tickStep;
            (, int128 lqNetDown, , , , ) = poolSC.ticks(tickDown);
            liquidityNetsDown[i].tick = tickDown;
			liquidityNetsDown[i].liquidityNet = lqNetDown;

        }
		
		liquidityNets.upper = liquidityNetsUp;
		liquidityNets.lower = liquidityNetsDown;
		
	}
	
    function getCurrentTickData(address pool) external view returns (uint128 liquidity, int24 tick, int24 tickSpacing) {

		Swapx3SC poolSC = Swapx3SC(pool);
        
		liquidity = poolSC.liquidity();
		(, tick, , , , ) = poolSC.globalState();
		tickSpacing = poolSC.tickSpacing();
		
	}

    function getTicksData(address pool, uint8 numTicks) external view returns (
			uint128 liquidity, 
			int24 tick, int24 tickSpacing, int24[] memory tickRange, 
			LiquidityNetData[] memory liquidityNetsUpper, LiquidityNetData[] memory liquidityNetsLower,
			address[] memory tokens
		){

        Swapx3SC poolSC = Swapx3SC(pool);
		
        liquidity = poolSC.liquidity();
        (, tick, , , , ) = poolSC.globalState();
		tickSpacing = poolSC.tickSpacing();

        TickRange memory tickRangeObj = calculateTickRange(tick, tickSpacing);

		//put it in return variable
		tickRange = new int24[](2);
		tickRange[0] = tickRangeObj.lower;
		tickRange[1] = tickRangeObj.upper;
		
        LiquidityNets memory liquidityNets = getLiquidityNets(poolSC, tickRangeObj, tickSpacing, numTicks);
		
		liquidityNetsUpper = liquidityNets.upper;
		liquidityNetsLower = liquidityNets.lower;
		
		//get the tokens
		tokens = new address[](2);
		tokens[0] = poolSC.token0();
		tokens[1] = poolSC.token1();

    }

    function getTickRange(int24 tick, int24 tickSpace) external pure returns (int24 lower, int24 upper) {
        TickRange memory range = calculateTickRange(tick, tickSpace);
        return (range.lower, range.upper);
    }

}

Please enter a contract address above to load the contract details and source code.

Context size (optional):