Slippage và price impact, giải thích dễ hiểu

·7 phút đọc·Bởi SSP Editorial Team
Sơ đồ so sánh giá báo của một swap với giá khớp cuối cùng sau price impact và slippage.

Slippage và price impact, giải thích dễ hiểu

Bạn thấy một báo giá: 1 ETH đổi 3.200 USDC. Bạn xác nhận swap. Vài giây sau, giao dịch hoàn tất và bạn nhận về 3.187 USDC thay vì 3.200 như mong đợi. Không ai hack, không ai đổi luật giữa chừng — bạn chỉ vừa đối mặt với hai cơ chế bị hiểu sai nhiều nhất trong giao dịch on-chain: price impact (mức ảnh hưởng giá) và slippage (chênh lệch giữa giá kỳ vọng và giá khớp).

Bài viết này bóc tách cả hai dành cho người dùng tự lưu ký. Đọc xong, bạn sẽ hiểu vì sao con số bạn thấy không phải lúc nào cũng là con số bạn nhận, cài đặt "slippage tolerance" thật ra đang làm gì, và nên nghĩ về nó ra sao khi bạn swap từ SSP Wallet hoặc từ một dApp.

Vì sao một báo giá chỉ là báo giá

Đa số các swap on-chain không đi qua sổ lệnh truyền thống. Chúng đi qua Automated Market Maker (AMM): một smart contract giữ hai tài sản trong một liquidity pool và định giá chúng bằng một công thức. Công thức phổ biến nhất là quy tắc tích không đổi, thường được viết là x * y = k:

  • x là lượng token A trong pool.
  • y là lượng token B.
  • k là hằng số mà pool cố gắng giữ nguyên.

Khi bạn đổi token A lấy token B, bạn làm lệch tỉ lệ giữa xy. Pool tự động định giá lại sao cho k xấp xỉ không đổi. Việc định giá lại đó chính là nguồn gốc của price impact.

Báo giá là ảnh chụp tức thời trạng thái của pool ở một thời điểm. Khi giao dịch của bạn được mine, pool thường đã thay đổi: các swap khác đã chạm vào nó, các block đã trôi qua, và chính giao dịch của bạn cũng sắp đẩy nó thêm một chút. Con số bạn nhìn thấy không nói dối — nó chỉ không phải một lời hứa.

Price impact: cái giá do chính giao dịch của bạn tạo ra

Price impact là thay đổi giá chỉ do giao dịch của bạn gây ra, giả định mọi thứ khác không đổi giữa lúc báo giá và lúc thực thi. Nó mang tính cơ học, dự đoán được, và phụ thuộc hoàn toàn vào độ sâu của pool.

Một thí nghiệm tưởng tượng. Hãy hình dung một pool ETH/USDC có 100 ETH và 320.000 USDC. Giá biên rơi vào khoảng 3.200 USDC mỗi ETH. Bây giờ:

  • Swap 1 ETH vào. Bạn lấy đi một mẩu rất nhỏ trong dự trữ của pool. Giá mới chỉ dịch một sợi tóc. Bạn nhận được gần 3.200 USDC, trừ phí pool. Price impact rất nhỏ — có thể chỉ vài điểm cơ bản.
  • Swap 10 ETH vào. Bạn đã làm tỉ lệ thay đổi đáng kể. Mức giá trung bình thực tế bạn nhận thấp hơn 3.200 USDC mỗi ETH khá nhiều. Price impact đã lên tới vài phần trăm.
  • Swap 50 ETH vào. Bạn tiêu thụ một phần ba thanh khoản của pool. Giá khớp sụp đổ. Price impact có thể lên tới hàng chục phần trăm.

Bài học: giao dịch càng lớn so với độ sâu của pool thì price impact càng lớn. Tăng giao dịch lên gấp đôi sẽ làm chi phí tăng nhiều hơn gấp đôi, vì mỗi đơn vị tiếp theo lại va vào một đường cong tệ hơn. Ví và aggregator thường hiển thị nó dưới dạng phần trăm trên màn hình swap. Hãy coi mọi giá trị vượt vài phần trăm là một cảnh báo, không phải chú thích cuối trang.

Price impact không phải khoản phí trả cho ai đó cụ thể — nó là cái giá của việc tự trở thành đối tác giao dịch của chính mình trên một đường cong.

Slippage: khoảng cách giữa báo giá và giá khớp

Slippage là chênh lệch giữa giá bạn kỳ vọng và giá mà swap của bạn thực sự khớp. Nó bao gồm price impact, nhưng cũng bao gồm tất cả những gì diễn ra giữa thời điểm bạn nhìn thấy báo giá và thời điểm giao dịch lên on-chain:

  • Các giao dịch khác đập vào cùng pool. Bất kỳ ai swap trong cùng block, hoặc trong các block giữa lúc bạn xem báo giá và lúc bạn xác nhận, đều làm trạng thái pool dịch chuyển.
  • Khoảng thời gian giữa báo giá và thực thi. Chỉ vài giây cũng đủ để pool trôi, nhất là với các tài sản biến động mạnh.
  • Price impact của chính bạn. Như đã nói: giao dịch tự nó dịch chuyển giá mà nó sắp khớp vào.
  • MEV. Các searcher có thể "kẹp" một swap đang chờ xử lý bằng cách giao dịch ngay trước và ngay sau nó. Chúng tôi đào sâu trong MEV, frontrunning và sandwich attack.

Price impact là thứ bạn có thể mô hình hoá. Slippage là thứ thực sự đã xảy ra.

Cài đặt slippage tolerance

Vì mạng không thể đảm bảo giá chính xác giữa báo giá và thực thi, các giao diện swap cho bạn đặt một slippage tolerance: mức lệch tối đa chấp nhận được so với giá báo. Nếu giá khớp thực tế tệ hơn báo giá - tolerance, smart contract sẽ revert swap.

Nghe có vẻ gọn gàng, nhưng đây là một sự đánh đổi thực sự:

  • Quá thấp. Giao dịch bị revert vì pool đã trôi vượt giới hạn của bạn. Revert vẫn tốn gas — bạn trả tiền cho lần thử thất bại và đi về tay trắng. Trong những ngày sôi động với tài sản biến động, bạn có thể chồng vài swap thất bại trước khi có một cái lọt.
  • Quá cao. Giao dịch gần như chắc chắn lọt, kể cả khi các bot MEV đã cố tình đẩy giá ngược lại bạn. 5% tolerance trên một token phổ biến là đèn xanh cho sandwich attack. Bạn sẽ nhận mức giá tệ nhất mà tolerance của bạn cho phép.

Không có con số nào đúng cho mọi trường hợp. 0,1% tolerance trên một cặp stablecoin có thanh khoản sâu là hợp lý. Cũng con số đó trên một token mỏng giữa lúc tin nóng, gần như chắc chắn sẽ revert. Cách làm thực tế là bắt đầu nhỏ rồi điều chỉnh: nếu swap revert, nâng tolerance một chút; nếu bạn đang bị sandwich, hạ nó xuống và cân nhắc đi qua venue khác hoặc cắt thành nhiều phần nhỏ hơn.

Mọi chuyện diễn ra thế nào trong SSP

SSP cho bạn hai cách swap, và mỗi cách phơi bạn ra slippage theo cách khác nhau:

  • Aggregator tích hợp trong ví (giao diện buy/sell/swap bên trong SSP). Aggregator chọn một tuyến qua nhiều venue và đưa cho bạn một báo giá đầu ra duy nhất. Phần lớn slippage ở cấp tuyến được xử lý bên trong luồng này; bạn xác nhận hay huỷ dựa trên con số cuối cùng nhìn thấy. Chúng tôi đã đi qua trải nghiệm tổng thể của các luồng này trong swap crypto từ SSP.
  • Swap qua dApp bằng WalletConnect. Khi bạn kết nối SSP trực tiếp đến một DEX, giao diện swap thuộc về dApp — bao gồm cả cài đặt slippage tolerance. Bạn đặt con số, bạn chịu hậu quả. SSP chỉ đồng ký giao dịch mà dApp yêu cầu, sau khi bạn phê duyệt trên extension và xác nhận trên SSP Key. Hãy đọc kỹ màn hình swap của dApp.

Bản chất multisig 2-trên-2 của SSP không thay đổi toán học AMM, nhưng nó nghĩa là mọi swap đều cần xác nhận trên hai thiết bị. Việc này thêm vài giây giữa "tôi vừa bấm xác nhận" và "tx đã rơi vào mempool" — thêm một lý do nữa khiến báo giá và giá khớp cuối không phải lúc nào cũng trùng nhau.

Lời khuyên thực tế

Một checklist ngắn vẫn đứng vững trên đa số chain và DEX:

  1. Thử nhỏ trước. Trước khi swap một vị thế lớn, gửi một khoản nhỏ qua đúng tuyến đó. Nếu price impact đã đáng lo trên giao dịch nhỏ, giao dịch lớn sẽ tệ hơn nhiều.
  2. Theo dõi phần trăm price impact. Nếu ví của bạn hiển thị, hãy coi mọi giá trị vượt 1–2% trên giao dịch cỡ thường là lá cờ đỏ. Aggregator và pool sâu hơn thường giải quyết được.
  3. Nhìn vào chi phí cuối, không chỉ tỉ giá. Phí gas trên Ethereum là chi phí thêm vào trên price impact và slippage. Cơ chế phí được mô tả trong phí gas trên Ethereum cho người dùng tự lưu ký. EIP-1559 nghĩa là phí bạn trả có thể nhúc nhích giữa lúc bạn ký và lúc block hạ cánh — thêm một lý do nữa cho "giá nhảy trong lúc tôi đang xác nhận".
  4. Ưu tiên pool sâu. Thanh khoản là bạn của price impact. Một cặp có 50 triệu USD thanh khoản sẽ thấm giao dịch của bạn tốt hơn nhiều so với một cặp 500 nghìn USD.
  5. Đặt tolerance có chủ đích. Đừng nhắm mắt chấp nhận giá trị mặc định. Đừng vặn lên 5% chỉ để cho qua một swap đang fail — sự thất bại đó thường đang nói với bạn điều gì đó.
  6. Nếu bị sandwich liên tục, đổi tuyến. Các mảnh nhỏ hơn, một aggregator khác, hoặc một RPC có nhận thức MEV có thể thay đổi kết quả.

Điểm chính

Price impact là toán học không thể chối bỏ của việc giao dịch với một pool: nó tăng theo kích thước giao dịch và giảm theo thanh khoản. Slippage là thực tế bừa bộn của việc thực thi trong một mempool công khai, nơi các giao dịch khác, thời gian và chính giao dịch của bạn đều đẩy giá. Slippage tolerance của bạn là cần gạt quyết định tx của bạn dễ revert hơn hay dễ bị sandwich hơn. Hãy dùng nó có chủ đích.

Khi bạn swap trong SSP, cùng một quy luật vật lý vận hành dù bạn đi qua aggregator tích hợp hay qua một dApp bằng WalletConnect. Khác biệt nằm ở chỗ ai đặt tolerance — và một khi bạn hiểu mình đang đặt gì, bạn có thể nắm cả hai lựa chọn mà không bất ngờ.

Đọc thêm

Chia sẻ bài viết này

Bài viết liên quan