Quantifying Blockchain Extractable Value: How dark is the forest?

Seongwan Park
slcf
Published in
12 min readMay 24, 2022

논문 링크 : https://arxiv.org/abs/2101.05511

본 글에서는논문에서 다루고 있는 내용을 위주로 정리하되, 필자의 개인적인 견해,평가 와 추가적인 설명 또한 반영하였다.

위 논문은 2021년 1월 아카이브에 처음 공개되었다. 논문에서는 그동안 흔히 MEV (Miner extractable value)로 알려져 있었던 개념을 일반화하여 BEV (Blockchain Extractable Value)라는 용어를 사용하고 있으며, BEV를 3가지 종류로 나누었다. MEV 대신 BEV 로 확장시킨 이유는, p2p 네트워크 위에 둥둥 떠다니는 트랜잭션을 보고 이득을 취할 수 있는 주체가 블록 생성자에 국한되어 있지 않고, 어떤 유저든 모든 블록 데이터와 트랜잭션 풀을 보고 있을 수 있다면 가능하기 때문이다.

이 논문의 첫 번째 contribution은, 이더리움 체인 상에서 BEV를 정량적으로 측정하는 방법을 소개하였으며 실제로 2021년 중순까지 얼마나 많은 BEV가 관측되었는지를 결과로 보여주었다는 것이다. 두번째 contribution으로는 관찰된 BEV 이외에도 “Transaction replay” 공격을 통해 트랜잭션들이 front-run 되어 BEV가 추가적으로 발생할 수 있음을 언급하고, 구체적인 공격의 알고리즘을 (최초로) 제시하였다. 세 번째로는 (flashbots와 같은) BEV relayer 의 등장이 안전성 측면에서 여러 가지 공격 벡터를 만들 위험이 있음을 밝혔다.

<그림1> BEV 의 각 종류와 각각의 규모 (2018.12~2021.08)

논문에서 가장 유의미해보이는 contribution은 첫 번째 contribution인 BEV의 분류와 정량적 측정이다. BEV를 Sandwich Attack, Liquidation, Arbitrage 3가지로 나누었으며 각각을 측정하기 위한 휴리스틱들을 제시하였고 실제로 2018.12 ~ 2021.08 기간을 두고 기간 내의 모든 블록을 돌며 BEV들을 합산하였다. 이전까지는 학계에서 명확하게 MEV (or BEV) 를 정의한 적이 없었고, BEV의 종류에 대해서도 의견이 분분하게 갈렸기 때문에 이에 대한 기준을 깔끔하게 제시하였다는 점에서 의미가 있었다고 생각한다. 또한 각각의 규모를 정량적으로 측정한 것이 최근 많이 진행되고 있는 MEV 연구 방향 설정에 도움이 된다는 점에서도 유익해 보인다.

샌드위치 공격 (Sandwich Attack)

BEV의 한 종류인 샌드위치 공격부터 살펴보자. 흔히 알려져있는 샌드위치 공격의 전형적인 형태는 다음과 같다.

Adversary A가 네트워크 상의 트랜잭션들을 듣고 있다가, 특정 트랜잭션 T가 특정 asset을 구매하는 트랜잭션 (e.g. X 를 Y로 swap하는 트랜잭션) 이어서, 대상 asset의 가격이 상승할 것을 예상할 수 있다. 이때, A는 이득을 취하기 위해 자신이 본 트랜잭션 T의 앞에 트랜잭션을 붙여 T보다 먼저 실행되게 함으로써 자신이 그 asset을 먼저 구매하고, T가 구매하여 asset의 가격이 올라가면 T의 뒤에 트랜잭션을 붙여 assset을 판매하여 이득을 취할 수 있다. (트랜잭션 실행순서 : T1 > T > T2)

(1) T1 을 만들어 T 를 front-run : T에서 구매하는 assset과 같은 asset을 구매

(2) T2 을 만들어 T 를 back-run : asset을 판매하여 차익만큼의 이득을 얻음

A는 T가 설정한 slippage를 벗어나지 않는 범위에서 샌드위치 공격을 시도할 수 있다. 이와 같은 샌드위치 공격이 얼마나 일어났는지 온체인 상에서 알아보기 위해 논문에서는 아래와 같은 휴리스틱을 이용해서 특정 트랜잭션 패턴들을 잡아내고자 하였다.

Heuristics

  1. T1, T, T2 가 같은 블록에 순서대로 있어야 함
  2. 모든 front-running 트랜잭션은 back-running 트랜잭션 하나와 mapping 됨
  3. T1 과 T 는 X→Y 로 거래하고, T2는 Y→X로 거래함
  4. T1과 T2는 같은 주소일 수도 있고, 다른 주소일 수도 있음
  5. T2 에서 판매한 asset의 양은 T1에서 구매한 asset 양의 90~110% 사이임 (다른 간섭이나 경쟁이 없다면 완전히 같을 것. 실제 데이터 상에서는 80.4%가 완벽하게 성공)

1,2,3은 일반적인 샌드위치 공격의 패턴과 유사하기 때문에 직관적으로 이해할 수 있다. 4번의 경우는 샌드위치 공격을 시도했다는 사실을 숨기기 위해 공격자가 여러 주소를 동시에 사용하는 경우까지 잡아내기 위함으로 보인다. 5번에서는, 샌드위치 공격이 다른 경쟁자나 간섭 없이 완전히 성공했다면 T2에서 판매한 asset의 양과 T1에서 구매한 asset의 양이 완전히 같을 것이다. 그러나 실제로 여러 공격자들이 경쟁하는 상황에서는 값이 달라질 수 있으므로, 90~110%의 범위까지 고려하겠다는 의미이다. 실제 데이터 상에서는 80.4%의 샌드위치 공격이 완벽하게 성공하였고, 나머지 19.6%는 경쟁으로 인해 구매한 양과 판매한 양의 차이가 발생했다고 한다.

Empirical Results

  • 2018년 12월~ 2021년 8월
  • 2,419 개의 주소, 1,069 스마트 컨트랙트에서 샌드위치 공격 진행
<그림 2> 샌드위치 공격이 일어난 컨트랙트와 유저주소의 수 월별 변화
  • Uniswap V1/V2/V3, Sushiswap, Bancor 풀에서 750,529 건의 샌드위치 공격 발견
  • 공격 규모는 총 $ 174.34M 규모
  • 이 중 240,053 (31.98%) 건의 공격들은 채굴자들이 진행했으며 채굴자들이 총 얻은 이득은 $ 81.04M

청산 (Liquidations)

BEV의 두 번째 종류인 청산에 대한 내용이다. 일반적으로 디파이 시장 중에서도, Aave, Compound와 같이 담보대출 서비스를 제공하는 랜딩 플랫폼에서 일어나는 트랜잭션의 한 종류이다. (청산을 포함해 랜딩 플랫폼에 대한 기본적인 개념을 알고 싶다면 디사이퍼에서 작성한 컴파운드 톺아보기 시리즈 — 링크 를 추천한다.)

메커니즘을 간단히 요약하면, 담보자산 X를 맡기고 Y 자산을 대출한 상황에서 X의 자산 가치가 특정 임계값 이하로 떨어졌을 때, 청산자들이 이를 보고 청산 트랜잭션을 블록에 담아서 대출자의 담보자산 X를 현재가치보다 저렴하게 구매할 수 있게 된다. 여기서 오해하지 말아야 할 것은, 청산은 샌드위치 공격과는 다르게 ‘공격’으로 표현하지 않는다. 만약 청산자들이 시장에 없다면 담보물의 가치가 빚의 가치보다 낮아지는 경우가 생길 것이고 결국엔 플랫폼을 사용하는 누군가가 이 빚을 전부 뒤집어쓰게 될 것이다. 청산을 통해 플랫폼을 건강하게 유지할 수 있는 것이다.

형식을 갖추어 표현하면, liquidator A가 청산 기회를 i번째 블록인 B_i 에서 발견했을 때, 청산 트랜잭션 T_A 를 만들고 i+1번째 블록인 B_{i+1} 에 담기게끔 한다. 논문에서는 A가 취할 수 있는 전략을 두 가지로 나누는데, 첫 번째는 경쟁 liquidator들을 front-run해서 청산 기회를 다 가져가는 것이다. 두 번째는 청산 기회를 만드는 트랜잭션(e.g. 오라클 가격 업데이트)인 T_V 를 발견했을 때 이 트랜잭션 바로 뒤에 청산 트랜잭션 T_A 을 붙여서 back-run을 하는 것이다. 개인적으로는 청산 트랜잭션을 front-run과 back-run으로 나누는 것이 무슨 의미가 있는지 모르겠다.

Heuristics

논문에서는 청산을 front-run과 back-run으로 나누어 측정하기 위해 다음과 같은 휴리스틱을 사용한다. i번째 블록 B_i에서 청산이 일어났을 때, 이전 블록인 B_{i-1}에서 청산이 가능했다면 front-run, 청산이 불가능한 상태였더라면 i번째 블록에서 오라클 변경 직후에 청산이 일어난 것이므로 back-run 으로 측정한다. i-1번째 블록 실행 이후 청산이 가능해진 상태에서 경쟁을 통해 이긴 청산 트랜잭션이 i번째 블록에 담기게 되는데, 이러한 트랜잭션을 전부 다 front-run으로 분류한 셈인데, 분류 자체의 의의에 대해서는 공감하기 어려웠다.

Empirical Results

<그림 3> 청산 이벤트 발생 월별 건수
<그림 4> 랜딩 플랫폼 별 청산 발생건수 (front-run / back-run 구분)

그림 3은 월별 청산 트랜잭션의 수를 나타내고 있는데, 암호화폐가 전반적으로 가격이 폭락한 날이 포함된 달인 2020년 3월(Black Thursday), 2021년 5월 (부처님 오신날..)에 아주 큰 규모로 청산이 발생하고 나머지 달에서는 매우 적었음을 확인할 수 있다.

차익 거래 (Arbitrage)

논문에서 언급한 세 번째 BEV는 차익거래다. 두 마켓 사이 같은 자산에 대해 가격 차이가 충분히 커서 이더리움 네트워크 수수료를 지불해도 이득이 생길 때 진행된다. 차익거래 규모를 측정하기 위해 논문에서 사용했던 휴리스틱은 다음과 같다.

Heuristics

  1. 모든 swap 트랜잭션들은 한 트랜잭션 내에 일어나야 함
  2. swap이 하나보다 많아야 함
  3. n개의 swap 트랜잭션들: s_1, s_2, s_3, … , s_n은 하나의 loop 를 만들어야 함
  4. in(s_i) ≤ out(s_{i-1})

1번 휴리스틱이 가지는 의미는, swap 트랜잭션들 중 하나라도 블록에 담기는 시점에서 실패한다면 나머지 트랜잭션들도 취소되어야 한다라는 뜻이다. 차익거래를 하는 유저들이 리스크를 피하기 위해 대부분의 경우 모든 swap 트랜잭션들을 하나의 트랜잭션으로 포함시켜 만든다. 2,3,4번의 휴리스틱 또한 직관적으로 쉽게 이해할 수 있다.

<그림 5> 차익거래 트랜잭션의 블록 내 인덱스 분포

그림 5는 차익거래 트랜잭션들의 블록 내 인덱스들을 조사하여 boxplot으로 시각화한 것이다. 일반적으로 트랜잭션 인덱스가 작을수록 높은 수수료에 속하는데, 그림 5에서 중앙값이 대체적으로 앞쪽 인덱스에 몰려있음을 확인할 수 있다. 서로 front-run 하기 위해 경쟁이 심해져 수수료를 높게 bid 하기 때문에 인덱스가 이러한 형태를 띠게 되는 것이다.

<그림 6> 월별 차익거래 규모의 변화

월별로 차익거래가 발생한 규모를 측정한 결과인데 스시스왑이 런칭한 2020년 9월 즈음부터 디파이 붐이 시작되면서 차익거래 또한 엄청난 속도로 성장했음을 확인해볼 수 있다.

트랜잭션 리플레이 (Transaction Replay)

이 논문에서 두번째로 다루고 있는 내용은 트랜잭션 리플레이 공격에 대한 내용이다. 우선, 블록체인 네트워크 공격으로 많이 알려져 있는 replay attack과는 이름만 같고 다른 내용임을 언급하겠다. 여기서 말하는 트랜잭션 리플레이 공격은 쉽게 말하자면 p2p 레이어에서 떠다니는 트랜잭션 중 BEV를 추출하는 트랜잭션을 보고 똑같은 트랜잭션을 만들어 수수료만 높여서 BEV를 가로채는 공격이다. 사실 일반적으로 굉장히 많이 알려져있는 형태의 공격인데, 리플레이를 한 트랜잭션 외 다른 트랜잭션들은 블록에 기록되지 않아서 공격의 증거를 찾기가 사실상 어렵다. 논문에서는 트랜잭션 리플레이 공격의 존재를 처음으로 밝혔다고 말하며, 아래와 같이 구체적인 알고리즘을 제시하고 있다.

<그림 7> 트랜잭션 리플레이 공격의 알고리즘

Adversary A가 공격하고자 하는 트랜잭션 T를 발견한 후 T의 sender를 자신의 주소로 바꾸고, T의 잔액 대신 자신의 잔액을 넣어 새로운 트랜잭션 T_v를 만든다. 그리고 T_v를 실행시켜보았을때 balance의 변화가 양수면 이를 전파시키는 것이다. 위 알고리즘에 명시되지는 않았지만 논문에서는 가스비를 1 gwei 올려 전파하는 방법을 제시하고 있다.

<그림 8> 리플레이 공격이 가능했던 트랜잭션의 수

뿐만 아니라, 논문에서는 2018년 12월부터 2021년 8월까지의 모든 블록들을 다시 재실행시켜보며 리플레이 공격이 이루어진다면 얼마만큼의 공격이 가능했을지를 시뮬레이션 해보았다. 그림 8에서는 가능했던 리플레이 공격의 수를 월별로 보여주고 있고, 기간동안 57,037.32 ETH (35.37M USD) 의 공격이 이루어질 수 있었다고 한다. 예를 들어 특정 청산 트랜잭션이 있었다면 그 청산 트랜잭션 대신 1 gwei 높은 가스비를 bidding해 리플레이 공격을 했다고 가정하는 것이다.

여기서 논리적인 허점을 많이 발견할 수 있는데, 우선 이미 블록에 담겨있는 트랜잭션들이 이미 리플레이 공격인 경우일 가능성이 있다. 또한 EIP-1559 이전이라면 채굴자가 이러한 공격을 취하는 데에 수수료를 0으로 설정할 수 있으므로 리플레이 공격에 매우 유리했을 것이고, 일반 사용자가 리플레이 공격을 하기에는 상대적으로 불리했을 것이다. 뿐만 아니라, 공격자가 트랜잭션 풀에서 트랜잭션을 보고 리플레이 공격을 한다고 해도 채굴자들이 이미 블록에 들어갈 트랜잭션들을 확정하고 논스값을 찾는 중이라면 트랜잭션을 새치기하는 것이 현실적으로는 더 어렵다.

맺으며

본 논문에서는 BEV를 세 가지 종류 : 샌드위치 공격, 청산, 차익거래로 나누어 각각을 이더리움 온체인 상에서 어떻게 발견할 수 있는지 방법을 제시했고 실제로 규모를 조사하였다. 이전까지는 구두로만 언급되어 왔던 BEV를 정량화한 첫 번째 시도이고, BEV에 대한 큰 틀을 깔끔하게 정리했다는 점에서는 좋은 기여를 했다고 생각한다. 또한 이더리움 커뮤니티에서도 본 논문을 언급한 것을 종종 볼 수 있는데, 일반적으로 샌드위치 공격의 비중이 이만큼 크다라는 것을 나타내는 것에 대한 근거로 쓰인다. 두번째로는 논문에서 리플레이 공격 알고리즘을 최초로 제안, 정리하였다. 이 공격 알고리즘을 바탕으로 “potential extractable BEV”가 얼마인지를 구하기도 하였는데, 논리적 비약이 있긴 하지만 이론상 어느정도까지 가능한지를 보여주었다는 데에서 의미가 있다고 생각한다.

--

--

Seongwan Park
slcf
Editor for

Four Pillars Researcher / Decipher / Ph.D candidate in Blockchain