在 Widget Playground 中查看钱包管理模式:在侧边栏中打开 Wallet management。
- EVM(以太坊虚拟机)- Ethereum、Polygon、Arbitrum 等。
- SVM(Solana 虚拟机)- Solana
- UTXO - Bitcoin
- MVM(Move 虚拟机)- Sui
- TVM(Tron 虚拟机)- Tron
使用 Widget Providers
设置钱包管理最简单的方式是使用内置的 provider 包:EVM 钱包连接
为了管理与 EVM 链的钱包连接,widget 在内部使用 Wagmi 库,并为基于 Wagmi 的库提供一流支持,例如:- RainbowKit
- ConnectKit
- Reown AppKit(原 WalletConnect)
- Privy
- Dynamic
自动检测
如果你已经在 dApp 中使用 Wagmi 或基于 Wagmi 的库管理钱包,并且 widget 检测到它被包裹在 WagmiProvider 中,它将自动复用你的钱包管理,无需任何额外配置。基础 Wagmi 设置
保持链列表同步
保持 Wagmi 链配置与 widget 链列表同步非常重要,这样切换链等所有功能才能正常工作。有两种方法:- 手动:更新 widget 和 Wagmi 的链配置,以指定所有支持的链。
- 动态:从 LI.FI API 获取可用链,并动态更新 Wagmi 配置。
动态链同步
使用@lifi/widget-provider-ethereum 提供的 useSyncWagmiConfig 钩子和 @lifi/widget 提供的 useWidgetChains:
SVM(Solana)钱包连接
为了管理与 Solana 的钱包连接,widget 通过@lifi/widget-provider-solana 包使用 Solana Wallet Standard。
Solana provider 会自动发现实现了 Wallet Standard 的钱包。要使用它,只需在 widget 的 providers 数组中包含 SolanaProvider():
@lifi/widget-provider-solana 包需要 bs58(>=4.0.1)作为对等依赖。
MVM(Sui)钱包连接
为了管理与 Sui 的钱包连接,widget 使用 @mysten/dapp-kit-react(^2.0.0)。在 Widget v4 中,Sui 的对等依赖从
@mysten/dapp-kit 变更为 @mysten/dapp-kit-react。DAppKitContext 中,它将自动复用你的钱包管理。
要使用内置的 Sui 钱包管理,请在 providers 数组中包含 SuiProvider():
@mysten/dapp-kit-react 拥有 Sui 钱包上下文,widget 将检测到它并复用你现有的连接:
UTXO(Bitcoin)钱包连接
为了管理与 Bitcoin 的钱包连接,widget 使用 Bigmi。 要使用内置的 Bitcoin 钱包管理,请在providers 数组中包含 BitcoinProvider():
@lifi/widget-provider-bitcoin 包需要 @bigmi/react(^0.8.0)作为对等依赖。
如果 widget 检测到它被包裹在 BigmiProvider 中,它将自动复用你的钱包管理:
TVM(Tron)钱包连接
为了管理与 Tron 的钱包连接,widget 使用 @tronweb3/tronwallet-adapter-react-hooks(^1.1.11)。 要使用内置的 Tron 钱包管理,请在providers 数组中包含 TronProvider():
@lifi/widget-provider-tron 包需要 @tronweb3/tronwallet-adapter-react-hooks(^1.1.11)作为对等依赖。
TronProvider 接受一个可选的配置对象,其中包含 walletConnect 选项,用于为 Tron 钱包启用 WalletConnect 支持:
walletConnect 选项接受来自 @tronweb3/tronwallet-adapters 的 WalletConnectAdapterConfig,其中包含必填的 network('Mainnet'、'Shasta'、'Nile' 或链 ID)和 options(包含你的 projectId 的 WalletConnect SignClientTypes.Options)字段。将 walletConnect 设置为 true 可使用默认设置。
配置
WidgetWalletConfig 接口
连接钱包按钮
在使用外部钱包管理时,使用onConnect 回调来打开你的钱包弹窗:
Ethereum Provider 配置
在通过EthereumProvider 使用内置钱包管理时,你可以配置钱包连接器:
true 以使用默认设置,或者省略以禁用该连接器:
EthereumProviderConfig 接口
disableMessageSigning 选项会禁用基于 permit 的(EIP-2612)无 gas 授权,转而回退到标准的代币授权交易。这对于智能账户的兼容性很有用。参见下方的 智能账户兼容性。
sdkProvider 选项让你可以提供自定义的 SDK provider。详情参见 自定义 SDK Providers。
部分钱包管理
如果你的外部钱包管理不支持所有生态系统,可以启用部分钱包管理以使用混合方式:- 外部钱包管理负责处理“选择退出”的生态系统
- 内部钱包管理负责处理其余的生态系统
- 两个钱包菜单可以同时运行
强制使用内部钱包管理
widget 会自动检测现有的钱包上下文(例如 EVM 的 WagmiContext)。要覆盖此行为并对所有生态系统强制使用内部管理:钱包的生态系统顺序
为多链钱包定义首选的生态系统顺序:自定义 SDK Providers
每个 provider 配置都接受一个sdkProvider 选项,让你可以用自定义实现替换内置的 SDK provider,以处理签名、链切换或其他底层操作。
你可以直接传入一个 SDKProvider 对象,或者传入一个接收生态系统特定依赖并返回 SDKProvider 的工厂函数。
每种生态系统向工厂暴露不同的依赖:
智能账户兼容性
在将 widget 与智能账户(Privy、Dynamic、ZeroDev 等)一起使用时,你可能会遇到签名兼容性问题。问题所在
- EOA 对标准交易使用 ECDSA 签名
- 智能账户 可能使用 ERC-1271 或其他签名验证方法
EIP-7702 委托智能钱包(例如委托的 MetaMask 账户)当前需要源链原生 gas,因为此类钱包不提供无 gas 或中继(relayer)路由。参见 EIP-7702 委托钱包故障排查。
EIP-5792 交易批处理支持
如果你的智能账户 provider 支持 EIP-5792(Wallet Function Call API),则不应存在兼容性问题。widget 会自动使用批处理交易,而非单独的 permit 签名。禁用消息签名
对于不支持 EIP-5792 的智能账户,禁用消息签名以使用标准授权交易。在 v4 中,此选项在EthereumProvider 上配置:
禁用消息签名将回退到标准的代币授权交易,这可能需要额外的 gas 费用,但可以确保与所有智能账户实现的兼容性。
updateTransactionRequestHook
对于高级用例,你可以在交易请求发送前对其进行修改:钱包管理事件
@lifi/wallet-management 包为钱包连接和断开连接事件提供了自己的事件发射器。这些事件与 Widget 事件 是分开的。

