- 允许或拒绝特定的链、代币、桥和交易所。
- 按生态系统类型(EVM、SVM、UTXO、MVM、TVM)筛选链。
- 预选默认的源链和目标链。
- 为源链和目标链选择默认代币。
- 设置源代币或目标代币的金额。
- 指定目标地址。
- 使用静态或动态费用计算配置集成方费用。
- 为符合条件的交易启用无 gas/relayer 路由。
- 为 Ethereum、Solana、Bitcoin、Sui 和 Tron 生态系统配置区块链提供者。
- 通过
sdkConfig配置自定义各种 LI.FI SDK 设置。
LI.FI SDK 配置
LI.FI Widget 构建于 LI.FI SDK 之上,借助其强大的功能实现跨链交换与桥接。sdkConfig 选项允许你直接在 widget 内配置 SDK 的各个方面。 让我们看一个使用 sdkConfig 选项配置私有 RPC 端点的示例。区块链提供者配置
LI.FI Widget 通过专用的提供者包支持多个区块链生态系统。你可以为 Ethereum(EVM)、Solana(SVM)、Bitcoin(UTXO)、Sui(MVM)和 Tron(TVM)链配置提供者。初始化表单值
LI.FI Widget 使用若干表单值来获取和执行路由。 这些值包括fromAmount、fromChain、fromToken、toChain、toToken、toAmount 和 toAddress。
它们通常通过 Widget UI 设置,但也可以通过编程方式初始化和更新。
通过配置这些选项,你可以简化用户体验,确保 widget 预加载所需的链、代币、金额和地址以进行交换或桥接。这减少了手动输入的需要,并有助于引导用户完成预期的流程。
你可以通过以下任一方式初始化这些值:
-
Widget 配置 - 通过在 widget 配置中添加
fromAmount、fromChain、fromToken、toChain、toToken、toAmount或toAddress值。 -
URL 查询参数 - 当 widget 配置中的
buildUrl设为true时,通过将它们添加到 widget 所在页面 URL 的查询参数中。
通过 widget 配置初始化
LI.FI Widget 允许你预配置默认的链和代币,从而可以从一开始就轻松设置所需的交换或桥接参数。以下是如何使用特定的默认链、代币、金额和转账地址值配置 widget 的示例。minFromAmountUSD 参数(数字)设置以美元等值计的最小金额,以确保用户满足最低交易要求。
通过 URL 查询参数初始化
要使用 URL 查询参数初始化 widget 中的表单值,你需要确保 widget 配置中的buildUrl 设为 true。
配置值会覆盖 URL 查询参数如果你想使用 URL 查询参数在初始化(或页面加载)时填充 widget 的表单值,重要的是这些表单值不要出现在用于初始化 widget 的配置对象中。fromAmount、fromChain、fromToken、toAddress、toChain 和 toToken 不应在 widget 配置中设置,以便允许 URL 执行 widget 状态的初始设置。在首次页面加载时,如果你在配置和 URL 中都设置了表单值,那么 URL 查询参数将被重写以匹配配置值,并且 widget 表单将填充配置中呈现的值。
更新表单值
在 widget 初始化之后,有两种方式可以更新 widget 中的表单值- 使用 widget 配置 - 这利用配置中的响应式值,需要对这些值进行一定的管理以进行更新
- 使用 formRef - 这提供了一个函数调用,你可以用它来更新 widget 表单存储中的值。
请注意,当 widget 配置中的
buildUrl 设为 true 时,两种方法都应同时更新
URL 查询参数以及 widget 本身显示的值。通过 widget 配置更新
一旦 widget 完成初始化,你可以通过更新 widget 配置来更新 widget 中的表单值。 要执行更新,你应该只在配置中包含想要更改的表单值,并确保这些更改被传递给 Widget。 例如,如果你只想更改 fromChain 和 fromToken 而不改动其他内容,那么你应该只包含这些值。 除了想要更改的表单值之外,你还应该设置一个 formUpdateKey。它需要是一个唯一的、随机生成的字符串,用于确保 widget 中的表单值得到更新——本质上是强制执行一次更新。这可以避免在通过配置和用户在 widget UI 上的操作混合设置值时可能出现的一些边界情况问题。 以下是你的配置的示例。undefined 将表单值及其字段重置为空状态。以下示例仅重置 fromChain 和 fromToken 表单值。
undefined 将 widget 的表单值重置为空状态。widget 配置对象中缺少某个属性意味着该属性将保持不变。
使用 widget 配置进行状态管理
在使用配置更新 widget 表单值时,考虑使用应用状态管理库来存储你的 widget 配置通常是一个不错的选择。有许多选项可供选择,例如 Zustand、MobX、Redux,甚至 React context。 例如,如果你使用 Zustand 作为状态管理工具,你可以使用 Zustand 的 API 从应用的任何部分访问并设置配置中的值。此外,你还可以使用 Zustand 的相等性功能,例如内置的shallow 函数,来确保只有在必要时才用你的 widget 配置更新 LiFi Widget 的实例。这有助于优化重新渲染。
你可以在 widget 仓库中找到一个使用 Zustand 管理 widget 配置 的示例。
通过 form ref 更新
此方法为开发者提供了一种直接在 widget 中设置表单值的方式,而无需更改 widget 配置。通过向 widget 传递一个 ref 对象,你可以访问一个函数来直接在 widget 的表单状态上设置值。请参阅下面的示例。setFieldValue 函数的使用。
setFieldValue 函数来设置表单值,请注意,如果你在 widget 配置中将 buildUrl 设为 true,则 setUrlSearchParam 将确保 URL 得到更新。
以下是一些使用示例。
配置路由选项
widget 提供了若干选项来控制路由的获取和选择行为。配置集成方费用
你可以配置在每笔交易上收取的费用。有两种方式:静态费用
使用feeConfig 为所有交易设置固定的费用百分比:
动态费用计算
使用calculateFee 函数根据路由参数进行动态费用计算:
只使用
fee 或 calculateFee 之一,而不要同时使用。如果提供了 calculateFee,它将优先于静态的 fee 值。配置 allow 和 deny 选项
我们提供了allow 和 deny 配置选项,用于控制在你的应用中可以使用哪些链、代币、桥和交易所。以下是设置和使用这些选项的方法:
按生态系统类型筛选链
你还可以按链的生态系统类型(EVM、SVM、UTXO、MVM、TVM)筛选链:分别配置源链/目标链筛选器
你可以对源链列表和目标链列表应用不同的筛选器:代币筛选
要控制哪些代币出现在 from 和 to 列表中,请使用allow 和 deny 选项:
- 如果定义在
tokens对象的顶层,它们将同时应用于两个列表。 - 如果定义在
from或to对象内部,它们将仅应用于该特定列表。 - 如果定义了
allow列表,则只允许其中包含的代币。如果未定义allow列表,则允许所有代币,除非它们被明确包含在deny中。如果某个代币同时出现在allow和deny中,则allow列表优先。 - 一个代币必须同时通过顶层的
allow/deny检查以及当前列表(from或to)的检查,才会被视为允许。 - 代币筛选是按链应用的。当为特定链允许/拒绝代币时,只有该链的代币会受到影响。其他链保持不受筛选,显示所有可用代币。
精选代币、热门代币和包含的代币
除了allow 和 deny 选项之外,tokens 选项还可以配置为包含其他代币、精选代币或热门代币,它们将出现在相应代币列表的顶部。

With featured tokens

Without featured tokens
目标地址
在某些使用场景中,用户需要使用不同的目标地址。通常,他们可以独立输入目标地址。 不过,widget 也提供了配置选项,可以预先配置目标地址,或创建一个精选的钱包地址列表供选择。
Send to wallet button

Send to wallet view
配置单个目标地址
开发者可以使用toAddress 选项配置单个目标地址。address 和 chainType 属性是必需的,而 name 和 logoURI 属性是可选的。

配置精选的钱包地址列表
开发者可以使用toAddresses 选项配置一个精选的钱包地址列表。
Send to wallet 按钮时,将打开一个预先配置的地址列表供其选择,从而跳过他们手动输入地址的步骤。
在配置钱包列表的同时,开发者可以将填写目标地址设为必需。详情请参阅”必填目标地址”。

Optional destination address

A curated list of wallet addresses
浏览器 URL
在 widget 中有许多用户可以点击的地方,用于在单独的浏览器标签页中打开区块浏览器,以了解有关某笔交易或某个地址的更多信息。widget 中任何显示此图标的按钮或链接都会将用户引导至浏览器。 我们在打开浏览器方面有默认行为,同时也可以使用 widget 配置来覆盖和更改这些行为。链的默认行为
通常,当尝试将用户引导至浏览器时,widget 会知道哪条链与某笔交易或地址相关,并会提供与该链匹配的浏览器。 例如,在用户执行交易后,在交易详情页面上,他们可以点击”Token allowance approved”浏览器按钮,以查看有关该授权的更多详情。如果该授权是使用 Optimism 链完成的,那么会打开一个新标签页,将用户带到 optimistic.etherscan.io,向他们展示有关该授权的更多信息。 如果找不到与某条链相关的浏览器,则用户将被引导至 LiFi 的浏览器。内部浏览器的默认行为
内部浏览器是使用 widget 构建应用的组织所偏好选择的浏览器。在 widget 的某些部分,我们使用内部浏览器,而不是尝试为特定链查找浏览器。 例如,一旦用户完成交易并进入交易详情页面,他们会看到一个 transfer ID(见下文)。随附一个链接,允许用户打开浏览器以查找有关该交易的更多信息。这里不会尝试查找特定链的浏览器。使用的默认浏览器是 LI.FI 自己的内部浏览器,用户将被引导至 https://scan.li.fi覆盖浏览器 URL
可以通过 widget 配置覆盖 widget 使用的浏览器 URL。我们可以针对特定链和内部浏览器执行此操作。你可以为多条链使用自己的浏览器 URL,同时也可以为内部浏览器指定你自己的替代方案。覆盖某条链的浏览器
在 widget 配置中,你可以通过向 explorerUrls 对象添加条目来覆盖链:将链 ID 作为键,将浏览器的基础 URL 作为值。自定义浏览器路径
对于不遵循标准/address/:address 和 /tx/:hash 约定的浏览器,你可以指定自定义路径:
覆盖内部浏览器
在 widget 配置中,你可以通过向 explorerUrls 对象添加条目来覆盖内部浏览器:将internal 作为键,将浏览器的基础 URL 作为值。
地址和交易页面
widget 假定浏览器会在/address/:address 提供地址页面,在 /tx/:hash 提供交易页面,并会在用户点击相关按钮时尝试将用户导航到这些页面。
指向钱包地址的链接看起来像:
添加路由标签
Widget 允许你通过添加路由标签(带有可自定义文本和外观的样式徽章)来在视觉上强化特定路由。 要动态显示路由标签,请在你的WidgetConfig 中配置 routeLabels: RouteLabelRule[] 数组。
text 以及以 MUI 风格 CSS-in-JS 方式定义的徽章 sx 样式。
其余字段根据路由条件确定何时以及在何处应用标签。
你可以组合多个条件,例如 fromChainId、exchanges、tokens 等。
对于桥和交易所,请使用 allow 和 deny 字段进行细粒度控制,方式与 配置 allow 和 deny 选项 中所述类似。
对于内置字段无法表达的匹配逻辑——gas 成本、步骤数量、路由标签,或 Route 对象上的任何其他属性——请提供一个自定义的 match 谓词。
它的结果会与规则上的其他条件进行 AND 运算,因此必须满足所有指定条件,标签才会应用。
一条规则也可以单独使用 match,而不带任何其他字段。
match 谓词在 @lifi/widget-light 中不受支持,因为函数无法通过 postMessage 跨 iframe 边界传输。
Route labels example

