diff --git a/docs/pages/cn/reference/sdk.mdx b/docs/pages/cn/reference/sdk.mdx index 6554fc0..eb40c77 100644 --- a/docs/pages/cn/reference/sdk.mdx +++ b/docs/pages/cn/reference/sdk.mdx @@ -1,14 +1,14 @@ --- source_path: reference/sdk.mdx -source_sha: cb2522d5ba3ff23ce6506a1bdc182e119b247b59 +source_sha: 32d28c4444eca99791c0c0872c009abd014787f0 title: "SDK 参考" -description: "@stablechain/sdk 完整参考:createStable、createStableReader、transfer、bridge、swap、earn 和 yield 方法,枚举和错误类。" +description: "@stablechain/sdk 的完整参考:createStable、createStableReader、transfer、bridge、swap、earn 和 yield 方法,枚举和错误类。" diataxis: "reference" --- # SDK 参考 -`@stablechain/sdk` 的完整表面。这涵盖了来自 [`createStable`](#createstableconfig) 的签名客户端,来自 [`createStableReader`](#createstablereaderconfig) 的只读客户端,以及共享的枚举、常量和错误类。有关详细说明,请参阅 [SDK 快速入门](/cn/tutorial/sdk-quickstart)。有关以任务为中心的收益指南,请参阅 [使用 SDK 赚取收益](/cn/how-to/earn-yield)。 +`@stablechain/sdk` 的完整功能。这包括来自 [`createStable`](#createstableconfig) 的签名客户端,来自 [`createStableReader`](#createstablereaderconfig) 的只读客户端,以及共享的枚举、常量和错误类。有关演练,请参阅 [SDK 快速入门](/cn/tutorial/sdk-quickstart)。有关以任务为中心的收益指南,请参阅 [使用 SDK 赚取收益](/cn/how-to/earn-yield)。 ## 安装 @@ -20,11 +20,11 @@ npm install @stablechain/sdk viem added 2 packages, audited 3 packages in 2s ``` -`viem >= 2.0.0` 是一个对等依赖。 +`viem >= 2.0.0` 是一个对等依赖项。该包发布为 [`@stablechain/sdk`](https://www.npmjs.com/package/@stablechain/sdk)。 ## `createStable(config)` -构造一个 `StableClient`。返回一个包含 [`StableClient`](#stableclient) 中列出的方法的对象。 +构造一个 `StableClient`。返回一个包含 [`StableClient`](#stableclient) 下列出的方法的对象。 ```ts import { createStable, Network } from "@stablechain/sdk"; @@ -48,13 +48,13 @@ StableClient { transfer, quoteBridge, bridge, quoteSwap, swap, earn } | `earn` | `{ vault: string }` | | Morpho V2 保险库配置。调用 `stable.earn` 存款、取款、赎回和准备 calldata 方法时需要。 | | `merklApiBase` | `string` | `https://api.merkl.xyz` | Merkl 奖励 API 基础 URL。覆盖以通过您自己的服务器代理并避免浏览器 CORS 限制。 | -提供 `account`、`transport` 或 `walletClient` 中的一个。`earn` 字段是可选的:转账、跨链桥和掉期在没有它也可以工作。保险库存款和取款需要它,如果您在没有配置保险库的情况下调用它们,SDK 会抛出 `StableValidationError`。 +提供 `account`、`transport` 或 `walletClient` 中的一个。`earn` 字段是可选的:转账、桥接和兑换在没有它的情况下也能工作。保险库存款和取款需要它,如果您在没有配置保险库的情况下调用它们,SDK 会抛出 `StableValidationError`。 ## `StableClient` ### `transfer(params)` -在 Stable 上发送原生 USDT0 或任何 ERC-20。将钱包切换到 Stable 链,当缺失时在链上获取代币小数位数,并等待收据。 +在 Stable 上发送原生 USDT0 或任何 ERC-20。将钱包切换到 Stable 链,在缺失时链上获取代币小数位数,并等待收据。 ```ts const { txHash } = await stable.transfer({ @@ -72,22 +72,22 @@ const { txHash } = await stable.transfer({ | :--- | :--- | :--- | | `from` | `string` | 发送方地址。 | | `to` | `string` | 接收方地址。 | -| `amount` | `number` | 人类可读的数量。 | -| `token` | `string?` | ERC-20 合约地址。原生 USDT0 则省略。 | +| `amount` | `number` | 人类可读金额。 | +| `token` | `string?` | ERC-20 合约地址。原生 USDT0 忽略。 | | `tokenDecimals` | `number?` | 小数位数。省略时在链上获取。 | 返回 `OperationResult` (`{ txHash, toAmount? }`)。 ### `quoteBridge(params)` -预览跨链桥。只读。无签名,无 gas。 +预览桥接。只读。无签名,无 gas。 ```ts const quote = await stable.quoteBridge({ fromChain: Chain.Ethereum, toChain: Chain.Stable, - fromToken: "0xdAC17F958D2ee523a2206206994597C13D831ec7", // 以太坊上的 USDT - toToken: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736", // Stable 上的 USDT0 + fromToken: "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT on Ethereum + toToken: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736", // USDT0 on Stable amount: 100, }); ``` @@ -99,12 +99,12 @@ const quote = await stable.quoteBridge({ 返回 `BridgeQuote`。 :::note -LI.FI 仅为 [`Chain`](#chain) 枚举中的主网链提供报价。`Chain.Sepolia` 和 `Chain.StableTestnet` 被 `StableQuoteError` 拒绝,并且 `CHAIN_CONFIGS` 中的某些代币地址(例如以太坊上的 USDT0)在 LI.FI 的报价拒绝列表中。如有疑问,请使用链的规范代币进行报价。 +LI.FI 仅为主网链([`Chain`](#chain) 枚举中的)提供报价。`Chain.Sepolia` 和 `Chain.StableTestnet` 会被 `StableQuoteError` 拒绝,并且 `CHAIN_CONFIGS` 中的某些代币地址(例如以太坊上的 USDT0)在 LI.FI 的报价拒绝列表中。如有疑问,请使用链的规范代币进行报价。 ::: ### `bridge(params)` -通过 LI.FI 进行跨链桥接代币,LI.FI 会选择桥接路由。SDK 会处理 ERC-20 批准并在发送前将钱包切换到源链。传递预先获取的 `quote` 可跳过内部报价调用。 +通过 LI.FI 桥接跨链代币,LI.FI 选择桥接路径。SDK 处理 ERC-20 批准并在发送前将钱包切换到源链。传递预获取的 `quote` 以跳过内部报价调用。 ```ts const { txHash } = await stable.bridge({ ...bridgeParams, quote }); @@ -120,14 +120,14 @@ const { txHash } = await stable.bridge({ ...bridgeParams, quote }); | `toChain` | `Chain` | 目标链。 | | `fromToken` | `string` | 源代币合约地址。 | | `toToken` | `string` | 目标代币合约地址。 | -| `amount` | `number` | 人类可读的数量。 | +| `amount` | `number` | 人类可读金额。 | | `fromDecimals` | `number?` | 源代币小数位数。默认为 `6`。 | | `recipient` | `string?` | 目标地址。默认为签名者。 | -| `quote` | `BridgeQuote?` | 预先获取的报价。跳过内部报价调用。 | +| `quote` | `BridgeQuote?` | 预获取的报价。跳过内部报价调用。 | ### `quoteSwap(params)` -在 Stable 上获取 LI.FI 掉期报价。返回预构建的交易请求和批准地址。 +在 Stable 上获取 LI.FI 兑换报价。返回一个预构建的交易请求和批准地址。 ```ts const quote = await stable.quoteSwap({ @@ -143,12 +143,12 @@ const quote = await stable.quoteSwap({ ``` :::note -掉期路由取决于 LI.FI 在 Stable 上的 DEX 覆盖范围,目前仍然有限。当没有针对某个交易对的路由时,`quoteSwap` 和 `swap` 会抛出 `StableQuoteError` 并显示“请求的转账没有可用报价”。 +兑换路径取决于 LI.FI 在 Stable 上的 DEX 覆盖范围,目前仍然有限。当没有针对某个交易对的路径时,`quoteSwap` 和 `swap` 会抛出 `StableQuoteError`,错误信息为“No available quotes for the requested transfer”。 ::: ### `swap(params)` -通过 LI.FI 在 Stable 上交换代币。自动处理 ERC-20 批准,并在需要时切换钱包的链。 +通过 LI.FI 在 Stable 上兑换代币。自动处理 ERC-20 批准并在需要时切换钱包的链。 ```ts const { txHash, toAmount } = await stable.swap({ ...swapParams, quote }); @@ -162,14 +162,14 @@ const { txHash, toAmount } = await stable.swap({ ...swapParams, quote }); | :--- | :--- | :--- | :--- | | `fromToken` | `string` | | 源代币地址。 | | `toToken` | `string` | | 目标代币地址。 | -| `amount` | `number` | | 人类可读的数量。 | +| `amount` | `number` | | 人类可读金额。 | | `fromDecimals` | `number?` | `6` | 源代币小数位数。 | | `toAddress` | `string?` | signer | 接收方地址。 | -| `quote` | `SwapQuote?` | | 预取报价。跳过 LI.FI 调用。 | +| `quote` | `SwapQuote?` | | 预获取的报价。跳过 LI.FI 调用。 | ## `stable.earn` -将 USDT0 存入 Morpho V2 Vault 以赚取收益,并领取 Merkl 激励奖励。所有方法都位于 `earn` 命名空间下,并需要一个签名者。存款、取款、赎回和准备 calldata 方法还需要 [`StableConfig`](#stableconfig) 中的 `earn: { vault }`。 +将 USDT0 存入 Morpho V2 保险库以获取收益,并领取 Merkl 激励奖励。所有方法都位于 `earn` 命名空间下,并且需要签名器。存款、取款、赎回和 prepare-calldata 方法还需要在 [`StableConfig`](#stableconfig) 中设置 `earn: { vault }`。 ```ts const stable = createStable({ @@ -183,11 +183,11 @@ const stable = createStable({ stable.earn { deposit, bulkDeposit, withdraw, bulkWithdraw, redeem, forceWithdraw, forceRedeem, prepareDepositCalldata, prepareWithdrawCalldata, prepareRedeemCalldata, incentiveRewards } ``` -金额和份额计数是人类可读的数字。如果您省略资产和份额的小数位数,则会从链上获取。存款、取款、赎回和强制方法返回 `EarnResult` (`{ txHash, idempotencyKey? }`) 并在解析前等待收据。批处理方法返回 `BulkEarnResult`,`incentiveRewards.claim()` 返回 `MerklClaimResult`,将在下面的部分中介绍。 +金额和份额数量是人类可读的数字。如果您省略资产和份额的小数位数,它们会在链上获取。存款、取款、赎回和强制方法返回 `EarnResult` (`{ txHash, idempotencyKey? }`) 并在解析之前等待收据。批量方法返回 `BulkEarnResult`,`incentiveRewards.claim()` 返回 `MerklClaimResult`,这些都在下面的各自部分中描述。 ### `deposit(params)` -将资产存入保险库。一次调用即可处理 ERC-20 批准(或钱包支持时的许可签名),然后是存款。 +向保险库提供资产。通过一次调用处理 ERC-20 批准(或钱包支持时的许可签名),然后是存款。 ```ts const { txHash } = await stable.earn.deposit({ amount: 100 }); @@ -199,16 +199,16 @@ const { txHash } = await stable.earn.deposit({ amount: 100 }); | **参数** | **类型** | **默认值** | **描述** | | :--- | :--- | :--- | :--- | -| `amount` | `number` | | 要存入的底层资产,人类可读。 | -| `vault` | `string?` | config vault | 保险库地址覆盖。在 `bulkDeposit` 中跨多个保险库逐项需要。 | -| `tokenDecimals` | `number?` | on-chain | 底层资产小数位数。 | +| `amount` | `number` | | 要存入的基础资产,人类可读。 | +| `vault` | `string?` | config vault | 保险库地址覆盖。在 `bulkDeposit` 中跨多个保险库按项目要求。 | +| `tokenDecimals` | `number?` | on-chain | 基础资产小数位数。 | | `slippageTolerance` | `number?` | `0.0003` | 滑点以小数表示(例如 `0.003` = 0.3%)。默认为 Morpho 的 0.03%。 | -| `depositBuffer` | `number?` | | 此存款可消耗的保险库闲置流动性的最大百分比(例如 `0.8` = 80%)。必须 `> 0` 且 `≤ 1`。如果超出则在发送前抛出。 | -| `idempotencyKey` | `string?` | | 去重键。第二次带在途键的调用返回相同的 Promise。 | +| `depositBuffer` | `number?` | | 此存款可能消耗的保险库闲置流动性的最大比例(例如 `0.8` = 80%)。必须 `> 0` 且 `≤ 1`。如果超出,则在发送前抛出。 | +| `idempotencyKey` | `string?` | | 去重键。第二次调用一个正在进行的键会返回相同的 Promise。 | ### `withdraw(params)` -提取给定数量的底层资产。当闲置资金池流动性不足时,SDK 会自动从资金池的适配器中解除分配以弥补差额。 +提取给定数量的基础资产。当保险库闲置流动性不足时,SDK 会自动从保险库的适配器中解除分配以弥补差额。 ```ts const { txHash } = await stable.earn.withdraw({ amount: 50 }); @@ -220,13 +220,13 @@ const { txHash } = await stable.earn.withdraw({ amount: 50 }); | **参数** | **类型** | **默认值** | **描述** | | :--- | :--- | :--- | :--- | -| `amount` | `number` | | 要提取的底层资产,人类可读。 | -| `tokenDecimals` | `number?` | on-chain | 底层资产的小数位数。 | +| `amount` | `number` | | 要提取的基础资产,人类可读。 | +| `tokenDecimals` | `number?` | on-chain | 基础资产小数位数。 | | `idempotencyKey` | `string?` | | 去重键。 | ### `redeem(params)` -将一定数量的 Vault 份额赎回为基础资产。与 `withdraw` 类似,当闲置流动性不足时,它会自动从 Adapter 中解除分配。 +将数量的保险库份额赎回为基础资产。与 `withdraw` 类似,当闲置流动性不足时,它会自动从适配器中解除分配。 ```ts const { txHash } = await stable.earn.redeem({ shares: 25 }); @@ -238,13 +238,13 @@ const { txHash } = await stable.earn.redeem({ shares: 25 }); | **参数** | **类型** | **默认值** | **描述** | | :--- | :--- | :--- | :--- | -| `shares` | `number` | | 要赎回的 Vault 份额,人类可读。 | -| `shareDecimals` | `number?` | on-chain | Vault 份额小数位数。 | +| `shares` | `number` | | 要赎回的 Vault Shares,人类可读。 | +| `shareDecimals` | `number?` | on-chain | Vault Share 小数位数。 | | `idempotencyKey` | `string?` | | 去重键。 | ### `bulkDeposit(items, options?)` / `bulkWithdraw(items, options?)` -按顺序运行多个存款或取款。默认情况下,批量尝试每个项目并返回部分结果。设置 `stopOnError: true` 以在第一次失败时停止并抛出 `StableBulkError`。 +按顺序运行多个存款或取款。默认情况下,批处理会尝试每个项目并返回部分结果。设置 `stopOnError: true` 以在第一次失败时停止并抛出 `StableBulkError`。 ```ts const result = await stable.earn.bulkDeposit([ @@ -264,11 +264,11 @@ const result = await stable.earn.bulkDeposit([ | `idempotencyKey` | `string?` | | 批处理级别的去重键。 | | `stopOnError` | `boolean?` | `false` | 在第一次失败时停止并抛出 `StableBulkError`,而不是返回部分结果。 | -返回 `BulkEarnResult` (`{ results, succeeded, failed, idempotencyKey? }`)。`results` 中的每个条目要么是 `{ status: "fulfilled", txHash, vault?, idempotencyKey? }`,要么是 `{ status: "rejected", error, vault?, idempotencyKey? }`。 +返回 `BulkEarnResult` (`{ results, succeeded, failed, idempotencyKey? }`)。`results` 中的每个条目都是 `{ status: "fulfilled", txHash, vault?, idempotencyKey? }` 或 `{ status: "rejected", error, vault?, idempotencyKey? }`。 ### `forceWithdraw(params)` / `forceRedeem(params)` -通过明确控制首先解除分配哪些适配器头寸来取款或赎回。当您需要自己选择来源市场而不是 `withdraw` / `redeem` 中的自动选择时,请使用这些。 +通过对首先解除分配哪些适配器头寸的明确控制来提取或赎回。当您需要自行选择来源市场而不是 `withdraw` / `redeem` 中的自动选择时,请使用这些方法。 ```ts const { txHash } = await stable.earn.forceWithdraw({ @@ -281,17 +281,17 @@ const { txHash } = await stable.earn.forceWithdraw({ { txHash: "0xabcd...7890" } ``` -两者都接受一个 `deallocations: ForceDeallocation[]` 数组和一个可选的 `tokenDecimals`(用于解除分配数量的底层资产小数位数;如果省略,则在链上获取)。`forceWithdraw` 接受 `amount`;`forceRedeem` 接受 `shares` 和可选的 `shareDecimals`。每个 `ForceDeallocation` 是: +两者都接受 `deallocations: ForceDeallocation[]` 数组和一个可选的 `tokenDecimals`(基础资产小数位数,用于解除分配金额;省略时在链上获取)。`forceWithdraw` 接受 `amount`;`forceRedeem` 接受 `shares` 和可选的 `shareDecimals`。每个 `ForceDeallocation` 都是: | **字段** | **类型** | **描述** | | :--- | :--- | :--- | | `adapter` | `string` | 要解除分配的适配器合约。 | -| `amount` | `number` | 要解除分配的数量,以底层资产单位表示。 | -| `marketParams` | `object?` | 仅当 Morpho Blue 市场适配器才需要:`{ loanToken, collateralToken, oracle, irm, lltv }` (`lltv` 乘以 1e18)。Vault 适配器则省略。 | +| `amount` | `number` | 要解除分配的金额,以基础资产单位表示。 | +| `marketParams` | `object?` | 仅适用于 Morpho Blue 市场适配器:`{ loanToken, collateralToken, oracle, irm, lltv }`(`lltv` 乘以 1e18 后)。保险库适配器省略。 | ### `prepareDepositCalldata(params)` / `prepareWithdrawCalldata(params)` / `prepareRedeemCalldata(params)` -构建事务 calldata,但不签名或发送。使用这些将事务通过中继器、燃气费豁免流或多重签名。 +构建交易 calldata,不进行签名或发送。使用这些方法通过中继器、免 Gas 流程或多重签名来路由交易。 ```ts const { steps, chainId } = await stable.earn.prepareDepositCalldata({ amount: 100 }); @@ -301,11 +301,11 @@ const { steps, chainId } = await stable.earn.prepareDepositCalldata({ amount: 10 { steps: [ { to: "0x...", data: "0x...", value: 0n } ], chainId: 988 } ``` -`prepareDepositCalldata` 返回 `EarnDepositCalldata` (`{ steps, chainId }`),其中 `steps` 是 `{ to, data, value }` 事务的有序列表:可选的代币批准,然后是存款。`prepareWithdrawCalldata` 和 `prepareRedeemCalldata` 返回 `EarnWithdrawCalldata` (`{ to, data, value, chainId }`),一个单一事务。它们接受与其签名对应物相同的参数。 +`prepareDepositCalldata` 返回 `EarnDepositCalldata` (`{ steps, chainId }`),其中 `steps` 是 `{ to, data, value }` 事务的有序列表:一个可选的代币批准,然后是存款。`prepareWithdrawCalldata` 和 `prepareRedeemCalldata` 返回 `EarnWithdrawCalldata` (`{ to, data, value, chainId }`),一个单一事务。它们接受与其签名对应物相同的参数。 ### `incentiveRewards` -获取并申领签名者的 Merkl 奖励代币。这些方法需要签名者,但不需要 `earn` vault 配置。 +获取并申领签名者的 Merkl 奖励代币。这些方法需要签名者,但不需要 `earn` 保险库配置。 ```ts const { rewards } = await stable.earn.incentiveRewards.fetch(); @@ -316,15 +316,15 @@ const { txHash, tokenCount } = await stable.earn.incentiveRewards.claim(); { txHash: "0xabcd...7890", tokenCount: 1 } ``` -`fetch()` 返回 `MerklRewardsResult` (`{ chainId, rewards: MerklReward[] }`),其中包含每个代币的可申领净额。`claim()` 申领当前 Merkl 默克尔树中提交的所有奖励,并返回 `MerklClaimResult` (`{ txHash, tokenCount }`)。 +`fetch()` 返回 `MerklRewardsResult` (`{ chainId, rewards: MerklReward[] }`),其中包含每个代币可申领的净金额。`claim()` 申领提交到当前 Merkl 默克尔树的所有奖励,并返回 `MerklClaimResult` (`{ txHash, tokenCount }`)。 :::note -Merkl 大约每两个小时将奖励提交到其默克尔树。仍在等待更新的奖励尚不能申领。调用 `claim()` 且无可申领内容时将抛出 `StableValidationError`。 +Merkl 大约每两小时将其奖励提交到其默克尔树。尚未更新的未决奖励尚无法申领。调用 `claim()` 时没有可申领的内容会抛出 `StableValidationError`。 ::: ## `createStableReader(config)` -为 Vault 收益和头寸数据构建一个只读的 `StableReader`。不需要签名者,只需要您要读取的地址。 +构造一个只读的 `StableReader` 用于保险库收益和头寸数据。不需要签名者,只需要您想要读取的地址。 ```ts import { createStableReader, Network } from "@stablechain/sdk"; @@ -345,7 +345,7 @@ StableReader { earn: { getYield, position, preview, withdrawability, incentiveRe | **字段** | **类型** | **默认值** | **描述** | | :--- | :--- | :--- | :--- | | `address` | `string` | | 要读取其头寸和奖励的用户地址。必填。 | -| `earn` | `{ vault: string }` | | 要读取的 Vault。必填:如果缺少,`createStableReader` 将抛出 `StableValidationError`。 | +| `earn` | `{ vault: string }` | | 要读取的保险库。必填:如果缺少,`createStableReader` 将抛出 `StableValidationError`。 | | `network` | `Network?` | `Network.Mainnet` | 目标网络。 | | `rpc` | `string?` | 公共 RPC | RPC 覆盖。 | | `merklApiBase` | `string?` | `https://api.merkl.xyz` | Merkl 奖励 API 基础 URL。 | @@ -354,7 +354,7 @@ StableReader { earn: { getYield, position, preview, withdrawability, incentiveRe ### `getYield()` -返回 Vault 当前的净 APY 和费用明细。 +返回保险库当前的净年化收益率和费用明细。 ```ts const vaultYield = await reader.earn.getYield(); @@ -364,11 +364,11 @@ const vaultYield = await reader.earn.getYield(); { apy: 0.058, native: 0.041, rewards: [ { symbol: "MORPHO", address: "0x...", apr: 0.017 } ], performanceFee: 0.1, managementFee: 0 } ``` -返回 `VaultYield`。`apy` 是扣除奖励提升后总的净 APY;`native` 是不包括奖励的基础市场收益。所有值都是小数(`0.05` = 5%)。 +返回 `VaultYield`。`apy` 是扣除奖励提升后的总净 APY;`native` 是不包括奖励的基础市场收益。所有值都是小数(`0.05` = 5%)。 ### `position()` -返回已配置地址的当前 Vault 头寸。 +返回配置地址的当前保险库头寸。 ```ts const position = await reader.earn.position(); @@ -378,11 +378,11 @@ const position = await reader.earn.position(); { shares: 100000000n, sharesFormatted: 100, shareDecimals: 6, assets: 101.2, tokenDecimals: 6, assetAddress: "0x..." } ``` -返回 `VaultPosition`,其中包含原始 `shares` 余额、其 `sharesFormatted` 人类可读值以及这些份额以基础单位表示的 `assets` 值。 +返回 `VaultPosition`,其中包含原始 `shares` 余额,其 `sharesFormatted` 人类可读值,以及这些份额以基础单位表示的 `assets` 值。 ### `preview(params)` -使用保险库的实时净 APY,预测一段时间内的收益。 +使用保险库的实时净 APY,预测在给定时间内某个金额的收益。 ```ts const preview = await reader.earn.preview({ amount: 1000, horizonDays: 30 }); @@ -401,7 +401,7 @@ const preview = await reader.earn.preview({ amount: 1000, horizonDays: 30 }); ### `withdrawability(params)` -检查是否可以从保管库的闲置流动性中即时提取一定数量。 +检查某个金额是否可以从保险库的闲置流动性中即时提取。 ```ts const status = await reader.earn.withdrawability({ amount: 5000 }); @@ -413,14 +413,14 @@ const status = await reader.earn.withdrawability({ amount: 5000 }); | **参数** | **类型** | **默认值** | **描述** | | :--- | :--- | :--- | :--- | -| `amount` | `number` | | 要测试的数量,人类可读。 | -| `tokenDecimals` | `number?` | on-chain | 基础资产的小数位数。 | +| `amount` | `number` | | 测试金额,人类可读。 | +| `tokenDecimals` | `number?` | on-chain | 基础资产小数位数。 | -返回 `WithdrawStatus` (`{ isInstant, availableLiquidity, tokenDecimals }`)。当 `isInstant` 为 `false` 时,提款需要适配器解除分配,`stable.earn.withdraw` 会自动处理。 +返回 `WithdrawStatus` (`{ isInstant, availableLiquidity, tokenDecimals }`)。当 `isInstant` 为 `false` 时,提现需要适配器解除分配,`stable.earn.withdraw` 会自动处理。 ### `incentiveRewards.fetch()` -读取已配置地址的待处理 Merkl 奖励。与 `stable.earn.incentiveRewards.fetch` 对应的只读方法。 +读取配置地址的待处理 Merkl 奖励。与 `stable.earn.incentiveRewards.fetch` 对应的只读方法。 ```ts const { rewards } = await reader.earn.incentiveRewards.fetch(); @@ -443,25 +443,25 @@ const { rewards } = await reader.earn.incentiveRewards.fetch(); ### `Chain` -由 `quoteBridge` 和 `bridge` 使用。每个条目都有一个相应的 `CHAIN_CONFIGS` 条目。定义两个测试网条目是为了完整性,但 LI.FI 拒绝它们:桥接仅在主网链之间工作。 +由 `quoteBridge` 和 `bridge` 使用。每个条目都有一个对应的 `CHAIN_CONFIGS` 条目。两个测试网条目是为了完整性而定义的,但 LI.FI 拒绝它们:桥接仅在主网链之间工作。 | **枚举** | **网络** | **链 ID** | | :--- | :--- | :--- | -| `Chain.Sepolia` | Ethereum Sepolia | 11155111 | -| `Chain.StableTestnet` | Stable Testnet | 2201 | -| `Chain.Stable` | Stable Mainnet | 988 | -| `Chain.Ethereum` | Ethereum | 1 | +| `Chain.Sepolia` | 以太坊 Sepolia | 11155111 | +| `Chain.StableTestnet` | Stable 测试网 | 2201 | +| `Chain.Stable` | Stable 主网 | 988 | +| `Chain.Ethereum` | 以太坊 | 1 | | `Chain.Arbitrum` | Arbitrum One | 42161 | | `Chain.Ink` | Ink | 57073 | | `Chain.Bera` | Berachain | 80094 | | `Chain.MegaETH` | MegaETH | 4326 | | `Chain.Base` | Base | 8453 | -| `Chain.BSC` | BNB Smart Chain | 56 | +| `Chain.BSC` | BNB 智能链 | 56 | | `Chain.HyperEVM` | HyperEVM | 999 | ## `CHAIN_CONFIGS` -由 `Chain` 枚举键入的 `Partial>`。每个条目都公开 `id`、`rpc`、`usdt` 和 `decimals`。当您需要支持的链上的规范 USDT 地址而无需硬编码时使用。 +`Partial>` 以 `Chain` 枚举为键。每个条目都公开 `id`、`rpc`、`usdt` 和 `decimals`。当您需要支持链上的规范 USDT 地址而无需硬编码时使用它。 ```ts import { CHAIN_CONFIGS, Chain } from "@stablechain/sdk"; @@ -475,7 +475,7 @@ console.log(CHAIN_CONFIGS[Chain.Stable]); ## 常量 -规范主网地址,导出以便您不必硬编码。 +规范主网地址,已导出,因此您无需硬编码它们。 ```ts import { STABLE_USDT_ADDRESS, STABLE_VAULT_ADDRESS } from "@stablechain/sdk"; @@ -489,19 +489,19 @@ STABLE_VAULT_ADDRESS 0xb7Df8db22A5DBBFA9ebeb94b3910aec6a4f05c08 | **常量** | **描述** | | :--- | :--- | | `STABLE_USDT_ADDRESS` | Stable 主网上的 USDT 代币地址。 | -| `STABLE_VAULT_ADDRESS` | Stable 主网上的默认 Morpho V2 earn vault。传递给 `earn: { vault }`。 | +| `STABLE_VAULT_ADDRESS` | Stable 主网上的默认 Morpho V2 收益保险库。传递给 `earn: { vault }`。 | ## 错误 -所有 SDK 错误都扩展了 `StableError`,后者又扩展了 viem 的 `BaseError`。错误携带结构化元数据,因此您可以根据 `error.name` 或 `instanceof` 进行分支。 +所有 SDK 错误都扩展了 `StableError`,而 `StableError` 又扩展了 viem 的 `BaseError`。错误带有结构化元数据,因此您可以根据 `error.name` 或 `instanceof` 进行分支。 -| **类** | **抛出时机** | **有用字段** | +| **类** | **抛出条件** | **有用字段** | | :--- | :--- | :--- | -| `StableValidationError` | 参数验证失败(地址错误、金额非有限、不支持的链)。 | `field`, `value` | -| `StableQuoteError` | 向 LI.FI 发出的报价请求失败。 | `provider`, `httpStatus`, `providerCode`, `body` | -| `StableTransactionError` | 链上步骤失败:链切换、批准、发送或回滚。 | `phase`, `txHash`, `chainId`, `revertReason` | +| `StableValidationError` | 参数验证失败(地址错误、金额非有限、不支持的链)。 | `field`、`value` | +| `StableQuoteError` | 向 LI.FI 发送报价请求失败。 | `provider`、`httpStatus`、`providerCode`、`body` | +| `StableTransactionError` | 链上步骤失败:链切换、批准、发送或回滚。 | `phase`、`txHash`、`chainId`、`revertReason` | | `StableNetworkError` | 底层 HTTP/RPC 调用失败(例如 Morpho 或 Merkl API)。 | `url` | -| `StableBulkError` | 带有 `stopOnError: true` 的 `bulkDeposit` 或 `bulkWithdraw` 运行,遇到首次失败。 | `results`, `succeeded`, `failed` | +| `StableBulkError` | 运行 `bulkDeposit` 或 `bulkWithdraw` 时,如果 `stopOnError: true`,则在第一次失败时触发。 | `results`、`succeeded`、`failed` | ```ts import { StableTransactionError } from "@stablechain/sdk"; @@ -510,7 +510,7 @@ try { await stable.transfer({ from, to, amount: 1 }); } catch (err) { if (err instanceof StableTransactionError && err.phase === "switch_chain") { - // 用户拒绝了链切换 + // user rejected the chain switch } throw err; } @@ -522,8 +522,8 @@ StableTransactionError: transfer: wallet rejected or failed to switch to chain 9 Chain ID: 988 ``` -## 接下来推荐 +## 下一步建议 -- [**SDK 快速入门**](/cn/tutorial/sdk-quickstart):安装 SDK 并在测试网上运行您的首次转账。 -- [**与 viem 结合使用**](/cn/how-to/sdk-with-viem):在私钥、浏览器钱包和预建签名器之间切换。 -- [**与 wagmi 结合使用**](/cn/how-to/sdk-with-wagmi):使用 Hooks 将 SDK 连接到 React 应用程序。 +- [**SDK 快速入门**](/cn/tutorial/sdk-quickstart):安装 SDK 并在测试网上运行您的第一个转账。 +- [**与 viem 一起使用**](/cn/how-to/sdk-with-viem):在私钥、浏览器钱包和预构建签名器之间切换。 +- [**与 wagmi 一起使用**](/cn/how-to/sdk-with-wagmi):使用 hooks 将 SDK 连接到 React 应用程序。 diff --git a/docs/pages/en/reference/sdk.mdx b/docs/pages/en/reference/sdk.mdx index cb2522d..32d28c4 100755 --- a/docs/pages/en/reference/sdk.mdx +++ b/docs/pages/en/reference/sdk.mdx @@ -18,7 +18,7 @@ npm install @stablechain/sdk viem added 2 packages, audited 3 packages in 2s ``` -`viem >= 2.0.0` is a peer dependency. +`viem >= 2.0.0` is a peer dependency. The package is published as [`@stablechain/sdk`](https://www.npmjs.com/package/@stablechain/sdk). ## `createStable(config)` diff --git a/docs/pages/ko/reference/sdk.mdx b/docs/pages/ko/reference/sdk.mdx index b1e74d6..10c2557 100644 --- a/docs/pages/ko/reference/sdk.mdx +++ b/docs/pages/ko/reference/sdk.mdx @@ -1,14 +1,14 @@ --- source_path: reference/sdk.mdx -source_sha: cb2522d5ba3ff23ce6506a1bdc182e119b247b59 +source_sha: 32d28c4444eca99791c0c0872c009abd014787f0 title: "SDK 레퍼런스" -description: "@stablechain/sdk의 완전한 레퍼런스: createStable, createStableReader, transfer, bridge, swap, earn 및 yield 메서드, 열거형, 오류 클래스." +description: "Stablechain/sdk에 대한 완전한 레퍼런스: createStable, createStableReader, transfer, bridge, swap, earn 및 yield 메서드, 열거형 및 오류 클래스." diataxis: "reference" --- # SDK 레퍼런스 -`@stablechain/sdk`의 전체 표면입니다. 여기에는 [`createStable`](#createstableconfig)의 서명 클라이언트, [`createStableReader`](#createstablereaderconfig)의 읽기 전용 클라이언트, 공유되는 열거형, 상수, 오류 클래스가 포함됩니다. 자세한 내용은 [SDK 퀵스타트](/ko/tutorial/sdk-quickstart)를 참조하십시오. 작업 중심의 수익 가이드에 대해서는 [SDK로 수익 얻기](/ko/how-to/earn-yield)를 참조하십시오. +`@stablechain/sdk`의 전체 표면. 여기에는 [`createStable`](#createstableconfig)의 서명 클라이언트, [`createStableReader`](#createstablereaderconfig)의 읽기 전용 클라이언트, 공유 열거형, 상수 및 오류 클래스가 포함됩니다. 자세한 내용은 [SDK 퀵스타트](/ko/tutorial/sdk-quickstart)를 참조하십시오. 작업 중심의 수익 가이드를 보려면 [SDK로 수익 얻기](/ko/how-to/earn-yield)를 참조하십시오. ## 설치 @@ -20,11 +20,11 @@ npm install @stablechain/sdk viem added 2 packages, audited 3 packages in 2s ``` -`viem >= 2.0.0`은 피어 종속성입니다. +`viem >= 2.0.0`은 피어 의존성입니다. 패키지는 [`@stablechain/sdk`](https://www.npmjs.com/package/@stablechain/sdk)로 게시됩니다. ## `createStable(config)` -`StableClient`를 구성합니다. [`StableClient`](#stableclient)에 나열된 메서드를 포함하는 객체를 반환합니다. +`StableClient`를 구성합니다. [`StableClient`](#stableclient)에 나열된 메서드가 포함된 객체를 반환합니다. ```ts import { createStable, Network } from "@stablechain/sdk"; @@ -41,20 +41,20 @@ StableClient { transfer, quoteBridge, bridge, quoteSwap, swap, earn } | **필드** | **유형** | **기본값** | **설명** | | :--- | :--- | :--- | :--- | | `network` | `Network` | `Network.Mainnet` | 대상 네트워크. | -| `rpc` | `string` | `network`의 공개 RPC | RPC 재정의. | -| `account` | `viem.Account` | | 서버 측 서명자(예: `privateKeyToAccount`). | -| `transport` | `viem.Transport` | | 브라우저-지갑 전송(예: `custom(window.ethereum)`). | -| `walletClient` | `viem.WalletClient` | | 미리 빌드된 지갑 클라이언트. `account` 및 `transport`보다 우선합니다. | -| `earn` | `{ vault: string }` | | Morpho V2 볼트 구성. `stable.earn` 입금, 출금, 상환 및 calldata 준비 메서드를 호출하는 데 필요합니다. | -| `merklApiBase` | `string` | `https://api.merkl.xyz` | Merkl 보상 API 기본 URL. 자체 서버를 통해 프록시하여 브라우저 CORS 제한을 피하려면 재정의하세요. | +| `rpc` | `string` | `network`에 대한 공용 RPC | RPC 재정의. | +| `account` | `viem.Account` | | 서버 측 서명자 (예: `privateKeyToAccount`). | +| `transport` | `viem.Transport` | | 브라우저-지갑 전송 (예: `custom(window.ethereum)`). | +| `walletClient` | `viem.WalletClient` | | 사전 구축된 지갑 클라이언트. `account` 및 `transport`보다 우선합니다. | +| `earn` | `{ vault: string }` | | 모포 V2 볼트 구성. `stable.earn`의 입금, 인출, 상환 및 준비-콜데이터 메서드를 호출하는 데 필요합니다. | +| `merklApiBase` | `string` | `https://api.merkl.xyz` | Merkl 보상 API 기본 URL. 자체 서버를 통해 프록시하고 브라우저 CORS 제한을 피하려면 재정의하십시오. | -`account`, `transport`, `walletClient` 중 하나를 제공합니다. `earn` 필드는 선택 사항입니다. 이 필드 없이도 transfer, bridge, swap이 작동합니다. 볼트 입금 및 출금에는 이 필드가 필요하며, 구성된 볼트 없이 호출하면 SDK는 `StableValidationError`를 발생시킵니다. +`account`, `transport` 또는 `walletClient` 중 하나를 제공하십시오. `earn` 필드는 선택 사항입니다. 전송, 브릿지 및 스왑은 그것 없이도 작동합니다. 볼트 입금 및 인출에는 필요하며, 구성된 볼트 없이 호출하면 SDK는 `StableValidationError`를 발생시킵니다. ## `StableClient` ### `transfer(params)` -네이티브 USDT0 또는 Stable의 모든 ERC-20을 보냅니다. 지갑을 Stable 체인으로 전환하고, 토큰 소수 자릿수가 누락된 경우 온체인에서 가져오며, 영수증을 기다립니다. +Stable에서 네이티브 USDT0 또는 모든 ERC-20을 보냅니다. 지갑을 Stable 체인으로 전환하고, 누락된 경우 온체인에서 토큰 소수점을 가져오고, 영수증을 기다립니다. ```ts const { txHash } = await stable.transfer({ @@ -73,14 +73,14 @@ const { txHash } = await stable.transfer({ | `from` | `string` | 발신자 주소. | | `to` | `string` | 수신자 주소. | | `amount` | `number` | 읽기 쉬운 금액. | -| `token` | `string?` | ERC-20 컨트랙트 주소. 네이티브 USDT0의 경우 생략. | -| `tokenDecimals` | `number?` | 소수 자릿수. 생략 시 온체인에서 가져옵니다. | +| `token` | `string?` | ERC-20 계약 주소. 네이티브 USDT0의 경우 생략. | +| `tokenDecimals` | `number?` | 소수점. 생략하면 온체인에서 가져옵니다. | `OperationResult` (`{ txHash, toAmount? }`)를 반환합니다. ### `quoteBridge(params)` -브리지를 미리 봅니다. 읽기 전용. 서명 없음, 가스 없음. +브릿지 미리보기. 읽기 전용. 서명 없음, 가스 없음. ```ts const quote = await stable.quoteBridge({ @@ -99,12 +99,12 @@ const quote = await stable.quoteBridge({ `BridgeQuote`를 반환합니다. :::note -LI.FI는 [`Chain`](#chain) 열거형의 메인넷 체인에 대해서만 견적을 제공합니다. `Chain.Sepolia` 및 `Chain.StableTestnet`은 `StableQuoteError`와 함께 거부되며, `CHAIN_CONFIGS`의 일부 토큰 주소(예: 이더리움의 USDT0)는 LI.FI의 견적 거부 목록에 있습니다. 확실하지 않을 경우 체인의 정식 토큰으로 견적을 요청하십시오. +LI.FI는 [`Chain`](#chain) 열거형의 메인넷 체인에 대해서만 견적을 제공합니다. `Chain.Sepolia` 및 `Chain.StableTestnet`은 `StableQuoteError`로 거부되며, `CHAIN_CONFIGS`의 일부 토큰 주소(예: 이더리움의 USDT0)는 LI.FI의 견적 거부 목록에 있습니다. 확실하지 않을 경우 체인의 정식 토큰으로 견적을 받으십시오. ::: ### `bridge(params)` -LI.FI를 통해 토큰을 크로스체인 브리징하며, LI.FI가 브리지 경로를 선택합니다. SDK는 ERC-20 승인을 처리하고 전송 전에 지갑을 소스 체인으로 전환합니다. 미리 가져온 `quote`를 전달하여 내부 견적 호출을 건너뛸 수 있습니다. +LI.FI를 통해 토큰을 크로스 체인으로 브릿지하며, 이는 브릿지 경로를 선택합니다. SDK는 ERC-20 승인을 처리하고 보내기 전에 지갑을 소스 체인으로 전환합니다. 내부 견적 호출을 건너뛰려면 미리 가져온 `quote`를 전달하십시오. ```ts const { txHash } = await stable.bridge({ ...bridgeParams, quote }); @@ -118,19 +118,19 @@ const { txHash } = await stable.bridge({ ...bridgeParams, quote }); | :--- | :--- | :--- | | `fromChain` | `Chain` | 소스 체인. | | `toChain` | `Chain` | 대상 체인. | -| `fromToken` | `string` | 소스 토큰 컨트랙트 주소. | -| `toToken` | `string` | 대상 토큰 컨트랙트 주소. | -| `amount` | `number` | 읽기 쉬운 금액. | -| `fromDecimals` | `number?` | 소스 토큰 소수 자릿수. 기본값은 `6`입니다. | -| `recipient` | `string?` | 대상 주소. 서명자로 기본 설정됩니다. | +| `fromToken` | `string` | 소스 토큰 계약 주소. | +| `toToken` | `string` | 대상 토큰 계약 주소. | +| `amount` | `number` | 사람이 읽을 수 있는 금액. | +| `fromDecimals` | `number?` | 소스 토큰 소수점. 기본값은 `6`입니다. | +| `recipient` | `string?` | 대상 주소. 기본값은 서명자입니다. | | `quote` | `BridgeQuote?` | 미리 가져온 견적. 내부 견적 호출을 건너뜁니다. | ### `quoteSwap(params)` -Stable에서 LI.FI 스왑 견적을 가져옵니다. 미리 빌드된 트랜잭션 요청과 승인 주소를 반환합니다. +Stable에서 LI.FI 스왑 견적을 가져옵니다. 사전 구축된 트랜잭션 요청과 승인 주소를 반환합니다. ```ts -const quote = await stable.quoteSwap({ +const quote = await stable.earn.quoteSwap({ fromToken: "0x8a2B28364102Bea189D99A475C494330Ef2bDD0B", toToken: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736", amount: 100, @@ -143,12 +143,12 @@ const quote = await stable.quoteSwap({ ``` :::note -스왑 경로는 Stable의 LI.FI DEX 적용 범위에 따라 달라지며, 이는 아직 제한적입니다. 특정 페어에 대한 경로가 존재하지 않는 경우, `quoteSwap` 및 `swap`은 "요청된 전송에 대한 사용 가능한 견적이 없습니다"라는 메시지와 함께 `StableQuoteError`를 발생시킵니다. +스왑 경로는 LI.FI의 Stable DEX 커버리지에 따라 달라지며, 이는 아직 제한적입니다. 특정 쌍에 대한 경로가 없을 경우 `quoteSwap` 및 `swap`은 "요청된 전송에 대한 사용 가능한 견적이 없습니다"라는 `StableQuoteError`를 발생시킵니다. ::: ### `swap(params)` -LI.FI를 통해 Stable에서 토큰을 스왑합니다. 필요한 경우 ERC-20 승인을 자동으로 처리하고 지갑의 체인을 전환합니다. +LI.FI를 통해 Stable에서 토큰을 스왑합니다. ERC-20 승인을 자동으로 처리하고 필요할 때 지갑의 체인을 전환합니다. ```ts const { txHash, toAmount } = await stable.swap({ ...swapParams, quote }); @@ -160,16 +160,16 @@ const { txHash, toAmount } = await stable.swap({ ...swapParams, quote }); | **매개변수** | **유형** | **기본값** | **설명** | | :--- | :--- | :--- | :--- | -| `fromToken` | `string` | | 소스 토큰 주소. | -| `toToken` | `string` | | 대상 토큰 주소. | -| `amount` | `number` | | 읽기 쉬운 금액. | -| `fromDecimals` | `number?` | `6` | 소스 토큰 소수 자릿수. | +| `fromToken` | `string` | | 소스 토큰 주소. | +| `toToken` | `string` | | 대상 토큰 주소. | +| `amount` | `number` | | 사람이 읽을 수 있는 금액. | +| `fromDecimals` | `number?` | `6` | 소스 토큰 소수점. | | `toAddress` | `string?` | 서명자 | 수신자 주소. | -| `quote` | `SwapQuote?` | | 미리 가져온 견적. LI.FI 호출을 건너뜁니다. | +| `quote` | `SwapQuote?` | | 미리 가져온 견적. LI.FI 호출을 건너뜁니다. | ## `stable.earn` -수익을 얻기 위해 USDT0을 Morpho V2 볼트에 공급하고 Merkl 인센티브 보상을 청구합니다. 모든 메서드는 `earn` 네임스페이스 아래에 있으며 서명자가 필요합니다. 입금, 출금, 상환 및 calldata 준비 메서드에는 [`StableConfig`](#stableconfig)에 `earn: { vault }`도 필요합니다. +수익을 얻기 위해 USDT0를 모포 V2 볼트에 공급하고 Merkl 인센티브 보상을 청구합니다. 모든 메서드는 `earn` 네임스페이스 아래에 있으며 서명자가 필요합니다. 입금, 인출, 상환 및 준비-콜데이터 메서드는 `StableConfig`에 `earn: { vault }`도 필요합니다. ```ts const stable = createStable({ @@ -183,11 +183,11 @@ const stable = createStable({ stable.earn { deposit, bulkDeposit, withdraw, bulkWithdraw, redeem, forceWithdraw, forceRedeem, prepareDepositCalldata, prepareWithdrawCalldata, prepareRedeemCalldata, incentiveRewards } ``` -금액 및 주식 수는 사람이 읽을 수 있는 숫자입니다. 자산 및 주식 소수 자릿수가 생략되면 온체인에서 가져옵니다. 입금, 출금, 상환 및 강제 메서드는 `EarnResult` (`{ txHash, idempotencyKey? }`)를 반환하며, 해결되기 전에 영수증을 기다립니다. 일괄 메서드는 `BulkEarnResult`를 반환하고 `incentiveRewards.claim()`은 아래 섹션에서 설명된 `MerklClaimResult`를 반환합니다. +금액과 공유 수는 사람이 읽을 수 있는 숫자입니다. 자산 및 공유 소수점은 생략하면 온체인에서 가져옵니다. 입금, 인출, 상환 및 강제 메서드는 `EarnResult` (`{ txHash, idempotencyKey? }`)를 반환하고 해결되기 전에 영수증을 기다립니다. 대량 메서드는 `BulkEarnResult`를 반환하고 `incentiveRewards.claim()`은 아래 섹션에 설명된 `MerklClaimResult`를 반환합니다. ### `deposit(params)` -자산을 볼트에 공급합니다. ERC-20 승인(또는 지갑이 지원하는 경우 허가 서명) 및 입금을 한 번의 호출로 처리합니다. +자산을 볼트에 공급합니다. ERC-20 승인(또는 지갑이 지원하는 경우 허가 서명)을 처리한 다음 단일 호출로 입금합니다. ```ts const { txHash } = await stable.earn.deposit({ amount: 100 }); @@ -199,16 +199,16 @@ const { txHash } = await stable.earn.deposit({ amount: 100 }); | **매개변수** | **유형** | **기본값** | **설명** | | :--- | :--- | :--- | :--- | -| `amount` | `number` | | 예치할 기본 자산, 사람이 읽을 수 있는 형식. | -| `vault` | `string?` | config vault | 볼트 주소 재정의. 여러 볼트의 `bulkDeposit`에서 항목당 필요합니다. | +| `amount` | `number` | | 입금할 기본 자산, 사람이 읽을 수 있는. | +| `vault` | `string?` | 구성 볼트 | 볼트 주소 재정의. 여러 볼트에 걸쳐 `bulkDeposit`에서 항목당 필요합니다. | | `tokenDecimals` | `number?` | 온체인 | 기본 자산 소수점. | -| `slippageTolerance` | `number?` | `0.0003` | 슬리피지(소수점 형식, 예: `0.003` = 0.3%). Morpho의 0.03%로 기본 설정됩니다. | -| `depositBuffer` | `number?` | | 이 예금이 사용할 수 있는 볼트 유휴 유동성의 최대 비율(예: `0.8` = 80%). `> 0` 및 `≤ 1`이어야 합니다. 초과하면 전송 전에 오류가 발생합니다. | -| `idempotencyKey` | `string?` | | 중복 제거 키. 진행 중인 키로 두 번째 호출을 하면 동일한 Promise가 반환됩니다. | +| `slippageTolerance` | `number?` | `0.0003` | 소수점 형식의 슬리피지 (예: `0.003` = 0.3%). 기본값은 Morpho의 0.03%입니다. | +| `depositBuffer` | `number?` | | 이 입금이 소비할 수 있는 볼트의 유휴 유동성 최대 비율 (예: `0.8` = 80%). `> 0` 이고 `≤ 1` 이어야 합니다. 초과하면 보내기 전에 예외를 발생시킵니다. | +| `idempotencyKey` | `string?` | | 중복 제거 키. 진행 중인 키로 두 번째 호출은 동일한 Promise를 반환합니다. | ### `withdraw(params)` -주어진 금액의 기본 자산을 인출합니다. 유휴 볼트 유동성이 부족할 경우 SDK는 차액을 충당하기 위해 볼트 어댑터에서 자동으로 할당을 해제합니다. +주어진 양의 기본 자산을 인출합니다. 유휴 볼트 유동성이 부족할 때 SDK는 차액을 충당하기 위해 볼트의 어댑터에서 자동으로 할당을 해제합니다. ```ts const { txHash } = await stable.earn.withdraw({ amount: 50 }); @@ -220,13 +220,13 @@ const { txHash } = await stable.earn.withdraw({ amount: 50 }); | **매개변수** | **유형** | **기본값** | **설명** | | :--- | :--- | :--- | :--- | -| `amount` | `number` | | 출금할 기본 자산, 사람이 읽을 수 있는 형식. | +| `amount` | `number` | | 인출할 기본 자산, 사람이 읽을 수 있는. | | `tokenDecimals` | `number?` | 온체인 | 기본 자산 소수점. | -| `idempotencyKey` | `string?` | | 중복 제거 키. | +| `idempotencyKey` | `string?` | | 중복 제거 키. | ### `redeem(params)` -주어진 수의 볼트 주식을 기본 자산으로 상환합니다. `withdraw`와 마찬가지로 유휴 유동성이 부족할 경우 어댑터에서 자동으로 할당을 해제합니다. +기본 자산으로 다시 볼트 공유 수를 상환합니다. `withdraw`와 마찬가지로 유휴 유동성이 부족할 때 어댑터에서 자동으로 할당을 해제합니다. ```ts const { txHash } = await stable.earn.redeem({ shares: 25 }); @@ -238,13 +238,13 @@ const { txHash } = await stable.earn.redeem({ shares: 25 }); | **매개변수** | **유형** | **기본값** | **설명** | | :--- | :--- | :--- | :--- | -| `shares` | `number` | | 상환할 볼트 주식, 사람이 읽을 수 있는 형식. | -| `shareDecimals` | `number?` | 온체인 | 볼트 주식 소수점. | -| `idempotencyKey` | `string?` | | 중복 제거 키. | +| `shares` | `number` | | 상환할 볼트 공유, 사람이 읽을 수 있는. | +| `shareDecimals` | `number?` | 온체인 | 볼트 공유 소수점. | +| `idempotencyKey` | `string?` | | 중복 제거 키. | ### `bulkDeposit(items, options?)` / `bulkWithdraw(items, options?)` -여러 입금 또는 출금을 순차적으로 실행합니다. 기본적으로 배치는 모든 항목을 시도하고 부분 결과를 반환합니다. `stopOnError: true`를 설정하면 첫 번째 실패 시 중지하고 `StableBulkError`를 발생시킵니다. +여러 입금 또는 인출을 순차적으로 실행합니다. 기본적으로 배치는 모든 항목을 시도하고 부분 결과를 반환합니다. `stopOnError: true`를 설정하면 첫 번째 실패 시 중단하고 `StableBulkError`를 발생시킵니다. ```ts const result = await stable.earn.bulkDeposit([ @@ -254,21 +254,21 @@ const result = await stable.earn.bulkDeposit([ ``` ```text -{ results: [ { status: "fulfilled", txHash: "0x..." }, ... ], succeeded: 2, failed: 0 } +{ results: [ { status: "fulfilled", txHash: "0x..." }, ... ], succeeded: 2, failed: 0 } ``` -`items`는 `EarnDepositParams` (또는 `EarnWithdrawParams`)의 배열입니다. `options`에는 다음이 허용됩니다. +`items`는 `EarnDepositParams` (또는 `EarnWithdrawParams`) 배열입니다. `options`는 다음을 허용합니다: | **옵션** | **유형** | **기본값** | **설명** | | :--- | :--- | :--- | :--- | -| `idempotencyKey` | `string?` | | 배치 수준 중복 제거 키. | -| `stopOnError` | `boolean?` | `false` | 부분 결과를 반환하는 대신 첫 번째 실패 시 중지하고 `StableBulkError`를 발생시킵니다. | +| `idempotencyKey` | `string?` | | 배치 수준 중복 제거 키. | +| `stopOnError` | `boolean?` | `false` | 첫 번째 실패 시 중단하고 부분 결과를 반환하는 대신 `StableBulkError`를 발생시킵니다. | `BulkEarnResult` (`{ results, succeeded, failed, idempotencyKey? }`)를 반환합니다. `results`의 각 항목은 `{ status: "fulfilled", txHash, vault?, idempotencyKey? }` 또는 `{ status: "rejected", error, vault?, idempotencyKey? }`입니다. ### `forceWithdraw(params)` / `forceRedeem(params)` -어떤 어댑터 포지션부터 할당 해제할지 명시적으로 제어하면서 인출 또는 상환합니다. `withdraw` / `redeem`의 자동 선택 대신 직접 소스 시장을 선택해야 할 때 사용합니다. +어떤 어댑터 위치에서 먼저 할당을 해제할지 명시적으로 제어하여 인출 또는 상환합니다. `withdraw` / `redeem`의 자동 선택 대신 직접 소스 시장을 선택해야 할 때 사용하십시오. ```ts const { txHash } = await stable.earn.forceWithdraw({ @@ -281,17 +281,17 @@ const { txHash } = await stable.earn.forceWithdraw({ { txHash: "0xabcd...7890" } ``` -둘 다 `deallocations: ForceDeallocation[]` 배열과 선택적 `tokenDecimals`(할당 해제 금액에 사용되는 기본 자산 소수점; 생략 시 온체인에서 가져옴)를 받습니다. `forceWithdraw`는 `amount`를 받고, `forceRedeem`은 `shares`와 선택적인 `shareDecimals`를 받습니다. 각 `ForceDeallocation`은 다음과 같습니다. +둘 다 `deallocations: ForceDeallocation[]` 배열과 선택적 `tokenDecimals` (기본 자산 소수점, 할당 해제 금액에 사용; 생략하면 온체인에서 가져옴)을 사용합니다. `forceWithdraw`는 `amount`를 사용합니다. `forceRedeem`은 `shares`와 선택적 `shareDecimals`를 사용합니다. 각 `ForceDeallocation`은 다음과 같습니다. | **필드** | **유형** | **설명** | | :--- | :--- | :--- | -| `adapter` | `string` | 할당 해제할 어댑터 컨트랙트. | -| `amount` | `number` | 기본 자산 단위로 할당 해제할 금액. | -| `marketParams` | `object?` | Morpho Blue 시장 어댑터에만 필요: `{ loanToken, collateralToken, oracle, irm, lltv }` (`lltv`는 1e18로 스케일링됨). 볼트 어댑터의 경우 생략합니다. | +| `adapter` | `string` | 할당을 해제할 어댑터 계약. | +| `amount` | `number` | 기본 자산 단위로 할당을 해제할 금액. | +| `marketParams` | `object?` | Morpho Blue 시장 어댑터에만 필요: `{ loanToken, collateralToken, oracle, irm, lltv }` (`lltv`는 1e18으로 스케일링됨). 볼트 어댑터의 경우 생략. | ### `prepareDepositCalldata(params)` / `prepareWithdrawCalldata(params)` / `prepareRedeemCalldata(params)` -서명하거나 전송하지 않고 트랜잭션 calldata를 빌드합니다. 이를 사용하여 릴레이어, 가스 면제 흐름 또는 멀티시그를 통해 트랜잭션을 라우팅하십시오. +서명하거나 보내지 않고 트랜잭션 콜데이터를 빌드합니다. 릴레이어, 가스 면제 흐름 또는 멀티시그를 통해 트랜잭션을 라우팅하는 데 사용하십시오. ```ts const { steps, chainId } = await stable.earn.prepareDepositCalldata({ amount: 100 }); @@ -301,11 +301,11 @@ const { steps, chainId } = await stable.earn.prepareDepositCalldata({ amount: 10 { steps: [ { to: "0x...", data: "0x...", value: 0n } ], chainId: 988 } ``` -`prepareDepositCalldata`는 `EarnDepositCalldata` (`{ steps, chainId }`)를 반환하며, 여기서 `steps`는 `{ to, data, value }` 트랜잭션의 정렬된 목록입니다. 선택적 토큰 승인 후 입금이 이어집니다. `prepareWithdrawCalldata` 및 `prepareRedeemCalldata`는 `EarnWithdrawCalldata` (`{ to, data, value, chainId }`)라는 단일 트랜잭션을 반환합니다. 이들은 해당 서명 메서드와 동일한 매개변수를 허용합니다. +`prepareDepositCalldata`는 `EarnDepositCalldata` (`{ steps, chainId }`)를 반환하며, 여기서 `steps`는 `{ to, data, value }` 트랜잭션의 정렬된 목록입니다. 이는 선택적 토큰 승인과 뒤이은 입금입니다. `prepareWithdrawCalldata` 및 `prepareRedeemCalldata`는 단일 트랜잭션인 `EarnWithdrawCalldata` (`{ to, data, value, chainId }`)를 반환합니다. 서명 파트너와 동일한 매개변수를 허용합니다. ### `incentiveRewards` -서명자에 대한 Merkl 보상 토큰을 가져와 청구합니다. 이 메서드에는 서명자가 필요하지만 `earn` 볼트 구성은 필요하지 않습니다. +서명자에 대한 Merkl 보상 토큰을 가져오고 청구합니다. 이 메서드는 서명자가 필요하지만 `earn` 볼트 구성은 필요하지 않습니다. ```ts const { rewards } = await stable.earn.incentiveRewards.fetch(); @@ -316,15 +316,15 @@ const { txHash, tokenCount } = await stable.earn.incentiveRewards.claim(); { txHash: "0xabcd...7890", tokenCount: 1 } ``` -`fetch()`는 `MerklRewardsResult` (`{ chainId, rewards: MerklReward[] }`)를 반환하며, 토큰당 순 청구 가능 금액을 포함합니다. `claim()`은 현재 Merkl Merkle 트리에 커밋된 모든 보상을 청구하고 `MerklClaimResult` (`{ txHash, tokenCount }`)를 반환합니다. +`fetch()`는 토큰당 순 청구 가능 금액을 포함하는 `MerklRewardsResult` (`{ chainId, rewards: MerklReward[] }`)를 반환합니다. `claim()`은 현재 Merkl Merkle 트리에 커밋된 모든 보상을 청구하고 `MerklClaimResult` (`{ txHash, tokenCount }`)를 반환합니다. :::note -Merkl은 약 2시간마다 Merkle 트리에 보상을 커밋합니다. 해당 업데이트가 아직 보류 중인 보상은 아직 청구할 수 없습니다. 청구할 수 없는 상태에서 `claim()`을 호출하면 `StableValidationError`가 발생합니다. +Merkl은 약 2시간마다 Merkle 트리에 보상을 커밋합니다. 해당 업데이트가 아직 보류 중인 보상은 아직 청구할 수 없습니다. 청구할 수 있는 것이 없을 때 `claim()`을 호출하면 `StableValidationError`가 발생합니다. ::: ## `createStableReader(config)` -볼트 수익률 및 포지션 데이터를 위한 읽기 전용 `StableReader`를 구성합니다. 서명자는 필요 없고, 읽으려는 주소만 필요합니다. +볼트 수익 및 포지션 데이터에 대한 읽기 전용 `StableReader`를 구성합니다. 서명자는 필요하지 않고 읽으려는 주소만 있으면 됩니다. ```ts import { createStableReader, Network } from "@stablechain/sdk"; @@ -344,17 +344,17 @@ StableReader { earn: { getYield, position, preview, withdrawability, incentiveRe | **필드** | **유형** | **기본값** | **설명** | | :--- | :--- | :--- | :--- | -| `address` | `string` | | 포지션과 보상을 읽을 사용자 주소. 필수. | -| `earn` | `{ vault: string }` | | 읽을 볼트. 필수: 누락 시 `createStableReader`는 `StableValidationError`를 발생시킵니다. | +| `address` | `string` | | 포지션과 보상을 읽을 사용자 주소. 필수. | +| `earn` | `{ vault: string }` | | 읽을 볼트. 필수: `createStableReader`는 없을 경우 `StableValidationError`를 발생시킵니다. | | `network` | `Network?` | `Network.Mainnet` | 대상 네트워크. | -| `rpc` | `string?` | 공개 RPC | RPC 재정의. | +| `rpc` | `string?` | 공용 RPC | RPC 재정의. | | `merklApiBase` | `string?` | `https://api.merkl.xyz` | Merkl 보상 API 기본 URL. | ## `StableReader` ### `getYield()` -볼트의 현재 순 APY 및 수수료 분석을 반환합니다. +볼트의 현재 순 APY 및 수수료 내역을 반환합니다. ```ts const vaultYield = await reader.earn.getYield(); @@ -364,11 +364,11 @@ const vaultYield = await reader.earn.getYield(); { apy: 0.058, native: 0.041, rewards: [ { symbol: "MORPHO", address: "0x...", apr: 0.017 } ], performanceFee: 0.1, managementFee: 0 } ``` -`VaultYield`를 반환합니다. `apy`는 보상 부스트를 포함한 수수료 후 총 순 APY이며, `native`는 보상을 제외한 기본 시장 수익률입니다. 모든 값은 소수점(예: `0.05` = 5%)입니다. +`VaultYield`를 반환합니다. `apy`는 보상 부스트를 포함한 수수료 후 총 순 APY이며, `native`는 보상을 제외한 기본 시장 수익률입니다. 모든 값은 소수점 형식입니다 (`0.05` = 5%). ### `position()` -설정된 주소의 현재 볼트 포지션을 반환합니다. +구성된 주소의 현재 볼트 포지션을 반환합니다. ```ts const position = await reader.earn.position(); @@ -378,11 +378,11 @@ const position = await reader.earn.position(); { shares: 100000000n, sharesFormatted: 100, shareDecimals: 6, assets: 101.2, tokenDecimals: 6, assetAddress: "0x..." } ``` -원시 `shares` 잔액, 포맷된 `sharesFormatted` 사람의 값, 기본 단위로 표현된 `assets` 값을 포함하는 `VaultPosition`을 반환합니다. +원시 `shares` 잔액, 포맷된 사람이 읽을 수 있는 `sharesFormatted` 값, 기본 단위로 된 해당 공유의 `assets` 값을 포함하는 `VaultPosition`을 반환합니다. ### `preview(params)` -볼트의 실시간 순 APY를 사용하여 특정 금액에 대한 수익률을 일정 기간 동안 예측합니다. +볼트의 실시간 순 APY를 사용하여 특정 금액의 수익을 특정 기간 동안 예측합니다. ```ts const preview = await reader.earn.preview({ amount: 1000, horizonDays: 30 }); @@ -394,14 +394,14 @@ const preview = await reader.earn.preview({ amount: 1000, horizonDays: 30 }); | **매개변수** | **유형** | **설명** | | :--- | :--- | :--- | -| `amount` | `number` | 예측할 원금, 사람이 읽을 수 있는 형식. | +| `amount` | `number` | 예측할 원금, 사람이 읽을 수 있는. | | `horizonDays` | `number` | 예측 기간(일). | `YieldPreview` (`{ projectedYield, apy, horizonDays }`)를 반환합니다. ### `withdrawability(params)` -볼트의 유휴 유동성에서 특정 금액을 즉시 인출할 수 있는지 확인합니다. +볼트의 유휴 유동성에서 즉시 인출 가능한 금액인지 확인합니다. ```ts const status = await reader.earn.withdrawability({ amount: 5000 }); @@ -413,14 +413,14 @@ const status = await reader.earn.withdrawability({ amount: 5000 }); | **매개변수** | **유형** | **기본값** | **설명** | | :--- | :--- | :--- | :--- | -| `amount` | `number` | 테스트할 금액, 사람이 읽을 수 있는 형식. | +| `amount` | `number` | | 테스트할 금액, 사람이 읽을 수 있는. | | `tokenDecimals` | `number?` | 온체인 | 기본 자산 소수점. | -`WithdrawStatus` (`{ isInstant, availableLiquidity, tokenDecimals }`)를 반환합니다. `isInstant`가 `false`인 경우, 인출에는 어댑터 할당 해제가 필요하며, 이는 `stable.earn.withdraw`가 자동으로 처리합니다. +`WithdrawStatus` (`{ isInstant, availableLiquidity, tokenDecimals }`)를 반환합니다. `isInstant`가 `false`일 때 인출은 어댑터 할당 해제가 필요하며, 이는 `stable.earn.withdraw`가 자동으로 처리합니다. ### `incentiveRewards.fetch()` -설정된 주소에 대한 보류 중인 Merkl 보상을 읽습니다. `stable.earn.incentiveRewards.fetch`의 읽기 전용 대응책입니다. +구성된 주소에 대한 보류 중인 Merkl 보상을 읽습니다. `stable.earn.incentiveRewards.fetch`에 대한 읽기 전용 대응물입니다. ```ts const { rewards } = await reader.earn.incentiveRewards.fetch(); @@ -443,7 +443,7 @@ const { rewards } = await reader.earn.incentiveRewards.fetch(); ### `Chain` -`quoteBridge` 및 `bridge`에서 사용됩니다. 각 항목에는 해당 `CHAIN_CONFIGS` 항목이 있습니다. 두 개의 테스트넷 항목은 완전성을 위해 정의되었지만 LI.FI는 이를 거부합니다. 브리징은 메인넷 체인 간에만 작동합니다. +`quoteBridge` 및 `bridge`에서 사용됩니다. 각 항목에는 해당 `CHAIN_CONFIGS` 항목이 있습니다. 두 테스트넷 항목은 완전성을 위해 정의되었지만 LI.FI는 이를 거부합니다. 브릿징은 메인넷 체인 사이에서만 작동합니다. | **열거형** | **네트워크** | **체인 ID** | | :--- | :--- | :--- | @@ -452,16 +452,16 @@ const { rewards } = await reader.earn.incentiveRewards.fetch(); | `Chain.Stable` | Stable 메인넷 | 988 | | `Chain.Ethereum` | 이더리움 | 1 | | `Chain.Arbitrum` | 아비트럼 원 | 42161 | -| `Chain.Ink` | 잉크 | 57073 | +| `Chain.Ink` | Ink | 57073 | | `Chain.Bera` | 베라체인 | 80094 | -| `Chain.MegaETH` | 메가EVM | 4326 | -| `Chain.Base` | 베이스 | 8453 | -| `Chain.BSC` | BNB Smart Chain | 56 | -| `Chain.HyperEVM` | 하이퍼EVM | 999 | +| `Chain.MegaETH` | MegaETH | 4326 | +| `Chain.Base` | Base | 8453 | +| `Chain.BSC` | BNB 스마트 체인 | 56 | +| `Chain.HyperEVM` | HyperEVM | 999 | ## `CHAIN_CONFIGS` -`Chain` 열거형으로 키가 지정된 `Partial>`입니다. 각 항목은 `id`, `rpc`, `usdt`, `decimals`를 노출합니다. 지원되는 체인의 정식 USDT 주소가 필요하지만 하드코딩하고 싶지 않을 때 사용하십시오. +`Chain` 열거형으로 키가 지정된 `Partial>`입니다. 각 항목은 `id`, `rpc`, `usdt` 및 `decimals`를 노출합니다. 지원되는 체인에서 표준 USDT 주소를 하드 코딩하지 않고 필요할 때 사용하십시오. ```ts import { CHAIN_CONFIGS, Chain } from "@stablechain/sdk"; @@ -475,7 +475,7 @@ console.log(CHAIN_CONFIGS[Chain.Stable]); ## 상수 -하드코딩을 피하기 위해 내보낸 정식 메인넷 주소. +하드 코딩할 필요가 없도록 내보낸 정식 메인넷 주소. ```ts import { STABLE_USDT_ADDRESS, STABLE_VAULT_ADDRESS } from "@stablechain/sdk"; @@ -488,20 +488,20 @@ STABLE_VAULT_ADDRESS 0xb7Df8db22A5DBBFA9ebeb94b3910aec6a4f05c08 | **상수** | **설명** | | :--- | :--- | -| `STABLE_USDT_ADDRESS` | Stable 메인넷의 USDT 토큰 주소입니다. | -| `STABLE_VAULT_ADDRESS` | Stable 메인넷의 기본 Morpho V2 수익 볼트입니다. `earn: { vault }`에 전달합니다. | +| `STABLE_USDT_ADDRESS` | Stable 메인넷의 USDT 토큰 주소. | +| `STABLE_VAULT_ADDRESS` | Stable 메인넷의 기본 Morpho V2 수익 볼트. `earn: { vault }`에 전달. | ## 오류 -모든 SDK 오류는 viem의 `BaseError`를 확장하는 `StableError`를 확장합니다. 오류는 구조화된 메타데이터를 포함하므로 `error.name` 또는 `instanceof`에 따라 분기할 수 있습니다. +모든 SDK 오류는 viem의 `BaseError`를 확장하는 `StableError`를 확장합니다. 오류는 구조화된 메타데이터를 포함하므로 `error.name` 또는 `instanceof`를 사용하여 분기할 수 있습니다. | **클래스** | **발생 시점** | **유용한 필드** | | :--- | :--- | :--- | -| `StableValidationError` | 매개변수 유효성 검사 실패(잘못된 주소, 비유한 금액, 지원되지 않는 체인). | `field`, `value` | +| `StableValidationError` | 매개변수 유효성 검사 실패 (잘못된 주소, 유한하지 않은 양, 지원되지 않는 체인). | `field`, `value` | | `StableQuoteError` | LI.FI에 대한 견적 요청 실패. | `provider`, `httpStatus`, `providerCode`, `body` | | `StableTransactionError` | 온체인 단계 실패: 체인 전환, 승인, 전송 또는 되돌리기. | `phase`, `txHash`, `chainId`, `revertReason` | -| `StableNetworkError` | 기본 HTTP/RPC 호출 실패(예: Morpho 또는 Merkl API). | `url` | -| `StableBulkError` | `stopOnError: true`로 실행된 `bulkDeposit` 또는 `bulkWithdraw`가 첫 번째 실패에 도달. | `results`, `succeeded`, `failed` | +| `StableNetworkError` | 기본 HTTP/RPC 호출 실패 (예: Morpho 또는 Merkl API). | `url` | +| `StableBulkError` | `stopOnError: true`로 실행된 `bulkDeposit` 또는 `bulkWithdraw`가 첫 번째 실패 시 중단. | `results`, `succeeded`, `failed` | ```ts import { StableTransactionError } from "@stablechain/sdk"; @@ -510,7 +510,7 @@ try { await stable.transfer({ from, to, amount: 1 }); } catch (err) { if (err instanceof StableTransactionError && err.phase === "switch_chain") { - // 사용자가 체인 전환을 거부함 + // 사용자가 체인 전환을 거부했습니다. } throw err; } @@ -525,5 +525,5 @@ StableTransactionError: transfer: wallet rejected or failed to switch to chain 9 ## 다음 권장 사항 - [**SDK 퀵스타트**](/ko/tutorial/sdk-quickstart): SDK를 설치하고 테스트넷에서 첫 번째 전송을 실행합니다. -- [**viem과 함께 사용**](/ko/how-to/sdk-with-viem): 비공개 키, 브라우저 지갑 및 미리 빌드된 서명자 간 전환. -- [**wagmi와 함께 사용**](/ko/how-to/sdk-with-wagmi): 훅스를 사용하여 React 앱에 SDK를 연결합니다. +- [**viem과 함께 사용**](/ko/how-to/sdk-with-viem): 개인 키, 브라우저 지갑 및 사전 빌드된 서명자 간에 전환합니다. +- [**wagmi와 함께 사용**](/ko/how-to/sdk-with-wagmi): 훅을 사용하여 SDK를 React 앱에 연결합니다.