---
# System prepended metadata

title: MEV 솔루션
tags: [' mev', security]

---

---
title: MEV 솔루션
tags: security, mev
---

<style>

html, body, .ui-content {
    background-color: #333;
    color: #ddd;
}

.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
    color: #ddd;
}

.markdown-body h1,
.markdown-body h2 {
    border-bottom-color: #ffffff69;
}

.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
    color: #fff;
}

.markdown-body img {
    background-color: transparent;
}

.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
    color: white;
    border-left: 2px solid white;
}

.expand-toggle:hover, 
.expand-toggle:focus, 
.back-to-top:hover, 
.back-to-top:focus, 
.go-to-bottom:hover, 
.go-to-bottom:focus {
    color: white;
}


.ui-toc-dropdown {
    background-color: #333;
}

.ui-toc-label.btn {
    background-color: #191919;
    color: white;
}

.ui-toc-dropdown .nav>li>a:focus, 
.ui-toc-dropdown .nav>li>a:hover {
    color: white;
    border-left: 1px solid white;
}

.markdown-body blockquote {
    color: #bcbcbc;
}

.markdown-body table tr {
    background-color: #5f5f5f;
}

.markdown-body table tr:nth-child(2n) {
    background-color: #4f4f4f;
}

.markdown-body code,
.markdown-body tt {
    color: #eee;
    background-color: rgba(230, 230, 230, 0.36);
}

a,
.open-files-container li.selected a {
    color: #5EB7E0;
}

</style>

# MEV 솔루션

## 서론

- 이전 글 ([Front Running과 MEV](/HJduzMP89))에서 Maximal Extractable Value (MEV) 에 대해서 다뤘다. 간략하게 요약하면 MEV는 블록체인 상에서 발생하는 추가 세금이라고 불리는데, 사용자가 의도치 않게 지불하는 비용이라고 해서 추가 세금이라고 불린다. 
- 그러면 이 세금은 누구에게 갈까? 이 세금은 Miner 또는 `Searcher`라는 시장 참여자에게 간다. Miner는 블록을 생성할 때 tx를 새로 추가하거나 순서를 바꾸거나 검열할 수 있다 (insert, reorder, censor). Searcher는 pending 되어 있는 tx들이 모여있는 mempool을 보고 기회가 되는 다른 사람의 tx를 복사하여 더 높은 가스비를 지불하고 제출한다. 이들은 의도적으로 그들의 이익을 위해서 사용자들에게 추가 세금을 부과한다. 
- 이렇듯 이더리움에서는 더 높은 가스비를 지불하고 tx를 '쟁탈'하기 위한 움직임들이 이뤄지고, 이들이 심화시키는 가스비 경쟁은 선량한 사용자에게 피해를 주고 있다. 이것을 두고 '[Ethereum is a Dark Forest](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest)'라는 무서우면서 재밌는 말이 있다.  
- 이런 무시무시한 Dark Forest를 헤쳐나가기 위해서 다양한 시도들이 이뤄지고 있는데, 그 중에서 이 글에는 **1) Private Mining Pool** 과 **2) Flash Bot** 이 두 가지에 대해서 다룰 예정이다.


## 1. Private Mining Pool
- Private Mining Pool 이란 단어 그대로 블록체인 채굴 노드가 private 하게 여럿 모여있는 풀을 의미한다. Mining Pool은 비트코인이나 이더리움과 같은 PoW 기반의 블록체인에서 종종 볼 수 있는데, 하나의 노드가 hashing power를 사용하여 채굴을 하는 것보다 여러 노드가 hashing power를 모으는 것이 블록 생성의 가능성을 높이기 때문에, 집단의 힘으로 블록을 채굴 한 후 그 보상은 나눠가지는 방식을 취한다. 
- Private Mining Pool의 가장 큰 특징은 블록체인에 블록을 생성하기 전까지의 과정이 외부에 노출되지 않는다는 점이다. 블록체인에 블록이 추가되는 일반적인 과정은 다음과 같다.
    1. tx 가 발생하면 사용자는 tx를 블록체인 miner들에게 전파한다.
    2. tx를 받은 miner는 tx 검증을 한 후, mempool에 tx를 보관한다.
    3. miner는 적절한 시기에 tx를 블록에 포함하고 블록체인에 추가한다. 이러한 일련의 과정에서 private mining pool은 1)과 2) 단계가 외부에 노출되지 않는다는 특징이 있다. 
- 이 점을 활용하여 MEV의 근본적인 원인인 '*mempool은 누구나 볼 수 있다*'를 차단할 수 있다. 
- 믿을 수 있는 private mining pool을 일시적으로 활용하여 멋지게 Dark Forest를 헤쳐나간 재미있는 스토리가 있다. 자세한 내용은 [여기](https://samczsun.com/escaping-the-dark-forest/)에 나와있는데, 간략하게 요약하면 글쓴이는 MEV 포식자들의 눈을 피하기 위해 자신의 중요한 tx를 private mining pool에 제출을 했고, 그 tx는 그 pool 밖으로 새어나가지 않은 상태에서 블록에 포함되기 때문에 무사히 tx를 수행시킬 수 있었다는 스토리다. 이전 글에서 다뤘던 '[Ethereum is a Dark Forest](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest)'에서의 실패를 교훈 삼아 성공적으로 Dark Forest를 벗어난 이야기가 잘 설명되어 있다. 
- 하지만 이런 private mining pool이 MEV에 대한 좋은 솔루션인가에 대해서는 고민해볼 여지가 있다. 첫 번째 이유로 private mining pool은 `selfish mining pool`이 될 가능성이 생긴다. `selfish mining`은 다른 노드들에게 public하게 알리지 않은 상태에서 이익을 취하는 방법이다. selfish miner들은 블록을 채굴하지만, 이 정보를 다른 노드들에게 전파하지 않고 블록의 존재를 숨기고 있다가 자신이 숨겨놨던 체인이 longest chain이 되었을 때 기존에 있는 블록체인을 의도적으로 덮어쓰면서 원하는 tx를 마음대로 추가하는 행위를 의미한다. 이는 블록체인에서는 가장 긴 체인을 선택한다는 점과 블록이 블록체인에 추가되기 전까지 private mining pool 외부로 아무런 정보가 전파되지 않는다는 점을 활용한 것으로, 블록체인 전체 생태계를 봤을 때 악영향을 끼칠 수 있다. 
- 두 번째로, private mining pool을 사용하면 '블록체인의 탈중앙화'의 가치를 훼손하게 된다. 즉, private mining pool이 하나의 중앙화된 서버와 같아지기 때문에 private mining pool에 tx를 제출한다는 의미는 그 서버에 나의 tx를 온전히 맡기는 것과 같아진다. Private mining pool도 봉사하는 목적이 아니라 최대의 이윤을 얻기 위해 생긴 이익집단인데, 이들이 그들 스스로의 이익을 극대화하기 위해서 나의 tx를 검열하고, 복사하고, 강탈하지 않으리라는 보장이 없다.
- 이러한 문제를 해결하기 위해서 `Flash Bot`이 등장하게 되었다.

[Dark Forest를 성공적으로 탈출한 스토리](https://samczsun.com/escaping-the-dark-forest/)
![](https://i.imgur.com/IjTxAzf.png)

## 2. Flash Bot [[1]](https://www.coindeskkorea.com/news/articleView.html?idxno=74507)[[2]](https://www.coindeskkorea.com/news/articleView.html?idxno=73629)[[3]](https://blog.bitmex.com/flashbots/ )

### Flash Bot이란?
[MEV의 역사](https://etherworld.co/2022/04/05/mev-research-report/)
![](https://i.imgur.com/ivlpI9x.png)
- `Flash Bot`은 위에 MEV의 역사 타임라인에서 보여지는 것처럼 MEV 이슈가 제기된 2014년 이후 2019년에 발행된 'Flash Boys 2.0 ~' 논문을 기반으로 개발된 MEV 솔루션이다. Flash Bot은 이더리움 네트워크 상에 공개되어 있는 mempool을 거치지 않기 때문에, 다른 유저나 searcher와 같은 주체들은 tx 가 블록에 포함되어 블록체인에 등록될 때까지 tx의 존재를 알아차리기 어렵다. 이러한 방법은 tx가 성공적으로 처리되기 전까지 tx를 public하게 노출시키지 않아 searcher들의 '샌드위치 공격'과 같은 것을 피할 수 있다.
- 뿐만 아니라, 배치옥션의 형태처럼 여러 bundle의 tx 묶음에 대한 가격을 지정함으로서 그 bundle 안에 다른 tx를 추가하거나 tx의 순서를 조정하는 등의 작업을 할 수 없도록 한다. 이는 miner 들이 mempool에 있는 tx를 의도적으로 조작하는 행위를 방지할 수있다.

### Flash Bot의 구조

- Flash Bot의 구조는 크게 보면 **searcher - relayer - miner** 구조로 되어 있다.
-  Searcher는 Flash Bot 시스템에 tx를 제출하는 주체이다. 이 Searcher 들은 왜 Flash Bot 솔루션을 사용할까? Searcher 가 수익이 될만한 tx 를 생성했다고 가정하자. 예를 들어, A 거래소와 B 거래소 간 시세차익의 기회를 포착했다고 하자. 이 때, public 한 블록체인 노드들에게 tx를 제출하면 이들은 mempool에 이 tx를 갖고 있게 된다. 이 경우, 다른 searcher들이나 miner들은 mempool에서 이 tx를 발견할 수 있고, tx를 제출한  searcher는 다른 이들이 자신의 tx를 훔쳐가는 것을 방지하기 위해 경쟁적으로 더 높은 가스비를 지불해야하는 상황이 발생할 수 있다. 이러한 상황을 피하고 싶기 때문에 searcher는 Flash Bot을 사용할 수 있다.
-  Searcher는 하나의 tx 또는 여러 개의 tx bundle 을 relayer 에게 제출하게 되는데, 이 때 miner에게 얼마의 수고료를 지급할 것인지에 대한 값을 제출한다. 이를 `bidding`이라고 하는데, miner가 가스비가 높은 tx를 먼저 처리하는 것처럼, Flash Bot에 참여하고 있는 miner들 또한 이 bidding 값을 보고 어떤 tx bundle을 선택할지 여부를 판단한다. bidding 값은 처음에 제출할 때 한 번만 지정하기 때문에 경쟁적으로 bidding 값을 높이는 상황은 발생하지 않는다.
-  Relayer는 searcher 와 miner 를 연결해주는 역할을 한다. searcher 가 만든 tx bundle을 miner들에게 제시하고, miner들은 자신에게 이득이 될만한 bundle을 가져가서 블록에 포함시킨다. 악의를 가진 searcher 들이 DoS 공격을 하는 경우, miner가 직접적으로 영향을 받지 않도록 중간에서 DoS 공격 여부를 판단하는 역할도 한다.
-  Miner는 bidding 값에 따라서 어떤 bundle 을 갖고 올지 판단을 하고 블록에 포함시킨다. 이들은 bundle 을 해체하여 자신의 tx를 추가하거나 tx의 순서를 바꾸거나 검열하는 등의 작업은 할 수 없기 때문에 MEV의 걱정은 없다. 또한, miner들은 seracher 가 보낸 tx 와 관계 없는 non-flashbot tx도 블록에 추가할 수 있으며 이 방법은 public하게 공개되어 있는 블록들도 기존에 채굴하던 방식으로 채굴할 수 있으므로 확장성 측면에서의 장점이 있다.

[Flash Bot의 구조: searcher - relayer - miner](https://blog.bitmex.com/flashbots/)
![](https://i.imgur.com/rW19QDP.png)

### Flash Bot은 탈중앙화 되었나?
- Private mining pool이 블록체인의 탈중앙화 가치를 훼손한 것처럼 Flash Bot 또한 중앙화된 솔루션을 사용하기 때문에 탈중앙화 훼손의 이슈에서는 완전히 자유롭긴 어렵다. 하지만, 위 구조에서도 알 수 있는 것처럼 완전 중앙화되어있는 대신에 **open participation** 시스템으로 인해서 완전히 중앙화된 시스템을 피하려고 했다. 
- 즉, Flash Bot은 중개자 역할만 할 뿐 tx들로 tx bundle을 구성하고, 어떤 bundle을 miner에게 할당할지는 전적으로 searcher와 miner에게 맡기고 있기 때문에 중앙화된 제 3의 주체가 개입할 수 있는 시스템이 아니라는 점을 강조하고 있다. 이러한 open participation 시스템을 사용하여 어떤 searcher 든지 경쟁적인 가스비 경쟁을 피해 Flash Bot을 활용하여 tx를 제출할 수 있고, 어떤 miner든지 Flash Bot 블록 채굴에 참여할 수 있기 때문에, '*one large mining pool, one large searcher*' 문제를 방지했다고 볼 수 있다.

### Flash Bot의 효과
- Flash Bot의 활용으로 인해서 이더리움의 높은 가스비를 감소시켰다고도 한다. 높은 가스비 문제를 해결하기 위해 이더리움의 block size도 20% 늘려 보았지만 (베를린 하드포크 -  EIP-2565) 실직적인 효율성 개선이 없었던 것으로 보였다. 왜냐하면 이론적으로라도 최대한 감소시킬 수 있는 가스비는 20%를 넘지 못했기 때문이다. 이에 반해, 이더리움 miner들 중 90%가 Flash Bot이 적용된 [MEV-geth](https://github.com/flashbots/mev-geth)를 채택한 이후로 가스비를 상당히 감소시켰다는 연구 결과도 있다.

## 결론
- Flash Bot이 만능은 아닐 뿐만 아니라 중앙화된 서비스이기 때문에 완전히 탈중앙화된 완벽한 MEV 솔루션이라고 볼 수 없지만, 그동안 발생한 치열한 가스비 경쟁을 막는 중개자 역할의 시스템을 개발했다는 측면에서 의의가 있다. 뿐만 아니라 Flash Bot을 통해서 MEV에 대한 이슈도 더 부각되었고, 실제 환경에서 성공적으로 적용된 솔루션 중 하나라는 측면에서도 의미가 있다고 생각이 든다.
- 흥미로운 점은, 이더리움 업데이트 (ETH 2.0) 로 PoW 방식에서 PoS로 전환되면 이 방식의 Flash Bot도 더이상 사용할 수 없다고 한다. 그 때는 다른 방식의 Flash Bot이 나올 것 같은데, 아직 이더리움 업데이트가 지연되고 있기 때문에 당분간 지금 방식의 Flash Bot은 유효할 것으로 보인다.  
