问题所在
一个固定的滑点值无法适配所有代币。设置过紧,市场变化后交易可能回滚;设置得不必要地宽松,则会扩大用户可接受的不利成交范围。合适的容差取决于资产和路由。LI.FI 如何解决
LI.FI 会以两种相关但不同的方式使用 Smart Slippage。生成路由前,它可以根据请求的源代币和目标代币选择服务端默认值;生成路由后,它可以根据每个步骤实际涉及的代币,为返回步骤补充recommendedSlippage 建议字段。
生成路由前还不存在中间代币,因此默认值无法检查它们:同链请求按一个步骤估算,跨链请求按两个步骤估算。如果你自行传入滑点值,该值始终优先于服务端建议值。
集成商能看到什么
当你的集成商密钥启用了 Smart Slippage 后,路由响应中的合资格步骤会带有recommendedSlippage 字段。请将它作为该生成步骤的建议元数据读取。由于它使用实际路由步骤和中间代币,可能与生成路由前选择的默认值不同。
该字段有三种状态,区分它们很重要:
- 一个数值。 针对该步骤解析出的建议值,以小数比例表示。例如,
0.005表示 0.5%。 null。 该功能已为你的集成商启用,但该步骤没有解析出完整建议值,通常是因为至少一个所需代币的记录缺失或已过期。这与“功能未启用”不同。- 字段缺失。 该功能未在你的集成商上启用,因此没有生成建议值。
你自己设置的滑点值始终优先。如果你在请求中传入了滑点值,LI.FI 会使用它,不会用建议值覆盖它。
建议值是如何得出的
LI.FI 会为每种代币保留一份建议值,由市场数据管线依据该代币近期的市场表现生成。对每个步骤,它会读取该步骤涉及的全部代币的建议值,按路由的步骤数分别调整,并取调整后的最大值——也就是这些代币中最坏的情况。步骤涉及的所有代币都必须有当前数据;不会只用其中一部分代币计算出一个值。 步骤数调整会把容差在整条路由上叠加:含有n 个真实执行步骤的路由,其每个步骤都使用 n 步建议值;真实执行步骤超过三个的路由使用三步建议值。这里只计算路由实际执行的 swap、bridge 与 composer 步骤;手续费收取、代币包装等辅助步骤不计入。
建议值由数据驱动,并非永久固定的每代币常量,因此底层记录刷新后数值可能变化。每种代币的值在构建报价时实时读取,而不是缓存在客户端,因此每次请求都反映当前记录。具体数据来源和刷新频率属于运营细节,而不是稳定的 API 契约。
代币记录只在仍然有效时才可使用。如果一个步骤所需的任何代币没有当前记录——无论是尚未生成,还是记录已超出有效期——整个步骤的字段都会解析为 null,而不会根据不完整的数据进行计算。参见上文“集成商能看到什么”一节。
链和代币覆盖范围
Smart Slippage 按集成商启用,并未提供一个单独的公开接口来列出当前代币覆盖范围:- 如果一个步骤涉及的所有代币都有当前数据,该步骤会带有一个数值型建议值。
- 如果你的密钥已启用 Smart Slippage,但一个步骤所需的任何代币缺少当前数据,该步骤的
recommendedSlippage会解析为null——这就是区分“当前没有完整建议”与“功能未启用”的方式(后者字段会直接缺失)。 - 覆盖范围会随 LI.FI 刷新或扩展底层数据而变化。
在 SDK 和 Widget 中使用
SDK 和 Widget 都接受一个顶层的slippage 值(RouteOptions 中的 slippage、Widget 配置中的 slippage)。启用 Smart Slippage 后,该参数的行为方式与未启用时相同:
- 你设置了
slippage。 你的值会随请求发送,并始终优先——LI.FI 会使用它,不会用建议值覆盖它,这在 SDK 和 Widget 中与直接调用 API 时完全一致。 - 你没有设置
slippage。 在你的集成商密钥启用了 Smart Slippage 的情况下,LI.FI 会将解析出的建议值作为报价的服务端默认值应用,因此通过 SDK 或 Widget 获取、且未显式设置slippage值的路由,会自动按建议的容差报价,无需客户端额外处理。
slippage 值,而不是由哪个客户端发出。如果你的集成始终设置该值(例如应用层的默认值),那么每次报价都会使用该值,建议值仅作为参考。
Widget 当前默认将 slippage 留为 undefined。除非你的 Widget 配置或用户提供了数值,否则路由请求会省略 slippage,从而允许已启用的服务端 Smart Slippage 默认值生效。
若要读取建议值本身,请检查原始路由或报价响应中每个步骤的 recommendedSlippage。SDK 是否将其声明为类型字段取决于应用使用的 @lifi/types 版本;不要假定旧版 SDK 类型已经包含这个新增响应字段。
实例演示
以下示意数值用于展示该字段在一条路由的不同步骤中可能存在的差异,并非这些代币的实时建议值或覆盖保证。一条从稳定币到长尾代币、经过一次 bridge 的路由,可能返回如下精简结构。真实响应中,每个步骤的action.fromToken 与 toToken 都是完整的代币对象(含地址、链、符号、精度等),且每个步骤还带有更多字段:
- 前两个步骤转移的是稳定币,因此建议值很紧——分别为
0.002和0.005(0.2% 和 0.5%)。三个数值都按该路由的三个真实执行步骤调整过,因此它们之间的差异来自每个步骤涉及的代币。 - 最后一步换成波动性更高、流动性更弱的代币,其建议值更宽——
0.031(3.1%)——因为该代币需要更大的空间,才能在正常价格波动下不触发回滚。 - 这里展示的是路由生成后计算的建议字段。它们不能证明
0.031就是生成这条路由时使用的服务端默认值;此前的默认值计算只能看到请求的源代币、目标代币和估算步骤数。 - 如果你传入了自己的
slippage(比如0.01),则整条路由都会使用该值,无论各步骤的recommendedSlippage是多少。
适用范围
- 按集成商启用。未启用时,
recommendedSlippage字段不会出现,报价行为不受影响。 - 同时适用于同链和跨链路由。
- 建议值反映当前可用记录。如果 LI.FI 无法解析某步骤所需的全部数据,建议字段为
null;服务端报价仍可能回退到现有 Smart Slippage V1 逻辑或下游链默认值。 - 关于滑点和
toAmountMin更通用的运作方式(包括未启用 Smart Slippage 的集成商),参见滑点与价格影响 FAQ。
可用性
Smart Slippage 是一项企业级功能,按集成商启用。联系 LI.FI 团队以启用
告诉我们你最常使用哪些代币和链进行路由。我们会确认覆盖范围,并为你的集成商密钥启用 Smart Slippage。

