집중화된 유동성과 내재한 보안 문제점
본 글은 Uniswap이 차용하고 있는 집중화된 유동성(Concentrated Liquidity), 그리고 그로부터 발생할 수 있는 보안 문제점에 관해 기술합니다.
들어가기에 앞서, 본문에 기재되어 있는 용어들을 정리해두었으니 참고가 되길 바랍니다.
유동성(Liquidity): 유동성의 의미는 자산을 현금으로 전환할 수 있는 가능성을 의미합니다.
유동성 공급자(LP, Liquidity Provider): 본문에서 언급하는 유동성 공급자는 탈중앙화 금융 서비스 내에서 유동성을 공급하는 유저를 뜻합니다. 탈중앙화 거래소에서 유동성을 공급하는 경우 유동성을 공급한 대가로 공급된 유동성을 바탕으로 거래를 실행한 유저들로부터 수수료를 받습니다.
메이커 & 테이커(Maker & Taker): 메이커는 주문 즉시 체결이 되지 않는 주문을 생성한 유저, 테이커는 반대로 시장가 주문을 생성한 유저를 뜻합니다.
비영구적 손실(IL): 유동성 풀에 두 자산을 예치했을 때 자산 가격 변동으로 인해 발생할 수 있는 단기적 손실을 뜻합니다.
슬리피지(Slippage): 주문자가 자산을 매수/매도할 때 시장가와 실행된 주문의 평균 가격의 오차를 의미합니다.
스왑(Swap): 타 자산과의 교환을 의미합니다.
TWAP(Time Weighted Average Price, 시간가중평균 가격): 특정 시간대의 자산 가격의 평균 가격을 의미합니다.
TVL(Total Value Locked): 특정 블록체인 혹은 서비스에 예치된 총자산의 규모를 의미합니다.
Price oracle(가격 오라클): 자산 가격 정보를 블록체인에 제공해주는 오라클을 의미합니다.
집중화된 유동성(Concentrated Liquidity)의 도입 배경
스마트 컨트랙트 상에서 메이커와 테이커가 모두가 이익을 나눠가질 수 있는 효율적인 거래소를 만들려는 노력은 항상 있었습니다. 기존 금융 시장에서 널리 사용되고 있는 호가창(Order book) 모델을 이용하면 쉽게 해결될 것 같지만 블록체인의 특성으로 인해 쉽게 도입할 수 없었습니다. 호가창에 메이커가 가격과 금액을 설정해 주문을 만들어 놓으면 테이커는 원하는 만큼 최종 거래를 진행합니다. 메이커가 1초에도 수십 번에서 수백 번 새로운 주문을 등록하고 취소해야 하는 주문 대장 모델은 블록 생성 시간이 긴 블록체인에서는 구현하기가 불가능에 가깝습니다.
AMM(Automated Market Maker)은 메이커의 동작을 단순화했습니다. 메이커가 하나의 유동성 풀(Liquidity pool)에 여러 토큰을 공급해 놓으면, 현재 잔액에 따라 자동으로 토큰들의 현재 가치와 서로의 교환비가 계산됩니다. 테이커는 메이커와의 상호작용 없이, 현재 교환비에 따라 거래를 진행합니다. 호가창과 AMM을 비교하면 다음과 같습니다.
AMM 방식의 가장 큰 단점은 두 가지가 있는데, 바로 슬리피지(Slippage)와 IL(비영구적 손실)입니다. 대부분의 AMM에서는 구성 토큰이 남아있는 수에 따라 예상 가치와 교환비가 자동으로 변합니다. 따라서 테이커가 한 번에 큰 규모의 거래를 수행하면 교환비가 원래 생각했던 것보다 크게 불리해져 손해를 보게 됩니다. 이를 슬리피지가 커졌다고 합니다.
IL은 메이커가 별도의 주문 없이 테이커에 반대되는 동작을 하므로 발생합니다. 메이커가 공급한 유동성은 테이커의 주문에 따라 토큰의 구성비가 변합니다. 이때 가격이 내려가는 쪽의 자산을 더 많이, 올라가는 쪽의 자산을 더 적게 가집니다. 따라서 유동성 공급을 하지 않았을 때 비해 가격 변동에 취약합니다.
AMM은 적용되는 계산식이 무엇인지에 따라 나뉘는데, 단순한 것들부터 살펴보겠습니다.
CSMM(Constant Sum Market Maker)
CSMM은 토큰의 수를 합하여 상수 합(Constant Sum)을 유지합니다. 이는 ‘ x+ y= k’ 라는 식으로 표현할 수 있습니다. 두 토큰의 교환비가 항상 같기 때문에, 상대 가격이 동일하게 유지되지 않는다면 항상 한쪽 자산이 유출됩니다.
CPMM(Constant Product Market Maker)
CPMM은 토큰의 수를 곱하여 상수 곱(Constant Product)을 유지합니다. ‘ x*y= k’ 로 표현할 수 있습니다. 한쪽의 수가 적어질수록 급격히 상대적인 가치가 상승하며, 가격이 무한대로 발산합니다. 둘 사이의 가격 변동이 일어나도 언제나 테이커가 나름대로 합리적인 교환비를 유지하며 어느 방향으로든 교환을 진행할 수 있기 때문에 초기 AMM에서 많이 사용되었지만, 위에서 언급한 슬리피지와 IL의 위험을 지니고 있습니다.
CPMM은 단순하고 강력하지만, 자산의 교환비가 무한대로 벌어질 때까지 교환이 가능함을 보장하기 위해 유동성을 낭비한 측면이 존재합니다. 특히 일정 가치를 유지하는 것이 목적인 스테이블 코인들끼리의 교환에서 이러한 특징이 두드러집니다.
이것을 해결하기 위한 절충안이 여러가지 있는데, 그 중 하나로 Curve Finance의 StableSwap이 있습니다. 두 자산의 개수 차이가 크게 나지 않을 때는 CSMM 쪽에 가깝게 동작하여 슬리피지를 최소화하지만, 가격 차이가 크게 벌어지면 자산 유출을 피하고자 CPMM과 흡사하게 전환합니다.
집중화된 유동성(Concentrated Liquidity)이란?
집중화된 유동성은 집중화된 유동성을 제공하는 유동성 공급 방식입니다. 2년 전 Uniswap Labs에 의해 공개되었습니다. 유동성을 공급할 때 가격 폭(Price range)을 정할 수 있습니다. 대신 그 가격 폭 내에서 발생한 스왑(Swap)에 대해서만 수수료를 가져갑니다.
기존의 CPMM에서는 메이커가 공급한 유동성이 현재 가격과 관계 없이 영향을 미쳤습니다. 하지만 이제 특정 가격 폭에만 공급되는 유동성이 존재하기 때문에, 틱이라는 단위로 나누어진 구간마다 활용할 수 있는 유동성의 규모가 다릅니다. 테이커가 거래를 많이 할 것으로 예상되는 구간은 주로 현재 가격 주위입니다. 이곳에서 발생하는 수수료를 받기 위해 메이커들이 몰려 특히 유동성을 많이 공급합니다. 유동성이 많이 공급된 구간에서는 슬리피지가 적게 발생하기 때문에 현재 가격에서 거래 중인 테이커에게 이득입니다.
집중화된 유동성이 구현된 곳은 Uniswap V3, Trident Concentrated liquidity pool 등이 있습니다.
스테이블 코인인 DAI와 USDC의 경우 유동성이 1의 교환비 주변에 집중되어 공급된 것을 볼 수 있습니다.
USDC-ETH의 경우에도 현재 가격을 중심으로 유동성이 공급되어 있습니다.
앞서 언급한 집중화된 유동성 공급과 다른 방식으로는 JIT(Just-in-time) liquidity가 존재합니다.
JIT(Just-in-time) liquidity
JIT(Just-in-time) liquidity는 채굴자가 취하는 최대의 이익 효율을 얻기 위한 전략 중의 하나로, 유동성을 효율적으로 공급하여 가격 조작 비용을 증가시킬 수 있는 효과가 있습니다.
JIT liquidity는 MEV(Miner Extractable Value)에 해당하며, MEV는 채굴자가 트랜잭션을 미리 보고 순서를 바꾸는 행위를 통해 얻을 수 있는 최대 이득을 말합니다.
JIT liquidity는 테이커 주문 직전에 유동성을 공급하고, 직후에 유동성을 제거하는 전략입니다. 이때 가격 폭을 매우 짧게 하여 유동성을 공급합니다. 일반적일 때 기존의 LP들은 현재 가격을 기준으로 넓은 범위에 유동성을 공급하여, 현재 거래가 발생하고 있는 가격만 한정해 계산하면 이들은 비교적 적은 양의 유동성을 공급한 것이 됩니다. 따라서 JIT liquidity 공급자는 공격 대상이 되는 테이커 주문에서 발생한 수수료에 대해 큰 지분을 가집니다.
MEV를 기반으로 한 선행매매(front-running) 공격들이 대부분 공격 대상이 되는 트랜잭션을 수행하고 있는 사용자에게 손해를 끼치는 것에 반해, JIT liquidity는 테이커에게 손해를 끼치지 않고 오히려 이득을 획득할 수 있게 합니다. 이는 테이커가 예상했던 것보다 큰 유동성을 가지고 교환을 할 수 있기에 슬리피지가 줄어들기 때문입니다. 다만, 기존 LP들은 받을 예정이던 수수료 일부가 JIT LP에게 재분배되어 수익이 줄어들게 됩니다.
유동성 공급자(LP)에게 이득인가?
현재 Uniswap V3의 유동성 풀들처럼 현 가격을 중심으로 유동성이 공급되어있는 경우, 테이커들은 슬리피지가 줄어드는 혜택을 받을 수 있습니다. 그렇다면 LP들에게는 어떤 이득이 있을까요?
먼저 낭비되는 유동성이 줄어들기 때문에, 같은 자금으로 최대한의 유동성 공급 효과를 볼 수 있습니다. 유동성 공급을 많이 할수록 거래에서 발생한 수수료를 받을 때 지분이 커지니 수입이 증가합니다. 이를 위해 모두가 적절한 유동성 공급 범위를 찾아 경쟁하게 됩니다. 또 다른 장점으로는, 유동성 공급을 통해 AMM에서 지정가 주문을 사용할 수 있다는 것입니다.
예를 들어, 서울에서 오스틴까지의 비행 노선에 유동 인구가 많이 몰린다면 항공사들은 그 노선에 비행기를 많이 배치할 겁니다. 수요가 많을수록 노선 운행을 시행하는 항공사들이 그 반사 이익을 얻으며, 노선의 시장점유율을 더 많이 갖출수록 수입이 증가합니다.
집중화된 유동성 구현의 단점은 IL로 인해 메이커가 받는 피해가 더 크다는 점입니다. 현재 가격이 유동성을 공급한 범위를 벗어나게 되면 LP는 가격이 하락한 쪽의 자산만 가지게 됩니다. CPMM에 비해 IL의 영향을 더 빠르게 받으며, 가격 폭을 좁게 설정할수록 토큰 가격 변동의 영향을 더 크게 받습니다.
유동성을 공급하는 구간이 현재 가격을 포함하지 않고 있다면, 자산은 한쪽 토큰으로만 구성됩니다. 이때 가격 폭을 최소로 하여 매우 좁은 구간에 유동성을 공급하면 가격이 해당 구간을 지나갈 때 공급했던 토큰은 다른 토큰으로 변환되어집니다. 변환된 토큰은 더이상 유동성에 기여하지 않고 있어 지속적인 IL과 수수료 손해가 발생합니다. 물론 원래 유동성을 공급했던 가격으로 돌아오면, IL은 복구가 되겠지만 수수료 손해는 복구되지 않습니다. 따라서 사용자는 만약 가격이 공급한 유동성의 범위를 넘어설 경우 유동성을 회수하여 손해를 방지해야 합니다.
이것은 AMM의 장점은 유지하면서도, 기존 금융 시스템에 있던 상품들을 DeFi 세상에 이식할 수 있다는 가능성을 보여준다는 점에서 의미가 있습니다.
보안 문제점
가격 조작을 잘 방어할 수 있는가?
AMM에서 가격 조작이 발생하면 온체인 Price oracle이 잘못된 값을 출력하게 됩니다. 그러면 해당 값을 사용하는 댑(DApp)들이 연쇄적으로 문제를 일으킬 수 있습니다. 이런 위험을 최소화하기 위해 TWAP(Time Weighted Average Price, 시간가중평균 가격)을 적용하거나 Chainlink와 같은 외부 오라클을 사용하기도 합니다.
하지만, TVL(Total value locked)이 같다고 가정했을 때, 집중화된 유동성이 적용되어 있는 CPMM DEX(탈중앙화 거래소)는 가격 조작이 더 쉽습니다. 현재 가격 주위로 유동성이 몰려있을 때는 가격 조작을 수행하기가 비교적 어렵습니다. 그러나 몰려있던 유동성이 고갈되는 순간 적은 유동성이 공급된 구간으로 진입하며, 낮은 유동성 덕분에 더 적은 돈으로도 큰 가격 조작을 발생시킬 수 있습니다. 이로 인해 변동성이 커져 TWAP이 제 역할을 하지 못합니다. 이는 TVL이 작은 유동성 풀에서 더 두드러지게 나타날 수 있으며, 자금이 충분한 공격자라면 집중화된 유동성의 취약점을 이용해 가격 조작을 통해 큰 이익을 도모할 수 있습니다.
많은 메이커들은 집중화된 유동성의 장점을 누리기 위해 현재 가격 주위에 유동성을 공급하는 것을 선택합니다. 따라서 기본적인 방어 수단으로 유동성 풀 생성자들은 전체 구간에 일정 이상의 유동성을 공급하여 외곽 구간의 유동성이 지나치게 줄어들지 않도록 대비해야 합니다.
참고 자료
Robin Fritsch. 2021. Concentrated Liquidity in Automated Market makers. https://arxiv.org/abs/2110.01368
Lioba Heimbach, Eric Schertenleib, and Roger Wattenhofer. 2022. Risks and Returns of Uniswap V3 Liquidity Providers. https://arxiv.org/abs/2205.08904
https://cmichel.io/replaying-ethereum-hacks-rari-fuse-vusd-price-manipulation/
https://info.uniswap.org/#/pools/0x5777d92f208679db4b9778590fa3cab3ac9e2168
https://info.uniswap.org/#/pools/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8
✨ We are ChainLight!
ChainLight 팀은 풍부한 실전 경험과 깊은 기술 이해를 바탕으로 새롭고 효과적인 블록체인 보안 기술을 연구합니다. 연구 결과를 바탕으로 Web3 생태계의 각종 보안 위험 요소와 취약점을 사전 파악하여 제거하는 혁신적인 보안 감사 서비스를 제공합니다. 보안 감사 이후에도 온체인 데이터 모니터링 및 취약점 탐지 자동화 서비스를 이용한 지속적인 디지털 자산 위험 관리 솔루션을 제공합니다.
ChainLight 팀은 사용자들이 탈중앙화 서비스를 안전하게 활용할 수 있도록 Web3 생태계 위협으로부터의 보호에 힘쓰고 있습니다.
ChainLight의 더 다양한 정보를 보고 싶으시다면? 👉 Twitter 계정도 방문해 주세요.
🌐 Website: chainlight.io | 📩 TG: @chainlight | 📧 chainlight@theori.io
Originally published at https://blog.theori.io on October 16, 2023.