먼저 AMM은 Automated Market Maker의 약자에요.

풀어보면 자동화된 Market Maker인데 Market Maker가 무엇인지 알아야겠죠??


Market Maker

일반적인 거래소의 오더북

주식이나 가상화폐 거래를 해보신 분이라면 한번쯤 보셨을 호가창이에요.

아래쪽의 초록색 가격이 구매를 원하는 가격이고 위의 빨간색 가격이 판매를 원하는 가격이에요.

이런식으로 구매나 판매를 하고싶은 가격을 지정해서 주문하는 것을 Maker (지정가) 주문이라고 해요.

반대로 구매 가격이나 판매 가격을 정하지 않고 현재 가격에 거래하는 것을 Taker (시장가) 주문이라고 해요.

이렇게 Maker를 Market Maker 또는 줄여서 MM이라고도 부른답니다.


시장의 유동성

 

정상적으로 거래가 이루어지기 위해서는 Maker의 역할이 중요한데요.

예를들어 Maker 주문이 많이 없는 호가창을 생각해볼게요.

유동성이 부족한 호가창

점선 위쪽의 빨간 가격은 팔고자하는 가격, 아래의 초록 가격은 사고자하는 가격, 오른쪽의 숫자는 해당 가격에 팔거나 사고자하는 개수에요.

만약 이런 상황에서 Taker주문이 들어온다면 어떻게 될까요?

1개를 구매하고 싶어 Taker주문을 넣는다면 팔려고하는 가격중 가장 낮은 35000원구매가 될거에요.

1개를 팔고싶다면 어떨까요? 살려고하는 가격중 가장 높은 23000원판매가 돼요.

살때는 35000원에 비싸게 사게되고, 팔때는 23000원에 싸게 팔게되는거죠. Taker의 입장에서는 이런 시장에서는 거래하기 꺼려질 수 밖에 없어요.

그렇기 때문에 Maker 주문이 각 가격대마다 촘촘히 존재하는 것이 중요해요. Maker 주문이 얼마나 많이, 촘촘히 있느냐를 유동성이라고 불러요.

거래소의 입장에서는 유동성이 풍부하게 유지되는 것이 중요한데요. 그래서 보통 거래소에서는 Maker 주문을 하는 사람에게 수수료를 할인해준다던가, 페이백을 해주는 식으로 유동성을 유지하기 위해 노력을 한답니다.


DEX

우리가 주로 사용하는 거래소 (바이낸스, 업비트) 들은 중앙화가 되어있어요.

우리의 현금을 거래소로 입금하고 그 현금을 이용해서 가상화폐를 매매하고 거래소를 통해 출금해야하죠. 

중앙화된 거래소를 이용하는 경우 거래소가 출금을 해주지 않고 폐쇄시키는 등의 위험이 따랐어요.

이렇게 중앙화 되어있는 거래소를 CEX(Centralized EXchange) 라고 하고, 이에 대항하기 위해 탈중앙화된 거래소인 DEX(Decentralized EXchange)들이 등장하기 시작했어요.

탈중앙화된 거래소를 통해 블록체인상에서 프로그래밍된 코드에 따라서 적절한 가격으로 가상화폐를 거래할 수 있게 되었어요.


유동성 풀

일반적인 거래소에는 거래쌍이 존재해요. 예를들어 (BTC/KRW)라면 비트코인을 팔아서 원화를 얻거나 원화를 내고 비트코인을 살 수 있는거에요.

BTC/ETH 유동성 풀

DEX에도 이와 똑같이 유동성 풀이라고 불리는 쌍이 있어요. 이 유동성 풀 안에는 두가지의 토큰을 담고 있어요.

일반적인 거래소와 똑같이 (BTC/ETH)이라면 이더리움을 내고 비트코인을 얻거나 비트코인을 내고 이더리움을 얻을 수 있어요.

일반적인 거래소에서는 호가창(오더북)이 있었어요. 하지만 DEX에서는 호가창 방식이 아닌 팔고싶은 만큼 토큰을 제공하면 적당한 비율로 반대 토큰이 주어져요.

위의 BTC/ETH 유동성 풀로 예를 들면 1개의 BTC를 제공하면 15개의 ETH를 지급받는 식이에요.

유동성 풀에서는 이렇게 A라는 토큰을 넣고 B라는 토큰을 받게되는데, A와 B의 교환비율은 어떻게 알 수 있을까요?


AMM (Automated Market Maker)

앞서 DEX에서는 프로그래밍된 코드에 따라 적절한 가격으로 거래가 이루어진다고 했는데, 적절한 가격은 어떻게 알아내는 걸까요?

DEX에서는 기존 거래소 처럼 Maker들이 유동성을 공급하는 것이 아니라 Automated Market Maker를 이용해서 구매 또는 판매를 위한 적절한 가격을 알아내게 돼요.

이때 AMM은 적당 가격을 알아내기위해 수학공식을 이용하는데 이는 DEX마다 다르지만 많은 DEX들이 x * y = k를 사용하고 있어요. 

쉬운 이해를 위해 위에 사용했던 BTC/ETH 유동성 풀을 예시로 들어볼게요.

x는 유동성 풀에 존재하는 BTC의 수량이고 y는 유동성 풀에 존재하는 ETH의 수량이에요. k는 상수에요.

이렇게 k 상수를 이용하는 AMM을 CPMM(Constant Product Market Maker)라고 해요. 편의상 AMM 으로 칭할게요.

 

y = 100 / x 그래프

k를 100으로 가정하면 x * y = 100이되고, x를 우변으로 넘기면 y = 100 / x 가 되면서 위의 그래프가 돼요.

앞서 얘기했듯 유동성 풀에는 두가지 종류의 토큰이 존재하게 되는데요, 여기에서는 BTC와 ETH에요.

AMM이 가격을 결정하는 원리는 상수 k에 있어요. k는 상수이므로 변하지 않죠. 하지만 x와 y의 값은 거래가 이루어 지면서 변할 수 있답니다.

현재 유동성 풀에 BTC는 5개 ETH 는 20개 존재한다고 가정해볼게요.

Alice가 ETH 1개를 BTC로 교환하고 싶다고 해요.

그러면 먼저 Alice의 ETH 1개를 유동성 풀에 제공합니다. 이때 ETH의 수량인 y값이 21로 증가하게 되는데요, x를 변수로 두고 다시 계산을 해요.

x * 21 = 100 이므로 x는 약 4.76이 된답니다.

기존에 BTC가 5개가 있었는데 ETH가 투입되고 난 뒤 x의 값은 4.76으로 줄어들었네요. 

이때 5에서 4.76으로 줄어들은 만큼인 0.24BTC를 Alice에게 지급합니다.

결론적으로 Alice는 ETH 1개로 0.24개의 BTC를 구매한게 되었네요.

위에 본 그래프로 설명해보면, 기존에는 BTC 수량이 5, ETH 수량이 20인 상태였지만, ETH 1개가 늘어남(파란 빗금)으로서 BTC 수량이 줄어들었고 그 차이만큼(빨간 빗금)은 Alice가 가져가게 된거에요.

이 상태에서 만약 Bob이 ETH 1개를 가져와서 BTC로 바꾼다면 어떻게 될까요?

ETH의 수량은 21개에서 22개로 증가하게 되고 이에 따라 BTC수량은 100/22 = 4.545..로 약 4.545개가 돼요.

따라서 원래있던 4.76에서 4.545개를 뺀 약 0.21개의 BTC를 Bob이 가져가게 되네요.

조금 이상하지 않나요? Alice는 ETH 1개로 0.24개의 BTC를 가져갔는데 Bob은 1개의 ETH로 0.21개 밖에 못 가져갔네요.

이것은 유동성 풀에 ETH 개수가 늘어났기 때문인데요, 유동성 풀에 하나의 토큰이 증가했다는 것은 해당 토큰을 사람들이 많이 팔았다는거에요. A라는 토큰을 내고 B라는 토큰을 받아오는 구조인데, 내가 제공한 A라는 토큰을 시장에 팔고 B라는 토큰을 구매한 것과 같아요.

즉 Alice가 ETH를 판매하면서 ETH의 가치가 상대적으로 낮아졌고 따라서 Bob은 같은 1 ETH 를 가지고왔지만 가치가 떨어진 상태이기 때문에 Alice만큼 BTC를 가져갈 수 없었던 거에요. 거래소의 호가창 방식과 마찬가지로 토큰이 사고 팔리는 것에 의해 가격이 결정되는 것이 AMM입니다.

이제 여기서 한가지 의문점이 생기는데요, 유동성 풀에있는 두가지 토큰은 어디서 오는 걸까요?

일반적인 거래소에서 Maker들이 주문을 넣어 호가창을 채우듯 DEX에서도 마찬가지에요. DEX에서는 Liquidity Provider가 존재해서 유동성 풀에 토큰을 제공하는 역할을 한답니다.


Liquidity Provider

풀어보면 유동성 공급자를 뜻하는 말이에요.

거래소의 Maker처럼 거래에 유동성을 공급하는 사람을 말하는데요. 앞서말한 유동성 풀에 두가지 토큰을 모두 제공하는 사람이에요.

앞선 예시 처럼 BTC 5개 ETH 20개가 있고 k 가 100인 상황을 가정해볼게요.

이때 현재 유동성 풀에 들어있는 두가지 토큰의 가치는 일반적인 시장상황에서는 동일하다고 볼 수 있어요.

왜 그럴까요? 위의 예시를 기준으로 BTC가 10,000 달러이고 ETH가 1,000 달러라고 가정한다면 토큰들의 가치는 BTC 10,000 * 5 = 50,000 달러, ETH 1,000 * 20 = 20,000 달러로 서로 가치가 다른 상황이 될 거에요.

이때 Eve가 외부 거래소에서 1,000 달러로 ETH 1개를 사와서 우리의 DEX에서 BTC로 바꾸려고해요.

앞선 예시와 같기때문에 Eve는 ETH 1개를 유동성 풀에 제공하고 BTC 0.24개를 가져가게 돼요.

Eve는 1,000 달러로 ETH 1개를 사서 DEX를 통해 BTC 0.24개로 교환했어요. BTC 0.24개는 달러기준으로 2400 달러이기 때문에 Eve는 0.24개의 BTC를 외부 거래소에 팔아버릴거에요. 순식간에 1,000 달러2,400 달러가 되었답니다.

이렇게 거래소마다의 시세차익를 노리고 거래하는 사람들을 차익거래자(arbitrageur) 라고 해요. 이렇게 차익거래자들이 존재하기 때문에 DEX에서 교환되는 비율은 다른 여러 거래소들의 교환 비율과 비슷하게 맞춰지게 돼요.

따라서 유동성 풀에 두가지 토큰을 제공할 때도 두 토큰의 총 가치가 동일하도록 제공하게 돼요. 물론 한쪽의 가치가 더 높게 제공할 수 없는 것은 아니에요. 하지만 그렇게 된다면 앞서 말한 차익거래자들에의해 손해를 보기 때문에 동일한 가치로 제공하는 것이 중요해요. 일반적인 DEX 사이트에서는 각 토큰들의 가치를 동일하게 제공할 수 있게끔 해준답니다.

Alice가 유동성 풀에 유동성 공급을 하는 상황을 가정해볼게요. 현재 BTC는 10,000 달러이고 ETH는 1,000 달러에요. 유동성 풀에는 10개의 BTC와 100개의 ETH가 들어있고 k는 1000에요.

Alice는 1개의 BTC와 그와 동일한 가치를 지닌 10개의 ETH를 유동성 풀에 제공했어요. 이제 유동성 풀에는 11개의 BTC110개의 ETH가 존재해요. 따라서 k값이 변하는데요, x * y = k 이므로 1210이 돼요. 이렇게 유동성 공급을 하는 경우 k의 값이 증가하게 된답니다. 

복사했습니다!