[Ethereum] 아비트라지를 위한 여정 15편 - Flash Loan

0xDave·2022년 11월 28일
0

Ethereum

목록 보기
67/112
post-thumbnail

🐋 고래의 덤핑


한 고래가 모종의 이유로 들고 있던 WAVAXMIM으로 스왑하려고 한다. 스시스왑에서 MIM/WAVAX 풀이 있다고 하자. 고래는 해당 풀에 아발란체를 덤핑하고 MIM을 가져갔다고 하면, 현재 풀에는 MIM 대비 아발란체의 개수가 훨씬 많아진다. 따라서 가격 변화는 다음과 같다.

MIM 부족 = MIM 가격 상승
WAVAX 넘쳐남 = WAVAX 가격 하락


❄️ 가만히 있던 Trader Joe 풀


스시스왑과 달리 현재 Trader Joe의 가격 변화는 아직까지 없다.(짧은 시간 동안만 유지됨) 그러면 여기서 우리는 2가지 아비트라지 기회를 가져갈 수 있다.

  1. Trader Joe에서 MIM을 사서 스시스왑에서 비싼 가격에 판다.
  2. 스시스왑에서 WAVAX을 싼 가격에 사서 Trader Joe에서 판다.

우리는 이걸 한 번에 할 수도 있다. Trader Joe에 아발란체를 가져가서 MIM으로 바꾸고 그걸 스시스왑에서 다시 아발란체로 바꾼다. 그리고 서로 가격이 같아질 때까지 반복한다.


📜 전제 조건


하지만 이 사실을 안다고 해도 모두가 부자가 될 수 없다. 다음과 같은 전제 조건이 필요하기 때문이다. 첫 번째로 고래가 덤핑한 이후에 내가 가장 첫번째로 스왑을 진행해야 한다. 내가 하기 전에 다른 사람이 스왑을 진행하면 아비트라지 기회는 사라진다. 두 번째로 고래가 덤핑한 만큼의 차익을 먹으려면 그만큼의 돈이 필요하다. 가격차이가 발생했는데 10퍼센트만 메꿀수 있는 돈 밖에 없다면 더 많은 시드가 있는 사람이 와서 그 차이를 메꿀 것이다. 그럼 소액 새우들은 아비트라지 기회를 발견해도 먹을 수 없는걸까?


⚡️ 플래시론


소액러도 플래시론을 이용하면 고래가 덤핑한 만큼의 차익을 먹을 수 있다. 아비트라지를 위해 고안된 것은 아니지만 잘 활용하면 유용하게 사용할 수 있다. 하나의 트랜잭션 안에 여러 거래를 집어넣고 해당 트랜잭션을 하나의 블록에 넣는 것이 주된 원리다. 보통 트랜잭션을 보낼 때 한 가지 거래(스왑)만 하기 때문에 앞서 언급한 스시스왑과 Trader Joe의 차익을 가져가기 위해선 최소 2번의 트랜잭션을 제출해야 한다. 그런데 플래시론을 활용하면 조금 더 효율적으로 기회를 노릴 수 있다.

  1. Trader Joe에서 갭이 벌어진만큼 MIM을 빌린다.
  2. 스시스왑에서 MIM을 아발란체로 스왑한다.
  3. 아발란체와 일정 수수료를 플래시론 갚는데 사용한다.

위 과정을 거치면 소액러도 갭 만큼의 MIM을 빌려 차익을 얻을 수 있다. 3가지 거래가 모두 하나의 블록 안에 포함되기 때문에 가능한 방법이다. 거래가 실패하면 revert가 나서 모두 처음 상태(MIM을 빌리기 전 상태)로 돌아가기 때문에 가스비만 소비된다.

그런데 몇 가지 위험요소가 존재하는데..


🚨 위험요소


아비트라지 기회를 발견했다고 해서 나 혼자 발견했다고 장담할 수는 없다. 가장 빠르게 트랜잭션을 보냈다고 생각했는데 다른 사람이 먼저 보냈을 수도 있고, 내가 제출한 트랜잭션 앞과 뒤에 자신의 트랜잭션을 보내는 샌드위치 공격을 당할 수도 있다. 이러한 위험요소를 제거하거나 최소화하는 방법은 없을까..? 다음 시간에 알아보자.


출처 및 참고자료


  1. Smart Contract Arbitrage — Introduction and Overview

  2. Borrow Millions In DEFI With NO COLLATERAL? FLASH LOANS Explained (Aave, dYdX)

profile
Just BUIDL :)

0개의 댓글