유니스왑은 탈중앙화 거래소이다.
흔히 중앙화 거래소들은 차트, 호가창 등등이 있고 그곳에서 매도, 매수가 이루어진다.
중앙화 거래소에서는 이 과정들이 매우 빠르게 일어난다.
하지만 탈중앙화 거래소는 이더리움 블록체인의 인터벌이 15초이기 때문에 트랜젝션을 보내면 15초 뒤에 승인되며
모든 액션이 트렌젝션으로 이루어지기 때문에 비용이 많이든다.
그렇기 때문에 기존의 중앙화 거래소를 탈 중앙화 거래소로 만들려면 굉장히 느리고 비싼 거래소가 될 수 밖에 없다.
사람들은 이 딜레이를 이용해 사람들을 이용해 차액거래를 하기도 했지만
일반 사람들은 이 딜레이 사이에 봐뒀던 코인가격을 거래를 하려고 트렌젝션을 보냈지만 그 사이에 가격이 갑자기 바뀌거나, 거래를 취소하려고 할때에도 비용이 발생하는 점 때문에 불편해했다.
위의 불편한 문제를 해결하기 위해서 AMM(Auto Market Maker)를 도입했다.
중앙화 거래소에서 유동성은 어떻게 공급되는지 생각해보자
사람들이 호가를 하면 그것을 다른 사람들이 매도하면서 유동성이 공급된다.
유니스왑은 이 유동성을 사람들이 하지 않고 공식을 따르게 만들었다.
예를 들어 토큰A 와 토큰 B의 교환비율을 정해놓음으로서 누군가 호가를 하지 않아도 가격이 정해질것이다.
유니스왑은 AMM중에서도 CPMM(Constant Product Market Maker) 를 사용한다.
위 식을 보면 x는 토큰A 이다.
y는 토큰B이다. x와 y의 곱이 일정한 K가 되도록 상수를 정해주는 것이 CPMM이다.

이 반비례 그래를 따라서 수량이 정해지는 것을 CPMM 이라고 한다.

위 예시에서 10ETH와 500OMG의 곱은 항상 5000으로 일정하게 된다.
만약 누군가 1ETH과 OMG를 교환하고 싶어한다면 10ETH는 1ETH를 받아 11ETH이 되고 OMG는 특정한 비율로 인해 5000/11을 한 값인 454.5OMG가 된다.
이 계산이 끝난 후 교환을 신청한 사람은 1ETH를 주고 5000-454.5인 45.5OMG를 받게 된다.
다음 예시를 보자

같은 사람이 1ETH를 하나 더 넣어서 이더리움의 수량이 12개가 되었다.
그리고 5000/12를 통해 OMG의 수량이 416.7 정해지게 되며
이더리움이 11개였을때 OMG는 454.5 였으므로 454.5-416.7 = 37.8개의 OMG를 받게된다.
위의 두 예제 모두 1ETH를 OMG와 교환하는 것이지만 받는 OMG의 개수는 달라졌다. 즉 OMG가 비싸졌다.
이런 상황에서 차액거래자들은 OMG를 팔고 싸게 산 ETH를 가져오면서 OMG의 개수가 늘어나고, 시장에서 거래되고 있는 ETH와 OMG의 비율까지 맞춰지게 된다.
즉 이렇게 호가 없이도 유동성을 공급할 수 있게 만들어 주는 것을 CPMM이라고한다.
이렇게 AMM이 이루어지기 위해서는 항상 두가지 코인, 두가지 토큰 등을 Pair로 관리해야한다.
이 두 코인을 대상으로 컨트렉트를 만들고 그 안에 서로의 곱이 일정하도록 pool을 형성하는 것이 factory contract이다.
하지만 Pair로 다루는 것은 모든 컨트렉트에 대해 쌍마다 컨트렉트를 만들어 줘야한다는 의미이므로 매우 불편할것이다.
또한 이더리움은 기축통화가 따로 없으므로 보통 여러 토큰과 토큰 Pair를 맺어야한다.
이 토큰 Pair들은 모두 컨트렉트가 만들어져 있어야하며 pool도 형성되어있어한다.
즉 AMM을 하기위해서는 효율적이지만 조합의 수가 늘어날 수록 많은 컨트렉트를 만들어야한다.
유동성 공급자 즉 LP(Liquidity Provider)들이 ETH-DAI, DTH-OMG 등과 교환을 하기 위해 맡긴 돈을 되찾고 싶을땐 어떻게 해야할까?
LP Tokens는 공급자가 얼마를 돌려 받아야하는 알려주는 증거로서 제공하는 토큰이다.

위 사진을 보면 Deposit 에 토큰 10개, 토큰 1개를 유동성을 공급하기 위해 제공(reserve)를 했다.
그리고 이 토큰은 컨트렉트 Pool에서 넣은 토큰에 해당하는 토큰이 발행이 된다.
총 12개의 토큰이 발행된 pool에서 4개의 토큰은 현재 사용자가 받은 LP토큰이며 나중에 토큰을 찾으려 할때 4개의 LP토큰을 돌려주면 4개에 맞는 10개와 1개의 토큰을 돌려받을 수 있게 되는 것이다.
즉 LP토큰은 일종의 채권같은 것으로서 반납하면 본인이 내었던 토큰을 다시 찾을 수 있는 기능을 한다.
유니스왑은 전체 LP토큰에서 공급자가 가진 LP토큰의 지분만큼 수수료(0.3)를 제공하고 있다.
즉 유동성 공급자들은 본인이 제공한 유동성만큼 수수료를 받을 수 있다.