
Slippage ve price impact, açıklandı
Bir teklif görüyorsunuz: 1 ETH karşılığında 3.200 USDC. Swap’i onaylıyorsunuz. Birkaç saniye sonra işlem yerleşiyor ve elinize 3.200 yerine 3.187 USDC geçiyor. Hack yok, kurallar değişmedi — sadece on-chain işlemcilikte en yanlış anlaşılan iki mekanizmayla tanıştınız: price impact (fiyat üzerine etki) ve slippage (gerçekleşme ile teklif arasındaki kayma).
Bu yazı her ikisini de öz-saklamacı kullanıcılar için açıyor. Sonunda gördüğünüz sayının neden her zaman aldığınız sayı olmadığını, "slippage tolerance" ayarının aslında ne yaptığını ve SSP Wallet’tan ya da bir dApp üzerinden swap yaparken bunu nasıl düşünmeniz gerektiğini bileceksiniz.
Bir teklif neden yalnızca bir tekliftir
On-chain swap’ların çoğu klasik bir emir defterinden geçmez. Bir Automated Market Maker (AMM) üzerinden geçer: iki varlığı bir liquidity pool’da tutan ve bir formülle fiyatlandıran bir smart contract. En yaygın formül sabit çarpım kuralıdır; genelde x * y = k şeklinde yazılır:
xhavuzdaki A token miktarıdır.yB token miktarıdır.khavuzun korumaya çalıştığı sabittir.
Token A’yı token B ile takas ettiğinizde x ve y’nin oranını dengeden çıkarırsınız. Havuz, k yaklaşık sabit kalsın diye otomatik olarak yeniden fiyatlar. Bu yeniden fiyatlama price impact’in kaynağıdır.
Teklif, havuzun bir an önceki durumunun fotoğrafıdır. İşleminiz blocklandığında havuz çoğunlukla değişmiştir: başka swap’lar değmiştir, blocklar gelmiş geçmiştir, kendi işleminiz de havuzu bir tık daha itecektir. Gördüğünüz sayı dürüsttü. Sadece bir söz değildi.
Price impact: kendi işleminizin maliyeti
Price impact, teklif ile yürütme arasında başka hiçbir şey değişmediği varsayımıyla, yalnızca sizin işleminizden kaynaklanan fiyat değişimidir. Mekanik, öngörülebilir ve tamamen havuz derinliğinin bir fonksiyonudur.
Bir düşünce deneyi. 100 ETH ve 320.000 USDC olan bir ETH/USDC pool hayal edin. Marjinal fiyat yaklaşık 3.200 USDC/ETH. Şimdi:
- 1 ETH gönderin. Havuzun rezervlerinin minicik bir dilimini alırsınız. Yeni fiyat saç teli kadar kayar. Havuz ücreti düşüldükten sonra 3.200 USDC’ye yakın bir şey alırsınız. Price impact küçük — belki birkaç baz puan.
- 10 ETH gönderin. Oranı kayda değer biçimde oynattınız. Gerçekleşen ortalama fiyat 3.200 USDC/ETH’in epey altında kalır. Price impact artık yüzde birkaç puandır.
- 50 ETH gönderin. Havuz likiditesinin üçte birini tüketiyorsunuz. Yürütme fiyatı çöker. Price impact yüzde onlara ulaşabilir.
Ders: havuz derinliğine kıyasla daha büyük işlem, daha büyük price impact demektir. İşlemi ikiye katlamak maliyeti ikiye katlamaktan fazla artırır, çünkü her bir sonraki birim daha kötü bir eğriye çarpar. Cüzdanlar ve aggregator’lar bunu genellikle swap ekranında yüzde olarak gösterir. Birkaç puanı aşan herhangi bir değeri dipnot değil, uyarı olarak görün.
Price impact belirli birine ödenen bir ücret değildir — bir eğri karşısında kendi karşı tarafınız olmanın maliyetidir.
Slippage: teklif ile gerçekleşme arasındaki fark
Slippage, beklediğiniz fiyat ile swap’inizin gerçekten yürütüldüğü fiyat arasındaki farktır. Price impact’i içerir; ama teklifi gördüğünüz an ile işlemin on-chain’e indiği an arasındaki her şeyi de içerir:
- Aynı havuza dokunan başka işlemler. Aynı blokta ya da sizin teklifiniz ile onayınızın arasındaki bloklarda swap yapan herkes havuz durumunu değiştirir.
- Teklif ile yürütme arasındaki zaman. Özellikle volatil varlıklarda birkaç saniye bile havuzun kaymasına yeter.
- Kendi price impact’iniz. Yukarıda olduğu gibi — işlem fiyatı kendisi de iter.
- MEV. Searcher’lar, bekleyen bir swap’i hemen öncesi ve hemen sonrasında işlem yaparak sandviç edebilir. Bunu MEV, frontrunning ve sandviç saldırıları yazısında ele aldık.
Price impact modelleyebileceğiniz bir şeydir. Slippage ise gerçekte olanın özeti.
Slippage tolerance ayarı
Ağ teklif ile yürütme arasındaki tam fiyatı garanti edemediği için swap arayüzleri size bir slippage tolerance belirleme imkânı verir: teklif fiyatına göre kabul ettiğiniz maksimum sapma. Gerçek gerçekleşme teklif - tolerance’tan daha kötü olursa smart contract swap’i geri çevirir.
Kulağa düzenli geliyor ama gerçek bir takas:
- Çok düşük. İşlem, havuz limitinizin ötesine kaydığı için geri döner. Geri dönen işlem yine gas’a mal olur — başarısız denemenin parasını ödersiniz ve elinizde hiçbir şey kalmaz. Volatil varlıkların hareketli günlerinde, bir tane geçene kadar birkaç başarısız swap üst üste birikebilir.
- Çok yüksek. İşlem neredeyse her durumda iniş yapar, MEV botlarının fiyatı kasıtlı olarak aleyhinize ittiği durumlar da dahil. Popüler bir token’da %5 tolerance, sandviç saldırıları için yeşil ışıktır. Tolerance’ınızın izin verdiği en kötü fiyatı alırsınız.
Evrensel bir doğru sayı yok. Derin bir stablecoin çiftinde %0,1 tolerance makuldür. Aynı sayı, haber akışında ince bir token’da garanti reverttir. Pragmatik hareket küçükten başlayıp ayarlamaktır: swap geri dönüyorsa tolerance’ı bir tık yükseltin; sandviç yiyorsanız düşürün ve farklı bir venue ya da daha küçük parçalar üzerinden yönlendirmeyi düşünün.
Bu SSP’de nasıl görünüyor
SSP swap için iki yol verir ve her biri sizi slippage’a farklı biçimlerde maruz bırakır:
- Cüzdan içi aggregator (SSP içindeki buy/sell/swap yüzeyi). Aggregator, venue’lar arasında bir rota seçer ve size tek bir nihai çıkış teklifi sunar. Rota düzeyindeki slippage’in çoğu bu akışın içinde yönetilir; gördüğünüz nihai sayıya bakarak onaylar ya da iptal edersiniz. Bu akışların genel UX’ini SSP üzerinden kripto swap yapmak yazısında işledik.
- WalletConnect ile dApp üzerinden swap. SSP’yi doğrudan bir DEX’e bağladığınızda swap arayüzü dApp’in kontrolündedir — slippage tolerance ayarı da dahil. Sayıyı siz koyarsınız, sonucuyla siz yaşarsınız. SSP, uzantıda onayladığınız ve SSP Key’de doğruladıktan sonra, dApp’in istediği işlemi yalnızca birlikte imzalar. dApp’in swap ekranını dikkatle okuyun.
SSP’nin 2-of-2 multisig yapısı AMM matematiğini değiştirmez ama her swap’in iki cihazda onaylanmasını gerektirir. Bu da "onayla’ya bastım" ile "tx mempool’a düştü" arasına birkaç saniye ekler — teklif ve nihai gerçekleşmenin her zaman çakışmamasının bir başka sebebi.
Pratik tavsiyeler
Çoğu chain ve DEX’te tutan kısa bir kontrol listesi:
- Önce küçük deneyin. Büyük bir pozisyonu swap etmeden önce, aynı rotadan ufak bir miktar gönderin. Price impact zaten küçükte tedirgin ediciyse, büyükte çok daha kötü olacaktır.
- Price impact yüzdesini izleyin. Cüzdanınız gösteriyorsa normal boyutlu işlemler için %1–2’nin üzerini kırmızı bayrak olarak görün. Aggregator’lar ve daha derin pool’lar bunu genelde çözer.
- Sadece kuru değil, nihai maliyete bakın. Ethereum’da gas ücretleri, price impact ve slippage’in üzerine eklenen ayrı bir maliyettir. Ücret mekaniğini öz-saklamacılar için Ethereum gas ücretleri yazısında işledik. EIP-1559, ödediğiniz ücretin imzalamanız ile bloğun düşmesi arasında değişebileceği anlamına gelir — "ben onaylarken fiyat kaydı" duygusunun bir başka sebebi.
- Derin pool’ları tercih edin. Likidite, price impact’in dostudur. 50M$ likiditesi olan bir çift, 500k$ likiditeli bir çiftten çok daha iyi soğurur.
- Tolerance’ı bilinçli ayarlayın. Varsayılanı körü körüne kabul etmeyin. Başarısız bir swap geçsin diye %5’e fırlatmayın — o başarısızlık çoğu zaman size bir şey söylüyordur.
- Üst üste sandviç yiyorsanız rotayı değiştirin. Daha küçük parçalar, başka bir aggregator ya da MEV’den haberdar bir RPC sonucu değiştirebilir.
Toparlarsak
Price impact, bir havuza karşı işlem yapmanın kaçınılmaz matematiğidir: işlem boyutuyla büyür, likiditeyle küçülür. Slippage, başkalarının işlemleri, zamanın kendisi ve sizin işleminizin fiyatı oynattığı kamuya açık bir mempool’da yürütmenin dağınık gerçeğidir. Slippage tolerance’ınız, tx’inizin revert mi olacağına yoksa sandviç mi yiyeceğine ağırlık veren koldur. Bilinçli kullanın.
SSP’de swap yaptığınızda, ister cüzdan içi aggregator’dan ister WalletConnect üzerinden bir dApp’ten geçin, aynı fizik geçerlidir. Fark tolerance’ı kimin koyduğudur — ve ne koyduğunuzu anladığınızda her iki seçeneği de sürprizsiz kullanabilirsiniz.


