
오라클과 프론트런 거래
번역: 등사 커뮤니티
Angle Protocol 설계에는 많은 연구가 투입되었습니다. 겉보기에 구조가 간단해 보일 수 있지만, 그 이면에는 이해해야 할 복잡한 개념들이 많습니다. 이번 시리즈에서는 프로토콜의 일부 요소를 깊이 있게 살펴보고, 왜 그렇게 설계되었는지 설명하겠습니다.
첫 번째 글에서는 Angle의 오라클 솔루션과 프론트런 거래를 완화하기 위해 어떻게 구성되었는지를 다룹니다.

서론
Angle은 사용자가 agTokens(스테이블코인)을 다른 토큰과 맞바꿔 발행하거나 소각할 수 있게 해줍니다. 트레이더들은 이용 가능한 담보물 / 스테이블코인 페어에서 롱 포지션을 개설할 수도 있습니다. 균형이 펀딩 레이트에 의존하지 않고 실행 가격이 직접 오라클로부터 유도되기 때문에 전통적인 퍼피츄얼 계약은 아닙니다.
이러한 사용 사례를 고려할 때, 프로토콜은 자산의 신뢰할 수 있는 가격 정보를 확보하여 사용자에게 공정한 가격을 제공하고 프론트런으로부터 스스로를 보호할 필요가 있습니다. 이 기사의 FAQ에서 Samcszun은 단순히 현물 가격을 사용하는 것 이상의 이유를 설명합니다.
프론트런은 시장에서 오랫동안 존재해온 문제입니다. 일부 참여자가 다른 사람들보다 먼저 정보를 얻을 수 있고, 이를 활용해 위험 부담 없이 무위험 이익을 얻을 수 있기 때문입니다. 역사적으로 체인 상에서 이러한 현상을 방지하는 것은 매우 어려웠습니다. 이더리움 거래의 높은 비용과 느린 속도는 오라클이 빈번하게 가격을 업데이트하는 것을 어렵게 만들었습니다. 이는 오프체인과 온체인 가격 사이에 지연을 발생시켜 프론트런 거래자들이 이를 악용해 수익을 창출할 수 있도록 했습니다.
모든 스테이블코인 프로토콜이 오라클 지연으로 인한 프론트런 리스크를 걱정하는 것은 아닙니다. Maker의 DAI 경우, 오라클 지연은 일반적으로 프로토콜에 유리합니다. 누군가 자신의 포지션이 다음 오라클 업데이트에서 가격 하락으로 인해 강제청산될 것임을 확인하면, 자금을 다시 금고에 입금하도록 유인받아 프로토콜의 건전성과 담보비율을 높이는 결과를 낳습니다.
합성 자산(Synthetix)은 합성 자산과 담보물 간에 오라클 가치 교환을 허용하며, 스테이블코인 프로토콜이 프론트런 문제에 직면할 수 있음을 보여주는 완벽한 예입니다. 해당 블로그 포스트는 프로토콜이 프론트런과 싸워온 오랜 역사를 요약하며, 과거에 당했던 일부 공격 사례도 포함합니다.
Synthetix와 마찬가지로, Angle은 가격 슬리피지 없이 오라클 가치 기반으로 자산 교환이 가능합니다. 따라서 Angle 역시 동일한 프론트런 문제에 직면합니다. Angle 코어팀은 프론트런을 방지하기 위해 많은 노력을 기울였으며, 두 가지 주요 개선을 도입했습니다: 특수 오라클 설계와 동적 수수료 구조. 본문에서는 Angle의 오라클 설계와 그 배경을 설명하겠습니다.
오라클 업데이트 프론트런: 한 예시
Angle의 솔루션을 깊이 들여보기 전에, 프론트런이 프로토콜에 어떤 피해를 줄 수 있는지 이해해봅시다. ETH가 Angle 스테이블코인을 지원하는 담보물로 받아들여지는 사례를 생각해보겠습니다.
거래 수수료 없음
공격자가 오프체인 ETH 가격을 확인하고 Chainlink 오라클이 더 높은 가격(p0에서 p1로, p0 < p1)으로 온체인 데이터를 업데이트하려 한다는 것을 알았다고 가정합시다. 이 공격자는 p0 가격에 x개의 스테이블코인을 소각해 x/p0의 ETH를 받은 후, 가격이 p1로 업데이트된 이후 이를 다시 프로토콜에 판매함으로써 이익을 얻을 수 있습니다:

이 오라클 업데이트에 대한 프론트런으로 인해 이 부분의 이윤이 프로토콜 리저브에서 빠져나갔습니다. x = 100ETH이고 p1 = 1.01 * p0(가격 상승 1%)라면, 공격자는 프로토콜 리저브에서 1 ETH를 가져간 것입니다.
거래 수수료 존재
다행히 거래 수수료를 추가하면 이 문제를 완화할 수 있습니다. 수수료가 프론트런 거래자의 이윤을 축소시키며 기회를 줄이기 때문입니다.
예를 들어, 발행 및 소각 거래 수수료가 일정하고 동일한 f라면, p0에서 x개의 스테이블코인을 소각하고 p1에서 ETH를 다시 프로토콜에 판매하는 공격자의 최종 이윤은 다음과 같습니다:

이전 경우와 비교해 수수료가 이윤을 줄였습니다:

거래 수수료가 f=0.3%이며 위 예시를 따르면, 공격자의 이윤은 이제 0.39 ETH에 불과합니다.
거래 수수료 및 두 개의 오라클 솔루션
이 기회를 더욱 줄이기 위해 보조 오라클을 활용해 두 가지 가능한 가격 원천(pC: Chainlink 가격, pU: Uniswap 가격)을 사용할 수 있습니다. 프로토콜은 가장 유리한 가격(발행 시에는 낮은 가격, 즉 사용자로부터 토큰을 매입하고, 소각 시에는 높은 가격, 즉 사용자에게 ETH를 매각)을 활용하여 프론트런 기회를 더욱 매력 없게 만들 수 있습니다.
-
앞서 언급한 동일한 기회에서 수익을 얻으려는 트레이더를 상상해보십시오. pC0 < pC1이라고 가정합시다.
-
반면에, pU는 일정하며 pC0에 더 가깝다고 생각할 수 있으므로:

나중에 살펴보겠지만, Uniswap 타임 가중 평균 가격(TWAP)의 설계로 인해 pU는 일반적으로 pC보다 늦게 반영됩니다.
-
이 경우 잠재적 기회에서 수익을 얻으려는 공격자는 프로토콜로부터 pC0에 토큰을 구매(스테이블코인 소각)해 x(1-f)/pC0의 ETH를 받고, pU1에서 더 높은 가격에 다시 판매하여 다음의 손익 결과를 초래합니다:

앞서 언급한 예시의 수치를 유지한다면, 공격자는 이 작업에서 결국 0.6 ETH를 손실하게 됩니다.
Angle의 솔루션
Angle의 설계는 이러한 프론트런 리스크를 제거하기 위해 특별히 고안되었습니다. 따라서 프로토콜은 위 예시와 매우 유사한 메커니즘을 도입할 것입니다. 이 섹션에서는 잠재적 기존 옵션들을 더 자세히 탐색하고, 우리가 도입할 설계의 세부사항에 집중하며, TWAP 시간 윈도우 선택에 대한 분석을 진행하겠습니다.
옵션
Angle의 사용 사례에 적합할 수 있는 주요 오라클 솔루션은 다음과 같습니다:
-
Chainlink
-
Uniswap V3 TWAP
-
Maker Feeds
Chainlink는 명백한 선두주자입니다: 다양한 자산에 대해 다수의 데이터 소스를 제공하는 널리 사용되는 탈중앙화 오라클 솔루션입니다. 가격은 여러 데이터 소스에서 유입되며 탈중앙화된 리레이어 네트워크를 통해 전달되어 데이터가 신뢰 가능하고 접근 가능하며 조작이 어렵다는 것을 보장합니다. 그러나 일부 데이터 소스는 일반적으로 '상당한' 가격 변화(예: ETH/USD 0.5%) 후 또는 일정 시간 경과 후에만 업데이트되므로 Chainlink 가격은 항상 실제 시장 가격보다 뒤처집니다. 따라서 Chainlink의 가격 업데이트는 오프체인 가격이나 메모리풀을 확인함으로써 프론트런될 수 있습니다.
Uniswap V3 타임 가중 평균 가격(TWAP)은 또 다른 널리 사용되는 오라클 솔루션입니다. Uniswap 계약에서 특정 기간 동안 풀 내 토큰들의 타임 가중 평균 가격을 조회할 수 있으며, 시간 범위는 몇 초에서 9일까지 설정 가능합니다. 가격은 지정된 시간 동안 두 토큰 간의 가격을 평균화하여 산출됩니다. 이를 통해 TWAP을 조작하려면 막대한 자금과 장시간이 필요하므로 대부분의 경우 효율적이지 않습니다.
그럼에도 불구하고 TWAP은 과거 블록 관측값의 평균 가격이기 때문에 실시간 오프체인 가격뿐 아니라 Chainlink 가격 소스보다도 종종 지연됩니다. 단독으로 사용될 경우 프로토콜을 프론트런으로부터 충분히 보호하기에는 부족합니다.
또한 TWAP은 체인 상 토큰 페어의 가격만 보고하므로, 체인 상에 표현되지 않은 자산(따라서 Uniswap 풀에도 없음)에 대한 접근을 제공하려는 프로토콜의 목표를 충족시키지 못합니다. 예를 들어 외환 스테이블코인입니다.
Maker 오라클을 사용하는 것은 Angle의 또 다른 선택지였을 수 있습니다. 하지만 이는 MakerDAO를 신뢰하고 가격 데이터 접근을 위한 거버넌스 절차를 거쳐야 한다는 것을 의미합니다. 또한 가격 소스는 Maker가 사용하는 것으로 제한되므로, 외환 환율에 접근하려는 우리에게는 충분하지 않습니다.
Angle의 설계: Chainlink + UniV3 TWAP
이러한 점들을 고려하여 Angle Protocol의 Chainlink 오라클과 10분 Uniswap V3 TWAP을 결합하기로 결정했습니다. 이를 통해 언제든지 가능한 공정한 가격을 확보하면서 프로토콜을 프론트런 공격으로부터 보호할 수 있습니다.
일반적으로 Angle의 계약은 두 채널의 가격을 비교하고 프로토콜에 가장 유리한 가격을 사용합니다. 이 설계를 통해 프로토콜을 프론트런하는 것이 더욱 복잡해지며, 프로토콜의 환율을 악용하려면 두 오라클 모두를 조작하거나 프론트런해야 합니다.
구체적으로, 우리의 계약은 모든 변동성 자산 / 스테이블코인 페어에 대해 Chainlink와 Uniswap에서 최고의 가격을 가져오고, Chainlink의 외환 오라클을 사용해 가격을 필요한 법정 통화로 변환합니다. 각 담보물 / 스테이블코인 페어마다 전용 오라클 계약과 독립적인 가격 소스가 존재합니다.
어떻게 작동하나요?
예를 들어 사용자가 ETH/agEUR 페어에서 거래를 하려 한다고 가정합시다. 우리의 계약은 ETH/USD와 USD/EUR의 가격을 가져와야 합니다. Chainlink에서 얻은 ETH/USD 최고 가격과 ETH/USDC UniV3 풀의 10분 TWAP을 보유합니다. 그런 다음 Chainlink에서 외환 USD/EUR 가격을 가져옵니다.
예시:Uniswap ETH/USDC TWAP: 1900 USD (프로토콜은 USDC가 일반적으로 앵커링을 유지한다고 가정함, 즉 1 USDC = 1 USD); Chainlink ETH 가격: 1850 USD; Chainlink USD 가격: 1.16 EUR.사용자가 이 상황에서agEUR를 발행하려 한다면, 프로토콜은 찾을 수 있는 가장 낮은 ETH/USD 가격, 즉 Chainlink의 ETH당 1850 USD를 사용합니다. 반대로 같은 상황에서 사용자가 wETH에 대해agEUR를 소각하려 한다면, 프로토콜은 더 높은 가격인 Uni ETH/USDC TWAP 1900을 사용합니다. 두 경우 모두 프로토콜은 Chainlink의 USD/EUR 1.16 환율을 사용해 ETH/USD를 ETH/EUR로 변환합니다.마찬가지로 프로토콜은 영구계약을 개설하려는 사용자에게는 최고 가격을, 계약을 종료하려는 사용자에게는 최저 가격을 사용합니다.
보다 일반적으로:
-
가격이 필요한 사용자 계약이 관련 오라클 계약을 호출합니다.
-
페어의 유형에 따라 오라클 계약은 UniV3 TWAP과 Chainlink에서 견적을 읽거나(예: 스테이블코인 간 교환의 경우) Chainlink에서만 읽어 주 계약에 반환합니다.
-
실행되는 작업(발행, 소각, 개설, 종료)에 따라 관련 계약이 프로토콜에 유리한 견적을 보유하고 거래를 실행합니다.
Uni V3 TWAP 시간 윈도우 선택
Angle 계약은 TWAP에 10분 시간 윈도우를 사용합니다. 다양한 시간 윈도우가 전혀 다른 가격 구조를 초래할 수 있기 때문에 이 선택은 신중하게 이루어졌습니다.
다른 시간 윈도우 간 차이점
Angle의 경우, 한편으로 시간 윈도우는 프로토콜과 현물 가격 사이에 충분한 지연을 제공할 만큼 충분히 길어야 합니다. 실제로 가격 변동성이 클 때 Chainlink의 프론트런 리스크가 증가하는 상황에서 발행 및 소각 가격 사이에 더 큰 스프레드를 확보할 수 있게 해줍니다. 또한 시간 윈도우가 길수록 최근 관측치가 가격에 미치는 영향이 작아져 TWAP 가격 조작이 더 어려워집니다.
다른 한편으로, 프로토콜은 여전히 사용자에게 공정하고 최신의 견적을 제공해야 합니다: 너무 넓은 시간 윈도우는 현재 시장 가격과의 과도한 가격 격차를 만들어내며, 너무 좁은 윈도우는 우리가 원하는 가격 차이를 제공하지 못합니다.
Chainlink 가격 소스와 10분 및 60분 TWAP 비교
최종적으로 10분 시간 윈도우를 선택한 이유를 이해하기 위해, 아래에는 ETH/USDC의 10분 및 60분 TWAP과 Chainlink ETH/USD 가격, Coinbase 종가를 비교한 그래프가 표시되어 있습니다.
사용자가 발행/종료 및 소각/개설할 때 프로토콜이 사용하는 상한율과 하한율이 Chainlink와 Uniswap의 TWAP 간 최유리 가격 사이에서 어떻게 이동하는지 확인할 수 있습니다.


60분 TWAP은 시장 가격에서 멀어지는 경향이 있는 반면, 10분 TWAP은 Chainlink 가격 소스에 유익한 버퍼를 제공하면서도 가격을 시장과 충분히 가깝게 유지합니다.

첫 번째 차트에서 볼 수 있듯이 변동성이 높을수록 Chainlink와 Uniswap 가격 간 스프레드가 커진다는 점에 주목할 필요가 있습니다. 반대로 가격이 일정 기간 동안 상대적으로 안정되면 Uniswap과 Chainlink의 가격 소스가 서로 근접합니다.
TWAP을 프론트런에 대한 추가 보호로 사용하는 것은 실제로 체인 상 오라클 지연으로 인해 프론트런 리스크가 더 큰 시기에 동적으로 더 높은 효과적인 수수료를 부과하는 것과 같습니다. 이러한 높은 효과적 수수료의 대가는 아비트리지 트레이더가 프로토콜을 통해 스테이블코인을 직접 재정가하는 능력을 저하시킨다는 것입니다.
대부분의 경우 Uniswap과 Chainlink의 가격은 매우 유사하여 사용자는 두 오라클 솔루션을 사용한다는 사실을 거의 느끼지 못할 것입니다. 높은 변동성 시기에는 현재와 미래의 Chainlink 체인 상 가격 사이에 중요한 가격 차이로 인해 프로토콜이 프론트런될 수 있지만, 이때 프로토콜의 가격은 달라지며 프론트런으로부터 보호됩니다.
Synthetix 수수료 회수 / 환급 주목
Angle의 오라클 연구는 Snythetix의 프론트런에 관한 거버넌스 토론과 관련 블로그 포스트에서 크게 영감을 받았습니다. 우리의 연구 중에서도 우리가 접한 또 다른 옵션은 2020년 2월에 도입했다가 결국 일시적으로 종료된 수수료 회수 / 환급 시스템입니다.
그들이 한 일은 거래에 대기 시간을 추가하여 사용자가 원하는 Synth를 조작할 수 없도록 한 것입니다. 이 기간 동안 오라클은 거래가 불일치(inconsistency)의 영향을 받는지, 즉 실행 시점과 대기 기간 종료 시점 사이에 가격 차이가 존재하는지 확인할 수 있습니다. 만약 존재한다면, 가격 차이는 사용자 또는 프로토콜이 다른 쪽(프로토콜 또는 사용자)에게 지불하거나 다음 Synthetix 거래에서 정산해야 했습니다.
이 솔루션은 프론트런 감소에 매우 효과적이었지만, 대기 시간을 연장하고 수수료를 증가시켜 모든 트레이더에게 매우 나쁜 사용자 경험을 제공했습니다. 또한 많은 사용 사례에서 Synth가 다른 프로토콜과의 결합을 방해했습니다. SIP-120에서 그들은 대규모 거래에 TWAP 오라클을 사용하는 방식으로 이 솔루션을 대체했습니다.
결론
Angle의 특수 오라클 설계는 프로토콜에 두 가지 주요 영향을 미칩니다:
-
공격자는 프로토콜을 속이기 위해 두 시장을 조작해야 하므로 성공적인 프론트런 리스크가 크게 감소합니다.
-
시장 스트레스 기간에는 프로토콜이 사용자에게 최상의 가격을 제공하지 않을 가능성이 큽니다.
마지막 영향은 Fei의 거버넌스 포럼에서 논의된 주제입니다. 최상의 거래 실행을 제공하는 것이 프로토콜의 핵심 목표가 아니기 때문에, 우리는 프로토콜이 더욱 안전해지도록 하는 프론트런 내성을 더욱 중요하게 여깁니다. 고변동성 기간에는 보조 시장이 더 나은 거래 실행을 제공할 것입니다.
Angle 프로젝트에서 우리의 목표는 완전히 담보된 고효율 스테이블코인 프로토콜을 설계하는 것입니다. 이를 위해서는 프로토콜의 많은 측면을 고려하여 불리한 입장으로 속임을 당하지 않도록 해야 하며, 그 중 하나가 프론트런 내성입니다. 이는 오라클에 의존하는 체인 상 탈중앙화 스테이블코인의 안정성이 궁극적으로 그 오라클에 달려 있다는 점에서 특히 중요합니다.
TWAP 형태의 보조 가격 피드를 추가하면 프로토콜이 높은 시장 변동성의 잠재적 악영향과 이러한 순간에 나타나는 프론트런 기회를 완화하는 데 도움이 됩니다.
마지막으로 주목할 점은 이러한 오라클 솔루션이 유연성과 확장성을 유지한다는 것입니다. 한편으로 Angle 거버넌스는 언제든지 투표하여 오라클 계약을 업데이트할 수 있습니다. 다른 한편으로 Chainlink가 지원하는 가격 피드가 있다면 어떤 자산에 대해서도 오라클을 생성할 수 있습니다. 이는 Angle의 비전, 즉 자본 효율적인 방식으로 금융 자산을 체인 상으로 가져오는 것을 실현하기 위한 최소한의 지원입니다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














