> ## 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.

# 代币管理

> 请求所有可用代币及其余额，管理代币批准等。

## 获取可用代币

### `getTokens`

检索指定链上所有可用代币的列表。

**参数**

* `params` (TokensRequest, 可选): 请求代币的配置。

  * `chains` (ChainId\[], 可选): 链 ID 或键的列表。如果未指定，则返回所有可用链上的代币。

  * `chainTypes` (ChainType\[], 可选): 链类型列表。

* `options` (RequestOptions, 可选): 其他请求选项。

**返回**

解析为 `TokensResponse` 的 Promise

```typescript 示例 theme={"system"}
import { ChainType, getTokens } from '@lifi/sdk';

try {
  const tokens = await getTokens({
    chainTypes: [ChainType.EVM, ChainType.SVM],
  });
  console.log(tokens);
} catch (error) {
  console.error(error);
}
```

### `getToken`

获取指定链上特定代币的详细信息。

**参数**

* `chain` (ChainKey | ChainId): 包含代币的链的 ID 或键。

* `token` (string): 请求链上代币的地址或符号。

* `options` (RequestOptions, 可选): 其他请求选项。

**返回**

解析为 `Token` 对象的 Promise。

```typescript 示例 theme={"system"}
import { getToken } from '@lifi/sdk';

const chainId = 1;
const tokenAddress = '0x0000000000000000000000000000000000000000';

try {
  const token = await getToken(chainId, tokenAddress);
  console.log(token);
} catch (error) {
  console.error(error);
}
```

## 获取代币余额

请确保您首先使用 EVM/Solana 提供程序配置 SDK。使用此功能需要它们。此外，建议提供您的私有 RPC URL，因为默认使用公共 URL，并且可能会对您的多个请求（例如一次获取多个代币的余额）进行速率限制。

阅读更多[配置 SDK 提供程序](/zh-Hans/sdk/configure-sdk-providers)。

### `getTokenBalance`

返回钱包持有的特定代币的余额。

**参数**

* `walletAddress` (string): 钱包地址。

* `token` (Token): Token 对象。

**返回**

解析为 `TokenAmount` 或 `null` 的 Promise。

```typescript 示例 theme={"system"}
import { getToken, getTokenBalance } from '@lifi/sdk';

const chainId = 1;
const tokenAddress = '0x0000000000000000000000000000000000000000';
const walletAddress = '0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0';

try {
  const token = await getToken(chainId, tokenAddress);
  const tokenBalance = await getTokenBalance(walletAddress, token);
  console.log(tokenBalance);
} catch (error) {
  console.error(error);
}
```

### `getTokenBalances`

返回钱包持有的代币列表的余额。

**参数**

* `walletAddress` (string): 钱包地址。

* `tokens` (Token\[]): Token 对象列表。

**返回**

解析为 `TokenAmount` 对象列表的 Promise。

```typescript 示例 theme={"system"}
import { ChainId, getTokenBalances, getTokens } from '@lifi/sdk';

const walletAddress = '0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0';

try {
  const tokensResponse = await getTokens();
  const optimismTokens = tokensResponse.tokens[ChainId.OPT];
  const tokenBalances = await getTokenBalances(walletAddress, optimismTokens);
  console.log(tokenBalances);
} catch (error) {
  console.error(error);
}
```

### `getTokenBalancesByChain`

查询给定钱包的特定链列表的代币余额。

**参数**

* `walletAddress` (string): 钱包地址。

* `tokensByChain` \[chainId: number]: Token\[]: 按链 ID 组织的 Token 对象列表。

**返回**

解析为包含不同链上的代币及其金额的对象的 Promise。

```typescript 示例 theme={"system"}
import { getTokenBalancesByChain } from '@lifi/sdk';

const walletAddress = '0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0';
const tokensByChain = {
  1: [
    {
      chainId: 1,
      address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
      symbol: 'DAI',
      name: 'DAI Stablecoin',
      decimals: 18,
      priceUSD: '0.9999',
    },
  ],
  10: [
    {
      chainId: 10,
      address: '0x4200000000000000000000000000000000000042',
      symbol: 'OP',
      name: 'Optimism',
      decimals: 18,
      priceUSD: '1.9644',
    },
  ],
};

try {
  const balances = await getTokenBalancesByChain(walletAddress, tokensByChain);
  console.log(balances);
} catch (error) {
  console.error(error);
}
```

## 管理代币授权

代币授权和批准功能特定于 EVM（以太坊虚拟机）链。它允许智能合约通过批准合约可以从用户钱包中花费的一定数量的代币来与 ERC-20 代币交互。

请确保您使用 EVM 提供程序配置 SDK。使用此功能需要它。

阅读更多[配置 SDK 提供程序](/zh-Hans/sdk/configure-sdk-providers)。

### `getTokenAllowance`

获取特定代币的当前授权额度。

**参数**

* `token` (BaseToken): 要检查授权额度的代币。

* `ownerAddress` (string): 代币的所有者。

* `spenderAddress` (string): 已批准的支出者地址。

**返回**

解析为表示授权额度的 `bigint` 或如果代币是原生代币则为 undefined 的 Promise。

```typescript 示例 theme={"system"}
import { getTokenAllowance } from '@lifi/sdk';

const token = {
  address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
  chainId: 1,
};

const ownerAddress = '0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0';
const spenderAddress = '0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE';

try {
  const allowance = await getTokenAllowance(token, ownerAddress, spenderAddress);
  console.log('Allowance:', allowance);
} catch (error) {
  console.error('Error:', error);
}
```

### `getTokenAllowanceMulticall`

获取代币/支出者地址对列表的当前授权额度。

**参数**

* `ownerAddress` (string): 代币的所有者。

* `tokens` (TokenSpender\[]): 代币和支出者地址对的列表。

**返回**

解析为 `TokenAllowance` 对象数组的 Promise。

```typescript 示例 theme={"system"}
import { getTokenAllowanceMulticall } from '@lifi/sdk';

const ownerAddress = '0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0';
const tokens = [
  {
    token: {
      address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
      chainId: 1,
    },
    spenderAddress: '0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE',
  },
  {
    token: {
      address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
      chainId: 1,
    },
    spenderAddress: '0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE',
  },
];

try {
  const allowances = await getTokenAllowanceMulticall(ownerAddress, tokens);
  console.log('Allowances:', allowances);
} catch (error) {
  console.error('Error:', error);
}
```

### `setTokenAllowance`

为特定代币和支出者地址设置代币授权额度。

**参数**

* `request` (ApproveTokenRequest): 批准请求。

  * `walletClient` (WalletClient): 用于发送交易的钱包客户端。

  * `token` (BaseToken): 要设置授权额度的代币。

  * `spenderAddress` (string): 支出者的地址。

  * `amount` (bigint): 要批准的代币数量。

  * `infiniteApproval` (boolean, 可选): 如果为 true，则将批准设置为最大 uint256 值。

**返回**

解析为表示交易哈希的 `Hash` 或如果不需要交易（例如，对于原生代币）则为 `void` 的 Promise。

```typescript 示例 theme={"system"}
import { setTokenAllowance } from '@lifi/sdk';

const approvalRequest = {
  walletClient: walletClient, // Viem wallet client
  token: {
    address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
    chainId: 1,
  },
  spenderAddress: '0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE',
  amount: 100000000n,
};

try {
  const txHash = await setTokenAllowance(approvalRequest);
  console.log('Transaction Hash:', txHash);
} catch (error) {
  console.error('Error:', error);
}
```

### `revokeTokenApproval`

撤销特定代币和支出者地址的代币批准。

**参数**

* `request` (RevokeApprovalRequest): 撤销请求。

  * `walletClient` (WalletClient): 用于发送交易的钱包客户端。

  * `token` (BaseToken): 要撤销授权额度的代币。

  * `spenderAddress` (string): 支出者的地址。

**返回**

解析为表示交易哈希的 `Hash` 或如果不需要交易（例如，对于原生代币）则为 `void` 的 Promise。

```typescript 示例 theme={"system"}
import { revokeTokenApproval } from '@lifi/sdk';

const revokeRequest = {
  walletClient: walletClient, // Viem wallet client
  token: {
    address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
    chainId: 1,
  },
  spenderAddress: '0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE',
};

try {
  const txHash = await revokeTokenApproval(revokeRequest);
  console.log('Transaction Hash:', txHash);
} catch (error) {
  console.error('Error:', error);
}
```
