Skip to main content
LI.FI Widget 支持一系列配置选项,让你能够:
  • 允许或拒绝特定的链、代币、桥和交易所。
  • 按生态系统类型(EVM、SVM、UTXO、MVM、TVM)筛选链。
  • 预选默认的源链和目标链。
  • 为源链和目标链选择默认代币。
  • 设置源代币或目标代币的金额。
  • 指定目标地址。
  • 使用静态或动态费用计算配置集成方费用。
  • 为符合条件的交易启用无 gas/relayer 路由。
  • 为 Ethereum、Solana、Bitcoin、Sui 和 Tron 生态系统配置区块链提供者。
  • 通过 sdkConfig 配置自定义各种 LI.FI SDK 设置。
这些选项能让你精确控制 widget 的行为,并通过针对具体需求和偏好进行调整来改善用户体验。

LI.FI SDK 配置

LI.FI Widget 构建于 LI.FI SDK 之上,借助其强大的功能实现跨链交换与桥接。sdkConfig 选项允许你直接在 widget 内配置 SDK 的各个方面。 让我们看一个使用 sdkConfig 选项配置私有 RPC 端点的示例。
在生产应用中,建议传入你自己经过身份验证的 RPC 提供商 URL(Alchemy、Infura、Ankr 等)。如果未提供 RPC URL,LI.FI Widget 将默认使用公共 RPC 提供商。公共 RPC 端点(尤其是 Solana)有时会根据地理位置或在高负载时段对用户进行速率限制,从而导致余额显示错误或交易模拟出错等问题。
请在 配置 SDK 部分查看其他 SDK 配置选项。

区块链提供者配置

LI.FI Widget 通过专用的提供者包支持多个区块链生态系统。你可以为 Ethereum(EVM)、Solana(SVM)、Bitcoin(UTXO)、Sui(MVM)和 Tron(TVM)链配置提供者。
每个提供者都可以使用特定配置进行自定义。例如,Ethereum 提供者支持配置 WalletConnect、Coinbase、MetaMask、Porto 和 Base Account 连接器。详情请参阅 钱包管理 页面。

初始化表单值

LI.FI Widget 使用若干表单值来获取和执行路由。 这些值包括 fromAmountfromChainfromTokentoChaintoTokentoAmounttoAddress 它们通常通过 Widget UI 设置,但也可以通过编程方式初始化和更新。 通过配置这些选项,你可以简化用户体验,确保 widget 预加载所需的链、代币、金额和地址以进行交换或桥接。这减少了手动输入的需要,并有助于引导用户完成预期的流程。 你可以通过以下任一方式初始化这些值:
  • Widget 配置 - 通过在 widget 配置中添加 fromAmountfromChainfromTokentoChaintoTokentoAmounttoAddress 值。
  • URL 查询参数 - 当 widget 配置中的 buildUrl 设为 true 时,通过将它们添加到 widget 所在页面 URL 的查询参数中。
当通过配置或 URL 查询参数设置表单值时,你会看到相应的表单字段 UI 更新以反映这些值。

通过 widget 配置初始化

LI.FI Widget 允许你预配置默认的链和代币,从而可以从一开始就轻松设置所需的交换或桥接参数。以下是如何使用特定的默认链、代币、金额和转账地址值配置 widget 的示例。
你还可以使用 minFromAmountUSD 参数(数字)设置以美元等值计的最小金额,以确保用户满足最低交易要求。

通过 URL 查询参数初始化

要使用 URL 查询参数初始化 widget 中的表单值,你需要确保 widget 配置中的 buildUrl 设为 true
然后,你可以在导航到包含 widget 的页面时,在 URL 中加入这些查询参数。
需要理解的是,这只对 widget 的初始化生效——在不重新加载页面的情况下动态更改 URL 中的查询参数,不会导致 widget 中表单值的更新。
配置值会覆盖 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 函数根据路由参数进行动态费用计算:
只使用 feecalculateFee 之一,而不要同时使用。如果提供了 calculateFee,它将优先于静态的 fee 值。

配置 allow 和 deny 选项

我们提供了 allowdeny 配置选项,用于控制在你的应用中可以使用哪些链、代币、桥和交易所。以下是设置和使用这些选项的方法:

按生态系统类型筛选链

你还可以按链的生态系统类型(EVM、SVM、UTXO、MVM、TVM)筛选链:

分别配置源链/目标链筛选器

你可以对源链列表和目标链列表应用不同的筛选器:

代币筛选

要控制哪些代币出现在 fromto 列表中,请使用 allowdeny 选项:
  • 如果定义在 tokens 对象的顶层,它们将同时应用于两个列表。
  • 如果定义在 fromto 对象内部,它们将应用于该特定列表。
  • 如果定义了 allow 列表,则只允许其中包含的代币。如果未定义 allow 列表,则允许所有代币,除非它们被明确包含在 deny 中。如果某个代币同时出现在 allowdeny 中,则 allow 列表优先。
  • 一个代币必须同时通过顶层的 allow/deny 检查以及当前列表(fromto)的检查,才会被视为允许。
  • 代币筛选是按链应用的。当为特定链允许/拒绝代币时,只有该链的代币会受到影响。其他链保持不受筛选,显示所有可用代币。

精选代币、热门代币和包含的代币

除了 allowdeny 选项之外,tokens 选项还可以配置为包含其他代币、精选代币或热门代币,它们将出现在相应代币列表的顶部。
with_featured_tokens

With featured tokens

without_ft_tokens

Without featured tokens

目标地址

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

Send to wallet button

send_to_wallet_view

Send to wallet view

配置单个目标地址

开发者可以使用 toAddress 选项配置单个目标地址。addresschainType 属性是必需的,而 namelogoURI 属性是可选的。

配置精选的钱包地址列表

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

Optional destination address

curated_list_wallet

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 作为值。
上面指定的浏览器将只用于该链,在上述示例中即 Arbitrum。对于未在 explorerUrls 对象中指定的其他链,widget 仍将呈现默认行为(如上所述)。

自定义浏览器路径

对于不遵循标准 /address/:address/tx/:hash 约定的浏览器,你可以指定自定义路径:

覆盖内部浏览器

在 widget 配置中,你可以通过向 explorerUrls 对象添加条目来覆盖内部浏览器:将 internal 作为键,将浏览器的基础 URL 作为值。
widget 中任何使用内部浏览器的地方现在都将使用配置中指定的 URL,而不是默认值。

地址和交易页面

widget 假定浏览器会在 /address/:address 提供地址页面,在 /tx/:hash 提供交易页面,并会在用户点击相关按钮时尝试将用户导航到这些页面。 指向钱包地址的链接看起来像:
指向交易的链接看起来像:
widget 假定与 widget 一起使用的任何浏览器都将遵循此约定,除非指定了自定义路径。

添加路由标签

Widget 允许你通过添加路由标签(带有可自定义文本和外观的样式徽章)来在视觉上强化特定路由。 要动态显示路由标签,请在你的 WidgetConfig 中配置 routeLabels: RouteLabelRule[] 数组。
每条标签规则定义了匹配条件和一个标签配置,当满足条件时将应用该配置。 标签配置包括 text 以及以 MUI 风格 CSS-in-JS 方式定义的徽章 sx 样式。 其余字段根据路由条件确定何时以及在何处应用标签。 你可以组合多个条件,例如 fromChainIdexchangestokens 等。 对于桥和交易所,请使用 allowdeny 字段进行细粒度控制,方式与 配置 allow 和 deny 选项 中所述类似。 对于内置字段无法表达的匹配逻辑——gas 成本、步骤数量、路由标签,或 Route 对象上的任何其他属性——请提供一个自定义的 match 谓词。 它的结果会与规则上的其他条件进行 AND 运算,因此必须满足所有指定条件,标签才会应用。 一条规则也可以单独使用 match,而不带任何其他字段。
match 谓词在 @lifi/widget-light 中不受支持,因为函数无法通过 postMessage 跨 iframe 边界传输。
配置示例:
配置好的路由标签的渲染示例:

Route labels example

只有当路由满足_所有_指定条件时,标签才会出现。