Price Tick

틱(Tick)이란

Pangea 의 유동성 공급자들은 서로 다른 가격 구간에 유동성을 공급할 수 있습니다. 유동성 공급자들이 서로 다른 가격 구간에 유동성을 공급하기 때문에, 풀에서 스왑을 위해 사용하는 유동성의 크기는 가격 구간마다 달라져야 합니다.

아래의 예시를 보겠습니다. LP X 와 LP Y 는 서로 다른 가격구간에 각자가 유동성(Lx, Ly) 을 공급했습니다. 풀의 가격이 스왑에 의해 Pc 에서 Pb 까지 변화하게 될 경우, Pc~Pa 구간에서는 둘의 유동성을 합한 Lx+Ly 를 스왑에 사용하고, Pa~Pb 구간에서는 Lx 만을 스왑에 사용하게 됩니다.

가격의 변화에 따른 유동성 크기의 조정을 보다 효율적으로 하기 위해 Pangea 의 Concentrated Liquidity Pool 에서는 연속적 가격 구간을 0.01% 단위로 분절한 틱(Tick) 단위로 유동성을 관리합니다. 유동성 공급자들은 자신의 포지션이 공급될 최소 가격 틱최대 가격 틱을 정하여 그 사이 구간에 유동성을 공급하게 됩니다.

틱 간격(Tick Spacing)

틱은 기본적으로 1 basis point 로 구성되어, 각 틱 마다 0.01%를 단위로 나누어집니다. 하지만 Pangea 의 풀들에 대해 1틱 단위로 가격을 나누어 처리하는 것은 비효율적일 것입니다. 가격이 변화하여 틱을 지날 때마다 해당 구간 내에서 유동성 공급자들이 벌어들인 수수료를 정산하고, 새로운 틱의 유동성 크기를 계산해야 하기 때문입니다. 이러한 연산들은 큰 규모의 스왑 요청이 들어올 때 높은 가스비를 발생시킬 수 있습니다.

따라서 Pangea 에서는 풀을 생성할 때 풀의 속성에 따라 틱 간격(tick spacing)을 지정합니다. 틱 간격이 5인 경우에는 약 0.05% 단위로 가격 구간을 조정할 수 있고, 틱 간격이 60인 경우에는 약 0.6% 단위로 가격 구간을 조정할 수 있습니다.

P(i)=1.0001iP(i) = 1.0001^i

틱의 구조 (Tick Structure)

스시스왑의 Trident 프로토콜을 바탕으로 설계된 Pangea 의 틱은 유니스왑 V3 와는 다른 구조를 가집니다. 유니스왑 V3는 틱을 배열(array)의 형태로 구현하였지만, Pangea 의 틱은 Linked List 의 형태로 구현되어 있습니다.

틱의 규칙

유동성 공급자가 유동성을 공급할 때에 지정하는 가격 구간의 틱은 해당 풀의 틱 간격(tick spacing)의 배수(multiple)로 이루어져야 합니다. 최저 가격(Min Price 또는 Price Lower)의 틱은 틱 간격의 짝수 배, 최고 가격(Max Price 또는 Price Upper)의 틱은 틱 간격의 홀수 배로 지정되어야 합니다.

  • Lower Tick = Tick Spacing * Even Number

  • Upper Tick = Tick Spacing * Odd Number

또한 Linked List 로 설계된 판게아의 틱 특성 상, 유동성을 공급할 때에는 Lower Tick 의 직전 틱과 Upper Tick 의 직전 틱을 함께 담아서 호출해야 합니다. 이런 복잡도를 해소하기 위해 Pangea 프로토콜의 PoolManager 컨트랙트에는 Lower Tick 과 Upper Tick 에 대한 보정 로직이 내장되어 있습니다. 해당 로직은 유동성 공급자가 틱을 지정하고 유동성을 공급하면 Pangea 의 틱 규칙에 맞게 보정하여 넣는 작업을 수행합니다.

Last updated