Just In Time (JIT) 소개 - 탈중앙화 크로스 체인 스왑을 위한 새로운 AMM 프로토콜 디자인
안녕하세요 여러분, 이번에 다룰 주제로 짧은 논문을 쓰고 있는데 관련해서 피드백이 듣고 싶습니다. 트위터 @SimonAHarman나 Chainflip Discord를 통해서 피드백 공유해주시면 감사드리겠습니다. - Simon
개요
Chainflip의 AMM 설계는 크로스 체인 전송의 특성으로 인한 제한 사항이 있기에 업계 표준과 크게 다릅니다. Chainflip AMM 프로토콜에는 최적의 유동성 공급자 전략을 근본적으로 변경하고 사용자에게 상당한 자본 효율성 및 가격 정확도 이점을 제공하는 몇 가지 특별한 기능이 있습니다. 우리는 이러한 방식의 AMM을 "JIT(Just In Time Liquidity) AMM"이라고 부릅니다. 오늘날 사용되는 상품 중 이와 유사한 거래 상품은 거의 없습니다.
배경
유니스왑 버전3는 AMM 세계에 범위 주문의 개념을 도입하여 유니스왑의 가장 인기 있는 많은 풀의 자본 효율성과 사용자 경험에 많은 개선을 가져왔습니다. 크로스체인 상품인 Chainflip은 일반적인 AMM과 동일한 체결 환경 전제를 갖지 않기에 사용자에게 부정적인 영향을 미치는 선행매매을 방지하기 위해 추가 기능이 필요합니다. 단일 체인 환경과 달리 Chainflip은 다음과 같은 문제를 해결해야 합니다.
- 해당 프로토콜은 Chainflip 외부의 체인 재구성 위험으로 인해 외부 체인 예금을 확인하기 위해 여러 블록을 기다려야 합니다. 탈중앙화 및 프로그래밍 방식의 시스템으로서 이런 일이 발생하면 수동으로 트랜잭션을 재주문할 수 있는 방법이 없기에 안전하게 작동하려면 여러 블록 확인이 필요합니다. 들어오는 스왑 예금을 확인하는 데 짧지 않은 지연이 있고 공개 체인에 있다는 점을 감안할 때 모든 시장 참가자는 스왑이 발생하기 전에 체결될 스왑을 알게 될 것입니다. 이 때문에 해당 프로토콜은 다양한 형태의 선행매매에 취약합니다.
- 또한, 승인 시간으로 인해 가격 책정 및 차익 거래가 크게 지연되어 시장 지수 가격과의 가격 차이를 보이는 시간이 길어집니다. 이로한 문제는 해당 문제를 최소화하지 못한 다른 AMM 기반 크로스 체인 DEX (탈중앙화 거래소)에서 나타나며, 가격이 시장 가격에서 최대 10%까지 지속적으로 벗어납니다.
- 마지막으로, 기존 AMM 설계는 맞춤형 체결 환경을 바탕으로 구축되지 않았기 때문에 새롭게 제안된 AMM의 기능은 테스팅되지 않은 상태입니다. 또한 그렇기 때문에, 비슷한 특성을 갖는 다른 프로토콜에서 배울점을 끌어낼 수 있습니다.
맞춤형 체결 환경에서 체결되는 AMM의 가능성을 탐색할 수 있는 특별한 기회도 있습니다. Chainflip은 자체 독립 체결 환경에서 체결되기 때문에 복잡한 사용자 상호 작용 없이 많은 스왑 체결을 자동화하고 검증인 네트워크에서 체결할 수 있습니다. 이를 최대한 활용해야 하며, 사용자의 이익을 위해 이를 활용할 수 있도록 새로운 기능을 설계해야 합니다.
Just In Time AMM 핵심 기능
JIT AMM은 기존 유니스왑 버전3 AMM 설계에 추가적인 몇 가지 새로운 기능을 제공합니다. 이러한 기능은 크로스 체인 스왑이 갖는 고유의 문제를 완화하고 JIT AMM을 구동하는 두 가지 핵심 기능과 함께 맞춤형 체결 환경이 제공하는 특별한 이점을 최대한 활용합니다.:
- 스왑보다 빠른 범위 주문 업데이트 - 알려진 스왑이 체결되기 전에 범위 주문을 업데이트할 수 있으므로 마켓메이커가 들어오는 거래 흐름에 적극적으로 대응할 수 있습니다.
- 스왑 일괄 처리 - 스왑을 그룹화하고 주기적으로 체결하여, 발생한 수 있는 다수의 슬리피지를 상쇄해내며, 선행매매로 인한 수익성을 무효화합니다.
이러한 기능은 Chainflip 상태 체인 및 Chainflip 검증인들이 체결하는 관련 소프트웨어에서 직접 구현됩니다.
JIT는 어떻게 구동되는가
JIT AMM 디자인을 주도하는 핵심 개념은 선행매매을 완전히 뒤집어서 생각하는 겁니다. 이 프로토콜은 MEV를 탐색하는 봇에 의해 사용자들에 대한 선행매매가 일어나도록 하는 것이 아니라, 자연스럽게 유동성 공급자가 사용자의 이익을 위해 서로 선행매매하도록 장려합니다. JIT AMM의 프로토콜 디자인을 처음 게시한 지 수 개월 후 MEV 추종자들은은 유니스왑 버전 3에서 실행 중인 예제를 발견했습니다. 충분히 큰 규모의 거래의 경우, 비싸고 대중화된 이더리움 블록체인에서도 다른 유동성 제공자들에 대해 선행매매를 체결할 수 있는 기회가 있기에 이 전략의 실행 가능성을 증명합니다.
각 풀의 고정 유동성 수수료(대부분의 풀에서 5~30bp)는 마켓메이커가 얻고자 하는 기본 델타 역할을 합니다. 마켓메이커들이 델타를 얻는 방법은 유동성 포지션을 시장 가격까지 옮기는 것입니다. 시장 가격은 스왑이 체결되기 직전 별도의 1차 및 2차 시장(중앙 집중식 거래소, 파생 상품 시장 및 기타 OTC 데스크와 같은 기타 유동성 소스 포함)에서 즉시 유동성을 사용할 수 있는지 여부에 따라 결정됩니다. 헷지 포지션을 열거나 다른 시장에서 기존 유동성을 취함으로써 마켓메이커는 다른 모든 유동성 제공자보다 더 큰 가격 위험을 감수할 경우 유동성 수수료를 완벽하게 획득할 수 있습니다. 스왑이 체결되면 마켓메이커는 다음 스왑 배치를 위해 범위 주문을 업데이트해 포지션 재조정합니다.
소수의 마켓메이커가 델타를 놓고 서로 경쟁하는 한, 이 프로토콜 설계는 스왑을 하는 사용자가 안정적인 수수료와 최소한의 슬리피지로, 스왑 체결 시점에 언제나 시장 가격이나 시장 가격보다 더 나은 가격에 거래할 수 있습니다. 이 프로토콜의 자본 효율성은 마켓메이커 간의 경쟁 수준에 따라 다른 모든 기존 AMM 설계의 자본 효율성을 능가합니다.
JIT 스왑 예시
실제로 어떻게 작동하는지 살펴보기 위해 일반적인 스왑의 경로를 따라가 보겠습니다. 이 예시에서 가상의 사용자는 USDC(ERC20)를 DOT(네이티브)으로 스왑할 예정이고 마켓메이커 A, B, C는 거래를 통한 유동성 수수료를 얻기 위해 경쟁합니다. 이 풀에는 25bps의 유동성 수수료가 있습니다.
- 사용자(DOT 매수자)는 DOT에 대한 목적지 주소 및 스왑 의도와 관련된 고유한 입금 주소를 생성하는 호가를 생성합니다. 사용자는 자신의 호가 주소에 10,000 USDC를 입금하여 스왑을 시작합니다.
- 이더리움 블록체인은 다음 블록에 USDC 예금을 포함합니다. 마켓메이커들은 예금이 발생한 것을 발견하고 향후 다른 USDC 예금을 추적합니다. 다른 한편에는 폴카닷 체인에 입금하는 DOT 매도자도 있습니다. 거래가 Chainflip 상태 체인에서 인식되려면 여러 이더리움 및 폴카닷 블록이 필요하지만 마켓메이커는 폴카닷 및 이더리움체인을 모두 관찰하여 체결 전에 다음 Chainflip 배치 거래의 전반적인 방향을 계산할 수 있습니다.
- Chainflip은 입금 거래를 '승인'하기 위해 6개의 이더리움 블록이 필요합니다. 또한 6개의 이더리움 블록 배치(또는 약 18개의 Polkadot 블록)에서 스왑을 처리하므로 이더리움 블록체인에서 이루어지는 스왑 입금과 Chainflip의 스왑 체결 사이에 최소 6개의 블록 지연이 있습니다. 이는 마켓메이커가 스왑의 내용을 정확히 확인하고, 유동성을 확보하거나 다른 시장의 위험을 계산할 수 있으며, 상태 체인 트랜잭션을 통해 범위 주문을 조정할 수 있는 약 90초의 시간이 있음을 의미합니다.
- 이 작업이 진행되는 동안 사용자는 배치가 체결될 때까지 6~12개의 이더리움 블록을 기다리고 있습니다. 이 경우 배치에 총 $280,000 상당의 거래량이 있는 10개의 거래가 있지만 해당 거래량 중 $90,000 상당만이 DOT를 매수하고 있습니다. 따라서 배치의 모든 사람이 거래를 진행하려면 전체 배치가 약 $170,000 상당의 DOT를 매도해야 합니다. 총 거래량 $280,000에 대해 최대 25bp(약 $700)의 수수료를 확보하려면 마켓 메이커는 이제 6블록 지연 기간 내에 $170,000 상당의 DOT에 대해 가능한 최고의 가격을 제시해야 합니다. 여기에서 "Just In Time"이라는 이름이 등장합니다. 그들이 승리하려면 유동성 소스를 확보하고 일부 매수 유동성을 아주 적기에 추진해야 하기 때문입니다.
- FTX, 바이낸스 등과 같은 다른 거래소에 추가 자본 유동을 둠으로써 마켓메이커는 리스크 모델 계산을 사용하여 거래에 대한 최상의 가격을 결정할 수 있습니다. 이 계산을 사용하여 범위 주문을 업데이트하고 USDC-DOT 풀의 USDC를 해당 가격까지 옮깁니다. 이 경우 마켓메이커 A는 USDC 범위 주문을 $170,000 USDC 유동성이 DOT당 $23.45에 집중되도록 이동하는 반면, 마켓메이커 B는 $170,000 USDC를 DOT당 $23.47로 이동합니다.
- Chainflip 네트워크는 배치를 체결합니다. 전체적인 방향은 매도이지만, 풀 가격이 자연스럽게 시장 지수 가격에 가까워지도록 마켓 메이커가 외부에서 유동성을 조달하기 때문에 매수하는 사용자도 불필요한 슬리피지을 겪지 않습니다. 마켓메이커 B는 다른 모든 마켓메이커보다 앞섰다고 가정하면 유동성 수수료의 100%를 차지합니다. 거래를 하지 않은 마켓 메이커는 수수료를 받지 않지만 영구적인 손실도 0입니다(잔액이 변경되지 않은 상태로 유지됨).
- 마켓메이커 B는 수수료를 얻었고 방금 매수한 DOT 금액을 알고 다른 시장에서 $170,000 DOT을 $23.47 이상에 매도합니다. 올바르게 관리한다면 마켓메이커는 한 배치에서 $700 이상의 이익을 얻었고 단 6초의 가격 위험을 감수함으로써 그렇게 했습니다. 이러한 기회는 일괄 처리가 체결될 때마다 발생하며 각 풀에 대해 몇 분마다 발생합니다.
- Chainflip 검증인 네트워크는 이제 글로벌 시장 가격을 밀접하게 추적하는 스왑 가격을 기반으로 자금을 받는 사용자에게 자금을 보냅니다. DOT 매수자는 네이티브 DOT 지갑으로 직접 자금을 받습니다.
- 마켓메이커 B는 그의 LP 포지션에 출금이나 입금을 통해 포트폴리오를 재조정하여 향후 배치 기회를 잡을 준비를 하고, 마켓메이커 A와 C는 바로 다음 배치 때 기회를 잡고자 대기합니다. 다음 기회는 단 6 이더리움 블록만 기다리면 됩니다.
이 스왑 흐름은 마켓메이커의 일반적인 소프트웨어 기반 OTC 데스크에서 보이는 체결 패턴과 거의 동일하지만 개방적이고 경쟁적인 환경에서 진행된다는 점에서 다릅니다. 이 전략은 고객 기반을 구축하거나 확장할 필요 없이 거래 흐름을 생성하는 방법으로 일반적인 시장 조성 전략에 용이하게 활용될 수 있습니다.
본 예시와 관련한 몇 가지 주의사항
실제로 단일 유동성 공급자가 유동성 수수료의 100%를 가져가는 경우는 드물 것입니다. 오히려 한 두 명의 마켓 메이커가 주어진 거래의 대부분을 차지하며 다른 유동성 공급자들은 AMM 곡선의 특성에 따른 미미한 양의 거래를 체결하겠죠. 어쨌든 마켓메이커는 항상 자신(및 다른 모든 사람)이 방금 진행한 거래를 알고 있을 거고, 앞서 설명한 내용과 동일한 단계와 원칙을 따를 것입니다.
또한, 더 넓은 범위의 Chainflip 프로토콜 설계에서는 이러한 풀 수십 개를 동시에 작동하도록 설계했으며, 모두 각 체인의 블록 및 승인 시간을 기반으로 약간 다른 속도로 작동합니다. 예를 들어, BTC에서 ETH로의 스왑은 단일 스왑으로 진행되지 않습니다. 사용자의 자금은 BTC-USDC와 USDC-ETH라는 두 개의 풀을 통해 자동으로 처리되며 여기에는 위에서 설명한 것과 동일한 규칙을 따르는 두 개의 스왑 배치가 포함됩니다.
이러한 프로세스로 인해, 마켓 메이커는 배치들을 정확하게 예측하기 위해 해당 풀에 대한 향후 예금뿐만 아니라 최종 처리될 다른 풀로의 예금 경로를 예측해야 합니다. USDC를 통해 모든 것을 처리한다는 것은 사용자가 스왑 처리를 기다리는 동안 짧은 시간 동안 USDC에 노출된다는 것을 의미합니다. 이는 일부 상황에서는 바람직하지 않을 수 있지만 정상적인 시장 상황에서 사용자에게 틀림없이 더 안 좋게 작용할 수 있는 유동성 파편화를 최소화할 수 있다는 점에서 가치 있는 트레이드오프라고 생각됩니다. 프로토콜 내의 특정 경로가 충분히 대중화되면, 사용자가 이러한 가격 노출을 피할 수 있도록 프로토콜 업그레이드를 통해 자산 대 자산 풀(예를 들면, ETH-BTC)을 추가할 수 있습니다.
마지막으로, 모든 시장 조성 전략에는 복잡성의 정도가 있습니다. 고급 위험 및 예측 모델링은 경쟁 마켓메이커들에게 확실히 우위를 제공할 것입니다. 기본 수준에서 JIT 봇은 미래 배치가 완전히 알려질 때까지 대기하고 다른 호가창의 유동성을 즉시 평가하고 범위 주문 가격을 업데이트하고, 다른 호가창에서 일어나는 시장가 매수 또는 매도 전에 다음 배치가 승인되기를 기다릴 수도 있습니다. 이렇게 처리되면, 봇은 JIT AMM에서 어느 정도 흐름을 가져왔다는 사실이 확인되지 않는 한, 다른 호가창에서 거래를 하지 않으며 핵심 기능을 위해 어떠한 고급 모델링에도 의존하지 않습니다. 그러나 보다 전체적인 시장 조성 전략으로 이 단순한 JIT 봇을 능가하는 것은 매우 쉬울 것입니다. 따라서, 거래량이 증가함에 따라 자연스러운 경쟁 다이나믹으로 인해 마켓메이커들이 사용자에게 더 나은 가격 책정이 제공할 수 있도록 지속적으로 발전할 수밖에 없도록 합니다.
JIT AMM의 다른 이점 및 트레이드오프
이 스왑 절차는 사용자에게 몇 가지 이점을 제공합니다. 거래를 블록 또는 블록 배치로 그룹화하여 일괄 거래의 모든 거래자가 동일한 가격을 받기 때문에 선행매매는 무의미해집니다. 더 나아가, 정상적인 시장 조건에서 대부분의 거래에 대해 이 유동성 전략은 대부분의 사용자에 대한 유효 슬리피지를 완전히 상쇄할 수 있습니다.
그러나 이를 달성하기 위해 수용해야 하는 몇 가지 절충안이 있습니다. 즉, 이 프로토콜은 사용자에게 사전에 스왑의 최종 결과에 대한 확신을 줄 수 없습니다. 모든 거래가 완료될 때까지 배치의 최종 상태를 보장할 수 없으며 범위 주문 업데이트가 있을 때까지 최종 슬리피지/가격 계산이 이루어질 수 없습니다. 이는 멀티 스왑 거래 프로세스에서 악화됩니다.
그러나 사용자 프론트 엔드의 거래 측정 도구에 표시되는 리스크 모델 및 예측 모델의 개발로 인해 의도한 규모, 현재 시장 상태 및 과거 데이터를 고려할 때 사용자의 거래에 가능한 결과를 사용자에게 알리는 것이 비교적 간단할 것입니다.
이에 더해, 짧은 시간에 한 방향으로의 대규모 거래로 인해 풀이 매우 불균형해지면, 정확한 가격 책정을 위해 JIT 모델에 의존하는 사용자가 어려움을 겪을 수 있습니다. 이는 모든 마켓메이커가 한쪽으로 치우쳤을 때, 일반적으로 이 문제를 완화하기 위한 JIT AMM에서의 수동적(passive) 유동성이 많지 않을 것이기 때문입니다. 마켓메이커들은 또한 다른 온체인 AMM보다 예금을 확인하고 출금을 처리하는 데 추가 지연이 있기 때문에, 일반 AMM보다 포트폴리오를 재조정하기 위해 더 오래 기다려야 합니다. 다만, 재조정은 일반적인 중앙 집중식 거래소보다 더 오래 걸리지 않습니다. 프론트 엔드가 현재 불균형이나 인덱스 가격과 관련된 풀의 상당한 편차를 감지하는 경우, 사용자가 호가를 생성할 때 사용자에게 경고를 표시하여 이 문제를 다시 완화할 수 있습니다.
최고 수준의 자본 효율성
JIT AMM 풀의 TVL (예치 자산 총 금액)은 일반적인 유동성 풀과 비교할 수 없습니다. 풀의 TVL은 실제로 최대 실제 거래 규모의 절반을 의미하기 때문입니다. 이는 최대치로 끌어올릴 수 있는 자본 효율성이기도 합니다. 모든 유동성 제공자들이 활성 전략을 실행하는 경우 TVL이 $10m인 인기 자산 풀은 이론적으로 대부분의 경우 가격 영향이 2% 미만인 한 방향으로 최대 $3.5m에서 $4m의 거래 배치를 허용할 수 있습니다 ( 모든 시장에서 거래쌍 및 글로벌 유동성 상태에 따라 다름). 이러한 자본 효율성은 단일 체인 AMM에서 실질적으로 모방할 수 없습니다. 이 가격 영향 추정은 cryptosor.info와 같은 도구를 사용하여 주요 쌍의 일반적인 순간 유동성을 관찰한 것을 기반으로 하지만, 가격 영향을 더 줄이는 것은 가능합니다.
그러나 자본 효율성이 100% 이상일 수는 없습니다. 풀에서 사용 가능한 유동성을 초과하거나 심하게 고갈시키는 대규모 예금은 기본적 게임 이론을 바꿔, 마켓메이커들이 경쟁하기보다는 담합하도록 조장합니다. 마켓메이커들이 주문을 체결할 수 없다는 것을 알고 있고, 다른 마켓메이커들도 마찬가지라는 걸 안다면, 마켓메이커들은 글로벌 시장 가격을 희생시켜 들어오는 입금 자산을 효과적으로 매수하기 위해 시장 가격에서 벗어나도록 범위 주문의 가격을 이동시켜 훨씬 더 많은 이익을 얻습니다.
이는 다른 AMM에서 비선형 슬리피지로 막대한 예금을 수락할 때, 풀의 유효 유동성을 초과하면서 실효 가격을 점진적으로 저하시키는 것과 크게 다르지 않습니다. 그러나 JIT AMM의 마켓메이커는 들어오는 입금 자산에 대응할 시간이 있기 때문에 오용의 여지가 더 많습니다. JIT AMM의 특정 거래에서 한 쪽의 유동성이 확실히 고갈된다는 확신이 있는 경우에만 마켓메이커가 이 새로운 게임을 적용하는 게 합리적인데, 그렇게 진행한다고 해도 마켓메이커에게 돌아오는 보상은 일반적인 AMM에서 보다 더 안 좋습니다.
상당한 거래 방향 변경이 있는 대규모 거래 배치의 경우, 풀 소진이 발생할 가능성을 완화할 수 있는 차익 거래 형태도 있습니다. 대규모 예금이 감지되면 차익 거래자는 동일한 블록 내에서 반대 예금을 만들어 전체 배치에서 예상되는 가격 영향에 노출될 수 있습니다. 이렇게 하면 차익 거래자가 지수 가격보다 저렴하게 매수하거나 더 높은 가격에 매도할 수 있지만 이러한 기회는 불균형 배치가 많이 예상되는 경우에만 존재합니다. 이 전략을 따르는 차익거래자는 다른 거래자에 대한 대규모 거래의 영향을 줄이고, 자본 효율성을 더욱 개선하는 데 도움을 줘서, 마켓메이커가 유동성을 소진하지 않고 더 큰 규모의 거래를 처리할 수 있도록 합니다.
유동성 풀을 소진시키고 약탈적인 마켓메이커의 행동을 조장하지 않는 또 하나의 잠재적 방안은 아주 큰 예금을 자동으로 분할하는 것입니다. 대규모 예금을 향후 배치로 분할함으로써 차익 거래자와 마켓메이커는 거래를 처리하는 데 더 많은 시간을 할애할 수 있습니다. 이는 대부분의 OTC 데스크가 어떤 경우에도 백엔드에서 대량 주문을 처리하는 방식과 유사합니다. 이 예금 분할 기능이 효과적으로 구현되면 예금자는 이론적으로 OTC 데스크를 사용한 것과 유사한 가격을 얻을 수 있습니다. 현재로선 이 기능을 조기에 구현할 계획은 없지만, 향후 중요한 기능으로 입증되면 프로토콜 업그레이드를 통해 진행할 수 있습니다.
요약
Chainflip AMM 프로토콜은 "Just In Time AMM"(JIT AMM)이라고 하는 잠재적으로 새로운 AMM 클래스의 구현입니다. JIT AMM 프로토콜은 Chainflip과 같은 멀티체인 AMM이 당면한 과제에도 불구하고, 항상 사용자들이 시장가격에 가까이 거래할 수 있도록하는 탈중앙화 방식으로 작동합니다 . 또한 AMM을 기존 흐름 소스에 통합할 수 있는 마켓메이커에게 자유 거래 흐름을 제공하는 방법입니다. 이 디자인을 구현하려면 상당한 작업을 수행해야 하며, 프로토콜 엔지니어와 마켓메이커 모두 프로토콜을 효과적으로 최적화하고 활용하기 위해 많은 개발 작업을 거듭해야 할 것으로 예상됩니다.