> ## Documentation Index
> Fetch the complete documentation index at: https://docs.li.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# 从 v2 迁移到 v3

> 将 LI.FI SDK v2 升级到 v3 的迁移指南

## 概述

**LI.FI SDK v3** 经历了一次重大更新，改进了与流行库（如 [Viem](https://viem.sh/)）的兼容性，并添加了新功能，包括对多个生态系统的支持，从 [Solana](https://github.com/anza-xyz/wallet-adapter) 开始。因此，如本指南中详细说明的那样，您需要注意一些破坏性更改和弃用。我们还建议查看更新的文档以了解此处未涵盖的其他新功能。

要开始使用，请安装最新版本的 LI.FI SDK。

<CodeGroup>
  ```typescript yarn theme={"system"}
  yarn add @lifi/sdk
  ```

  ```typescript pnpm theme={"system"}
  pnpm add @lifi/sdk
  ```

  ```typescript bun theme={"system"}
  bun add @lifi/sdk
  ```

  ```typescript npm theme={"system"}
  npm install @lifi/sdk
  ```
</CodeGroup>

## 配置

我们对 LI.FI SDK 的配置方式进行了重大更改。它不再基于类，因此您不需要创建、维护和共享 LiFi 类实例来使用 SDK 功能。相反，它现在基于函数，允许您配置一次并从任何地方更新配置，而无需维护或共享配置对象的引用。您可以简单地从包中导入所需的函数。阅读更多[配置 SDK](/zh-Hans/sdk/configure-sdk)

在此示例中，您可以使用 SDK v3 从任何地方调用 `getQuote` 函数，而使用 SDK v2，您必须共享创建的 `LiFi` 类实例并将 `getQuote` 作为该类的方法调用。

```typescript theme={"system"}
// SDK v2
import { ChainId, LiFi } from '@lifi/sdk'

const lifi = new LiFi({
  integrator: 'Your dApp/company name'
})

const quote = await lifi.getQuote({
  fromAddress: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
  fromChain: ChainId.ARB,
  toChain: ChainId.OPT,
  fromToken: '0x0000000000000000000000000000000000000000',
  toToken: '0x0000000000000000000000000000000000000000',
  fromAmount: '1000000000000000000',
})

// SDK v3
import { ChainId, createConfig, getQuote } from '@lifi/sdk'

createConfig({
  integrator: 'Your dApp/company name',
})

const quote = await getQuote({
  fromAddress: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
  fromChain: ChainId.ARB,
  toChain: ChainId.OPT,
  fromToken: '0x0000000000000000000000000000000000000000',
  toToken: '0x0000000000000000000000000000000000000000',
  fromAmount: '1000000000000000000',
})
```

由于这些更改，不再需要 `LiFi` 接口中与配置相关的函数。之前的接口包括：

```typescript theme={"system"}
interface LiFi {
  getConfig(): Config
  getConfigAsync(): Promise<Config>
  getRpcProvider(chainId: number, archive: boolean): Promise<FallbackProvider>
  setConfig(configUpdate: ConfigUpdate): Config
  // ...
}
```

现在，您可以直接导入配置对象并对其进行任何必要的更改。这简化了流程并提高了代码的可维护性。阅读更多[更新 SDK 配置](/zh-Hans/sdk/configure-sdk#更新-sdk-配置)。

```typescript theme={"system"}
// SDK v2
import { ChainId, LiFi } from '@lifi/sdk'

const lifi = new LiFi({
  integrator: 'Your dApp/company name'
})

lifi.setConfig({
  integrator: 'Your dApp/company name'
})

// SDK v3
import { config } from '@lifi/sdk';

config.set({
  integrator: 'Your dApp/company name',
});
```

## 重命名的方法

基于类的方法之前支持的所有方法现在都是可以直接从 `@lifi/sdk` 包导入的单独函数。其中一些方法已重命名，以更好地反映其功能或具有更简洁的名称。

* `getContractCallQuote` -> `getContractCallsQuote`

* `getTokenApproval` -> `getTokenAllowance`

* `bulkGetTokenApproval` -> `getTokenAllowanceMulticall`

* `approveToken` -> `setTokenAllowance`

* `moveExecutionToBackground` -> `updateRouteExecution`

有关更多详细信息，请参阅[请求合约调用报价](/zh-Hans/sdk/request-routes#请求报价)、[管理路由执行](/zh-Hans/sdk/execute-routes#管理路由执行)和[代币管理](/zh-Hans/sdk/token-management)。

## 从 Ethers.js 迁移到 Viem

自 LI.FI SDK 的第一个版本以来，我们一直依赖 `Ethers.js` 库进行所有 EVM 相关的交互。但是，随着行业的发展，`Viem` 正在获得广泛采用并开始取代 `Ethers.js`。

为了确保我们的产品保持强大和面向未来，我们决定将整个堆栈过渡到更可靠的解决方案 - [`Viem`](https://viem.sh/)（Widget 的 [`Wagmi`](https://wagmi.sh/)）。

有关更多详细信息，请参阅 [Ethers v5 → viem 迁移指南](https://viem.sh/docs/ethers-migration)。除其他显著变化外，此过渡还将我们之前在 v2 中使用的所有 BigNumber 实用程序替换为原生 `bigint` 基元。

## 多生态系统支持

LI.FI SDK v3 现在支持两个生态系统——EVM 和 Solana——还有更多即将推出。为了适应这些新生态系统，我们在 SDK v3 中引入了生态系统提供程序的概念。我们从 SDK v2 中提取了所有 EVM 相关功能并将其集成到一个 EVM 提供程序中。此外，还添加了一个 Solana 提供程序，以在所有 SDK 功能中启用 Solana 相关功能。

这些生态系统提供程序在设计时考虑了模块化，并且完全可以进行 tree-shake，确保如果不使用它们，它们不会给您的捆绑包增加不必要的重量。

以前，必须将 `Ethers.js` Signer 对象传递给 `executeRoute` 和其他函数以进行 EVM 交互。随着生态系统提供程序的引入，您只需要在设置 SDK 时配置它们一次。之后，您可以使用 `executeRoute` 和其他函数而无需传递任何其他选项。SDK 将自动确定适当的生态系统提供程序，如果未配置合适的提供程序，则会通知您。

阅读更多[SDK 生态系统提供程序简介](/zh-Hans/sdk/configure-sdk-providers#sdk-生态系统提供程序简介)。

## 示例

查看 [SDK 仓库](https://github.com/lifinance/sdk/tree/main/examples)中的完整示例，如果遇到任何问题，请随时[提交问题](https://github.com/lifinance/sdk/issues)。

## 更新日志

有关所有更改的详细视图，请参阅 [CHANGELOG](https://github.com/lifinance/sdk/blob/main/CHANGELOG.md)。
