# @etherfuse/stablebond-sdk 中文文档

规范地址：https://npmcn.com/package/%40etherfuse/stablebond-sdk/

版本：3\.0\.21
npm 元数据更新时间：2026-11-11T17:16:34.100Z
中文译文更新时间：2026-11-13T23:43:23.092Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40etherfuse/stablebond-sdk
原文对照：https://npmcn.com/package/%40etherfuse/stablebond-sdk/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：3 MB，188 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：12 个
- 首次发布：2024-03-25T22:42:55.422Z
- 最新版本发布：2026-11-11T17:16:33.762Z
- 近 30 天下载量：3901（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：210（近 12 个月 34 个）

## 中文简介

用于稳定债券程序的 JavaScript 客户端

## 安装

```sh
npm install @etherfuse/stablebond-sdk
```

也可以使用：`pnpm add @etherfuse/stablebond-sdk`、`yarn add @etherfuse/stablebond-sdk`、`bun add @etherfuse/stablebond-sdk`

## README

# Etherfuse 稳定键程序 SDK

这个 **稳定债券方案** class提供一套方法,在索拉纳区块链上与Stablebond程序进行互动.

我们目前正在使用这个自己在 [app.etherfuse.com (英语)](https://app.etherfuse.com/ "https://app.etherfuse.com ")。 。 。 .

我们还有一个沙盒版本的程序运行在 [沙盒. etherfuse.com (中文(简体) )](https://sandbox.etherfuse.com/ "https://sandbox.etherfuse.com")这对测试和开发很有用, 和我们联系 玩钱,我们会给你一些假的代币使用.

用户的债券生命周期如下:

1.  用户获准/空投保证金,表明已获准进入平台.
2.  用户通过调用来利用债券进入平台 `grantAccess`。 。 。 .
3.  用户通过调用购买和薄荷新债券 `mintBond`。 。 。 .
4.  用户允许债券在一段时间内成熟,理想的是一年或一年以上,但在购买后可以立即成熟.
5.  用户通过调用来赎回债券 `redeemBonds`,获得一个NFT,它将将用户的债券存储在金库中,直到下一次发行,类似于不冒险的Solana.
6.  用户通过呼叫来赎回 NFT `redeemNFT`获得他们赎回的债券的支付稳定币 也是用来支付债券的.

## 使用量

尽管SDK包含了程序的所有自动生成代码和类型,但我们建议通过Stablebond Program类与程序互动. 有出口型号可以使开发更快,型号安全更好.

与类的相互作用模式是静态方法揭示关于可益债券的目录信息,而实例方法则用于与用户钱包上下文的相互作用. 这样,目录信息可以独立于用户钱包状态进行刷新.

首先导入 **稳定债券方案** 类 :

```ts
import { StablebondProgram } from "@etherfuse/stablebond-sdk";
```

收集静态稳定键信息

```ts
const bonds = await StablebondProgram.getBonds(rpcEndpoint);
```

然后,一旦一个用户认证,创建实例 **稳定债券方案** 类 :

```ts
const stablebondProgram = new StablebondProgram(rpcEndpoint, wallet);
```

### 实例方法

#### 获取用户BondBalances

```ts
async getUserBondBalances(): Promise<Map<string, Decimal>>
```

在 Stablebond 程序中获取用户的债券余额.

#### 获取用户端

```ts
async getUserTokens(): Promise<Stablebond[]>
```

在 Stablebond 程序中获取用户的令牌,结合GetBonds和GetUserBondBalances. 我们的代码中不叫这个,但是它可供你使用.

#### 获取用户NFTs

```ts
async getUserNFTs(): Promise<PartialNFT[]>
```

在 Stablebond 程序中获取用户的 NFT 。 为有效起见,不包括关于债券的目录信息。 这些信息可以被补丁回放,以使用静态映射器方法map TocompleteNFT来完成一个完整的NFT对象.

#### 有访问

```ts
async hasAccess(): Promise<boolean>
```

检查用户是否可以访问 Stablebond 程序 .

#### 获得补助金

```ts
async grantAccess(bondAddress: string, bondMint: string): Promise<Uint8Array>
```

通过利用钱包中的保证金向用户提供访问权限,证明他们已寻求并重新确认了对平台的访问.

#### 拥有KYC

```ts
async hasKYC(): Promise<boolean>
```

检查用户在 Stablebond 程序中是否完成了 KYC( 了解客户) 验证 .

#### 薄荷铜

```ts
async mintBond(stablebondAddress: Address, uiAmount: Decimal): Promise<Uint8Array>
```

匹配指定数量的用户的新债券。 金额以债券的支付代号表示,而未具体说明购买的债券金额.

> **甲骨文新鲜度**:此操作需要最新的甲骨文价格数据. 见 [甲骨文更新](https://npmcn.com/package/%40etherfuse/stablebond-sdk/#readme-oracle-updates) 见下文.

#### 即时重试

```ts
async instantRedeemBonds(stablebondAddress: Address, passedUIAmount?: Decimal): Promise<Uint8Array>
```

即时赎回稳定债券计划中的债券. 这导致一个用户在债券的支付代号中得到付款,减去费用. 收费和可用流动性由债券的即时赎回配置决定.

> **甲骨文新鲜度**:此操作需要最新的甲骨文价格数据. 见 [甲骨文更新](https://npmcn.com/package/%40etherfuse/stablebond-sdk/#readme-oracle-updates) 见下文.

#### 创建购买命令

```ts
async createPurchaseOrder(stablebondAddress: Address, paymentAmount: Decimal): Promise<Uint8Array>
```

为用户在Stablebond程序内即将发行的债券中保留定购单. 金额以保证金的支付代号表示,而未具体说明购买的保证金金额.

> **甲骨文新鲜度**:此操作需要最新的甲骨文价格数据. 见 [甲骨文更新](https://npmcn.com/package/%40etherfuse/stablebond-sdk/#readme-oracle-updates) 见下文.

#### 赎回命令

```ts
async redeemPurchaseOrder(nftMintString: Address): Promise<Uint8Array>
```

重新定购单,供用户要求以前在稳定债券方案内支付的债券.

#### 赎回铜牌

```ts
async redeemBonds(stablebondAddress: Address, passedUIAmount?: Decimal): Promise<Uint8Array>
```

稳定债券计划中的再发行债券. 这导致用户收到NFT,在本期发行后会成熟.

#### 赎回NFT

```ts
async redeemNFT(nftMintString: Address): Promise<Uint8Array>
```

在 Stablebond 程序中重放一个 NFT 。 这导致用户收到NFT的基本资产.

### 静态方法

#### 获取铜

```ts
static async getBonds(rpcEndpoint: string): Promise<Stablebond[]>
```

在稳定债券程序中获取债券.

#### 获取BOND

```ts
static async getBond(rpcEndpoint: string, bondAddress: string): Promise<Stablebond>
```

在 Stablebond 程序中获取保证.

#### 获取BondPrices

```ts
static async getBondPrices(host = StablebondProgram.etherfuseHost): Promise<{ [mint: string]: PriceData }>
```

获取以债券薄荷为键的当前债券价格。 此默认使用 Ederfuse 生产主机 .

#### 获得BondPrice

```ts
static async getBondPrice(mint: Address, host = StablebondProgram.etherfuseHost): Promise<PriceData>
```

在其支付符中获取债券的现价。 此默认使用 Ederfuse 生产主机 .

### 连锁债券价格

这个 `BondPrice` 账户 `["bond_price", mint]` 保证金的价格来源,一旦代表运行 `InitializeBondPrice`;在这之前,2022年利息的延伸是。 这些帮助者直接从链中读取任一源,而不是以太福斯主机.

```ts
import {
  bondPriceAt,
  bondRateBps,
  fetchBondPriceSource,
  fetchBondPriceSources,
  getBondPriceAddress,
  parseBondPriceSource,
} from '@etherfuse/stablebond-sdk';

const source = await fetchBondPriceSource(connection, mint);
const price = bondPriceAt(source);
const rateBps = bondRateBps(source);
```

-   `getBondPriceAddress(mint)` 获取 `BondPrice` PDA (英语).
-   `fetchBondPriceSource(rpc, mint)` 财务报告和审定财务报表 `fetchBondPriceSources(rpc, mints)` 拿薄荷和薄荷来 `BondPrice` 并选择程序将使用的来源。 任何对象 `getMultipleAccountsInfo`,例如网络3.js `Connection`,作为rpc.
-   `parseBondPriceSource(mint, priceAccount, mintAccount)` 执行从已获取的账户数据.
-   `bondPriceAt(source, unixTimestamp?)` 返回价格为 `Decimal` 在特定时间( 现在已违约),以及 `bondRateBps(source)` 基点中的现有比率.

每个生成的指令构建者都会定价债券(`startIssuance`, (中文(简体) ), `setInterestRateToZero`, (中文(简体) ), `delegateMintBondFromCurrencyAmount`, (中文(简体) ), `burnBondFromTokenAmount`, (中文(简体) ), `burnBondFromCurrencyAmount`, (中文(简体) ), `purchaseBondV3`, (中文(简体) ), `instantBondRedemptionV2`填补其 `bondPriceAccount` 从薄荷,当呼叫者把它漏出.

#### 完成的地图NFT

```ts
static mapToCompleteNFT({ ...nft }: PartialNFT, bond: Stablebond): NFT
```

地图a `PartialNFT` (单位:千美元) `Stablebond` 段 次 页 次 `NFT`。 。 。 .

详情请参见: `StablebondProgram` 源代码中的类.

#### 获取感兴趣的时间

```ts
static getInterestOverTime(basisPoints: number, secondsPast: number): Decimal
```

计算基点利率中一段时期内的应计利息。 这在内部用于计算债券值,但可能对外部计算有用.

参数:

-   `basisPoints`: 基点利率(1%/100%)
-   `secondsPast`: 已过去秒数

返回一个表示乘数的十进制,以适用于本金金额.

## 甲骨文更新

一些稳定债券业务(`mintBond`, (中文(简体) ), `createPurchaseOrder`, (中文(简体) ), `instantRedeemBonds`)需要最新的"开关"(Switchboard on-suite oracle)价格数据. 如果甲骨文僵化了(通常超过1小时),这些操作将会在链上失效,并带有 `StaleOracle` 错误.

SDK 输出公用设备来检查 oracle 新鲜度并获取更新指令, 这样您可以在提交稳定债券交易之前自己更新 .

### 检查甲骨文残骸

```ts
import {
  createStablebondProgram,
  fetchBond,
  fetchPaymentFeedBrute,
  isSwitchboardOnDemand,
  isOracleStale,
} from "@etherfuse/stablebond-sdk";
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
import { publicKey } from "@metaplex-foundation/umi";

const umi = createUmi(rpcEndpoint);
umi.programs.add(createStablebondProgram(), false);

const bond = await fetchBond(umi, publicKey(bondAddress));
const paymentFeed = await fetchPaymentFeedBrute(umi, bond.paymentFeedType);

// Check if this bond uses Switchboard on-demand oracles
if (isSwitchboardOnDemand(paymentFeed.paymentFeedType)) {
  // Check if the quote price feed is stale (e.g., older than 20 minutes)
  const stale = await isOracleStale(umi, paymentFeed.quotePriceFeed, 1200);
  console.log("Oracle stale:", stale);
}
```

### 更新甲骨文

如果甲骨文已经僵化,请使用 `fetchOracleUpdateIxForBond` 以获取更新指令。 在您的稳定债券操作前, 在单独的交易中提交 .

```ts
import {
  fetchOracleUpdateIxForBond,
  isOracleStale,
} from "@etherfuse/stablebond-sdk";
import {
  Connection,
  TransactionMessage,
  VersionedTransaction,
} from "@solana/web3.js";

// Check staleness first to avoid unnecessary oracle update calls
const stale = await isOracleStale(umi, paymentFeed.quotePriceFeed, 1200);

if (stale) {
  const { instructions, lookupTables } = await fetchOracleUpdateIxForBond(
    umi,
    bondAddress, // Same address you pass to mintBond
    wallet.publicKey.toBase58(),
    "mainnet-beta" // or 'devnet'
  );

  if (instructions.length > 0) {
    // Each feed returns 2 instructions (keccak verify + pullFeedSubmit).
    // Submit each feed's instructions in a separate transaction to avoid
    // checksum mismatches between independently-fetched oracle responses.
    const connection = new Connection(rpcEndpoint);

    for (let i = 0; i < instructions.length; i += 2) {
      const feedIxs = instructions.slice(i, i + 2);
      const { blockhash } = await connection.getLatestBlockhash();
      const message = new TransactionMessage({
        payerKey: wallet.publicKey,
        recentBlockhash: blockhash,
        instructions: feedIxs,
      }).compileToV0Message(lookupTables.length ? lookupTables : undefined);

      const tx = new VersionedTransaction(message);
      // Sign and send...
    }
  }
}

// Now the oracle is fresh — proceed with your stablebond operation
const sig = await stablebondProgram.mintBond(bondAddress, amount);
```

### API 参考

#### `isSwitchboardOnDemand(feedType: PaymentFeedType): boolean`

回返 `true` 如果给定的付费饲料类型使用Switchboard on-request oracles,可能需要人工更新.

#### `isOracleStale(umi: Umi, feedPubkey: PublicKey, stalenessThresholdSecs: number): Promise<boolean>`

读取神谕 `lastUpdateTimestamp` 从链上数据和返回 `true` 如果它比指定的阈值大.

#### `fetchOracleUpdateIxForBond(umi, bondAddress, payerPubkey, network?): Promise<{ instructions, lookupTables }>`

使用 `@switchboard-xyz/on-demand` SDK (英语:`PullFeed.fetchUpdateIx`) (中文(简体) ). 通过您使用的同一保证地址 `mintBond()`. 回归 `TransactionInstruction[]` 财务报告和审定财务报表 `AddressLookupTableAccount[]` 用于构建 V0 交易。 如果债券不按需使用切换机, 或抓取失败, 返回空数组 .

## 常见问题

### @etherfuse/stablebond-sdk 是什么？

用于稳定债券程序的 JavaScript 客户端

### 如何安装 @etherfuse/stablebond-sdk？

在项目目录运行 npm install @etherfuse/stablebond-sdk，或使用 pnpm add / yarn add / bun add。

### @etherfuse/stablebond-sdk 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @etherfuse/stablebond-sdk 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @etherfuse/stablebond-sdk 可以商用吗？

@etherfuse/stablebond-sdk 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @etherfuse/stablebond-sdk 的下载量有多少？

根据 npm 官方下载统计，@etherfuse/stablebond-sdk 在 2026/10/14 – 2026/11/12 这 30 天内被下载 3,901 次，日均约 130 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @etherfuse/stablebond-sdk 还在维护吗？

最新版本 3\.0\.21 发布于 2026/11/12（2 天前）；至今共发布 210 个版本，其中过去 12 个月发布了 34 个；首次发布于 2024/03/26。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

