Skip to main content
Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →

Hai khái niệm riêng biệt

Price impactslippage thường bị nhầm lẫn trong giao diện người dùng nhưng chúng đề cập đến những điều khác nhau.
  • Price impact là một thuộc tính xác định của một giao dịch so với trạng thái pool cụ thể. Cho (Δin, reserves), price impact có thể tính toán hoàn toàn trước khi giao dịch được gửi.
  • Slippage là sự khác biệt thực tế giữa giá bạn dự kiến tại thời điểm báo giá và giá bạn thực sự nhận được tại thời điểm thực thi. Nó là hàm của độ trễ, các giao dịch đồng thời và thứ tự đưa vào khối — không phải của toán học pool.
Một báo giá 1% so với một pool không hoạt động có 0% slippage nếu nó được đưa vào khối tiếp theo; 1% đó là price impact. Cùng một báo giá sẽ tệ hơn 0,2% nếu một giao dịch khác tác động đến pool trước — 0,2% bổ sung đó là slippage.

Định nghĩa chính thức

Price impact

Đối với CPMM: impact ≈ 2 · Δin / reserve_in cho các giao dịch nhỏ. Đối với CLMM: phụ thuộc vào số lượng tick mà giao dịch vượt qua; thường phẳng trong phạm vi tick hiện tại, nhảy ở mỗi lần vượt tick.

Slippage thực tế

Slippage luôn không âm (hoặc bằng không), giả sử báo giá là trung thực. Một giá trị âm có nghĩa là bạn nhận được nhiều hơn so với báo giá — có thể xảy ra nếu trạng thái pool thay đổi theo hướng thuận lợi cho bạn giữa báo giá và thực thi.

Tính toán minAmountOutmaxAmountIn

Mỗi swap trên Raydium có một giới hạn bảo vệ slippage:
  • SwapBaseInput(amount_in, min_amount_out) — đầu vào chính xác, giới hạn dưới đầu ra.
  • SwapBaseOutput(max_amount_in, amount_out) — đầu ra chính xác, giới hạn trên đầu vào.
SDK tính toán những điều này cho mỗi sản phẩm — ba sản phẩm không chia sẻ một chữ ký:
Trên cả ba, minAmountOutamountOut × (1 − slippage) và là giới hạn được đưa lên chuỗi; priceImpact được xác định từ trạng thái pool một mình; fee là tổng số tiền được tính. Dung sai slippage là một bộ đệm xung quanh price impact, không phải chính price impact. Dung sai 0,5% có nghĩa là “chấp nhận tối đa 0,5% tệ hơn báo giá của tôi” — độc lập với việc price impact là 0,01% (giao dịch nhỏ) hay 2% (giao dịch lớn). Đối với giao dịch có price impact 2% với dung sai 0,5%, minAmountOut2,5% dưới spot trước giao dịch — về cơ bản là tổng của impact và dung sai.

Dung sai slippage được khuyến nghị

Không có một con số đúng duy nhất; giới hạn đúng phụ thuộc vào:
  1. Tính ổn định của cặp. Các pool stablecoin-stablecoin có thể an toàn sử dụng 0,1%. Các pool cặp meme biến động thường cần 3–5% chỉ để đáp ứng một cách đáng tin cậy.
  2. Kích thước giao dịch. Các giao dịch lớn hơn có price impact lớn hơn, vì vậy dung sai cần phải tỷ lệ với chúng để tránh hoàn nguyên. SDK mặc định auto-slippage xung quanh max(0.5%, 2 × price_impact) vì lý do này.
  3. Độ trễ đưa vào khối. Các giao dịch nằm trong mempool trong nhiều khối sẽ bị tiếp xúc với nhiều giao dịch đồng thời hơn. Các gói Jito và phí ưu tiên giảm điều này.
Quy tắc thực tế (mặc định giao diện Raydium):

Sự khác biệt giữa các loại AMM

CPMM

Price impact mịn và liên tục (dạng đóng 2 · Δin / reserve_in). Dung sai slippage tỷ lệ tuyến tính với kích thước giao dịch.

AMM v4

Cùng toán học đường cong như CPMM. Kể từ khi loại bỏ OpenBook, “reserves hiệu quả” chỉ là hai số dư vault:
  • Báo giá từ số dư vault thô. Không có thành phần trên sách để thêm — Initialize2 viết AmmInfo.open_orders = Pubkey::default() trên mỗi pool mới, và không có hướng dẫn nào đọc tài khoản OpenOrders.
  • Trừ PnL giao thức tích lũy (state_data.need_take_pnl_coin / need_take_pnl_pc) từ số dư vault để nhận được reserves mà bất biến thực sự sử dụng.
  • Không có crank để chạy trước: MonitorStep bây giờ hoảng sợ với unimplemented! và không được gửi.

CLMM

Price impact là từng phần. Trong phạm vi tick hiện tại, impact xấp xỉ tuyến tính trong Δin / L. Vượt qua ranh giới tick có thể thay đổi L rời rạc, gây ra sự nhảy đột ngột trong giá biên. Một giao dịch vượt qua nhiều tick thưa thớt có thể có impact cao hơn nhiều so với quy tắc 2 · Δin / reserve gợi ý. Báo giá CLMM của SDK lặp lại bước swap một cách xác định để trả về amountOut dự kiến chính xác, vì vậy minAmountOut = amountOut · (1 − slippage) là chính xác. Nhưng giá trị trả về priceImpact nên được hiểu là “khoảng cách giữa spot trước giao dịch và spot sau giao dịch”, trên CLMM có thể lớn hơn nhiều so với slippage hiệu quả của swap cho người dùng chỉ quan tâm đến amount_out.

Đường cong LaunchLab

Tương tự như CPMM nhưng với đường cong không đối xứng (bậc hai hoặc reserves ảo). Impact tăng nhanh hơn cho những người mua muộn khi đường cong dốc hơn hướng tới tốt nghiệp. Giao diện người dùng trước khi mua nên cảnh báo khi một lần mua dự kiến sẽ đẩy đường cong hơn ~5% của quote_reserve_target trong một giao dịch.

Xem xét MEV

Trên Solana, trích xuất MEV chống lại swap chủ yếu có dạng sandwich attacks: một bot đặt giao dịch back-run xảy ra sau của bạn, cộng với front-run xảy ra trước, cả hai ở cùng một slot. Giao dịch của bạn được điền ở giá tệ hơn so với nó sẽ có nếu không có sandwich; back-run nắm bắt sự khác biệt. Giảm thiểu:
  1. minAmountOut chặt. Giới hạn slippage tích cực gây ra giao dịch nạn nhân hoàn nguyên nếu bị sandwich nặng, bảo vệ quỹ (nhưng lãng phí gas). Trên Solana đây là thực hành tiêu chuẩn — từ chối rẻ.
  2. Gói Jito. Gửi qua Jito với mẹo gói loại trừ những người trung gian khỏi sắp xếp lại tx của bạn. Các gói hạ cánh dưới dạng các khối nguyên tử.
  3. Phí ưu tiên. Phí ưu tiên cao tăng khả năng giao dịch của bạn hạ cánh trong khối của nhà lãnh đạo hiện tại trước khi một sandwicher có thể phản ứng. Ít mạnh mẽ hơn các gói, tiêu chuẩn hơn.
  4. RPC riêng tư. Gửi qua RPC riêng tư (hoặc qua điểm cuối trực tiếp của trình xác thực) giảm cửa sổ mà một sandwicher mempool có thể quan sát giao dịch của bạn.
SDK của Raydium không gói; các tích hợp thường lớp Jito ở trên. Xem integration-guides/routing-and-mev để biết các mẫu.

Slippage cho các tuyến đường multi-hop

Khi một swap định tuyến qua nhiều pool (ví dụ: USDC → SOL → RAY), dung sai slippage nên được áp dụng cho mỗi hop, không chỉ end-to-end:
Router của SDK áp dụng giới hạn per-hop tự động khi bạn gọi raydium.tradeV2.swap. (Mặt tiền là tradeV2raydium.trade không tồn tại.) Đối với các router tùy chỉnh, sao chép mẫu.

Báo cáo cho người dùng

Quy tắc thực tế cho giao diện người dùng swap tốt:
  • Hiển thị cả hai price impact dự kiến và dung sai slippage riêng biệt.
  • Làm nổi bật khi price impact vượt quá ~2% — cảnh báo “high impact”.
  • Làm nổi bật khi price impact vượt quá dung sai — giao dịch gần như chắc chắn sẽ hoàn nguyên.
  • Đối với các cặp biến động, cung cấp “high slippage mode” làm lỏng giới hạn và hiển thị cảnh báo mạnh hơn.

Con trỏ

Nguồn:
  • Triển khai slippage / impact của Raydium SDK v2.
  • Flashbots / Jito trên Solana MEV.