플래시론과 플래시스왑, 기회인가 문제인가?

Atomrigs
8 min readFeb 7, 2021

--

기존 금융시스템에서는 거의 불가능하거나 매우 제한된 규모나 플레이어게만 가능한 기법이 디파이에서는 누구에게나 열려있는게 있습니다. 아직 역사가 얼마 되지 않아 좋은 것인지 나쁜 것인지에 대해서도 의견이 분분합니다.

그것은 바로 플래시론과 플래시스왑입니다. 플래시론은 아베가 컨트랙트에 지원했고, 플래시스왑은 유니스왑이 먼저 지원하기 시작해서, 이를 포크한 스시스왑을 비롯한 다른 스왑시스템에서 지원되고 있습니다. 플래시론은 단일한 자산을 빌려서, 그 자산으로 대출을 갚는 것이고, 플래시 스왑은 교환 페어를 이용해 한 쪽의 자산을 빼내서, 다른 쪽 자산으로 교환하는 겁니다.

보통 대출을 하자면, 그 대출에 상응하는 담보를 제공하거나 신용이 필요합니다. 이더를 담보로 DAI 대출을 받는 메이커다오나 다른 대개의 디파이 대출 프로그램들도 특별히 다르지 않습니다. 그런데 이런 담보나 신용을 필요로 하지 않는 신박한 대출을 받을 수 있는 방법이 있습니다. 단, 대출기간은 단일한 트랜잭션 이내라는 절대적인 제한이 있습니다. 즉, 하나의 트랜잭션 안에서 대출을 하고, 트랜잭션이 끝나기 전에 대출을 완전히 갚아야 합니다. “플래시”라는 말은 바로 이 단일 트랜잭션 내에서 처리되어야 한다는 조건을 표현한 것입니다.

플래시론이 가능하려면, 단일 트랜잭션내에서 대출을 받은 후 상환하지 않는 경우가 없어야 합니다. 만일 대출을 받은 후 상환하지 않고 트랜잭션을 중간에 끝내도, 대출금을 그대로 다른 곳에 사용할 수 있다면, 이것은 기능이 아니라 버그입니다. 즉 이더리움 트랜잭션이 아토믹 트랙잭션을 보장해야 합니다. 이런 개념은 통상적인 데이터베이스에서 흔히 다루는 개념입니다. 트랜잭션 내에서 에러가 발생하면, 전체 트랜잭션을 롤백하는 것이지요. 에러가 발생한 트랜잭션을 커밋할 수 없게 하는 것입니다. 이더리움 트랜잭션은 이러한 All or Nothing 스킴을 적용할 수 있도록 설계되어 있습니다. 여러가지 오퍼레이션을 포함하는 이런 트랜잭션의 단일성을 보장하려면, 외부의 EOA 어카운트를 써서 할 수는 없고, 별도의 스마트 컨트랙트에서 필요한 여러 컨트랙트를 호출해야 합니다.

이더리움 트랜잭션이 이런 기능을 지원한다고 하더라도, 플래시론과 스왑이 가능해지려면, 이를 제공하는 스마트 컨트랙이 “의도적”으로 이를 구현해야 합니다. 대출금을 위한 담보가 먼저 주어지지 않은 상태에서 다른 컨트랙트에서 대출금을 사용할 수 있도록 하기 위해서는, “Optimistic” transfer 를 지원해야 합니다. “Optimistic” 이라는 표현은 “앞으로” 전송된 금액을 반드시 되돌려 받을 수 있기 때문에, 즉 상환이 보장되기 때문에, “100% 희망적”이기 때문에 이를 사용합니다.
이런 개념에 입각해 보면, 옵티미스틱 트랜스퍼가 기존의 대출 개념에서 근본적으로 벗어난 것은 아닙니다. 예를 들어 신용대출의 경우, 대출에 담보는 없지만, 대출자의 신용을 믿고, 즉 미래에 되 갚을 수 있을 거라는 걸 신뢰하고 대출을 해주는 겁니다. “Optimistic” 해야 되는 것은 마찬가지인거죠. 이것과 비교할 때 옵티미스틱 트랜스퍼는 오히려 기존의 신용대출보다 절대적으로 더 안전합니다. 신용 대출의 경우에는 어쩔 수 없이 못 갚거나 안 갚는 불량률이 생기게 마련이지만, 플래시론이나 플래시스왑의 경우에는 이런 경우가 없어야 합니다. 만일 이를 구조적으로 보장하지 못하면 이것은 버그이기 때문에 이 기능을 모두 사용할 수 없게 해야지요.

플래시론과 플래시스왑은 누구에게나 오픈되어 있습니다. 가스비와 수수료만 부담하면, 담보금이나 신용없이도 누구나 빌릴 수 있기 때문에 기존 금융시스템에서는 대형 금융사나 헷지펀드와 같은 자금과 신용이 모두 막강한 주체가 할 수 있는 일을 디파이에서는 누구나 실행할 수 있습니다. 이것이 어떤 문제 또는 기회를 만들어 낼 수 있을까요?

이 기능을 가장 쉽게 사용할 수 있는 곳은 디파이 내의 토큰 스왑간의 시세 차익을 타겟으로 하는 재정거래입니다. 예를 들어 유니스왑의 ETH-DAI 페어가 1 ETH 당 1000 DAI 로 교환되고 있는데, 스시스왑에서는 1 ETH 당 1200 DAI 로 교환되고 있다면, 유니스왑에서 1 ETH 와 1000 DAI 스왑을 initiate 하되, 1000 DAI 를 아직 넣지 않은 상태에서, 1 ETH 를 먼저 “optimistic” 하게 전송받아, 스시스왑에서 보냅니다. 그런 다음 스시스왑에서 1 ETH 를 1200 DAI 로 스왑합니다. 그런후 1200 DAI 중에 200 DAI를 빼고, 1000 DAI 를 유니스왑에 주고, 이 트랜잭션을 종료합니다. 결과는 1 ETH 없이 1 ETH 만큼의 DAI 를 유니스왑에서 사서 스시스왑에 팔아, 200 DAI 의 시세 차익을 거둔 것이지요. 만일 이 작업을 실행하는 동안에, 스시스왑에 여러명이 동시에 이와 유사한 거래를 처리하려고 트랜잭션을 날리면, 어떤 트랜잭션이 먼저 처리되느냐에 따라, 어떤 것은 성공하는 경우도 있고, 어떤 경우는 실패할 수도 있습니다. 만일 실패했다면, 애초에 유니스왑에서 일으킨 스왑자체도 무효가 되고, 전체 트랜잭션이 revert 됩니다. 단, revert 될 때까지의 모든 가스 비용은 부담해야 됩니다. 완전히 공짜는 아니죠.
이런 경쟁적 성격 때문에, 시세 차익을 대상으로 한 플래시스왑의 경우, 트랜잭션을 먼저 처리하기 위해 가스비를 높게 설정할 수 밖에 없죠. 경쟁적으로 가스비를 높이다 보면, 결국 실패했을 때 가스비의 손실이 늘어납니다. 리스크가 없는 경쟁은 아닙니다. 리스크와 비용 대비 시세차익 기대값이 밸런스를 이룰 때까지 경쟁이 지속되겠지요.

그런데 이러한 기능이 “악용”될 여지가 존재합니다. 즉 누구나 담보없이 막대한 자금을 대출 받을 수 있다면, 설사 이것이 하나의 트랜잭션내에서 모든 것이 이루어져야 한다고 하더라도, 다른 디파이 프로토콜의 약점을 공격하는 무기가 될 수 있습니다. 가장 대표적인 공격대상이 취약한 온체인 오라클입니다. 만일 어떤 레버리지 상품이 청산가격의 기준을 유니스왑 컨트랙트의 현재 ETH-DAI 페어 가격에 의존한다고 가정해 봅시다. ETH-DAI 가격을 일시적으로 변동시켰을 때, 이에 의존하는 레버리지 컨트랙트는 자동적으로 청산을 일으킬 수 있습니다. 이게 레버리지 상품이면, 그 임팩트는 크게 증폭되겠지요. 이런 방식의 공격이 실제로 있었습니다. 그래서 플래시론 자체가 공격의 주범인양 포장되기도 했습니다.

하지만 다시 생각해보면, 위의 예에서 취약점은 공격을 당한 레버리지 컨트랙트 쪽에 있는 것이지, 플래시론에 있는 것은 아님을 알 수 있습니다. 즉 청산가격을 단일한 컨트랙트의 단일 시점에 맞춘 것 자체가 잘못된 설계라는 것이지요. 오라클을 멀티 컨트랙트 소스에서 구해야 되고, 단일 시점이 아니라, 구간 평균가를 레퍼런스로 이용해서 방어력을 높여야 된다는 것입니다. 그렇지 못할 경우 플래시론이 없다고 하더라도, 해당 레버리지 컨트랙트의 유동성이 커지면, 대자본이 똑같이 공격할 수 있습니다. 플래시론은 대자본을 미리 시뮬레이션한 것일 뿐, 취약성은 동일하게 해당 컨트랙트에 있다는 것이죠.

유니스왑은 플래시스왑기능을 v1 컨트랙트에서 v2 로 리론칭할 때 추가 했었는데, 이 때 아이러니하게도, 유니스왑을 오라클로 이용하는 것에 대한 플래시 공격을 방어하기 위한 메카니즘도 같이 구현했습니다. 혼자서 창과 방패를 다 만든 것인데, 이것이 바른 해결책입니다. 플래시스왑은 디파이 생태계 내에서 유동성의 이동을 극대화하고, 모든 참여자에게 동일한 차익거래의 기회를 제공해 줌과 동시에, 이것 때문에 생길 수 있는 오라클 공격의 취약성을 보강하는 시도를 동시에 한 겁니다. 물론 유니스왑이 온체인의 가격 데이터를 누적적으로 사용할 수 있도록 해서 일시적 가격 변동에 대한 방어력을 높이기는 했지만, 여전히 단일 오라클에 의존하는 방식은 취약합니다. 멀티 오라클을 사용하는 기법이 보편화되리라 봅니다.

플래시론과 플래시스왑으로 인해 취약성이 들어난 컨트랙트들은 어짜피 플래시론이 없더라도 규모가 커지면 공격을 당할 컨트랙트였습니다. 규모가 작기 때문에 플래시론이 없으면 공격당하지 않을 수 있다고 자족하는 것이야말로 이더리움 생태계의 대규모 성장을 방해하는 장애물입니다. 취약성이 있다면, 그것이 일어난 근본적 원인을 해결해야지, 오로지 대규모 자본만이 그 취약성을 악용할 수 있게 만들어야 한다는 것은 블록체인 정신에도 맞지 않습니다.

오히려 플래시론과 플래시스왑 개념을 더 광범위하게 소개하고 이를 적극적으로 이용함으로써, 디파이 생태계를 더욱 안전하게 만들 수 있습니다. 그런 이유 때문에, 유니스왑팀에서도 플래시스왑 개념을 적극적으로 홍보하고 있고, 이를 바로 사용할 수 있도록 인터페이스를 잘 정리해서 배포하고 있습니다. 또한 인퓨라를 비롯한 이더리움 생태계의 여러 플레이어들도 이를 적극적으로 활용할 수 있도록 지원을 하고 친절한 가이드까지 만들어 배포하고 있습니다.

https://blog.infura.io/build-a-flash-loan-arbitrage-bot-on-infura-part-i/
https://blog.infura.io/build-a-flash-loan-arbitrage-bot-on-infura-part-ii/

다음 번 글에서는 실제 옵티미스틱 트랜서퍼를 사용한 예제를 포스팅하도록 하겠습니다.

--

--