스왑 계산기

마지막 업데이트: 2022년 4월 16일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
본 아티클은 [Uniswap Series]의 두 번째 게시글로 Uniswap의 암호화폐 가격 결정 방법을 이해할 수 있도록 수식을 기반으로 작성되었습니다. 본 게시글에서는 Uniswap 서비스의 기본 개념을 다루지 않기 때문에, 본 아티클에 들어가기에 앞서 이전 아티클인 1. 유니스왑 이해하기 를 읽고 오시는 것을 추천해 드립니다.

디파이 이자 농사에 대한 설명

디파이의 비허가형 결합성, 체인링크의 분산형 오라클, 이자 농사(Yield Farming)과 같은 새로운 금융 상품 덕분에 전 세계 스마트 컨트랙트 개발자들은 전례 없는 속도로 새로운 디앱을 개발 및 배포하고 있습니다. 올 초부터 현재까지 디파이의 유저 예치액 규모는 $7천만에서 $80억 규모로 증가했고 그중 $30억 이상은 체인링크 가격 피드에서 가격 데이터를 제공하고 있습니다.

전례 없는 속도의 성장 뒤에는 디파이 생태계의 본질적 특성인 개발과 혁신의 빠른 속도가 있습니다. 현재 전통적 금융 시스템의 비효율성 및 거래상대방 리스크 때문에 불가능했던 새로운 형태의 금융 상품이 이 덕분에 쏟아지고 있습니다. 이자 농사(Yield Farming)는 현재 디파이 세계에서 가장 혁신적인 사례이며 유동성 채굴(Liquidity Mining)이라고 불리기도 합니다.

이자 농사는 디앱 생태계에 유동성을 공급하거나 다른 부가가치를 제공하는 사용자에게 보상을 지급합니다. Yield Farmer는 애플리케이션의 네이티브 거버넌스 토큰에 비례해 보상을 받고 공급한 유동성에 대해 더 높은 APY(Annual Percentage Yield)를 받고 있습니다. 이자 농사로 얻을 수 있는 보상은 디앱 내 거래 스왑 계산기 수수료 및 머니 마켓(단기금융시장) 대출 이자 등 기존에 이미 존재하는 수익에 추가로 지급되는 보상입니다. 몇몇 프로젝트는 이자 농사 보상을 통해 사용자가 플랫폼에 참여할 수 있도록 유도하거나 커뮤니티 및 마케팅 지원, 또는 개발자 이니셔티브와 같은 다른 서비스에 활용하기도 합니다.

이자 농사 방법을 사용할 때 다음 두 가지 목표를 고려합니다.

  • 유저가 디앱에 유동성을 공급 및 예치(lock up) 시킬 수 있도록 독려해 TVL(총예치금, Total Value Locked)을 증가 시켜 디파이 생태계 공급을 담당합니다. 유동성이 풍부해지면 유저들이 겪는 슬리피지가 줄어들고 생태계의 수요도 증가 시켜 경쟁자보다 우위를 점할 수 있습니다.
  • 디파이 애플리케이션의 거버넌스 토큰을 공평하게 분배해 다른 곳에 자금을 예치하지 않는 기회비용을 감수 (예: 비영구적 손실) 한 프로토콜 유저에게 기회를 줍니다. 토큰을 공평하게 분배하면 공급 측면에서 특권을 지닌 주체가 없기 때문에 시작 단계에서부터 탈중앙형 거버넌스를 실행할 수 있습니다.

디파이 프로토콜은 원하는 목표에 따라 이자 농사에 대한 다른 방식을 취하는데 위에 언급한 두 가지 중 적어도 하나의 목표는 고려합니다. DEX에서부터 머니 마켓 등에 이러는 다양한 애플리케이션이 이자 농사 모델을 채택해 토큰을 런칭했고 다양한 사용 사례를 지닌 프로젝트가 프로토콜의 거버넌스에 적극적으로 참여하는 초기 유저의 네트워크 효과로 인해 혜택을 보았습니다.

오늘 포스트에서는 이자 농사에 대한 장점 및 이자 농사 방식을 활용해 유동성과 토큰 분배를 잘한 프로젝트에 대해 살펴볼 것입니다. 오늘 글은 이자 농사가 가진 가치를 단순히 보여주기 위한 글이며 긍정적 또는 부정적인 견해를 밝히는 글이 아님을 알려드립니다.

디파이에서 유동성 활용하기

이자 농사의 초기 버전은 디파이 경제 내 특정 자산에 대한 유동성을 직접적으로 공급하는 데 사용되었습니다. 이자 농사의 선구자는 신세틱스(Synthetix)로 체인링크 가격 피드를 사용하는 분산형 파생상품 프로토콜입니다. 신세틱스는 2019년 중순 유동성 메커니즘을 출시해 유니스왑(Uniswap)에서 sETH/ETH 유동성 공급자에게 보상을 제공했습니다. 컨트랙트를 통해 유니스왑에서 토큰화된 sETH/ETH 유동성 풀을 스테이킹한 유저들은 유동성에 공급한 예치액에 비례한 만큼의 SNX 토큰(신세틱스 네이티브 토큰)을 받았습니다.

결과적으로 유동성 공급자들만 유니스왑 거래 수수료 외에 추가 이자 수익을 올린 것이 아니라 신세틱스 생태계에 새롭게 진입하려는 새로운 트레이더에게도 장벽을 낮춰주는 역할을 했습니다. 신세틱스 생태계에서 ETH를 sETH (신세틱스의 ETH synth)를 더 낮은 슬리피지로 전환할 수 있기 때문이었습니다. sETH를 획득한 유저들은 신세틱스 생태계에서 상품, 명목화폐, 암호화폐, 지수 등에 대해 익스포저를 취한 다른 신스(synth)로 전환할 수 있었습니다. 이 이자 농사 방식을 채택한 프로그램 자체는 현재 중단되었지만, 그 이후 신세틱스는 다수의 다른 인센티브 메커니즘을 통해 uUSD, sBTC와 같은 다른 신스에 대한 유동성을 늘려나갔습니다.

신세틱스가 이 분야에서 진정한 선구자 역할을 하였지만 2020년 6월 컴파운드(Compound)가 거버넌스 토큰을 런칭한 후 이자 농사가 크게 대중화되었습니다. 이후 새롭고 혁신적인 이자 농사 방식을 도입한 디파이 프로젝트가 폭발적으로 증가하였습니다. 새로운 프로젝트가 성공적으로 런칭할 때마다 다른 종류의 이자 농사 메커니즘이 실제 세계에서 테스트가 되어 효과를 측정해 비효율적인 부분을 개선하였습니다.

신세틱스가 이 분야에서 진정한 선구자 역할을 하였지만 2020년 6월 컴파운드(Compound)가 거버넌스 토큰을 런칭한 후 이자 농사가 크게 대중화되었습니다. 이후 새롭고 혁신적인 이자 농사 방식을 도입한 디파이 프로젝트가 폭발적으로 증가하였습니다. 새로운 프로젝트가 성공적으로 런칭할 때마다 다른 종류의 이자 농사 메커니즘이 실제 세계에서 테스트가 되어 효과를 측정해 비효율적인 부분을 개선하였습니다.

이사 농사의 지속적인 발전에는 다음이 포함됩니다.

  • 스테이킹할 수 있는 다양한 종류의 디파이 토큰 지원 (특정 토큰 스왑 계산기 커뮤니티 유입)
  • 다양한 종류의 유동성 풀 지원 (예: 유니스왑, 밸런서 등)
  • 스테이킹된 유동성 풀 비중에 대한 비율 (예: 98:2 vs 50:50)
  • 특정 스테이킹 풀에 대한 보상 강화 (특정 토큰에 대한 예치 장려)
  • 그 외

그 결과 기존 디자인을 유지하면서도 고유한 가치를 가진 다양한 종류의 디앱이 생겨났습니다.

현재 이자 농사가 진화하면서 디파이 커뮤니티 내 이자 농사 프로젝트를 서포트하고 있는 풀의 종류에 대한 새로운 전문용어의 탄생으로 이어졌습니다. 예시로는 Pool 1과 Pool 2가 있습니다. Pool 1은 유저들이 이미 유동성이 있는 거래소에 상장된 다양한 토큰 (예: ETH, 스테이블코인 등)을 스테이킹할 수 있도록 하는 이자 농사 풀입니다. Pool 2는 이자 농사를 위한 거버넌스 토큰에 대한 익스포저를 취해 해당 토큰에 대한 유동성에 비례해 이자에 대한 수익을 취할 수 있도록 하는 풀입니다. 현재 디파이의 발전 속도를 고려했을 때 미래에 이자 농사는 현재보다 더 큰 가치를 전달할 수 있으이라 생각합니다.

유동성과 네트워크 효과의 중요성

디파이 프로토콜이 사용자에게 간접적으로 토큰을 배분하려는 이유를 더 잘 이해하려면 디파이에서 유동성의 중요성에 대해 이해하는 것이 중요합니다. 디앱은 완전히 오픈소스이므로 primary defensive moat이 그들의 커뮤니티이자 유동성이 예치되는 곳입니다. 오래 지속되는 프로토콜은 비즈니스 로직에만 초점을 맞추는 것이 아니라 지속적인 네트워크 효과를 계속 누릴 수 있도록 하는 방법에도 주목합니다. 네트워크는 그저 코드 그 자체만이 아닌 프로토콜 채택에서부터 사용자, 커뮤니티 지원, 창출되는 가치 그 이상을 내포하고 있습니다.

이러한 이유로 프로토콜은 이자 농사를 도입해 유동성을 생성하는 사람들에게 직접적인 인센티브를 제공하여 더 우수한 유저 경험을 제공할 수 있길 원했습니다. 디파이 애플리케이션에 유동성 (공급)이 증가할수록 더 많은 사용자 (수요)가 유입되고 성장의 선순환이 스왑 계산기 이뤄집니다. 이 사이클을 통해 낮은 슬리피지 및 더 많은 보상을 제공하는 시장 리더 애플리케이션에 사용자와 유동성 공급자들이 자연스레 몰려 블랙홀처럼 유동성을 지속해서 흡수했습니다.

이러한 현상에서 유동성은 defensible moat라고 생각되었지만, 완전히 극복할 수 없는 문제는 아니었습니다. 사실 이자 농사 인센티브를 통해 다른 프로토콜에서 유동성을 빼앗아 올 수 있었습니다. 이는 만약 충분한 유동성이 이동한다면 해당 유동성을 기반으로 한 네트워크가 효율성을 위해 기존 프로토콜에서 새로운 프로토콜로 이동하는 “플리프닝(flippening)” 효과로 이어졌습니다. 이는 뱀파이어 채굴(vampire mining)이라 알려져 있습니다. 이 효과가 장기적으로 효과가 있는지는 아직 밝혀지지 않았지만, 프로토콜의 유동성만큼이나 이자 농사도 유동성 전쟁을 불러일으킬 만한 영향력이 있다는 것을 의미합니다. 결론적으로 이자 농사는 다양한 목표를 달성하는데 사용될 수 있다는 것을 보여줍니다.

이자 농사로부터 생성된 토큰은 유저들이 더 많은 자금을 유동성을 위해 예치하도록 장려합니다. 또한 디파이 애플리케이션이 창출하는 토큰 수수료의 일부분도 유저의 몫이 될 수 있고 새로운 이자 농사 풀을 추가하는 것에 대한 투표 등 프로토콜의 미래를 위한 거버넌스에 참여하도록 독려할 수 있습니다. 하지만 이러한 디앱이 중앙화 방식에서 벗어나 탈중앙형 거버넌스를 실현하기 위해 토큰은 개별 유저들에게 배분이 되어야 합니다. 그렇기 때문에 이자 농사의 두 번째 기능이 중요합니다.

공평한 토큰 분배 및 이해관계자로 구성된 커뮤니티 형성하기

비록 이자 농사의 원래 목표는 아니지만, 토큰을 공평하게 분배하는 분배 모델 역할도 할 수 있습니다. 선택된 소수의 투자자 및 인사이더 에게만 대량의 토큰을 할당하는 방식이 아닌 유저들의 기여도에 따라 커뮤니티 내에서 모두가 토큰에 대한 공평한 접근성을 가질 수 있습니다. 분배된 토큰을 통해 커뮤니티 내 프로토콜이 유기적으로 작동하도록 하며 필요한 변경 또는 추가사항에 대한 집단 의사결정을 내릴 수 있습니다.

이자 농사를 스왑 계산기 이용해 공평한 분배 방식을 채택하려는 프로젝트는 토큰 공급이 다수의 참여자에게 공평하게 분배되는 것만 보장하는 것이 아니라 토큰이 프로토콜 생태계에 가치를 기여하는 유저들에게 직접 배포될 수 있도록 합니다. 그 결과 토큰 보유자들은 각자 보유하고 있는 토큰의 가치를 높이기 위해 강한 커뮤니티 소속감이 생깁니다. 인센티브를 가진 이해관계자들은 더 장기간 함께 커뮤니티에 머무를 것이며 생태계에 가치를 제공할 것입니다.

가장 중요한 예시는 YFI, 와이언파이낸스(yEarn Finance)의 네이티브 거버넌스 토큰입니다. 와이언파이낸스는 현재 시점에서 가장 최적의 이자율을 바탕으로 디앱의 유동성을 자동으로 공급하는 스마트 컨트랙트입니다. 올해 6월, 와이언파이낸스는 이자 농사라는 컨셉이 아직 생소할 때 2주에 걸쳐 다양한 풀에 있는 유동성 공급자들에게 30,000 YFI 토큰을 발행하여 공개적으로 분배했습니다. YFI를 채굴한 유동성 공급자의 대부분은 디파이 생태계에 대한 해박한 지식이 있었고 그들은 이후 YFI 커뮤니티를 형성하였습니다. 그 이후 분배된 YFI 토큰은 다양한 디파이 애플리케이션에 예치가 되었고 이를 통해 유저들은 그저 토큰을 보유하는 것이 아니라 적극적으로 토큰을 활용해 와이언 생태계에 유동성을 추가로 공급하는 행태를 보였습니다.

공평한 토큰이 출시된다면 민주주의적 방식으로 커뮤니티가 자연스럽게 형성되어 커뮤니티 멤버가 프로토콜의 발전에 대한 직접적인 금전적 인센티브가 있기 때문에 생태계 성장으로 이어질 수 있습니다. 와이언의 이자 농사 메커니즘은 yCRV (yEarn으로부터 이자를 창출하는 스테이블코인 바스켓)를 위한 풍부한 유동성을 제공할 수 있었고 YFI의 공평한 분배 방식으로 인해 프로젝트의 성공이 현재진행형으로 이어지는 데에 기여했다고 생각합니다. 즉, 이자 농사로 인해 와이언은 디파이 프로토콜에서 필요한 핵심 요소 두 가지를 충족시키게 되었습니다. 유저 기반의 큰 유동성 풀의 네트워크 효과 증대 및 프로토콜 발전에 힘쓰는 열정적인 커뮤니티 형성이라는 두 가지 토끼를 잡았습니다.

체인링크가 지원하는 이자 농사 프로토콜

이사 농사가 제공하는 유동성 장려 및 공평한 분배를 더 촉진시키기 위해 스마트 컨트랙트 개발자는 추가 인프라를 활용해 목표를 달성할 수 있습니다. 한 가지 핵심 인프라는 체인링크와 현재 이미 널리 사용되고 있는 체인링크의 탈중앙형 오라클 네트워크가 제공하는 가격 피드입니다. 체인링크 가격 피드는 이미 이자 농사에서 다양하게 사용되고 있으며 아직 더 큰 가능성이 많습니다.

  1. 토큰 락업(Token Lockup) – 폴카닷 기반 프로토콜인 플라즘(Plasm)은 보상 분배가 일어나는 시점에 스테이킹된 자산의 가치와 스테이킹된 자산이 프로토콜에서 락업(예치)되었던 시간을 고려해 토큰을 분배합니다. 이는 유동성을 장기적으로 공급하기 위한 인센티브 제공 방식이라 볼 수 있습니다.
  2. 풀 기여도에 비례한 보상 – 스트롱블록(StrongBlock)이라는 디파이 프로토콜은 다중 자산 풀에 스테이킹된 자산의 총 USD 금액을 계산하기 위해 체인링크 가격 피드를 결합해 보상을 비례적으로 배분할 수 있는 방식을 채택했습니다. 덕분에 스트롱블록은 다양한 자산을 포함한 큰 풀을 바탕으로 이자 농사를 해 더 가치가 높은 유동성을 제공하는 유저들에게 더 큰 보상을 제공하는 방식을 채택했습니다.
  3. 자동 조절되는 보상 – 이자 농사 토큰의 시장 가격을 온체인에서 제공하기 위해 체인링크 가격 피드를 사용할 수 있습니다. 이를 통해 토큰 발행양을 자동으로 조정해 글로벌 시장 가격을 바탕으로 조율해 유저들에게 돌아가는 이자 농사 수익을 안정화할 수 있습니다. 또한, 체인링크가 오피움 프로토콜(Opium Protocol)의 파생상품 프로덕트를 위한 YFI/ETH가격 피드를 런칭했던 것처럼 이자 농사에서 사용되는 토큰을 지원하는 새로운 디파이 기반 금융 상품을 다른 디앱에서 빠르게 개발하기 위해 체인링크 가격 피드를 사용할 수 있습니다.

체인링크 가격 피드를 활용해 조합할 수 있는 방식과 가능성에는 한계가 없습니다.

이자 농사는 유동성을 장려하고 토큰을 공평하게 분배하는 이중 효과를 증명한 디파이 내 새로운 금융 상품이 되었습니다. 이자 농사로 인해 기존에 불가능했던 일이 실현되었습니다. 다수의 디파이 애플리케이션에서 토큰 스왑에 대한 슬리피지가 낮아지고 더 끈끈한 커뮤니티를 형성할 수 있도록 해 커뮤니티의 성장으로 이어져 디파이 이해관계자들 또한 많은 혜택을 누렸습니다. 또한 이자 농사 성장에 관련된 수많은 프로젝트의 성공으로 이어져 현재 수억에서 수십억 가량의 유저 자금을 보유하고 있고 시간이 지날수록 규모가 더 커지고 있습니다.

이자 농사가 미래에 어떤 방식으로 진화할지, 현재 형태가 장기적 성장에 도움이 될지는 지켜봐야 할 것 같습니다. 하지만 한 가지 확실한 점은 디파이는 끊임없는 혁신을 불러일으키고 있고 현재 형태와는 다를 수는 있지만 금융 상품의 한 방식으로의 이자 농사는 스왑 계산기 계속될 것입니다. 디파이의 성장과 더불어 이자 농사와 같이 개발자들이 필요한 사용 사례를 위한 디앱을 만들 수 있도록 체인링크는 분산형 오라클 인프라를 제공해 개발자들이 더 많은 혁신을 이끌 수 있도록 도울 것입니다.

더 알아보기

체인링크 가격 피드를 활용해 이자 농사 애플리케이션을 만들고 싶은 개발자라면 quick-start tutorial 페이지를 확인해 어떻게 시작할 수 있는지 단계별 가이드를 확인해보세요. 만약 직접 개발한 스마트 컨트랙트를 오프체인 데이터와 블록체인 외부 인프라에 연결하고 싶은 개발자라면 이곳을 통해 저희에게 연락하시거나 개발자 문서 페이지를 방문해주세요.

[UNISWAP SERIES] 2. CPMM 이해하기

본 아티클은 [Uniswap Series]의 두 번째 게시글로 Uniswap의 암호화폐 가격 결정 방법을 이해할 수 있도록 수식을 기반으로 작성되었습니다. 본 게시글에서는 Uniswap 서비스의 기본 개념을 다루지 않기 때문에, 본 아티클에 들어가기에 앞서 이전 아티클인 1. 유니스왑 이해하기 를 읽고 오시는 것을 추천해 드립니다.

Uniswap은 2가지의 암호화폐의 스왑(환전) 거래를 제공하는 탈중앙화 거래소입니다. 거래소 구현방식으로는 중앙화 거래소가 사용하는 오더북 형식이 아닌 AMM 방식을 선택했습니다. AMM 방식을 통한 Uniswap의 토큰 스왑 과정은 다음과 같습니다.

  1. ETH와 DAI를 스왑할 수 있는 ETH/DAI 풀을 만든다.
    (가정: ETH의 현재 가격 = $100, DAI의 현재 가격 = $1)
  2. 유동성 공급자는 1:1 비율로 풀에 1 ETH와 100 DAI를 예치한다.
  3. 1 ETH를 풀에 예치한 후 n 개의 DAI를 받는다.

2번에서 언급된 1:1 비율은 암호화폐의 개수가 아닌 가치로 결정된 비율입니다. ETH의 현재 가치가 $100이고, DAI의 현재 가치가 $1 라고 가정할 때, 유동성 공급자는 2번 과정에서 1 ETH를 예치할 때 100 DAI도 함께 예치해야 합니다. 일부 독자들은 위 예시에 의해 1 ETH를 스왑하는 3번 과정에서 사용자가 100 개의 DAI를 받으리라 생각할 수 있습니다. 그런데도 n개라고 표현한 이유는 실제 스왑에서 100 DAI보다 더 적은 개수를 받기 때문입니다.

이처럼 처음에 의도했던 가격과 실제 거래 가격 사이에 차이가 발생하는 것을 슬리피지(Slippage)라고 합니다. 슬리피지는 풀에 유동성이 적고 거래량이 많을수록 커지게 되는데, 슬리피지가 커질수록 결과적으로 거래자는 더 비싼 가격에 토큰 거래를 해야 합니다.

Uniswap에서 구현된 AMM을 통해 토큰을 스왑하면 필연적으로 슬리피지가 발생할 수 밖에 없습니다. 이러한 현상에 대해 우리는 다음과 같은 질문을 생각해볼 수 있습니다.

Uniswap에서 토큰을 스왑하면 왜 슬리피지가 발생하는 것일까?

조금 더 명확하게 질문을 한다면

Uniswap이 AMM을 통해 토큰 스왑량을 어떻게 결정하길래 슬리피지가 발생하는 것일까?

본 아티클에서는 독자들과 함께 위 질문에 대한 답을 찾고자 합니다. 이를 위해 찾아야 할 답을 좀 더 명확히 작성하면 아래와 같이 작성할 수 있습니다.

사용자가 1 ETH를 스왑할 때 몇 개의 DAI를 받을지 자동으로 결정하는 방법을 알아보자.

최종적으로, 위 질문을 Uniswap 관점에서 더욱 정확하게 이야기하자면 아래와 같습니다.

사용자가 풀에 1 ETH를 예치했을 때 몇 개의 DAI가 풀에 남아야 하는지 결정하는 방법을 알아보자

스왑 후 풀에 남아야 하는 토큰의 개수가 결정되면 자동으로 토큰의 가격이 결정됩니다. 현재 풀에 1 ETH와 100 DAI가 남아있다면, 1 ETH의 가격은 100 DAI로 결정됩니다. 이에 따라 AMM을 DEX의 가격 결정 모델이라고도 부릅니다.

이제부터 우리는 위 질문에 대한 답을 찾기 AMM을 통해 DEX의 거래 방법을 수식을 기반으로 알아볼 것입니다.

본 아티클에서는 Uniswap에 대한 전반적인 이해를 도울 수 있는 설명을 다루지 않습니다. Uniswap의 개념, 유동성 공급자, 슬리피지 등에 대해 이해하고 싶은 독자는 1편의 내용을 읽은 후 본 아티클을 읽는 것을 추천합니다.

본격적으로 설명을 시작하기 전에 Uniswap의 AMM 함수인 CPMM을 먼저 소개합니다.

CPMM은 Constant Product Market Makers의 약자로 Uniswap이 AMM 방식으로 토큰 거래를 지원하기 위해 처음으로 정의한 함수입니다. 이름에서 유추할 수 있듯이 이 함수는 변수 x와 y의 곱에 있어서 상수 k 값이 항상 유지되어야 합니다. 이어지는 글에서는 이 간단한 함수인 CPMM을 통해 토큰 스왑 양이 어떻게 결정되는지 수식을 기반으로 자세하게 살펴봅니다.

2021월 5월 5일 Uniswap이 V3로 버전 업데이트를 하면서 유동성 공급 방식을 새롭게 만들었습니다. 이러한 변화가 기존 CPMM 로직에 어떤 영향을 미쳤는지 궁금해하는 독자가 분명이 있을 것입니다. 필자도 그 궁금증을 해결하기 위해 이번 리서치를 시작했었습니다. Uniswap V3는 다음 아티클에서 다룰 주제이지만 저와 같은 궁금증을 가진 독자를 위해 언급하자면,

Uniswap V3에서는 Concentrated liquidity 개념을 추가하여 CPMM 함수를 아래와 같이 변경했습니다.

Uniswap V3의 가장 큰 특징은 유동성 공급자가 자금을 공급하고 싶은 가격 범위를 지정하여 공급할 수 있도록 하는 것입니다. 이를 포지션 설정이라고 하는데 이를 정의한 함수가 바로 식 (2)스왑 계산기 입니다.

Uniswap V2와 V3에서 핵심적인 차이점은 유동성 공급 시 포지션 설정 여부이며, 유동성을 공급한 이후 로직인 토큰 스왑 과정은 V2와 V3 모두 동일합니다. 따라서 Uniswap V3의 토큰 스왑 로직이 궁금한 독자들도 본 아티클에서 그 궁금증을 어느 정도 해결할 수 있을 것이라 기대합니다. 변경된 CPMM 함수에 대한 설명은 다음 아티클에서 다룰 예정입니다.

본 아티클에서 작성된 수식은 Uniswap V3 백서를 기반으로 작성되었으며, 일부 변수는 가독성을 위해 백서와 다르게 작성되어 있습니다.

Constant Product Market Makers (CPMM)

이제 본격적으로 Uniswap의 CPMM 함수를 기반으로 토큰 스왑 양을 결정하는 방법에 대하여 알아봅니다. 과정은 5단계로 이루어져 있습니다.

  1. 풀의 리저브 개수 정의하기
  2. 토큰 유동성과 풀의 기준 가격 계산하기
  3. 각 토큰의 리저브 개수를 결정할 수 있는 수식 정의하기
  4. 토큰 y를 n개 스왑할 때 풀에 남아야 하는 x 토큰의 리저브 개수 계산하기
  5. 풀에 유동성 추가하기

1. 풀의 리저브 개수 정의하기

유동성 공급자가 x 토큰과 y 토큰의 스왑을 위해 x/y 풀을 만들고자 합니다. 이를 위해 유동성 공급자는 1,000개의 x 토큰과 4,000개의 y 토큰을 예치하여 풀을 만들었다고 가정해 봅시다. 이때 풀은 각 토큰의 공급량에 의해 풀의 상수 K가 다음과 같이 결정됩니다.

  • X: x 토큰의 리저브 개수
  • Y: y 토큰의 리저브 개수
  • K: x/y 풀의 리저브 개수

여기서 리저브 개수는 풀에 남아있는 토큰의 개수를 의미합니다. 즉, X와 Y는 x/y 풀에 남아있는(들어 있는) 각 토큰의 개수를 의미합니다. 풀의 리저브 개수는 각 토큰의 리저브 개수의 곱으로 결정되는 상수 값이며, 풀의 유동성이라고도 합니다.

현재 풀에는 유동성 공급자에 의해 1,000개의 x 토큰과 4,000개의 y 토큰이 남아있으므로 식 (3)에 의해 상수 K는 다음과 같이 결정됩니다.

위 함수에 대한 그래프는 다음과 같습니다.

  • x축: x 토큰의 리저브 개수 X
  • y축: y 토큰의 리저브 개수 Y
  • 빨간색 곡선: x/y 풀의 리저브 개수 K (풀의 유동성)

그림 1의 X와 Y의 곱으로 만들어진 사각형의 넓이는 상수 K의 값과 같습니다. 유동성이 공급된 후 풀에 들어 있는 x 토큰과 y 토큰의 개수로 결정된 상수 K는 앞으로 풀에서 발생하는 모든 스왑 거래에 있어서 변하지 않는 고정된 값입니다. 새로운 유동성 공급자가 토큰을 추가로 풀에 예치하거나 기존 공급자가 유동성을 풀에서 뺄 때, 유동성을 의미하는 상수 K의 값은 달라질 수 있습니다. 이에 대해서는 마지막 단계에서 살펴봅니다.

2. 토큰 유동성과 풀의 기준 가격 계산하기

이제 우리는 풀에 들어 있는 각 토큰의 개수를 기준으로 ‘스왑량’을 결정할 것입니다. 쉽게 말해, 1개의 x 토큰을 몇 개의 y 토큰으로 스왑되는지 결정할 것이며, 이에 대한 값은 풀의 유동성을 기준으로 결정됩니다.

유동성의 사전적 정의는 어떤 특정 상품 또는 서비스를 다른 가치로 전환할 수 있는 성질입니다. 이를 토큰에 대입해보면 x 토큰을 다른 가치인 y 토큰으로 전환할 수 있는 성질을 의미합니다. Uniswap은 이러한 토큰 스왑의 기준이 되는 토큰 유동성을 다음과 같이 정의했습니다.

예시를 통해서 유동성의 값을 계산해보겠습니다. 현재 풀에는 1,000개의 x 토큰(X)과 4,000개의 y 토큰(Y)이 들어있습니다. 이를 스왑 계산기 통해 계산한 x/y 풀의 토큰 유동성은 아래와 같습니다.

여기서 계산한 토큰 유동성 2,000은 x 토큰과 y 토큰의 교환 기준이 됩니다. 우리는 이 교환 기준을 통해 풀의 기준 가격을 정의할 수 있습니다. 궁극적으로 ‘토큰 스왑량’은 이 단계에서 결정한 토큰 유동성풀의 기준 가격을 통해 계산될 것입니다.

앞으로 발생하는 스왑 거래에 의해 각 토큰의 리저브인 X와 Y는 변경될 수 있지만, x와 y의 토큰 유동성인 L은 2,000으로 동일해야 합니다.

식 (4)를 통해 상수 K의 값과 L² 의 값이 같다는 것은 쉽게 이해할 수 있습니다.

식 (5)의 L²은 풀의 유동성이라 하며, 식 (3)에서 정의한 풀 리저브 K와 같은 값입니다. 식 (5)는 Uniswap V3에서 contracted liquidity라는 이름으로 변경되는 수식이므로 기억하고 있어야 합니다.

여기서 L²와 L은 다른 것을 의미하는 것을 기억해야합니다. L²는 풀 전체의 리저브 K와 같은 값으로 풀 전체의 유동성을 나타내는 값이고, L은 풀은 구성한 토큰 한 개에 대한 기준 유동성을 의미합니다.

이제 토큰 유동성 L을 통해 각 토큰의 유동성 가치를 결정합니다. 토큰의 유동성 가치는 풀이 보유하고 있는 각 토큰의 가치로 이해할 수 있습니다.

이후 작성되는 유동성 가치와 토큰 가격의 수 기호는 가격임을 강조하기 위해 $ 기호를 사용합니다. 하지만 이는 법정 화폐인 $(달러) 가치를 갖는것은 아닙니다.

Px 를 x 토큰의 가치($)라 하면, 유동성 가치 Lx는 다음과 같이 계산됩니다.

y 토큰의 유동성 가치 Ly도 동일한 방법으로 계산됩니다.

Lv를 기준이 되는 풀의 토큰 유동성 가치라 하면 다음과 같이 정의할 수 있습니다.

식 (8)의 √P는 토큰 한 개에 대한 풀의 기준 가격을 나타냅니다. 앞서 서론에서 유동성을 공급할 때 동일한 가치를 같도록 x 토큰과 y 토큰을 1:1 비율로 예치해야 한다고 언급했습니다. 이러한 가정하에 각 토큰의 유동성 가치는 동일하며, 결과적으로 아래 식이 성립합니다.

식 (9)에 의해 Lv²은 Lx와 Ly으로 다음과 같이 나타낼 수 있습니다.

식 (4), (8), (10)에 의해 다음과 같은 수식이 성립합니다.

이제 본격적으로 풀의 기준 가격인 √P의 값을 결정합니다. 식 (11)을 Px와 Py로 다음과 같이 표현할 수 있습니다.

이제 위 예시로 돌아가서 풀의 기준 가격 √P의 값을 구해보겠습니다.

  • x 토큰 리저브: X = 1,000
  • y 토큰 리저브: Y = 4,000
  • 토큰 유동성: L = 스왑 계산기 Lx = Ly: 2,000

식 (6), (7)에 의해 각 토큰의 가격 Px와 Py는 토큰 유동성 L을 기준으로 다음과 같이 계산될 수 있습니다.

풀의 기준 가격을 결정하기에 앞서 기준으로 삼을 토큰을 정해야 합니다. 여기서는 x를 풀의 기준 토큰으로 설정하여 풀의 기준 가격을 결정합니다.

식 (14)를 통해 스왑 계산기 계산한 풀의 기준 가격은 √(4,000/1,000) = $ 2으로 기준 토큰의 가격인 Px의 값과 동일함을 알 수 있습니다.

3. 각 토큰의 리저브 개수를 결정할 수 있는 함수 정의하기

3단계에서는 2단계에서 결정한 토큰 유동성 L과 풀의 기준 가격 √P를 통해 스왑 후 풀에 남아야 하는 각 토큰의 리저브 개수를 계산할 수 있는 함수를 정의합니다. 이 함수는 식 (14)를 기반으로 결정됩니다.

먼저, 식 (14)의 양변에 X * 1/√P를 곱하여 X에 대한 함수를 정의합니다.

식 (15) 에서 √(X*Y) = L이므로, X는 다음과 같이 결정됩니다.

마찬가지로 Y에 대한 함수는 식 (14)의 양변에 Y * 1/√P 를 곱하여 만들 수 있습니다.

식 (16), (17)을 통해 유추할 수 있는 것은 다음과 같습니다.

  • 토큰 유동성 L은 고정된 값이다.
  • √P가 증가하면 y 토큰의 리저브는 증가한다.
  • √P가 증가하면 x 토큰의 개수(X)는 감소한다.

풀에서 하나의 토큰이 다른 토큰보다 개수가 적다는 것은 개수가 스왑 계산기 적은 토큰이 다른 토큰보다 시장 가격이 높다는 것을 의미합니다. 다시 말해 다음 논리가 성립합니다.

  • √P가 증가하면 y 토큰의 리저브가 증가하여 Py의 가격이 하락한다.
  • √P가 증가하면 x 토큰의 리저브가 감소하여 Px의 가격이 증가한다.

4. y를 n개 스왑할 때 풀에 남아야 하는 x 의 리저브 개수 계산하기

유니스왑 AMM의 궁극적인 목표는 y 토큰을 x 토큰으로 스왑할 때 몇 개를 x 토큰을 사용자에게 제공해야하는지 결정하는 것입니다. 마지막 4단계에서 결정할 것은 사용자가 2,000개의 y 토큰을 스왑할 때 몇 개의 x 토큰을 제공해야할지 계산하는 방법입니다.

3단계에서 각 토큰의 가격을 √P을 기준으로 계산할 수도 있지만, y 토큰의 개수를 기준으로 생각할 수도 있습니다.

  • 사용자가 y 토큰을 x 토큰으로 스왑하기 위해 y 토큰을 예치한다.
  • y 토큰의 리저브가 증가하면 √P가 증가하여 Py가 감소한다.
  • y 토큰의 리저브가 증가하면 √P가 증가하여 Px가 증가한다.

이러한 논리를 기억한 후 식 (17)에 대한 그래프를 그리면 다음과 같습니다.

[스왑 전 풀 현황]

  • y 토큰 리저브: Y = 4,000
  • 토큰 유동성: L = Lx = Ly: 2,000
  • 풀의 기준 가격: √P = $ 2
  • x 축: 풀의 기준 가격 √P
  • y 축: 토큰 유동성 L
  • 검은색 사각형: y 토큰의 리저브 개수 Y

이제 사용자가 2,000 개의 y 토큰을 x 토큰으로 스왑하기 위해 풀에 y 토큰을 예치했다고 가정합니다. 이 경우 풀 현황과 그림 2는 다음과 같이 바뀝니다.

[스왑 후 풀 현황]

  • y 토큰 리저브: 4,000 + 2,000 = 6,000
  • 토큰 유동성: L = Lx = Ly: 2,000
  • 풀의 기준 가격: √P = Y/L = 6,000 / 2,000 = $3

그림 3에서 ΔY는 사용자가 스왑을 위해 추가로 예치한 y 토큰의 개수이며, 그 값은 2,000입니다. 즉, 사용자가 스왑을 위해 ΔY만큼 y 토큰을 풀에 예치하면, y 리저브 토큰 개수 Y는 Y + ΔY 만큼 증가하며, 그 값은 6,000이 됩니다. 이에 따라 기준 가격 √P도 $3으로 증가함을 알 수 있습니다.

한편, 토큰 유동성 L의 값은 스왑 과정에서 변화하지 않는 것을 알 수 있습니다. 여기서 중요한 것은 스왑에 있어 변화하는 값는 √P과 Y이며, L의 경우 유동성이 추가로 공급되거나, 기존에 있는 유동성이 출금될 경우에만 변화하는 값이라는 것입니다.

여기서 y 리저브 토큰에 대한 정의를 다시 짚어볼 필요가 있습니다. 사용자는 Y 토큰의 스왑 양을 0 부터 +∞까지 모두 요청할 수 있으며, 이로 인해 기준 가격 √P도 0부터 +∞까지 변동할 수 있습니다. 스왑에 따라서 변동하는 값을 고려하여 y 리저브를 정의하면 다음과 같습니다.

여기서 L은 스왑에 따라 변하는 값이 아닌 상수이기 때문에, 변동 값을 의미하는 Δ를 붙이지 않습니다.

식 (18)을 토큰 유동성 L에 대한 정의로 재배치하면 다음과 같습니다.

식 (19)에서 상수 L을 통해 Y와 √P값은 일정 비율로 함께 변동해야 하는 값임을 알 수 있습니다.

토큰 스왑 시 변동하는 값을 고려한 y 리저브 토큰 그래프를 그리면 다음과 같습니다.

이제 다시 예시로 돌아가서, 사용자가 예치한 ΔY에 의해 변화한 풀의 기준 가격을 통해 사용자가 받아야 하는 x 토큰의 개수인 ΔX를 결정할 수 있습니다.

사용자가 풀에 1 ETH를 예치했을 때 몇 개의 DAI가 풀에 남아야 하는가

이를 위해 식 (16)을 이용합니다.

식 (20)을 통해 도출한 값은 풀에서 빼내 사용자에게 제공해야 하는 스왑 계산기 x 토큰의 개수입니다. ΔX 값을 통해 풀에 남아야 하는 x 토큰의 개수인 X 값도 계산할 수 있습니다.

스왑 후 변한 기준 가격 √P를 통해 x 토큰 리저브 개수를 계산해도 같은 값을 얻습니다.

위 단계를 통해 2,000개의 y 토큰을 스왑하는 사용자는 333개의 x 토큰을 받고 풀에는 666개의 x 토큰이 남아있게 됨을 알 수 있습니다.

이제 스왑 이후 CPMM 그래프가 어떻게 변경되는지 알아보겠습니다.

[스왑 후 풀 현황]

  • x 토큰 리저브: X = 666
  • y 토큰 리저브: Y = 6,000
  • 토큰 유동성: L = 2,000
  • 풀의 기준 가격: √P = $3

그래프에서 알 수 있듯이 스왑 이후 변화한 값은 x 토큰 리저브와 y 토큰 리저브 값입니다. 하지만 풀 리저브를 나타내는 빨간색 곡선 K의 값은 변하지 않았음을 알 수 있습니다.

CPMM을 통해 리저브 개수가 결정되는 과정을 간단히 정리하면 다음과 같습니다.

  1. 사용자가 2,000개의 y 토큰을 풀에 예치
  2. y 토큰의 리저브 개수 증가로 풀의 기준 가격이 2에서 3으로 증가
  3. 풀의 기준 가격 증가로 x 토큰 리저브 개수가 1,000개에서 666개로 감소
  4. 풀에서 빠져나간 333개의 x 토큰을 사용자에게 지급

5. 풀에 유동성 추가하기

1단계부터 4단계까지의 과정을 통해 토큰 스왑이 일어난 후 풀 현황과 CPMM 그래프 변화를 살펴보았습니다. 이제 풀에 유동성이 추가되거나 감소할 때 위 값들이 어떻게 변경되는지 알아보겠습니다.

[풀 현황]

  • x 토큰 리저브 개수 (X): 666개
  • y 토큰 리저브 개수 (Y): 6,000개
  • x 토큰 가격 (Px): $3
  • y 토큰 가격 (Py): $0.33
  • 풀의 상수 (K): 3,996,000
  • 풀의 토큰 유동성 (L): 2,000
  • 풀의 기준가격 (√P): $3

이제 다른 유동성 공급자가 풀에 x 토큰 1,000개를 유동성으로 공급하려고 합니다. 이를 위해서는 y 토큰의 유동성도 함께 공급해야 하며, 그 가치는 1:1로 동일해야 합니다. 따라서 이 유동성 공급자는 x 토큰 1,000개에 해당하는 $3,330 만큼의 y 토큰 10,090개를 함께 예치해야 합니다. 이 공급자의 예치로 풀의 상태는 다음과 같이 변경됩니다.

[유동성 공급 후 풀 현황]

  • x 토큰의 리저브 개수 (X): 1,666개
  • y 토큰의 리저브 개수 (Y): 16,090개
  • x 토큰 가격 (Px): $3
  • y 토큰 가격 (Py): $0.33
  • 풀의 상수 (K): 26,805,940
  • 풀의 토큰 유동성 (L): 5,177
  • 풀의 기준 가격 (√P): $3

위 값을 통해 풀의 유동성이 변동될 때 변하는 값은 X, Y, K 그리고 유동성인 L임을 알 수 있습니다.

그림 6에서 빨간색 점선은 유동성 공급 전 풀의 리저브를 나타내며, 보라색 곡선은 유동성 공급 후 풀의 리저브를 나타냅니다. 유동성 공급 후 각 토큰의 리저브 개수는 동일한 비율로 증가하고, 풀 리저브도 이와 동일한 비율로 함께 증가함을 알 수 있습니다.

그림 7에서는 y 토큰 리저브 개수의 증가로 인해 토큰 유동성 L이 증가하였고, 기준 가격인 √P은 $3으로 유지됨을 알 수 있습니다.

본 아티클은 Uniswap의 AMM 모델인 CPMM이 토큰 스왑량을 자동으로 결정하는 방법을 구체적으로 설명했습니다. 이를 통해 x/y 풀에서 y 토큰을 x 토큰으로 스왑 계산기 스왑하고자 할 때 몇 개의 x 토큰을 사용자에게 지급해야 하는지 자동으로 결정하는 로직에 대한 이해를 돕기위해 수식을 기반으로 작성되었습니다. 본 아티클에서 중요하게 기억해야 하는 것은 다음 두 가지입니다.

[CPMM을 통해 리저브 개수가 결정되는 방법]

  1. 사용자가 2,000개의 y 토큰을 풀에 예치
  2. y 토큰의 리저브 개수 증가로 풀의 기준 가격이 2에서 3으로 증가
  3. 풀의 기준 가격 증가로 x 토큰 리저브 개수가 1,000개에서 666개로 감소
  4. 풀에서 빠져나간 333개의 x 토큰을 사용자에게 지급

[스왑 또는 유동성 변동에 의해 변하는 값]

스왑과 유동성 변동은 동시에 일어나는 이벤트가 아닙니다.

2. 유동성 변동에 의해 변하는 값

다음 아티클에서는 Uniswap이 V3로 업데이트하면서 새로 도입한 CONCENTRATED LIQUIDITY에대하여 다룹니다. 구체적으로는 변경된 CPMM 수식, 게으른 유동성(lazy liquidity) 이슈 해결, Uniswap V3의 풀 현황 살펴보기 등으로 구성될 예정입니다.

짹짹이의 투자이야기

노가다로 계산해서 오류가 있을 수도 있다. 곡괭이 토큰은 인플레이션 때문에 사실 장기 홀드의 목적과는 거리가 있다. 그렇기에 비영구적 손실보다는 only ADA일 때와 비교해야지 더욱 정확하다. 곡괭이 토큰이 아니라, 다른 토큰이라면 비영구적 손실을 참고하면 되겠다.

무튼 나는 곡괭이 토큰을 보유중이기때문에 이 LP를 언제 회수할 것이냐에 대한 문제와 민트를 민으로 바꿀 때 어떤 토큰을 골라야 하는지 고민할 필요가 있다. 일단 LP를 회수하는 시점은 부스트가 끝나는 시점일 것 같다. 곡괭이 토큰의 인플레와 선데 토큰의 사례를 본다면 -30%까지 열어두어야 한다. -30%가 하루 만에 나오지 않을 것이다. 약 한 달 만에 하락하였다 치면 그에 상응하는 보상은 연 수익 360% 정도가 되어야 한다. 근데 부스터가 끝나면 150% 이하의 수익률을 보여줄 것으로 예상되기에 바로 회수 예정이다.

그 이후에는 민트를 매집하던가, 차라리 수익률 높은 풀을 노려보는 것도 방법이다. 다양한 토큰들이 높은 이유 때문에 수급이 생기면서 한동안은 가격 변동이 있을 것이다. 하지만 토큰 가격 상승에서 오는 비영구적 손실은 상대적인 손실이며 투자하지 않은 것보다 훨씬 좋은 결과이다. 이 점을 착각하면 안 된다.

민트를 민으로 바꿀 때에는 가격이 상승하는 토큰을 고르던가, 하락한다면 변동성이 작은 토큰을 골라야 한다. 45일 동안 LP가 락되기 때문이다. 그렇기 위해서는 곡괭이 LP를 제공하는 것보다는 향후 물량이 제한적인 토큰에 공급하는 것이 바람직해 보인다. 민트 가격이 민에 가까워지는 게 바람직하지만 그것이 민트 가격의 상승만을 의미하지는 않는다. 민이 하락할 가능성이 크다.

이런 이유들을 생각하였을 때 LQ, DANA처럼 조금 오래된 토큰을 선정하는 것도 방법이고, 가능하다면 LP를 분산하는 것도 방법이겠다.

XCEL ENERGY CFD - XCEL ENERGY INC

Scroll Top

ForexTime Limited (www.forextime.com/eu)는 키프로스 CySEC(Cyprus Securities and Exchange Commission)의 규제를 받고(라이선스 번호 185/12), 남아공 FSCA(Financial Sector Conduct Authority)의 인허가를 받아 영업합니다(FSP 번호 46614). 또한 당사는 영국 FCA(Financial Conduct Authority)에 등록되어 있어 있습니다(등록 번호 600475).

ForexTime (www.forextime.com/uk)는 영국 FCA(Financial Conduct Authority)의 인허가와 규제를 받습니다(라이선스 번호 777911).

Exinity Limited (www.forextime.com)는 모리셔스 공화국 FSC(Financial Services Commission)의 규제를 받는 투자중개사입니다(라이선스 번호: C113012295).

카드 거래는 FT Global Services Ltd (등록 번호: HE 335426, 등록 주소: Ioannis Stylianou, 6, Floor 2, Flat 202 2003, Nicosia, Cyprus)를 통해 처리됩니다. 카드 소지자 문의 주소: [email protected] 카드 가맹점 위치 주소: FXTM Tower, 35 Lamprou Konstantara, Kato Polemidia, 4156, Limassol, Cyprus.

Exinity Limited는 외환시장에서 금융서비스 업계 내 분쟁 해결을 중재하는 국제기구인 Financial Commission의 회원입니다.

위험 고지: 외환 및 레버리지 금융상품 거래는 투자위험도가 높아 원금 전액 손실 위험이 있습니다. 감당할 수 없는 금액 이상으로 투자하지 말고 관련 투자위험을 충분히 숙지해야 합니다. 일부 투자자는 레버리지 상품 거래가 적합하지 않을 수 있습니다. 거래하기 전에 본인의 투자경험 및 투자목적을 고려하되 필요 시 별도의 투자자문을 구해야 합니다. 거주 국가의 법률 규정에서 FXTM 서비스 이용이 허용되어 있는지 확인하는 것은 전적으로 고객의 책임입니다. FXTM의 위험 공시 전문을 읽어 보시기 바랍니다.

지역 제한: FXTM 브랜드는 미국, 모리셔스, 일본, 캐나다, 아이티, 수리남, 조선 민주주의 인민 공화국, 푸에르토 리코, 브라질, 키프로스 점령지 및 홍콩 거주자에게는 서비스를 제공하지 않습니다. 자세한 내용은 자주묻는질문의 규제 부분을 참조하시기 바랍니다.

LOR > 카드 > 교환로봇의 교환

ability Swapbot's Swap image

Ezoic

report this ad

Ezoic

report this ad

Support Us Facebook Twitter Instagram Youtube Twitch Discord

Magic: Gathering 및 해당 자산의 저작권은 Wizards of the Coast에 있습니다. 레전드 오브 룬테라 및 해당 자산의 저작권은 라이엇 게임즈에 있습니다.


0 개 댓글

답장을 남겨주세요