ConcentratedLiquidityPool

집중된 유동성으로 관리되는 AMM Pool 컨트랙트로, 유동성 공급 / 제거 / 수수료 수취 / 스왑에 대한 low level 메서드를 제공합니다.

Overview

Concentrated Liquidity Pool은 Pangea의 Exchange Module 중 코어 컨트랙트로, 크게 6가지 기능을 수행합니다.

  1. MINT : 포지션 생성

  2. BURN : 포지션 소각

  3. SWAP : 풀에서 스왑처리

  4. COLLECT : 발생한 스왑 수수료 수취

  5. FLASH : flash loan 수행

  6. DEPOSIT_AIRDROP : 에어드랍 보상 예치 (예치된 에어드랍 보상은 1주간 선형 분배)

Concentrated Liquidity Pool은 유저의 자산을 직접적으로 다루기 때문에 Non-Upgradable Contract로 설계되었으며, low level 메서드로 구성되어 있습니다.

이를 처리하기 위해 Concentrated LiquidityPool의 메서드를 직접 호출하기 보다 high level contract인 ConcentratedLiquidityPoolManager와 poolRouter를 통해 호출하길 권합니다.

Methods

burn

function burn(int24 lower, int24 upper, uint128 amount) external nonpayable returns (uint256 token0Amount, uint256 token1Amount)

Burns LP tokens - should be called via the Concentrated Liquidity pool manager contract.

collect

function collect(int24 lower, int24 upper, uint256 desiredToken0Fees, uint256 desiredToken1Fees) external nonpayable returns (uint256 token0Fees, uint256 token1Fees)

Collects tokens owed to a position

collectProtocolFee

function collectProtocolFee() external nonpayable returns (uint128, uint128)

factory

function factory() external view returns (address)

Returns the address of the factory contract

feeGrowthGlobal0

function feeGrowthGlobal0() external view returns (uint256)

The fee growth of token0 collected per unit of liquidity for the entire life of the pool

feeGrowthGlobal1

function feeGrowthGlobal1() external view returns (uint256)

The fee growth of token1 collected per unit of liquidity for the entire life of the pool

flash

function flash(address recipient, uint256 amount0, uint256 amount1, bytes data) external nonpayable

Receives token0 or token1 and pays it back with fee

getAssets

function getAssets() external view returns (address[] tokens)

Returns the list of the tokens of the pool, sorted by address

getImmutables

function getImmutables() external view returns (uint128 MAX_TICK_LIQUIDITY, uint24 tickSpacing, uint24 swapFee, address factory, address masterDeployer, address token0, address token1)

getPriceAndNearestTicks

function getPriceAndNearestTicks() external view returns (uint160 price, int24 nearestTick)

Returns the price and nearestTick

getReserves

function getReserves() external view returns (uint128 reserve0, uint128 reserve1)

Returns the reserve of token0 and token1

getSecondsGrowthAndLastObservation

function getSecondsGrowthAndLastObservation() external view returns (uint160 secondGrowthGlobal, uint32 lastObservation)

Returns the information about seconds growth global and the timestamp of the observation

liquidity

function liquidity() external view returns (uint128)

Returns the current in range liquidity available to the pool

mint

function mint(IConcentratedLiquidityPoolStruct.MintParams data) external nonpayable returns (uint256 liquidityMinted)

nearestTick

function nearestTick() external view returns (int24)

Returns the tick that is just below the current price.

positions

function positions(address owner, int24 lower, int24 upper) external view returns (struct IConcentratedLiquidityPoolStruct.Position)

Returns the information about the position

price

function price() external view returns (uint160)

Sqrt of price aka. √(token1/token0), multiplied by 2^96.

rangeFeeGrowth

function rangeFeeGrowth(int24 lower, int24 upper) external view returns (uint256 feeGrowthInside0, uint256 feeGrowthInside1)

Returns the fee growth of token0 & token1 inside the given price range

swap

function swap(bytes data) external nonpayable returns (uint256 amountOut)

Swaps one token for another. The router must prefund this contract and ensure there isn't too much slippage.

swapFee

function swapFee() external view returns (uint24)

1000 corresponds to 0.1% fee. Fee is measured in pips.

tickSpacing

function tickSpacing() external view returns (uint24)

Returns the tick spacing of the pool.

Ticks can only be used at multiples of this value, minimum of 1 and always positive e.g.: a tickSpacing of 3 means ticks can be created every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...Reference: tickSpacing of 100 -> 1% between ticks.

ticks

function ticks(int24 tick) external view returns (struct IConcentratedLiquidityPoolStruct.Tick)

Looks up the information about a specific tick in the pool

token0

function token0() external view returns (address)

Returns the address of the first of the two tokens of the pool, sorted by address

token1

function token1() external view returns (address)

Returns the address of the second of the two tokens of the pool, sorted by address

totalTicks

function totalTicks() external view returns (uint256)

Returns the number of ticks in the Pool, starts with two ticks (MIN_TICK ~ MAX_TICK)

Last updated