탈중앙 거래소의 선행 매매, 트랜잭션 재정렬, 합의 불안정에 대하여

scalalang2
CURG
Published in
16 min readFeb 19, 2020

본 포스트는 2019년 4월 10일에 아카이브에 등록된 논문인 Flash Boys 2.0을 해석한 글입니다. 이 논문은 코넬테크, 일리노이 대학, 카네기멜론 대학, 스위스 취리히 공대 등 4개 대학 8명의 공동연구자에 의해 발표된 논문입니다.

2020–06–25: 이 논문은 현재 IEEE S&P 2020에 Accept된 논문입니다.

Flash Boys

책 “플래시 보이스”는 2000년대를 흔들었던 서브프라임 모기지 사태를 다룬 책 “빅쇼트”의 원저자인 마이클 루이스가 지은 책이다. 플래시 보이스는 나노 세컨드 단위로 초단타매매(HFT)를 하는 증권사에 대한 흥미로운 이야기를 다룬다.

본 포스트에서 소개하는 논문인 “Flash Boys 2.0”은 블록체인에서 탈중앙-거래소를 이용하는 사람들 중, 초단타매매를 하는 봇(컴퓨터 프로그램)의 존재와 수익률, 블록체인 네트워크에 끼치는 피해 등을 탐사하는 내용이다.

선행매매 (Front-Running)

만약 여러분이 증권사에서 일하고 있는 직원인데 어느날 고객으로부터 A회사의 주식 10만주 매수 주문이 들어왔다. 이 때 여러분은 악의적인 마음을 품고 고객의 요청을 왜곡하여 수익을 얻을 수 있다.

주식 시장의 호가 창 예시

위와 같은 상황에서 증권사 직원은 고객의 주문을 처리하기 전에 값싼 가격에 일정 주식을 매수하고 비싼 가격에 매도 주문을 올린 다음, 고객의 주문을 나중에 처리하여 시세차익을 얻을 수 있다. 이것을 선행매매(Front-Running)라고 부르며 대 부분의 나라에서는 당연히 불법이다. 고객이 값싸게 살 수 있는 것을 비싸게 매수하여 손해를 입혔기 때문이다. 하지만, 블록체인에는 기술적인 규칙만 존재할 뿐, 법은 존재하지 않는다. 암호화 된 주소에 의해서 익명성이 보장되기 때문에 들키지 않고 선행매매를 할 수 있다.

재정거래 (Arbitrage trading)

재정 거래란 시장 간 또는 지역 간 어떤 상품의 가격 차이가 발생하여 그 차익을 내기 위한 거래를 의미한다. 예를 들어 시카고 증권거래소에서 거래되고 있는 회사 A의 주식이 49,000원에 가격이 형성되어 있고, 뉴욕증권거래소에서는 이 회사의 주식이 50,000원에 형성되어 있다고 하자. 여기서 우리는 시카고 증권거래소에서 주식을 매수하고 뉴욕증권거래소에서 이를 매도하는 방식으로 시세 차익을 얻을 수 있다.

이더리움에서도 이와 같은 재정거래가 가능하다. 이더리움에는 IDEX, EtherDelta, Kyber Network등과 같이 많은 탈-중앙 거래소가 배포되어 있는데 값싸게 형성되어 있는 거래소에서 구매 한 뒤, 비싸게 형성되어 있는 거래소에서 되팔아 시세차익을 얻을 수 있다.

탈-중앙 거래소란 업비트, 바이낸스와 같이 내부 데이터베이스에서 거래를 처리하는 방식을 스마트 컨트랙트 혹은 오프-체인(Off-chain) 기술을 이용하여 완전하게 탈-중앙 방식으로 구현한 것을 말한다. 현재 이더리움에는 10+ 여종의 탈-중앙 거래소가 배포되어 있으며, 2020년 2월 18일 기준 지난 7일간 약 100,000+ 개의 트랜잭션이 발생하고 있다.

탈-중앙 거래소에서 재정 거래가 발생하고 있다.

탈-중앙 거래소는 이상적인 목표에 의해 탄생하였다. 거래소의 운영자에 의해서 자산이 탈취될 가능성이 없으며, 모든 거래는 스마트 컨트랙트에 의해 원자적으로 이루어진다. 모든 거래내역은 공개되어 투명성을 보장한다. 하지만, 이런 탈-중앙 거래소는 블록체인의 내재적인 구조로 인해 보안성에 위협을 받고 있다. 사용자의 요청이 합의 과정에 의해 거래가 늦게 처리 되기 때문에 공격자는 뒤늦게 자신의 트랜잭션을 높은 수수료로 발생시켜 이익을 취할 수 있다.

“Flash Boys 2.0” 에서는 현재 탈-중앙 거래소에서 재정거래를 하고 있는 트레이딩 프로그램(봇)이 존재하고 있다고 주장한다. 본 논문에서는 이런 트레이딩 봇의 행동을 모델링하고 데이터 분석을 통해 그 시장 크기의 최소 수치를 나타낸다. 지금부터는 본 논문에서 정의한 모델과 데이터 분석 방법에 대해 다룬다.

Pure Revenue Opportunity

순수 이익 기회(Pure Revenue Opportunity)란 단 하나의 트랜잭션에서 조건 없이 이익을 얻은 트랜잭션이라고 본 논문에서 정의했다. 이더리움의 스마트 컨트랙트에는 다른 스마트 컨트랙트의 함수를 호출할 수 있는 기능이 제공되는데 이를 이용하면 하나의 컨트랙트 복수개의 컨트랙트를 실행할 수 있다. 이러한 패턴을 Proxy Contract라고 부른다. 이 컨트랙트를 활용하면 자산 A를x의 가격으로 구매한 다음 x’ > x 의 가격으로 바로 되파는 행위를 하나의 트랜잭션에서 실행할 수 있다. 누구나 이 하나의 트랜잭션만 발생하면 100% 수익을 얻게 된다. 아래 그림은 논문에서 나온 순수 이익 기회의 한 예시이다.

순수 이익 기회의 예시

위 그림에서 나온 트랜잭션은 2018년 11월 15일에 실제로 이더리움에서 발생한 트랜잭션이다. 이 트랜잭션에는 두 개의 거래가 한 번에 TokenStore DEX에서 이루어 졌다. 위 트랜잭션을 발생시킨 사람은 FREE Coin을 0.142123 ETH 만큼 매수한 다음에 전량을 0.93 ETH만큼 매도하여 당시 이더리움 시세 기준으로 약 267 USD의 수익을 올렸다. 논문의 저자는 이런 시세 차이가 발생한 이유가 거래소 API를 통해 당시 시장 가격의 10배로 매수 주문을 잘 못 올린것으로 밝혀졌다고 말한다.

이더스캔에서 위 트랜잭션의 내용을 확인할 수 있다. 이벤트 로그 기록을 보면 한 트랜잭션에서 두 개의 Trade 이벤트를 발생한 것을 확인할 수 있다. 이렇게 하나의 트랜잭션 만으로도 명백하게 수익을 얻은 경우를 순수 이익 기회 라고 정의 한다. 만약 블록 K번째에서 자산을 x가격으로 구매한 뒤 K+1번째 블록에서 자산을 x’ > x 가격으로 되팔아 이익을 얻은 경우라면 두 개의 트랜잭션을 발생시켰으므로 순수 이익 기회에 해당하지 않는다. 아래 그림은 2017년 7월부터 2019년 2월까지 약 18개월 간 이더리움 메인넷에서 발생한 모든 순수 이익 기회를 나타낸다.

2017년 7월부터 2019년 2월까지 이더리움 메인넷에서 관측된 모든 순수 이익 시장 크기
  • Dashed Orange Line : X축에 따른 누적 순수 이익 그래프
  • Black Line: 14일 순수 이익 이동평균선
  • Scatter Plot : 해당 일에 발생한 순수 이익 기회 트랜잭션의 개수를 말한다. 빨간색에 가까울 수록 양적으로 많은 순수 이익 기회가 있었고, 파란색에 가까울수록 적게 발생하였다.
  • Vertical Pink Line : 본 논문의 저자가 2017년 본 연구의 선행연구 격인 탈중앙화 거래소의 재정 거래 봇에 대한 블로그를 업로드한 날짜이다.

위 그래프에 따르면 18개월간 발생한 총 순수 이익은 약 10,000 ETH이고 하루에 약 1~100 ETH 사이의 순수이익이 발생하고 있다는 것을 보여준다. 10,000ETH는 이 글을 쓰는 시점에서 총 32억원으로 이 시장이 꽤 크다는 것을 보여주고 있다.

Priority Gas Auctions (PGAs)

지금까지 본 것과 같이 순수 이익 기회는 트랜잭션을 발생시킨 사람에게 확실한 수익을 가져다 준다. 특정 시점에서 순수 이익이 존재한다면 해당 트랜잭션을 먼저 처리하는 사람에게 이득이 발생한다. 그렇기 때문에 이 기회를 먼저 취득하기 위한 수수료 경쟁이 발생하게 되는데 이를 Priority Gas Auctions 라고 부른다. “Flash Boys 2.0” 에서는 실제로 이런 경쟁이 재정 거래 봇(Arbitrage Bot)에 의해 발생하고 있고 이 데이터를 수집한 결과를 보여준다. 지금부터는 이 논문에서 정의한 PGAs의 Model과 데이터를 수집한 방법을 소개한다.

PGA Model Properties

본 논문에서는 PGA를 N명의 플레이어 {P0, P1 … Pn-1} 보상 $1를 얻기 위한 입찰 경쟁으로 정의한다. 이 게임은 아래의특징을 가진다.

  • a) Continuous Time: 입찰 경쟁은 이산적인 라운드가 아닌 지속적인 시간 선상에서 발생한다. 이는 현재 블록체인 네트워크가 비동기로 동작하기 때문이다.
  • b) Imperfect Information: 각 플레이어는 결국 상대방의 입찰 가격을 알게 되는데 발생 즉시 알지는 못한다. 여기서 입찰 가격이란 블록체인의 수수료를 말한다. 현재 이더리움 및 비트코인은 수수료를 높게 제시한 트랜잭션을 우선 처리하는 로직을 가지고 있는데 플레이어들은 이 수수료를 더 높게 제시함으로서 $1 를 얻기 위해 경쟁한다. 발생 즉시 알지 못한다는 것은 블록체인에 모든 데이터가 전파되기 위한 Latency를 이야기한다. 플레이어 Pi는 다른 플레이어의 입찰 가격을 ∆i의 시간이 지난 후 알게 된다. 특정 플레이어의 Latency인 ∆i0에 가까울 수록 Pi 블록체인 네트워크 상에서 독점적인 지위를 가지게 되며 지연 시간 없이 다른 플레이어의 입찰 가격을 알 수 있다.
  • c) All pay: PGA 경쟁에서 입찰에 참여한 모든 플레이어는 결국 트랜잭션의 수수료를 지불하게 된다. PGA경쟁이 지속적으로 발생한다 해도 이더리움에서는 고정된 nonce를 가진 하나의 트랜잭션만 블록에 포함시키기 때문에 수수료는 한 번만 지불하게 된다. 모든 플레이어는 경쟁이 끝나면 L($b_last) 만큼 비용을 지불한다. 여기서 L은 손실함수를 의미하고 $b_last는 마지막으로 입찰한 비용을 말한다. 본 연구에서는 대 부분의 경쟁에서 L($b_last) < $b_last 의 결과를 따른다고 관찰했다. 그 이유는 수수료를 아무리 높게 책정해가면서 새로운 트랜잭션을 발생시켜고 결국 부가적인 이유로 해당 트랜잭션이 중간에 블록에 포함되기 때문이다.
  • d) Probabilistic auction duration: 모든 PGA 경쟁은 랜덤한 시간에 마감하게 된다. 이더리움 혹은 비트코인에서는 다음 블록이 채굴될 때 종료된다고 말할 수 있다. 본 연구에서는 이 채굴 시간을 지수적인 분포를 따르는 확률 변수 D로 정의한다.
  • e) Rate-limited bidding: 블록체인 네트워크에서는 Flooding Attack(많은 트래픽을 발생시키는 DoS공격의 일종)을 방지하기 위한 작업을 수행하기 때문에 플레이어 혼자서 무한정 입찰 가격을 올릴 수 없다. 모든 플레이어는 다음 입찰을 수행하기 위해 short interval δ 의 시간을 대기해야 한다.

본 논문에서는 실험을 조금 더 쉽게 하기 위해 2명의 플레이어가 PGA에 참여한 경우만을 두고 데이터를 분석하였다. 아래는 실제 이더리움 메인넷에서 발생한 PGA를 관측한 데이터를 보여주는 그림이다.

순수 이익 기회를 위해 PGA 게임을 하고 있는 두 명의 플레이어를 관측한 데이터이다.

위 그림은 최초로 순수 이익 기회가 발생한 시간 축 0번째 부터 14초까지 발생한 트랜잭션을 관측한 내용이다. 위 그래프에는 두 플레이어 A(0x68Bc…)와 B(0xb8D7…)가 존재한다. 플레이어 A 가 최초로 25.10 gwei의 수수료로 트랜잭션을 발생시킨다. 그리고 1.624초 뒤에 플레이어 B가 동일한 내용의 트랜잭션을 28.75 gwei로 더 높은 수수료를 제시하여 발생한다. 이 수수료 경쟁은 14초까지 이어지며 기존 수수료 보다 약 355.84배 까지 올라간다.

두 플레이어는 14초 동안 총 85개의 트랜잭션을 발생시켰다. 이더리움에서는 트랜잭션이 동일한 nonce값을 가지면 그 중 하나만 블록에 포함시키기 때문에 이 85개의 트랜잭션 중 2개만 실제로 블록에 기록되었다. 그렇다면 본 논문의 실험자는 블록에 기록되지 않은 트랜잭션을 어떻게 관측했을까?

위 그림에서 승리한 플레이어가 최종적으로 수행 한 트랜잭션은 아래 링크에서 확인할 수 있다. https://etherscan.io/tx/0xc889bd13594f75e4dd824f04f0c2ad03896cb7ec6518df02455e9560367bb9c4

데이터 수집

본 논문에서는 블록체인에 기록되지 않는 트랜잭션 데이터를 수집하기 위해 직접 서울, 상 파울로, 프랑크 푸르트 등 6개 지역에 이더리움 클라이언트를 설치해 메인넷에 연결하였고 약 9개월 간 데이터를 수집하였다. 아래 그림은 그들이 데이터 수집을 하기 위한 모니터링 서비스의 아키텍처를 보여준다.

이더리움 데이터를 수집하기 위한 모니터링 인프라 시스템

이들은 약 9개월 동안 데이터를 수집한 끝에 300기가의 데이터를 확보했고 약 708,385,840개의 독립적인 PGA 데이터를 수집했다고 말한다. 이 7억건의 데이터가 모두 트레이딩 프로그램이 한 것은 아니고 사람이 발생시킨 것도 포함된다. 이들은 이 데이터 중 의미있는 데이터를 구별하기 위해 최소한 4번 이상의 입찰 경쟁이 붙은 PGA만 따로 식별하였다. 이렇게 따로 필터링한 PGA 게임에서 승리자들이 얻은 수익성을 그래프로 표현하면 아래와 같이 나타난다.

PGA 게임에서 승리한 플레이어들의 수익성 그래프
  • X-axis: PGA 게임의 결과로 얻은 수익 (이더리움)
  • Y-axis: 관측된 PGA 게임의 수
  • Profit: 수수료 경쟁에서 사용된 비용 L(b_last)을 제외한 순수한 수익을 얻은 게임의 개수를 말한다.
  • Revenue: 해당 수입을 얻은 총 PGA의 개수를 말한다.

위 그래프를 보면 수익(Profit)이 0보다 작은 게임 수가 제법 존재한다는 것을 알 수 있다. 이는 수수료 경쟁에 의해 지불한 비용이 이익을 초과하기 때문인데 아마도 트레이딩 프로그램이 이익보다 수수료를 높게 지불하지 않는 로직을 따로 처리하지 않은 것으로 보인다.

시사점

지금까지 본 논문에서 정의한 순수 이익 기회의 시장 크기와 이 이익을 취득하기 위한 PGA경쟁을 관측하면서 트레이딩 프로그램의 존재와 수익성을 소개했다. PGA는 주식 시장에서 벌어지는 초단타매매와 비슷한 모습을 가진다. 초단타매매에서는 주식 시장의 개별 거래의 결과가 사용자에게 전달되기 위한 지연 시간 이전에 재정 거래를 한다. PGA도 이와 비슷한 모습을 가지는데 이것이 가능한 이유는 블록체인에서는 트랜재션의 발생 시간 순서를 보장하지 않기 때문이다. 순수한 사용자가 아무리 먼저 트랜잭션을 발생시켜도 해당 트랜잭션과 동일한 내용을 더 비싼 수수료를 지불해 블록에 먼저 채굴될 확률을 높여 이익을 탈취한다. 결국 트랜잭션 발생 순서를 보장할 수 없다는 특징이 블록체인 보안에 새로운 위협이 되는데 이제부터 이 내용을 소개하고자 한다.

새로운 블록체인의 보안 위협 모델

만약 PGA 게임에 채굴자가 참여한다면 어떻게 될까? 그렇다면 이는 더 이상 공정한 수수료 경쟁이 아닌 일방적으로 기회를 빼앗기게 된다. 채굴자는 TxPool에 담겨있는 트랜잭션 중 순수 이익 기회가 포함되어 있는 트랜잭션은 가볍게 무시하고 동일한 내용의 트랜잭션을 자신이 작성해서 블록에 포함시키는 것으로 블록 보상 이외에 추가 수입을 가져갈 수 있다.

송금이라는 컨텍스트 내에서는 이와 같이 트랜잭션을 누락시키는 경우를 생각하기 힘들다. α : A → B로 보내는 트랜잭션과 β : C → D로 보내는 트랜잭션은 서로 독립 사건이기 때문에 순서가 바뀌더라도 결과가 달라지지는 않는다. 하지만, 스마트 컨트랙트 기능이 구현되어 있는 이더리움에서는 상황이 다르다. 만약 특정 블록 B(i) 에서 탈중앙 거래소를 이용하는 다수의 트랜잭션이 존재하다면 채굴자가 이들 트랜잭션의 순서를 어떻게 조합하냐에 따라 누군가는 이득을 보고 누군가는 손해를 볼 수 있다.

혹은 채굴자 본인이 블록내의 트랜잭션을 본인에게 이득이 되는 방향으로 재정렬 하여 이용자에게 손해를 입힐 수도 있다. 만약 이러한 행위가 지속적으로 반복된다면 중앙 거래소의 문제점을 피해 탈중앙 거래소를 이용하고 있는 사용자는 더 이상 갈 곳이 없게 된다. “Flash Boys 2.0”은 논문의 마지막에 이와 같은 일들이 어떻게 블록체인 보안에 위협이 될 수 있는지에 대해 설명한다.

Miner Extracted Value(MEV)

MEV란 채굴자가 블록의 내용을 자신에게 유리한 방향으로 작성함으로써 얻을 수 있는 총 이익을 말한다. 그 중 트랜잭션의 실행 순서만 바꿔서 얻는 이익을 Order Optimization (OO) fees라고 정의한다. 한가지 예를 들면 한 블록에 A토큰을 1000원에 1개 매도하는 트랜잭션 α와 A토큰을 3000원에 매수하는 트랜잭션 β 두개의 트랜잭션만 존재한다고 가정하자. 정직한 채굴자가 이 두 트랜잭션을 α, β 순서대로 처리하면 3000원에 매수하려는 사람은 1000원에 A토큰을 얻어 2000원을 아낄 수 있다. 만약 채굴자가 악의적인 마음을 먹는다면 이 두개의 트랜잭션 사이에 A토큰을 1000원에 매수하고 3000원에 매도하는 트랜잭션을 C를 끼워 넣어 채굴자 본인이 2000원의 이익을 챙길 수 있다.

아래 그림은 이더리움의 모든 블록을 조사하여 위와 같이 트랜잭션의 처리 순서를 바꿈으로써 얻을 수 있는 이익을 값이 높은 순으로 정렬한 그래프이다.

채굴자가 트랜잭션을 재정렬 함으로써 얻을 수 있는 이득을 높은 순으로 정렬한 것이다.

위 그래프에 따르면 7,029,147번째의 블록을 생성한 채굴자는 그 때 당시 악의적인 마음을 먹었더라면 100 ETH (현재 약 3000만원)의 이익을 얻을 수 있었다. 이는 현재 이더리움의 블록 보상에 50배에 달하는 금액이다.

Time-bandit Attack

Crypto 51에 따르면 현재 이더리움 네트워크를 한 시간 동안 51% 공격하는 비용은 약 1억 5000만원이다. 이더리움의 평균 블록 생성 시간을 15초라고 가정하면 대략 240개의 블록을 수정할 수 있다. 만약 특정 블록 B부터 240개의 블록까지의 MEV의 총 합이 1억 5000만원을 훨씬 초과한다면 공격 비용보다 이익이 훨씬 크기 때문에 블록체인 보안에 위협이 된다. 이렇게 특정 블록에 의도적으로 fork를 발생시켜 내용을 재조정 하는 공격을 Time-bandit Attack이라고 말한다.

마치며

지금까지 본 포스트에서는 이더리움에서 관측할 수 있는 순수 이익 기회의 시장 크기를 소개하고, 이를 얻기 위한 수수료 경쟁인 PGA의 정의와 실제 관측된 데이터를 소개하였다. 그리고 이것이 어떻게 블록체인 보안에 새로운 위협이 될 수 있는지 또한 소개하였다.

이번 포스팅이 이전에 작성한 포스팅과 동일한 논문을 소개하기 때문에 MEV 부분에서 내용이 겹친다. 본 포스팅에서는 “Flash Boys 2.0” 논문에 대해 전반적인 내용을 소개하였고 이전에 작성한 포스팅 에서는 이더리움 커뮤니티에서 논의되고 있는 몇가지 해결방법을 간략하게 소개하고 있으니 궁금한 분들은 찾아서 봐도 좋을 것 같다.

Reference

--

--

scalalang2
CURG
Writer for

평범한 프로그래머입니다. 취미 논문 찾아보기, 코딩 컨테스트, 언리얼 엔진 등 / Twitter @scalalang2 / AtCoder @scalalang