슬리피지와 price impact, 쉽게 풀어 보기

·7분 읽기·작성자: SSP Editorial Team
swap의 견적 가격과 price impact, 슬리피지를 거친 후의 실제 체결 가격을 대비한 다이어그램.

슬리피지와 price impact, 쉽게 풀어 보기

화면에 견적이 뜬다. 1 ETH = 3,200 USDC. 당신은 swap을 확정한다. 몇 초 뒤 트랜잭션이 마무리되고, 손에 들어온 건 3,187 USDC다. 해킹을 당한 것도, 누가 규칙을 바꾼 것도 아니다. 당신은 그저 온체인 거래에서 가장 오해받는 두 가지 메커니즘, price impact(가격 영향)와 슬리피지를 만났을 뿐이다.

이 글은 두 개념을 자기수탁(self-custody) 사용자 관점에서 풀어낸다. 끝에 가면 당신이 본 숫자와 실제로 받는 숫자가 왜 늘 일치하지 않는지, "슬리피지 허용치(slippage tolerance)" 설정이 진짜로 무엇을 하는지, 그리고 SSP Wallet이나 dApp에서 swap을 할 때 그걸 어떻게 바라봐야 하는지를 알 수 있을 것이다.

견적이 그저 견적인 이유

대부분의 온체인 swap은 전통적인 호가창을 거치지 않는다. Automated Market Maker(AMM)를 거친다. AMM은 두 자산을 liquidity pool에 담아 두고 수식으로 가격을 매기는 smart contract다. 가장 흔한 수식은 상수곱(constant product) 규칙이고, 보통 x * y = k로 쓴다.

  • x는 풀 안의 token A 수량.
  • y는 token B 수량.
  • k는 풀이 유지하려고 하는 상수.

token A를 token B로 swap하면 xy의 비율이 깨진다. 풀은 k가 대체로 일정하게 유지되도록 자동으로 재가격(re-pricing)한다. 이 재가격이 바로 price impact의 원천이다.

견적은 조금 전의 풀 상태를 찍어 놓은 사진이다. 당신의 트랜잭션이 채굴될 무렵 풀은 이미 바뀌어 있는 경우가 많다. 다른 swap들이 부딪혔고, 블록이 흘러갔고, 당신 자신의 거래마저 풀을 한 번 더 밀어내려 한다. 당신이 본 숫자는 정직했다. 다만 그것은 약속이 아니었다.

price impact: 당신의 거래가 스스로에게 매기는 비용

price impact는 견적과 실행 사이에 다른 변화가 없다고 가정했을 때, 오직 당신의 거래만으로 발생하는 가격 변화다. 기계적이고 예측 가능하며, 전적으로 풀의 깊이에 달려 있다.

사고 실험. 100 ETH와 320,000 USDC가 들어 있는 ETH/USDC pool을 상상해 보자. 한계 가격은 대략 1 ETH = 3,200 USDC. 자, 이제:

  • 1 ETH를 swap한다. 풀의 준비금에서 아주 작은 조각만 가져온다. 새 가격은 머리카락 한 가닥만큼 움직인다. 풀 수수료를 빼면 3,200 USDC에 가까운 수준을 받는다. price impact는 작다 — 베이시스 포인트 단위일 수도 있다.
  • 10 ETH를 swap한다. 비율을 의미 있게 움직였다. 실제로 받게 되는 평균 가격은 1 ETH = 3,200 USDC를 한참 밑돈다. price impact는 이미 몇 퍼센트 단위다.
  • 50 ETH를 swap한다. 풀 유동성의 3분의 1을 소모한다. 실행 가격이 무너진다. price impact는 수십 퍼센트에 이를 수 있다.

교훈: 거래 크기가 풀 깊이에 비해 커질수록 price impact도 커진다. 거래를 두 배로 늘리면 비용은 두 배 이상으로 늘어난다. 다음 단위가 점점 더 나쁜 곡선에 부딪히기 때문이다. 지갑과 aggregator는 보통 이 값을 swap 화면에서 퍼센트로 보여 준다. 몇 퍼센트를 넘어가는 숫자는 각주가 아니라 경고로 받아들이는 게 좋다.

price impact는 누구에게 따로 지불되는 수수료가 아니다. 곡선을 상대로 스스로의 거래 상대방이 되어 치르는 대가다.

슬리피지: 견적과 체결 사이의 간격

슬리피지는 당신이 기대했던 가격과 swap이 실제로 체결된 가격 사이의 차이다. 슬리피지는 price impact를 포함하지만, 견적을 본 순간부터 트랜잭션이 온체인에 안착하는 순간 사이에 벌어지는 모든 일도 함께 담는다.

  • 같은 풀에 부딪히는 다른 거래. 같은 블록 안에서, 혹은 당신의 견적과 확인 사이의 블록들에서 swap을 하는 누군가는 풀의 상태를 움직인다.
  • 견적과 실행 사이의 시간. 변동성이 큰 자산에서는 몇 초만으로도 풀이 떠밀린다.
  • 당신 자신의 price impact. 위에서 말한 그대로, 거래 자체가 체결될 가격을 밀어낸다.
  • MEV. searcher는 대기 중인 swap 직전과 직후에 거래를 끼워 넣어 샌드위치로 만들 수 있다. 이는 MEV, 프런트러닝, 그리고 샌드위치 공격에서 자세히 다뤘다.

price impact는 모델링할 수 있는 것이다. 슬리피지는 결국 일어난 일 그 자체다.

슬리피지 허용치 설정

네트워크는 견적과 실행 사이의 정확한 가격을 보장할 수 없기 때문에, swap 인터페이스는 슬리피지 허용치, 즉 견적 가격에서 최대로 용인 가능한 이탈 폭을 설정하도록 한다. 실제 체결이 견적 - 허용치보다 나빠지면 smart contract는 swap을 revert한다.

깔끔해 보이지만 이건 진짜로 균형을 잡는 일이다.

  • 너무 낮을 때. 풀이 한도를 넘어 움직이면 트랜잭션은 revert된다. revert에도 gas는 든다. 실패한 시도에 비용을 지불하고 빈손으로 돌아오게 된다. 변동성이 큰 자산이 거칠게 움직이는 날에는 한 건이 통과되기 전까지 실패한 swap을 여러 번 쌓을 수도 있다.
  • 너무 높을 때. 어떤 상황에서도 거의 다 통과된다. MEV 봇이 일부러 가격을 당신에게 불리하게 밀어 놓은 경우까지 포함해서. 인기 토큰에서 5% 허용치는 샌드위치 공격에 켜진 청신호와 같다. 허용치가 허락하는 가장 나쁜 가격을 받게 된다.

보편적으로 옳은 숫자는 없다. 깊은 스테이블코인 페어에서 0.1% 허용치는 합리적이다. 같은 숫자를 뉴스가 막 터진 얇은 토큰에 쓰면 거의 확실한 revert다. 실용적인 움직임은 작게 시작해서 조정하는 것이다. swap이 revert되면 허용치를 살짝 올리고, 샌드위치를 당하고 있다면 낮추고, 다른 venue로 라우팅하거나 더 작은 단위로 나누는 것을 검토하라.

SSP에서 이건 어떻게 보이는가

SSP는 swap에 두 가지 길을 제공하고, 각각 슬리피지에 노출되는 방식이 다르다.

  • 지갑 내장 aggregator (SSP 안의 buy/sell/swap 화면). aggregator는 여러 venue를 가로질러 경로를 고르고, 최종 출력 견적 한 줄을 보여 준다. 경로 단위의 슬리피지는 대부분 이 흐름 안에서 처리되며, 당신은 보이는 최종 숫자를 보고 확인하거나 취소한다. 이 전체 흐름의 UX는 SSP에서 암호자산 swap하기에서 다뤘다.
  • WalletConnect를 통한 dApp swap. SSP를 DEX에 직접 연결하면 swap 화면은 dApp의 것이다. 슬리피지 허용치 설정 역시 그 dApp의 영역이다. 숫자는 당신이 정하고, 결과도 당신이 진다. SSP는 당신이 확장 프로그램에서 승인하고 SSP Key에서 확인한 뒤, dApp이 요청한 트랜잭션을 함께 서명할 뿐이다. dApp의 swap 화면은 꼼꼼히 읽자.

SSP의 2-of-2 multisig 특성은 AMM의 수학을 바꾸지 않지만, 모든 swap이 두 기기에서 확인되어야 한다는 뜻이다. 그래서 "확인 버튼을 눌렀다"와 "tx가 mempool에 떨어졌다" 사이에 몇 초가 더 끼어든다. 견적과 최종 체결가가 늘 일치하지 않는 또 하나의 이유다.

실용적 조언

대부분의 체인과 DEX에서 통하는 짧은 체크리스트.

  1. 먼저 작게 시험한다. 큰 포지션을 swap하기 전에, 같은 경로로 작은 금액을 보내 보자. 작은 거래에서 이미 price impact가 부담스럽다면, 큰 거래는 훨씬 나쁠 것이다.
  2. price impact 퍼센트를 본다. 지갑이 이 수치를 보여 준다면, 일반 크기의 거래에서 1–2%를 넘는 값은 적신호로 보자. aggregator와 더 깊은 pool이 보통 이 문제를 풀어 준다.
  3. 단순한 환율이 아니라 최종 비용을 본다. Ethereum의 gas 수수료는 price impact와 슬리피지 위에 더해지는 비용이다. 수수료의 메커니즘은 자기수탁 사용자를 위한 Ethereum gas 수수료에서 다뤘다. EIP-1559는 당신이 서명한 순간부터 블록이 안착하기까지 사이에 수수료가 움직일 수 있다는 뜻이고, "확인하는 사이에 가격이 변했다"는 느낌의 또 하나의 이유다.
  4. 깊은 pool을 선호하자. 유동성은 price impact의 친구다. 5천만 달러 유동성을 가진 페어는 50만 달러짜리 페어보다 당신의 거래를 훨씬 잘 받아낸다.
  5. 허용치는 의도적으로 설정하자. 기본값을 무작정 받아들이지 말자. 실패한 swap을 어떻게든 통과시키려고 허용치를 5%까지 올리지도 말자. 그 실패가 종종 당신에게 뭔가 말해 주고 있는 거다.
  6. 샌드위치를 반복적으로 당하고 있다면 경로를 바꾸자. 더 작은 조각, 다른 aggregator, MEV를 인식하는 RPC가 결과를 바꿔 줄 수 있다.

결론

price impact는 pool을 상대로 거래할 때 피할 수 없는 수학이다. 거래 크기와 함께 커지고, 유동성과 함께 줄어든다. 슬리피지는 다른 트랜잭션, 시간, 그리고 당신 자신의 거래가 가격을 흔드는 공개 mempool에서 체결된다는 어수선한 현실이다. 슬리피지 허용치는 당신의 tx가 revert될 확률이 높을지, 샌드위치당할 확률이 높을지를 결정하는 레버다. 의도를 갖고 사용하자.

SSP에서 swap할 때, 지갑 내장 aggregator를 거치든 WalletConnect로 dApp을 거치든, 작동하는 물리는 같다. 다른 점은 허용치를 누가 설정하느냐다. 자신이 무엇을 설정하고 있는지 이해하고 있다면, 두 선택지 모두 놀라움 없이 받아들일 수 있다.

더 읽을거리

이 글 공유하기

관련 글