Allen Dev Blog

디파이 개발 (유니스왑 편)
(1) 유니스왑 기본 개념

디파이 개발 (유니스왑 편)<br>(1) 유니스왑 기본 개념

유니스왑은 이더리움 및 ERC-20 토큰 간의 거래(교환)을 할 수 있도록 하는 프로토콜입니다. 유니스왑은 스마트 컨트랙트를 통하여 토큰 간의 거래가 이루어지기 때문에 중앙화된 시스템이 아닌 탈중앙화된 방식으로 토큰을 교환할 수 있습니다.

따라서 유니스왑도 코인과 코인을 거래할 수 있는 시스템이기 때문에 탈중앙화 거래소라고 생각할 수 있습니다. 하지만 유니스왑 거래소는 중앙화된 거래소와 다른 매커니즘을 가지고 거래를 합니다. 이 포스트에서는 유니스왑의 가격 매커니즘이 어떻게 되고, 스마트 컨트랙트를 통하여 이를 어떻게 구현했는지 분석해볼 것입니다.

(이 포스트는 유니스왑 V2 를 기준으로 작성되었습니다.)

우선 코인 거래 및 가격 결정 매커니즘을 위한 여러가지 개념에 대해 알아봅시다.

호가창(Order Book)

일반적으로 거래소에서는 호가창(Order Book) 을 통하여 코인 거래가 이루어지며, 가격이 결정됩니다. 거래소 이용자들은 매매하려는 코인, 가격, 수량, 매수/매도를 등록해놓으면 해당 코인의 호가창에는 해당 가격에 해당 수량만큼 매수(또는 매도) 가 추가됩니다. 같은 가격에 매수 및 매도하는 사람이 동시에 존재하면 그 차익에 해당하는 양만큼 코인의 거래가 이루어지게 됩니다.

글로 설명은 어렵지만 주식 또는 코인 거래를 해본 사람이라면 어느 정도 이해할 것이라 생각합니다.

하지만 유니스왑에서는 일반적인 거래소의 호가창(Order Book) 매커니즘을 사용하지 않습니다. 아래는 유니스왑 앱 내에서 ETH 를 USDT 로 스왑하는 페이지입니다.

현재 1 ETH 시세는 $2,289.48 이며, USDT 로 교환하였을 때는 2291.98 USDT 를 얻을 수 있습니다. 이 포스트를 작성했을 당시의 이더리움 시세와 거의 유사했으며, 따라서 교환 비율이 얼추 맞는 것을 확인할 수 있습니다.

유니스왑은 일반적인 거래소의 호가창 개념을 사용하지 않고, 어떻게 가격을 맞출 수 있는 것일까요?

유동성 공급자(LP, Liquidity Provider)

먼저 거래 매커니즘을 설명하기 전에 유동성 공급자에 대한 이해가 필요합니다. 유동성공급자(LP)란 금융상품의 매매를 원활하게 할 수 있도록 시장에 적당히 물량을 공급하는 시장참가자를 의미합니다. 유동성 공급은 기존 주식 시장에도 존재하는 개념입니다. 먼저 주식 시장을 예를 들어 설명해볼까요?

주식 시장에서는 KOSPI 지수 등락률의 2배로 움직이는 KODEX 레버리지라는 상품이 있습니다. 코스피 지수가 3,000 이고, KODEX 레버리지 상품의 가격이 30,000원이라고 가정해볼 때, 코스피 지수가 1% 상승하여 3,030 이 되었을 경우 KODEX 레버리지 상품의 가격은 2% 상승한 30,600원이 되는 식이죠.

KOSPI 지수 상승률 예상 KODEX 레버리지 가격
3,000 0% 30,000원
3,030 1% 30,600원
2,970 -1% 29,400원
2,700 -30% 24,000원
3,300 30% 36,000원

그럼 어떻게 KODEX 레버리지 상품은 KOSPI 지수의 2배를 추종하여 가격이 결정될 수 있는 것일까요? 간단합니다. KODEX 레버리지 상품을 만든 증권사에서 가격을 조종합니다. KOSPI 지수가 1% 상승했는데 KODEX 레버리지의 가격이 30,100원이라면 이론적으로는 2% 상승한 30,600원이 되어야 하므로 증권사에서 해당 상품을 매수하여 가격을 30,600원 부근으로 맞추는 작업을 합니다. 따라서 증권사가 LP 역할을 한다고 볼 수 있습니다.

상품이 생긴지 얼마 되지 않거나 시장의 주목을 받지 않는 상품의 경우 매수 및 매도가 거의 발생하지 않기 때문에 가격이 왜곡되는 경우가 발생합니다. 이 경우에 LP(증권사)가 시장에 직접 개입함으로써 적당한 가격에 맞추고, 해당 가격에 매수 및 매도 물량을 적당히 공급하여 새로운 시장 참여자가 해당 상품을 매수할 때 적당한 가격에 매수할 수 있도록 하고, 나중에 매도할 때도 적당한 가격에 매도할 수 있도록 하는 역할을 합니다.

이후에 시장 참여자가 점점 많아지면 LP 의 개입이 점점 줄어들 것입니다. 왜냐하면 차익 거래자들이 생기기 때문입니다. 예를 들어, KOSPI 지수가 1% 상승하여 가격이 이론적으로 30,600원이 되어야 하는데 현재 가격이 30,100원이라면 현재 상품의 가격이 저평가되었다고 생각하여 사람들이 시장 참여자들이 매수할 것이고, 반대로 현재 가격이 31,000원이라면 현재 상품의 가격이 고평가되었다고 생각하여 매도할 것이기 때문입니다.

따라서 LP 를 통해 이루고자 하는 목표는

  1. 시장의 참여자가 거의 없을 때는 가격 왜곡이 발생하기 때문에 LP(ex. 증권사)가 시장에 직접 개입하고, 물량을 공급하여 가격을 안정시킨다.
  2. 가격이 안정되면 시장의 참여자가 참여하기 원활해지며, 시장의 참여자가 많아지면 차익 거래에 의해 가격이 자동으로 안정이 된다.
  3. 2번의 목표가 이루어지면 LP 는 가끔씩 발생하는 가격 왜곡에 대해서만 시장 개입을 하면 된다.

Automated Liquidity Protocol

유니스왑 공식 페이지에서는 유니스왑을 Automated Liquidity Protocol 이라고 표현하고 있습니다. 주식 시장에서 증권사가 LP 역할을 했다면 유니스왑에서는 누구나 스테이킹을 통해 LP 역할을 수행할 수 있습니다.

누구나 자신이 가지고 있는 이더리움 또는 이더리움 기반의 ERC-20 코인을 스마트 컨트랙트에 예치(deposit)하여 LP 역할을 수행할 수 있으며, LP 를 제공하면 거래가 일어날 때마다 발생하는 거래 수수료를 보상으로 받을 수 있습니다. (다만 참가할 때 한 쌍의 코인, 즉 2개의 코인을 동일한 가치만큼 스테이킹해야 합니다. 한가지의 자산만 가지고는 스테이킹할 수 없습니다)

예를 들어, DAI 라는 코인이 존재하고, DAI 코인의 가치는 1ETH = 2000DAI 라고 가정해봅시다. 그럼 ETH:DAI 비율은 1:2000이라고 할 수 있으며, 동일한 비율로 두 개의 코인 쌍을 LP 로 제공할 수 있습니다. 예를 들어 제가 유니스왑 스마트 컨트랙트에 10ETH 와 20000DAI 를 유니스왑 스마트 컨트랙트로 보내서 LP 로 제공할 수 있습니다.

이렇게 2개의 코인 쌍을 LP 를 제공하면 사람들은 이 스마트 컨트랙트에서 이더리움을 DAI 코인으로 비율에 맞게 교환(SWAP)할 수 있게 됩니다. A 라는 사람은 0.5ETH 를 가지고 DAI 코인으로 교환하고자 한다면 0.5ETH 가치에 해당하는 100DAI 를 교환할 수 있게됩니다. 즉, 제가 LP 가 됨으로써 A 라는 사람은 ETH-DAI 간 코인 교환을 할 수 있게 되고, 이 교환 과정에서 일정량을 수수료를 내야하며, 제가 LP 를 제공했으므로 제가 그 수수료를 받을 수 있게 됩니다.

즉, 유니스왑의 시장 참여자는 두 가지 부류로 나눠지게 됩니다.

  • LP 역할을 수행하는 시장 참여자 (스테이킹 참여자)
  • 코인을 거래하는 시장 참여자

LP 역할을 수행하는 시장 참여자가 많아지면 시장이 안정화되기 때문에 유니스왑에서 코인을 거래하는 시장 참여자가 많아질 것입니다.

또한 유니스왑에서 코인을 거래하는 시장 참여자가 많아질수록 수수료가 늘어나기 때문에 수수료 수익을 얻기 위하여 LP 역할을 수행하는 시장 참여자가 많아질 것입니다.

이 선순환의 반복으로 시장이 점점 활성화될 것입니다.

다만 여기서 여러가지 의문점이 생길 수 있습니다.

  1. 거래가 발생하면 비율이 변하게 됩니다. ETH:DAI 는 1:2000 이었는데 사람들이 ETH 를 DAI 로 스왑하게 되면 ETH 의 양은 늘어날 것이고, DAI 의 양은 줄어들기 때문에 1:2000의 비율이 바뀌게 될 것입니다. 이 때 비율이 어떻게 바뀌어야 할까요?
  2. 1번이 스왑으로 인한 비율의 변화라면 이번엔 코인의 가치가 실제로 바뀌게 되었을 경우입니다. 원래 1ETH = 2000DAI 의 가치였는데 다른 거래소에서 이더리움의 가격이 상승하여 1ETH = 3000DAI가 되면 어떻게 될까요?

프로토콜에 따라서 거래 시 어떤 가격에 거래될 것인가를 정의하는 것이 다를 수 있습니다. 예를 들어 유니스왑의 경우 가격 결정 알고리즘으로 x * y = k 의 공식을 사용합니다. 이 가격 결정에 따라서 거래와 스테이킹이 이루어진다고 보면 됩니다.

이렇게 프로토콜에서 적절하게 정의한 알고리즘에 따라서 자동으로 가격이 결정되고, 거래가 이루어지는 것을 AMM(Automated Market Maker) 이라고 합니다.

Conclusion

이번 포스트에서는 유니스왑의 기본 개념에 대해서 살펴보았습니다.

다음 포스트에서는 유니스왑 내에서 알고리즘에 따라서 가격이 어떻게 결정되는지 AMM 의 동작 원리에 대해 더 자세히 살펴보겠습니다.

References

디파이 개발 (유니스왑 편)<br>(1) 유니스왑 기본 개념
Prev post

React Native 에서 프레임 드랍없는 애니메이션 만들기

Next post

스마트 컨트랙트 사건/사고 사례
(1) MoonCatRescue

디파이 개발 (유니스왑 편)<br>(1) 유니스왑 기본 개념

Get in touch