2021년에 다시 보는 채굴자 추출 가치, 숲은 얼마나 어두운가요?

scalalang2
CURG
Published in
17 min readJan 26, 2021

이전 CURG 포스팅[1]에서 Flash Boys 2.0 논문[2]을 소개하면서 이더리움에서 선행 매매(Front-Running)가 어떻게 이루어지고 있고, 트레이더가 얼마나 수익을 올릴 수 있으며, 그것이 블록체인 보안에 끼치는 악영향에 대해서 다루었다. 이 논문에서 MEV(Miner Extractable Value)라는 용어를 처음 사용하였는데 MEV는 채굴자가 트랜잭션이 블록에 포함되기 이전에 미리 관측함으로써 얻을 수 있는 이익을 말한다. MEV를 얻는 대표적인 방법으로 차익거래(Arbitrage)가 있고 Flash Boys 2.0 논문에서는 차익거래에 해당하는 경우만을 분석하여 결과를 발표했다.

이제 시간이 지나서, 최근 이더리움에는 컴파운드, 에이브, 유니스왑, 커브 등 여러 탈중앙-금융(DeFi)서비스의 등장과 플래시 론(Flash Loan)공격 이슈가 부상하면서 MEV의 가치를 다시 평가할 필요가 있다는 생각을 했었다. 그리고 바로 이 글을 작성하기 10일전(2021년 1월 14일) 아카이브(arxiv)에 MEV에 새로운 패턴을 추가해서 다시 관측한 논문이 있었으니..

이번 포스팅에서는 바로 “블록체인 추출 가치 정량화: 숲은 얼마나 어두운가요?(Quantifying Blockchain Extractable Value: how dark is the forest?)[3]”라는 논문을 다루어 보려고 한다. 현재 이더리움에서 채굴자가 부당하게 취할 수 있는 이득은 얼마나 되고 이것이 블록체인 보안에 어떤 영향을 주는지 알아보자

여기서 어두운 숲이란, Ryan Sean Adams가 이더리움의 mempool은 먹잇감이 가득한 어두운 숲이라고 표현한 것을 인용한 것이다[4]. 논문 제목이 길기 때문에 지금부터는 논문 제목을 어두운 숲이라고 부르겠다.

포스팅 서술 순서

먼저 선행매매(Front-Running)와 MEV에 대한 정의 및 블록체인에서는 이 공격이 어떻게 이루어지는지 살펴본다. 그 다음, 어두운 숲[3] 논문의 개요를 서술 한 뒤 논문에서 정의한 선행매매의 4가지 종류와 4개의 거래 패턴을 차례로 다룰 예정이다. 이 4개의 거래 패턴으로는 샌드위치 공격, 담보 청산 입찰 경쟁, 차익거래, 클로깅이 있다. 그리고 마지막으로는 MEV가 보안에 미치는 영향을 간단하게 서술하고 마무리한다.

선행매매(Front-Running)

영화 ‘돈’을 보면 증권사 직원인 조일현(류준열)이 고객의 전화를 받고 직접 트레이딩 시스템을 이용해 매수/매도 주문을 대신해주는 모습을 볼 수 있다. 이때 전화를 받은 증권사 직원은 그 내용에 따라 시장 가격을 짧은 시간동안 미리 예측할 수 있다. 예를 들어 “A회사 주식 100만주를 구매해!” 라는 주문을 받았다면 시장 가격이 오를 것을 예상해 증권사 직원이 미리 주식을 매수하고 높은 가격에 매도함으로써 이익을 얻을 수 있을 것이다. 당연하게도 선행매매는 자본시장법 제71조(불건전 영업행위의 금지)에 해당해 불법이다.

그림 1. 증권사 직원이 선행매매를 통해 이익을 얻는 방법

채굴자 추출가능한 가치(Miner Extractable Value)

중앙화된 증권사에서 하는 선행매매는 불법이지만, 이더리움과 같은 퍼블릭 블록체인에서는 법 자체가 존재하지 않을 뿐더러 선행매매를 하는지 판별하는게 어렵다. 그리고 이더리움에도 현재 AMM기반 거래소(Uniswap v1/v2, SushiSwap, Curve 등)가 존재하기 때문에 노드를 직접 운영하는 채굴자/트레이더는 선행매매를 할 수 있다. 노드는 블록에 트랜잭션을 포함시키기 전에 사전에 트랜잭션의 내용을 확인하고 시장 가격의 움직임을 예측할 수 있다. 이 때, 선행매매를 통해 채굴자/트레이더가 얻을 수 있는 이익을 MEV(Miner Extractable Value)라고 부른다.

그림 2. 채굴자 노드는 블록을 채굴하기 전에 거래의 내용을 확인할 수 있다.

개요

이번에 소개하는 어두운 숲[3] 논문에서는 크게 2가지 사실을 확인하고자 했다. 채굴자 추출 가능한 가치(MEV)는 채굴자가 트랜잭션의 순서를 정할 때 발생하는 이익만을 말하는 반면, 트레이더가 트랜잭션 풀을 관찰하다가 트랜잭션 송금 수수료를 높게 지불해서 더 빨리 채굴되도록 하는 경우에는 해당하지 않는다. 따라서, 트레이더/채굴자의 입장을 모두 대변하는 블록체인 추출 가능한 가치(BEV)라는 용어를 새로 만들고 최근 2년치의 이더리움 데이터를 분석하여 총 BEV의 가치를 산정했다. 그리고, 거대 마이닝 풀이 현재 BEV를 얻기 위해 의도적으로 트랜잭션을 네트워크에 전파하지 않는다는 주장을 하면서 몇몇 근거를 제시한다.

본 논문과 포스팅은 읽는 사람이 AMM기반 거래소(유니스왑, 커브 등)와 과담보대출(MakerDAO, Compound, Aave 등)서비스의 동작과정을 조금이나마 이해하고 있다는 가정을 하고 있다. 본 포스팅에서도 위 두 서비스에 대한 소개는 따로 자세히 하지 않는다.

선행매매의 종류

본 글에서는 선행매매(Front-Running)를 사용자의 요청을 분석해서 의도적으로 이익을 얻는 행위라고 정의한다. 이 때, 블록에 악의적인 트랜잭션 T_A가 포함되는 순서에 따라 선행매매의 종류를 총 4가지로 분류할 수 있다. 아래 [그림 3]은 논문에서 분류한 것을 보여준다. 악의적인 트랜잭션을 T_A라고 부르고, 피해자가 되는 트랜잭션을 T_V라고 부른다.

그림 3. 선행매매의 4가지 종류
  • Destructive Front-Running: 악의적 거래 T_A를 선행해서 실행해서 피해자인 T_V 트랜잭션의 거래를 취소시키는 경우
  • Cooperative Front-Running: 악의적 거래 T_A를 선행해서 실행해서 이득을 보고 피해자인 T_V트랜잭션이 성공적으로 처리하되 재산상 손해를 보게하는 경우
  • Back-Running: 피해자인 T_V트랜잭션이 먼저 실행되고 악의적 거래 T_A가 바로 뒤에 혹은 이후에 실행되는 경우
  • Clogging: 피해자인 T_V트랜잭션이 블록에 포함되지 않도록 의도적으로 대량의 악의적 트랜잭션 T_A를 발생시켜 의도적으로 지연시키는 경우

논문에서는 이렇게 4가지 경우의 선행 매매를 정의하고 이를 적절히 조합해서 4가지 매매 패턴인 샌드위치 공격, 담보입찰경쟁, 차익거래, 클로깅을 정의한다. 그리고 트레이더 혹은 채굴자가 트랜잭션 풀(Mempool)의 내용을 확인하면서 거래한다는 정황 증거를 포착하기 위해 몇 가지 근거를 제시하는데 이게 나름 흥미롭고 재미있다. 이제부터 이 네가지 패턴과 수익률 그리고 선행매매의 정황 증거를 제시해보겠다.

이 논문에서는 최근 2년치의 이더리움 데이터를 분석하고 공격 패턴을 찾아낸 뒤 수익률과 선행매매라는 정황증거를 찾는다. 선행매매의 위험성을 처음 보고한 Flash Boys 2.0는 본인들이 직접 노드를 운영하고 수수료 경쟁을 하는 트레이딩 봇이 존재한다는 사실을 인지했다면, 이 논문에서는 과거 데이터를 분석해서 선행매매를 하고 있는 경우를 찾고자 했다.

  • 선행매매(Front-Running) : 이후 논문을 이해하기 위해서 이 포스팅에서 이용하는 사전매매의 정의를 정확히 알 필요가 있다. 사전매매란, 트레이더 혹은 채굴자가 트랜잭션이 블록에 포함되기도 전에 미리 분석해서 이익을 보는 행위를 말한다.

샌드위치 공격(Sandwich Attack)

샌드위치 공격이란 피해자가 되는 트랜잭션 T_V를 기준으로 Cooperative Front-Running을 수행하는 T_A1과 Back-Running을 수행하는 T_A2로 구성된 공격을 말한다. 샌드위치를 공격을 하기 위해서는 채굴자와 트랜잭션 풀을 감시하는 트레이더 둘 다 공격을 수행할 수 있다. 일반적인 이더리움의 노드는 트랜잭션 풀에서 수수료를 기준으로 내림차순 정렬하여 블록에 포함시키기 때문에 수수료를 더 높게 혹은 더 낮게 제시함으로써 샌드위치 공격이 가능하다. 여기서는 이더리움의 데이터를 분석하여 아래 5가지 조건을 만족하는 트랜잭션을 샌드위치 공격이라고 분류하고 AMM 거래소(Uniswap v1/v2, SushiSwap, Curve 등)에 적용된 경우를 탐색한다.

  • 조건 1. T_A1, T_V, T_A2 세 트랜잭션은 모두 한 블록에 포함되어 있는다.
  • 조건 2. 모든 T_A1은 하나의 T_A2와 맵핑되어 있다.
  • 조건 3. T_A1, T_V는 자산 X -> Y로 상호작용하고, T_A2는 Y->X로 상호작용한다.
  • 조건 4. 동일한 계정이 T_A1, T_A2를 발생시키거나, 두 개의 다른 계정이 하나의 스마트 컨트랙트를 호출하는 T_A1, T_A2를 발생시킨다.
  • 조건 5. T_A2로 인해 발생된 자산 가치는 T_A1에 제공된 자산의 가치에 대해 90%~110% 사이에 존재한다.

여기서는 위 5가지를 만족하는 사례를, 6803256 (2018년 12월 1일)부터 11363269 (2020년 11월 30일)까지 2년치의 블록을 분석하여 총 21,001건의 샌드위치 공격을 찾아냈으며 1.51M USD의 수익을 올린 것을 밝혀낸다. 이런 샌드위치 공격은 AMM에서 발생하는 슬리피지(Slippage)를 이용해서 수익을 얻는다. 유니스왑을 예로 들자면 CPMM(Constant Product Market Maker)의 경우 풀 내 교환비율에 따라서 자산 X를 Y로 교환 할 수 있는 개수가 정해진다.

만약, T_V가 자산 1000 X를 자산 Y로 교환하려는 경우, 공격자가 먼저 풀 내에서 자산 X를 Y로 교환을 하면 T_V가 교환할 수 있는 Y의 수량이 적어지게 된다. 그리고 T_A2의 트랜잭션을 발생시켜 자산 Y를 다시 X로 교환하는 경우에는 내가 처음에 발생시킨 T_A1 트랜잭션에서 이용한 자산 X보다 더 많은 양의 자산 X를 얻을 수 있다.

그런데 이렇게 분석해서 분류한 사례를 어떻게 트레이더/채굴자가 사전매매를 했다고 판단할 수 있을까? 데이터를 분석한 결과 Back-Running을 수행하는 T_A2 트랜잭션의 경우 87.61%가 T_V 트랜잭션의 수수료보다 0~1 gwei 범위로 적었다고 한다. 이는 T_V 트랜잭션 바로 뒤에 수행되기를 원하기 때문에 공격자가 설정한 것인데 이 세 트랜잭션이 모두 한 블록에 포함되기 때문에 트랜잭션 풀을 관찰하지 않고는 이런 거래를 수행하기 어렵다.

그림 4. 샌드위치 공격이 사전매매라는 정황 증거
그림 5. 월별 샌드위치 공격이 발생하는 횟수와 수익

담보 청산 입찰 경쟁(Fixed Spread Liquidations)

암호화폐 대출 서비스인 Compound, Aave, dYdX에서는 대출로 빌려가는 암호화폐보다 약 150% 높은 자산 가치를 담보로 설정할 것을 요구한다. 이 때, 이 비율을 최소 담보대출비율이라고 부른다. 이 비율은 담보물의 가격과 대출금액의 비율을 의미한다. Compound의 머니마켓에서 100 ETH만큼의 USDT토큰을 빌리려면 담보대출비율에 따라 150ETH를 예치해야한다.

이후에 담보로 맡긴 자산의 가치가 하락(이더리움의 가격이 하락)하는 경우, 스마트 컨트랙트에서 자동으로 담보로 설정한 암호화폐의 일정량을 청산해서 최소담보비율을 150%로 유지하는데 이 때, 빠른 담보물의 청산을 위해 시장 가격보다 5%할인된 가격으로 판매한다. 담보 청산 입찰 경쟁은 바로 이 할인된 가격으로 판매되는 ETH를 구매하기 위해서 수수료 경쟁을 하는 경우를 말한다. 이 입찰 경쟁에 참여하는 경우는 아래 두 가지로 나뉠 수 있다.

  • 입찰 경쟁의 기회가 발생하는 블록 B_i를 트레이더 A가 관측한다. 그리고 잠재적 경쟁자들을 대상으로 Destructive Front-Running을 하기 위해 높은 수수료를 지불해서 트랜잭션 T_A를 발생시켜 B_i+1 블록에 포함시킨다.
  • 트레이더 A는 입찰 경쟁 기회를 생성하는 트랜잭션 T_V를 트랜잭션 풀에서 관측하고 동일한 블록 내에서 바로 담보물을 구매하는 트랜잭션 T_A를 발생시켜서 수수료 경쟁을 하지 않고 담보물을 구매한다

블록 B_i에서 이루어진 입찰 경쟁의 경우, 블록 B_i-1번째 경우에서 담보물의 가치가 입찰 경쟁에 들어갈 수 있을만큼 하락했어야 하고, 이더리움 내에서 가격 오라클이 설정되어서 상태값을 변경해야 한다. 만약, 블록 B_i에서 가격 오라클도 호출되면서 담보물도 동시에 구매하는 경우를 사전매매를 한 것이라고 볼 수 있다. 여기서는 총 16,031개의 담보 청산 중 87.29%가 사전매매를 한 것이라고 분석했다.

그림 6. 담보 청산 입찰 경쟁에서 사전매매와 사전매매가 아닌 것을 분류한 표

차익거래(Arbitrage)

차익거래란 두 개 이상의 거래소에서 생기는 시세차이를 이용해서 수익을 올리는 것을 말한다. 통상 싼 값에 형성된 거래소에서 자산을 매수하고 비싼 값에 형성된 거래소에서 매도하는 형태로 진행된다. 차익거래는 거래소에 유동성을 제공해주는 요소 중 하나로 중요한 역할을 한다. 제정거래를 하는 트레이더는 아래 두 가지 전략 중 하나를 취한다.

  • Block State Arbitrage: 현재 컨펌된 i번째 블록 상태만을 조회해서 i+1번째 블록에서 차익거래를 시도한다. 이 경우에는 사전매매에 해당하지 않는다.
  • Network State Arbitrage: 아직 블록에 포함되지 않은 트랜잭션 중, 거래소에 자산 가격이 상승 될 것이라고 예측되는 트랜잭션이 관찰되면 Back-Running전략을 실행한다. 거래소 A, B가 존재하고 자산 X에 대해서 T_V 트랜잭션이 거래소 B에서 자산 X가격을 상승시킨다면, 트레이더는 거래소 A에서 자산 X를 매수하고 B에서 매도하는 방식으로 시세차익을 얻는다.

여기서는 2년치 블록 데이터를 전수조사해서 아래 네 가지 조건을 만족하는 경우 차익거래로 분류해서 분석하였다. 여기서는 자산을 교환하는 swap 행위를 s로 정의하고 in(s)는 자산 IN(s)의 양을 나타내고, out(s)는 교환된 자산 OUT(s)의 양을 나타낸다.

  • 조건 1. 모든 차익거래 내역은 하나의 트랜잭션에서 실행되어야 한다. 차익거래자들은 atomic한 방법을 사용해서 리스크를 최소화 한다.
  • 조건 2. 차익 거래는 적어도 두 개 이상의 swap 행위를 한다.
  • 조건 3. n개의 swap 행위는 반복문 형태를 가진다. 이 때 임의의 i번째 swap행위는 IN(s_i) = OUT(s_i-1) 조건을 만족해야 하고, 마지막 swap 행위는 IN(s_0) = OUT(s_n)을 만족한다. 즉, 이전 swap행위의 대상이 되는 자산과 현재 swap행위의 입력이 되는 자산이 동일해야 하며 최초로 swap한 자산과 마지막으로 swap한 자산이 동일해야한다. (ETH로 차익거래를 시작했으면 마지막으로 ETH로 수익을 본다는 의미)
  • 조건 4. in(s_i)의 양은 out(s_i-1)양보다 적어야 한다. (수익을 낸 경우)

이 네 가지 조건을 모두 만족하는 경우를 조사한 결과, Uniswap v1/v2, SushiSwap, Curve, Swerve, 1inch, Bancor 7개의 거래소에서 총 51,415건의 차익거래가 존재했고 총 수익은 7.11M USD에 달했다. 차익거래자들은 평균적으로 2개 혹은 3개의 마켓을 통해 차익거래를 하고 있었다.

그림 7. 차익거래 횟수와 수익 현황 그래프

여기서, 이 차익거래들이 선행매매를 통해 이루어진 증거를 찾기위해 블록에서 몇번째 트랜잭션으로 포함되었는지를 조사했다. 데이터를 분석한 결과 크게 수익을 낸 트랜잭션의 경우 항상 블록 마지막 트랜잭션으로 포함되고 있었고 Back-Running전략을 사용한다고 추론할 수 있다. 이 추론이 사실인지 확인하기 위해 해당 트랜잭션을 블록에 첫 번째 트랜잭션으로 이동시킨 다음에 블록을 다시 실행시켰을 때 전체 차익거래 중 60.08%는 전혀 수익을 내지 못한것으로 나타났다. 이게 선행매매를 했다는 직접증거는 아니지만 합리적인 의심을 할 수 있는 정황증거는 된다고 본다.

그림 8. 차익 거래 트랜잭션이 블록에 포함되는 위치

클로깅 (Clogging)

소모전(The War of Attrition)이라고도 불리는 게임이 하나 있는데, 이 게임에서는 임의의 플레이어들이 동일한 통장에 예치된 돈보다 더 많은 돈을 넣는다. 그러다가 어느 순간 금액이 커지면 더 이상 통장에 돈은 들어오지 않게 되고 마지막으로 돈을 입금한 사람이 모든 돈을 가져간다. 이더리움에서도 위와 같은 게임을 구현한 스마트 컨트랙트가 몇개 존재하는데, 돈을 가지고 정정당당한 싸움이 아닌 클로깅 전략을 취해서 게임을 이기려 할 수 있다.

클로깅(Clogging)이란, 이더리움이 1초에 14건의 거래만 처리한다는 특징을 이용한 것으로 불필요한 트랜잭션을 대량으로 발생시켜 일종의 서비스 거부 공격(DoS)을 하는 것이다. 즉, 다른 사람들이 통장에 돈을 예치할 수 없게 네트워크에 의도적인 부하를 주면서 시간이 지나 게임의 승자가 된다. 잘 알려진 사례로는 Fomo3D 게임에서, 6191896 ~ 6191962 까지 총 66개 블록에 거쳐 클로깅 공격이 발생했고 승자는 약 10,469 ETH를 가져가게 되었다. 클로깅 공격 사례를 분류하기 위해 아래 두 가지 특징을 가진 사건을 전수조사했다.

  • 조건 1. 특정 클로깅 주기 동안, 동일한 계정이 매 블록의 전체 가스 소모량 중 80% 이상을 차지한 경우
  • 조건 2. 적어도 1분 간(5 블록) 클로깅 사건이 지속된 경우

2년 간의 데이터 조사 결과 확인된 클로깅 공격은 237건이었다. 이 중 가장 긴 공격은 5분(24 블록)간 지속되었다. 이번엔 각 사건을 수동으로 무슨일이 있었는지 확인하였는데 가장 긴 클로깅 공격은 “Lucky Star”라는 복권 시스템을 이용하면서 발생했다. 해당 서비스는 복권 판매량이 30,000 ETH이 넘어가면 자동으로 추첨을 하고 인센티브로 최근 복권 구매자 50명에게 상금의 일부를 공유하는 시스템을 가지고 있었다. 때문에 하나의 계정이 5분간 80%에 해당하는 트랜잭션을 발생시키면서 인센티브를 독식한 사례이다. 아래 그림은 분류한 클로깅 사건들의 정보를 보여준다.

그림 9. 클로깅 사건 내용

MEV, BEV가 블록체인에 미치는 영향

MEV, BEV는 내용 자체는 흥미롭지만 사실, 블록체인 보안에는 치명적이다. 블록체인이 안전하다고 주장하는 51% 공격의 핵심은 네트워크를 공격하는 비용보다 블록 생성 보상 (2 ETH)가 작기 때문에 공격자가 공격을 수행할 이유가 없다는 데서 나온다. 하지만, 이런 MEV, BEV의 존재로 인해 공격자는 블록 내용을 수정해서 블록 생성 보상 이외에 추가적인 보상도 얻을 수 있다. 즉 아래 조건까지 만족해야 비로소 블록체인이 안전하다고 할 수 있다.

  • 블록 생성 보상 + MEV + BEV <<<넘사벽<<< 공격 비용

이 문제를 처음 제기한 필 다이안의 지도 교수인 Ari Juels의 연구실에서는 이후에, 비잔틴 장애 허용(BFT) 알고리즘의 평가지표인 Satefy, Liveness에 더해 Order-fairness를 추가하는 내용의 논문[5]을 CRYPTO 2020에 제출했다.

레퍼런스

[1] 탈중앙 거래소의 선행매매, 트랜잭션 재정렬, 합의 불안정에 대하여
[2] Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges
[3] Quantifying Blockchain Extractable Value: How dark is the forest?
[4] Ethereum, Dark Forests and the Limits of Transparency
[5] Order-Fairness for Byzantine Consensus

--

--

scalalang2
CURG
Writer for

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