
滑点与价格冲击,通俗讲解
你看到一个报价:1 ETH 兑换 3,200 USDC。你确认了 swap。几秒钟后,交易结算,你实际收到的却是 3,187 USDC。没有人黑你,也没有人临时改规则——你只是遇到了链上交易中两个最容易被误解的机制:price impact(价格冲击)与滑点。
本文为自托管用户拆解这两个概念。读完之后,你会知道为什么你看到的数字不一定就是你拿到的数字、所谓"滑点容差"设置实际在做什么,以及当你从 SSP Wallet 或某个 dApp 发起 swap 时,该如何思考它。
为什么报价只是报价
绝大多数链上 swap 并不走传统的订单簿,而是通过 Automated Market Maker(AMM)进行:一个 smart contract 在 liquidity pool 中持有两种资产,并按公式给它们定价。最常见的公式是恒定乘积规则,通常写作 x * y = k:
x是池中 token A 的数量。y是 token B 的数量。k是池子试图保持不变的常数。
当你用 token A 换 token B 时,你会把 x 与 y 的比例推离均衡。池子会自动重新定价,使 k 大致保持不变。这种重新定价正是 price impact 的来源。
报价是池子状态在某个瞬间的快照。等到你的交易被打包时,池子往往已经变了:其他 swap 已经打到它,新区块已经产生,而你自己的交易又要继续推动它。你看到的数字本身没有撒谎,只是它并不是承诺。
Price impact:你这一笔自身造成的成本
Price impact 是仅由你这笔交易引起的价格变化,前提是报价到执行之间没有其他变动。它是机械的、可预测的,完全取决于池子的深度。
做个思维实验。设想一个 ETH/USDC pool,持有 100 ETH 和 320,000 USDC。边际价格大约是每 ETH 3,200 USDC。现在:
- 兑入 1 ETH。你只占用池中一小部分储备。新价格几乎纹丝不动。你拿到接近 3,200 USDC,扣除池子手续费。Price impact 很小——可能只有几个基点。
- 兑入 10 ETH。你已经显著改变了比例。你实际得到的平均价格远低于每 ETH 3,200 USDC。Price impact 已是几个百分点。
- 兑入 50 ETH。你正在消耗池子三分之一的流动性。执行价格会崩塌。Price impact 可能高达数十个百分点。
启示:交易越大、相对于池子深度越大,price impact 越大。把交易量翻一倍,成本会涨得不止一倍,因为每一单位都打在更糟糕的曲线上。Wallet 和聚合器通常会在 swap 界面用百分比展示它。任何超过几个百分点的数字,都应当当作警示而非脚注。
Price impact 不是付给某个特定对象的手续费——它是你在一条曲线上当自己对手盘的代价。
滑点:报价与成交之间的差距
**滑点是你预期价格与你的 swap 实际成交价格之间的差。**它包含 price impact,但也包含从你看到报价到交易上链之间发生的一切:
- **其他人对同一池子的交易。**任何在同一区块、或在你的报价与确认之间的区块中进行 swap 的人,都会改变池子状态。
- **报价与执行之间的时间。**对于波动性资产,即使几秒钟也足以让池子漂移。
- **你自己造成的 price impact。**如上所述——这笔交易本身就会推动它将要成交的价格。
- **MEV。**Searcher 可以通过在某笔待处理 swap 前后各下一单,把它"夹"在中间。我们在 MEV、抢跑与三明治攻击 中深入讨论过。
Price impact 是你能够建模的东西。滑点是实际发生的结果。
滑点容差设置
由于网络无法保证报价到执行之间的精确价格,swap 界面会让你设置一个滑点容差:相对于报价的最大可接受偏离。如果实际成交价比 报价 - 容差 还差,smart contract 就会回退这笔 swap。
听起来很干净,但这是个实实在在的取舍:
- **设得太低。**交易因池子漂移越过你的上限而回退。回退仍然消耗 gas——你为失败的尝试买单却空手而归。在行情剧烈的日子里,你可能要连吃几次失败,才能让一笔 swap 真正成交。
- **设得太高。**几乎无论如何交易都会成交,包括 MEV bot 故意把价格推到对你不利的情形。一个热门 token 上设 5% 的容差,等于给三明治攻击开绿灯。你将拿到你的容差所允许的最差价格。
没有一个普适的正确数字。在深度很好的稳定币对上设 0.1% 是合理的。同样的数字放在新闻热点中的薄盘 token 上,等于必定回退。务实的做法是先小后调:swap 回退就稍微调高容差;被反复夹三明治就调低,并考虑换路由或拆成更小的批次。
在 SSP 中是什么样
SSP 提供两种 swap 方式,它们对你暴露滑点的方式不同:
- 钱包内聚合器(SSP 内置的 buy/sell/swap 界面)。聚合器会在多个 venue 之间选路,并向你呈现一个最终的输出报价。绝大部分路由层面的滑点都在这条流程里处理;你根据看到的最终数字选择确认或取消。我们在 从 SSP 进行加密资产 swap 中讲过这些流程的整体 UX。
- **通过 WalletConnect 在 dApp 上做 swap。**当你把 SSP 直接连接到某个 DEX 时,swap 界面归该 dApp 所有,包括滑点容差设置。数字由你设,后果也由你承担。SSP 只在你在扩展中批准、在 SSP Key 上确认之后,对 dApp 请求的交易进行共同签名。请仔细阅读 dApp 的 swap 界面。
SSP 的 2-of-2 multisig 性质不会改变 AMM 的数学规律,但它确实意味着每一笔 swap 都需要在两台设备上确认。这会在"我点了确认"与"交易进入 mempool"之间引入几秒额外时间——这也是为什么报价和最终成交价并不总是一致的另一个原因。
实用建议
一份在多数链与 DEX 上都站得住脚的简短清单:
- **先小额试一笔。**在 swap 一笔较大头寸之前,先用同一条路由发一小笔。如果 price impact 在小额上就已经令人警惕,那么大额会糟糕得多。
- **盯紧 price impact 的百分比。**如果你的钱包显示它,对于常规规模的交易,把超过 1–2% 的数字当作红旗。聚合器与更深的 pool 通常能改善这一点。
- **看最终成本,而不只是汇率。**Ethereum 上的 gas 费是在 price impact 与滑点之上的额外成本。我们在 Ethereum 的 gas 费,自托管用户视角 中讲过费用机制。EIP-1559 意味着你支付的费用在你签名到区块上链之间可能发生变化,这也是"我在确认时价格变了"的又一个原因。
- **优先选深度大的 pool。**流动性是 price impact 的朋友。一个流动性 5000 万美元的池对,远比 50 万美元的池对更能消化你的交易。
- **有意识地设置容差。**不要不假思索地接受默认值。也不要为了让一笔失败的 swap 通过就把它拉到 5%——那次失败往往是在告诉你某些事。
- **如果反复被夹三明治,就换路由。**更小的批次、不同的聚合器,或一个对 MEV 友好的 RPC,都可能改变结果。
要点
Price impact 是与池子博弈时无法回避的数学:它随交易规模增长,随流动性下降。滑点是在公开 mempool 中执行的真实凌乱场面——其他交易、时间和你自己的交易都在推动价格。你的滑点容差是决定这笔 tx 更容易回退、还是更容易被夹三明治的杠杆。请有意识地使用它。
当你在 SSP 中做 swap 时,无论你走的是钱包内聚合器,还是通过 WalletConnect 接入的 dApp,背后的物理规律都是一样的。区别在于由谁设置容差——而一旦你理解了自己在设置什么,这两种选择都能在你心中泰然处之。


