Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →

兩個不同的概念

價格影響滑點在使用者介面中經常被混淆,但它們指的是不同的東西。
  • 價格影響是針對特定池狀態的交易的確定性屬性。給定 (Δin, reserves),價格影響在交易提交前完全可計算。
  • 滑點是你在報價時預期的價格與執行時實際獲得的價格之間的實現差異。它是延遲、並發交易和區塊包含順序的函數——而不是池數學的函數。
針對一個閒置池的 1% 報價,如果它在下一個區塊中成交,滑點為 0%;那 1% 就是價格影響。如果另一筆交易先擊中池,同樣的報價會差 0.2%——額外的 0.2% 就是滑點。

正式定義

價格影響

對於 CPMM:impact ≈ 2 · Δin / reserve_in(小額交易)。對於 CLMM:取決於交易跨越多少個 tick;通常在當前 tick 範圍內保持平坦,在每個 tick 邊界處跳躍。

實現滑點

滑點始終非負(或為零),假設報價是誠實的。負值意味著你獲得的超過報價——如果池狀態在報價和執行之間朝著對你有利的方向移動,這是可能的。

計算 minAmountOutmaxAmountIn

每筆 Raydium 交換都需要一個滑點保護邊界:
  • SwapBaseInput(amount_in, min_amount_out) — 精確輸入,下限輸出。
  • SwapBaseOutput(max_amount_in, amount_out) — 精確輸出,上限輸入。
SDK 按產品計算這些——三者共享一個簽名:
在所有三個中,minAmountOutamountOut × (1 − slippage),這是鏈上邊界;priceImpact 僅從池狀態確定;fee 是收取的總費用。 滑點容差是圍繞價格影響的緩衝,而不是價格影響本身。0.5% 的容差意味著「接受最多比我的報價差 0.5%」——與價格影響是 0.01%(小額交易)還是 2%(大額交易)無關。對於 2% 價格影響、0.5% 容差的交易,minAmountOut 是交易前現貨下方 2.5%——本質上是影響和容差的總和。

推薦的滑點容差

沒有單一的正確數字;正確的邊界取決於:
  1. 交易對穩定性。 穩定幣對穩定幣池可以安全使用 0.1%。波動的迷因幣對通常需要 3–5% 才能可靠成交。
  2. 交易規模。 較大的交易有較大的價格影響,所以容差需要隨之擴展以避免回滾。SDK 的自動滑點預設值約為 max(0.5%, 2 × price_impact) 就是因為這個原因。
  3. 區塊包含延遲。 在記憶池中停留多個區塊的交易會暴露於更多並發交易。Jito 捆綁和優先費用可以減少這種情況。
經驗法則(Raydium UI 預設值):

不同 AMM 類型的差異

CPMM

價格影響平滑連續(閉式 2 · Δin / reserve_in)。滑點容差隨交易規模線性擴展。

AMM v4

與 CPMM 相同的曲線數學。由於 OpenBook 移除,「有效準備金」只是兩個金庫餘額:
  • 根據原始金庫餘額報價。沒有鏈上組件要添加——Initialize2 在每個新池上寫入 AmmInfo.open_orders = Pubkey::default(),沒有指令讀取 OpenOrders 帳戶。
  • 從金庫餘額中減去應計協議 PnL(state_data.need_take_pnl_coin / need_take_pnl_pc)以獲得不變量實際使用的準備金。
  • 沒有預先運行的 crank:MonitorStep 現在會因 unimplemented! 而崩潰,不得發送。

CLMM

價格影響是分段的。在當前 tick 範圍內,影響大約與 Δin / L 成線性關係。跨越 tick 邊界可以離散地改變 L,導致邊際價格突然跳躍。跨越多個稀疏填充 tick 的交易可能有比 2 · Δin / reserve 經驗法則建議的高得多的影響。 SDK 的 CLMM 報價確定性地迭代交換步驟以返回精確的預期 amountOut,所以 minAmountOut = amountOut · (1 − slippage) 是正確的。但priceImpact 返回值應理解為「交易前現貨與交易後現貨之間的差價」,在 CLMM 上對於只關心 amount_out 的使用者來說,可能遠大於交換的有效滑點。

LaunchLab 曲線

類似於 CPMM,但具有非對稱曲線(二次或虛擬準備金)。隨著曲線在畢業時變陡,後期買家的影響增長更快。預買方 UI 應在預期買入在一筆交易中推動曲線超過 ~5% 的 quote_reserve_target 時發出警告。

MEV 考量

在 Solana 上,針對交換的 MEV 提取主要採用三明治攻擊的形式:機器人在你的交易之後放置一筆後置交易,加上一筆前置交易,兩者都在同一個 slot。你的交易以比沒有三明治時更差的價格成交;後置交易捕獲差異。 緩解措施:
  1. 緊密的 minAmountOut 激進的滑點邊界導致受害交易在被重度三明治時回滾,保護資金(但浪費 gas)。在 Solana 上這是標準做法——拒絕很便宜。
  2. Jito 捆綁。 通過 Jito 提交並附帶捆綁小費可以排除中間人重新排序你的交易。捆綁作為原子塊成交。
  3. 優先費用。 高優先費用增加你的交易在當前領導者區塊中成交的機會,在三明治者能反應之前。不如捆綁穩健,但更標準。
  4. 私有 RPC。 通過私有 RPC(或驗證者的直接端點)提交可以減少記憶池三明治者觀察你交易的時間窗口。
Raydium 的 SDK 不進行捆綁;集成者通常在頂部分層 Jito。參見 integration-guides/routing-and-mev 以了解模式。

多跳路由的滑點

當交換通過多個池路由時(例如 USDC → SOL → RAY),滑點容差應按跳應用,而不僅僅是端到端:
SDK 的路由器在你呼叫 raydium.tradeV2.swap 時自動應用按跳邊界。(外觀是 tradeV2raydium.trade 不存在。)對於自訂路由器,複製該模式。

向使用者報告

良好交換 UI 的經驗法則:
  • 分別顯示預期價格影響和滑點容差。
  • 當價格影響超過 ~2% 時突出顯示——「高影響」警告。
  • 當價格影響超過容差時突出顯示——交易幾乎肯定會回滾。
  • 對於波動交易對,提供「高滑點模式」以放寬邊界並顯示更強的警告。

指標

來源:
  • Raydium SDK v2 滑點/影響實現。
  • Flashbots / Jito on Solana MEV。