How to sudoswap

1편 About sudoswap에서는 sudoswap에 대한 전반적인 설명과 Creato fee 0%에 대한 이야기를 했었습니다. 이어서 sudoswap AMM의 자세한 작동 방식과 개선점 그리고 느낀점 대한 이야기를 해보도록 하겠습니다.

글을 쓰는동안 sudoswap의 M/S가 ATH를 찍었네요 LFG!

  1. About sudoswap
  2. How to sudoswap

Understanding Bonding curve

sudoswap AMM은 1) 커스텀 2) Bonding Curve를 활용해 NFT와 토큰(ERC-20, ETH) 사이의 거래를 간편하게 만들어주는 가스 최적화된 3) AMM 프로토콜입니다.

현재 sudoswap은 NFT<>ETH간의 거래만 지원해주고있습니다.

잠깐 Bonding curve가 무엇인지 복습해볼까요?

Bonding Curve는 AMM의 한종류로, 거래쌍의 유동성 풀의 예치량에 따라 가격이 결정되는 것이 아닌, 컨트랙상에 프로그래밍된 함수식에 따라 Supply (X)가 증가할수록 Price (Y)가 증가하는 모델입니다. 즉 거래쌍의 유동성이 없어도, Bonding Curve내의 토큰 공급량과 미리 정의된 가격 설정 함수에 따라 자산의 가격이 결정된다는 뜻입니다.

즉 sudoswap AMM은 유동성이 없어도, 커스터마이징 가능한 함수식을 활용해 NFT의 가격을 자동으로 산출시켜주는 프로토콜을 제공해줍니다. 그리고 Bonding curve를 생성하기 위해서는 ETH, NFT 둘중 하나만 있어도 만들 수 있습니다. 이미 설정된 함수식으로 한쪽의 유동성만으로 가격이 산출될 수 있으니까요!

  • ETH를 예치하는 경우 => NFT를 사고 싶을때
  • NFT를 예치하는 경우 => NFT를 팔고 싶을때

sudoswap은 Linear Curve 와 Expontential Curve 두가지 옵션으로 NFT supply에 따른 가격 산출을 할 수 있는 Bonding curve를 만들 수 있게 지원하고 있습니다.

Linear Curve

Linear Curve는 다음과 같은 식으로 표시될 수 있습니다.

Y = δX+b (b>0)

위와 같은 함수식에서 NFT가 구매되거나 판매될때(X) 똑같은 금액만큼(δ) 증가/감소해 시장가격이(Y) 산출됩니다. 예를 들어 δ=0.1ETH, b=1ETH 라고 가정하고, 10개의 NFT를 판매 하거나 구매하는 곡선을 그려보겠습니다.

* sudoswap UI상으로 영점이 아닌 1부터 시작하는 좌표로 보여주고 있습니다.

Linear curve of selling NFT
Linear curve of selling NFT

Pool Creator가 NFT 10개를 판매하는 경우 Bonding curve 1개의 NFT가 판매될때마다 판매가가 0.1 ETH씩 가격이 증가합니다.

X=0일때 NFT의 시장가는 Y=1ETH
X=1일때 NFT의 시장가는 Y=1.1ETH
X=2일때 NFT의 시장가는 Y=1.2ETH

세개를 구매하는 경우 3.3ETH가 필요하게 되는거죠.

Linear curve of buying
Linear curve of buying

Pool Creator가 10개의 NFT를 구매하는 Bonding curve를 생성하는 경우는 반대로, 1개의 NFT가 구매될때마다 구매가가 0.1 ETH씩 가격이 감소합니다.

X=0일때 NFT의 시장가는 Y=1ETH
X=1일때 NFT의 시장가는 Y=0.9ETH
X=2일때 NFT의 시장가는 Y=0.8ETH

그렇기 때문에 세개의 NFT를 구매하기 위해서는 2.7ETH를 예치해야합니다.

Exponential Curve

Exponential Curve는 다음과 같은 식으로 표시될 수 있습니다.

Y = b*(1+δ)^X (b>0)

위와 같은 함수식에서 NFT가 구매되거나 판매될때(X) 일정 배율만큼(m) 증가/감소해 시장가격이(Y) 산출됩니다. 예시로 똑같이 δ= 0.1(10%), b=1ETH 라고 가정하고, 10개의 NFT를 판매 하거나 구매하는 곡선을 그려보겠습니다.

* sudoswap UI상으로 영점이 아닌 1부터 시작하는 좌표로 보여주고 있습니다.

Exponential curve of Selling NFT
Exponential curve of Selling NFT

Pool Creator가 NFT 10개를 판매하는 경우 Bonding curve 1개의 NFT가 판매될때마다 판매가가 이전 가격의 10%씩 증가하게 됩니다.

X=0일때 NFT의 시장가는 Y=1ETH
X=1일때 NFT의 시장가는 Y=1.1ETH
X=2일때 NFT의 시장가는 Y=1.21ETH

세개를 구매하는 경우 3.21 ETH가 필요하게 되는거죠.

Exponential curve of Buying NFT
Exponential curve of Buying NFT

Pool Creator가 NFT 10개를 구매 경우 Bonding curve 1개의 NFT가 구매될때마다 구매가가 이전 가격의 10%씩 감소하게 됩니다.

X=0일때 NFT의 시장가는 Y=1ETH
X=1일때 NFT의 시장가는 Y=0.9ETH
X=2일때 NFT의 시장가는 Y=0.81ETH

그렇기 때문에 세개의 NFT를 구매하기 위해서는 2.71ETH를 예치해야합니다.

Understanding sudoswap AMM

sudoswap은 위에 설명한 두개의 Bonding Curve를 활용해 3가지 풀을 생성할 수 있습니다. sudoswap은 Bonding Curve 마다 다른 값을 적용해 풀을 만들 수 있기 때문에, 하나의 유동성 풀에 LP를 예치하는 유니스왑가 다르게, 개개인별로 독립적인 풀을 생성할 수 있습니다.

  • Buy NFTs with tokens : 특정 개수의 NFT를 살 수 있는 bonding curve 생성
  • Sell NFTs for tokens : 특정 개수의 NFT를 판매하는 bonding curve 생성
  • Do both and earn trading fees : NFT와 ETH를 예치해, Buy, Sell Curve 생성 후 트레이딩피 수취
3 types of pool
3 types of pool

Buy NFTs with tokens, Sell NFTs with tokens

두가지 케이스는 Linear, Exponential Bonding Curve를 설명하면서 충분히 설명했기 때문에 UI로만 간략하게 설명하겠습니다.

  1. 판매, 구매할 NFT설정
  2. 예치 & 수취할 통화 설정 (현재는 ETH만 지원)
  3. Starting Price, curve type, delta, number of NFTs 4가지 값 설정
  4. 트랜잭션 사인 (처음 등록하는 NFT로 풀을 생성하는 경우 Approve => Create pool 두번 서명)
  5. 풀 생성 완료
3. Starting Price, curve type, delta, number of NFTs 4가지 값 설정
3. Starting Price, curve type, delta, number of NFTs 4가지 값 설정
4. 트랜잭션 사인 (처음 등록하는 NFT로 풀을 생성하는 경우 Approve => Create pool 두번 서명)
4. 트랜잭션 사인 (처음 등록하는 NFT로 풀을 생성하는 경우 Approve => Create pool 두번 서명)

풀에 넣을 NFT를 넣을 수 있는데, sudoswap은 같은 콜랙션의 NFT를 모두 동일하게 보기 때문에 rarity가 높은 NFT를 넣지 않도록 주의해주시기 바랍니다.

풀이 생성된 이후 본인의 풀에 있는 NFT를 추가 예치하거나 뺄 수 있고, Starting Price, delta를 자유롭게 변경할 수 있습니다. 다만 Bonding Curve 타입은 변경하지 못합니다.

Do both and earn trading fees

1편에서 언급했듯이 sudoswap을 활용해 Creator fee와 비슷한 효과를 낼 수 있다고 이야기했는데요, sudoswap에서는 동일한 공식의 buy, sell curve를 동시에 만들어 수수료를(Fee amount) 수취할 수 있습니다.

여기서 Fee amount라는 개념이 등장합니다. NFT가 swap 될때마다 트레이딩 피를 받을 수 있다는 뜻입니다. 또한 이렇게 수취된 수수료는 pool에 쌓이게 됩니다.

Do both and earn trading fees
Do both and earn trading fees

Fee amount 10%, Starting Price 1ETH, delta 10%로 설정하고 곡선을 그려보면 좀 이상한점이 보입니다. Pool creator가 NFT를 판매하는 경우 1ETH부터 시작하지만, NFT를 구매하는경우 0.751ETH에서 시작합니다. 왜 이런 매수, 매도 시작가를 다르게 했을까요? 0.751이라는 숫자는 어떻게 나온걸까요?

왜 이런 매수, 매도 시작가를 다르게 했을까?

먼저 위에 언급한 Fee amount 10%, Starting Price 1ETH, delta 10%의 조건에서 10개의 NFT를 사고 파는 Trading 풀을 만들기 위해서는 10개 NFT와 6.145ETH가 필요하며, 매수 매도 시작가가 같은 경우 다음과 같은 buy, sell 곡선이 그려집니다.

그리고 각 곡선은 NFT 공급량이 증가 감소함에 따라 다음과 같은 법칙으로 이동해 가격을 산출합니다.

  • NFT 하나가 늘어나면 영점 기준으로 Buy 곡선은 +1, Sell 곡선은 -1 이동합니다.
  • NFT 하나가 줄어들면 영점 기준으로 Buy 곡선은 -1, Sell 곡선은 +1 이동합니다.
Buy&Sell Bonding curve w/o spread
Buy&Sell Bonding curve w/o spread

즉 판매가와 구매가가 NFT 공급량에 따라 동일하게 움직여 LP가 손해를 보게됩니다. 그래서 Trading 풀을 만들 유인이 떨어지게되죠.

  • 10 NFT, 6.145ETH를 예치해 풀을 생성합니다.
  • 누군가가 저에게 NFT를 판매하고, 1이더를 빼갔습니다. 풀에는 11개의 NFT와 5.145ETH가 남이있습니다. 그리고 점은 Buy curve 0 → 1, Sell curve 0 → -1 로 움직여 구매가와 판매가가 다음과 같이 형성됩니다.
    • Buy & Sell : 0.909
  • 운좋게 누군가가 구매한다고 가정해도 0.909ETH를 얻고 풀에는 다시 10개의 NFT와 6.054ETH가 남아있음. Buy 곡선은 X축 1 → 0로 움직여 이때 구매가와 판매가는 다음과 같이 형성됩니다.
    • Buy & Sell : 1
  • 영점으로 돌아왔음에도 풀에 남아있는 총 금액은 6.054ETH가 남아있어 -0.091 ETH의 손해가 발생합니다.

그래서 sudoswap은 판매가와 구매가 사이에 스프레드를 둬 이러한 손해를 방지하게 설계되어있습니다.

어떻게 0.751이란 숫자가 나왔을까?

먼저 어떻게 0.751이란 숫자가 나왔는지 계산해봅시다.

Fee %는 NFT를 판매하거나 구매하는 경우 가격에 반영되는 승수로 적용됩니다. sudoswap NFT를 판매 시작가를 1ETH로 지정했다면 NFT를 판매하는 Sell Bonding Curve의 X=-2 지점을 기본 구매가 설정합니다. 계산해보면 1/1.1^2 = 0.826입니다. 그리고 기본 구매가에 delta값을 승수로 한번더 조정해 0.826/1.1 = 0.751라는 판매 시작가를 설정해, 판매가와 구매가 사이의 스프레드를 만들었습니다.

그렇게 도출된 그레프는 다음과 같습니다.

Buy & Sell Bonding curve w. spread
Buy & Sell Bonding curve w. spread
  • 10 NFT, 5.078ETH를 예치해 풀을 생성합니다.
  • 누군가가 저에게 NFT를 판매하고, 0.751ETH를 빼갔습니다. 풀에는 11개의 NFT와 4.327ETH가 들어있습니다. 그리고 점은 Buy curve 0 → 1, Sell curve 0 → -1 로 움직여 구매가와 판매가는 다음과 같이 형성됩니다.
    • Buy : 0.683
    • Sell : 0.909
  • 누군가가 구매하면 0.909ETH를 얻고 풀에는 10개의 NFT와 5.236ETH가 남아있음. Buy 곡선은 X축 -1 → 0로 움직여 이때 구매가와 판매가는 다음과 같이 형성됩니다.
    • Buy : 0.751
    • Sell : 1
  • 영점으로 돌아온 후 풀에 남아있는 총 금액은 5.236ETH가 남아있어 0.158ETH의 이득이 발생합니다.
Buy & Sell Bonding curve w. inverted buying curve
Buy & Sell Bonding curve w. inverted buying curve

시각적 편의성을 위해 Buy Curve를 뒤집어보면 스프레드를 만들어둔 이유를 조금더 이해를 쉽게할 수 있죠. Fee와 delta를 조절해 스프레드를 만들고, 거래가 될수록 이득을 볼 수 있는 구조를 제안함으로써 LP들이 적극적으로 풀을 생성할 인센티브를 얻게됩니다.

직접 Trading fee, delta를 조절해 그레프의 변화를 시각적으로 확인해보면 이해가 쉬워질 것 입니다.
또한 AMM에서 중요한 슬리피지 또한 설정할 수 있습니다. 이를 통해 높은 delta 값을 가진 풀에서 거래하면서 손해를 볼 수 있는 상황을 막을 수 있습니다.

Listing VS Selling

sudoswap은 Listing 과 Selling을 구분하고 있습니다.

  • Listing은 Opensea, Looks rare 같은 Open marketplace처럼 지정가 리스팅을 지원해줍니다. 누군가가 해당 NFT를 구매해야지만 거래가 이루어집니다.
  • Selling은 다른 사용자가 만든 AMM풀에 즉시 판매해 거래가 이루어집니다.

Buying NFTs in sudoswap

sudoswap은 기본적으로 gem.xyz와 같은 UI를 보유하고 있습니다. Listing된 NFT를 거래할땐, 원하는 NFT를 선택해 거래하면됩니다.

AMM풀에서 거래하고 싶은 경우는, 탭에 Pools버튼을 클릭해 개별 풀들을 살펴봅니다. 각 풀들의 fee, delta, NFT를 확인하고 선택해 구매할 수 있습니다.

Listing과 AMM풀에 동시에 등록 할 수 있어서 잘 찾아보시면 AMM풀에서 훨씬 싸게 구매할 수 있는 매물들이 있습니다!

Conclusion

sudoswap을 공부하며 찾은 개선 사항은 다음과 같았습니다.

  1. Bonding curve 개념은 어렵습니다. LP들이 해당 개념을 이해해 수치를 조정하고, 일반 NFT콜랙터, 투자자들이 AMM을 활용해 액티브하게 트레이딩할 수 있을지 의문입니다. 더 쉬운 가이드가 필요합니다.
  2. UI가 모호하고 불편합니다. Pool에서 원하는 NFT를 구매하려면 상단 구석에 있는 Direct pool swap을 눌러야하거나, 지금 구매하는게 리스팅된건지, AMM 풀에 더 저렴한 동일 NFT가 있는지 알 수 없습니다.

그러나 어렵고 불편함에도 불구하고 sudoswap은 매력적입니다.

특히 NFT의 고질적인 문제인 유동성을 Bonding curve를 활용해 해결하려 한다는점이 매력적입니다. Bonding curve는 외부 오라클이 아닌 자체 함수식을 통해 가격이 산출되도록, 오롯이 수요와 공급에 따라 가격을 도출할 수 있는 좋은 툴입니다.

그리고 sudoswap은 Bonding curve 값들을 업데이트할 수 있는 기능을 추가해, 외부 시장상황에 따라 LP들이 주도적으로 시장 상황에 따라 대응할 수 있게 만들었다는 점에서 가장 창의적으로 문제를 해결하고 있다고 생각합니다.

이른 기능 뿐만 아니라 낮은 수수료, Creator fee대신 Trading fee라는 개념을 도입해 sudoswap에 기여한 LP들에게 보상이 돌아가도록 만든, OTC부터 일관되게 유지된 거래에 집중할 수 있는 제품을 만들고 있는 철학, sudoswap AMM의 유동성이 늘어나면서 유동성이 담보된 신뢰도 높은 FP를 제공해줄 수 있다는 가능성 또한 sudoswap의 성장 가능성과 앞으로 NFT의 씬체인저가 될 수 있을 것이라 생각하게 만드는 포인트입니다.

마지막으로 Bonding curve를 활용한 세일, 프로젝트단의 LP인센티브 (특히 P2E), Creator owned liquidity pool 같이 sudoswap의 기능을 활용해 재밌는 상상을 할 수 있어 재밌었습니다.

다음번에 더 좋은 글로 돌아오겠습니다.
감사합니다.

Subscribe to wisekim.eth
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.