@etherfuse/stablebond-sdk

中文文档
3.0.21发布于 2026/11/12MITTypeScriptESM + CJS近 30 天下载 3901

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

中文使用文档
文档目录8 节
  1. 使用量
  2. 实例方法
  3. 静态方法
  4. 连锁债券价格
  5. 甲骨文更新
  6. 检查甲骨文残骸
  7. 更新甲骨文
  8. API 参考

Etherfuse 稳定键程序 SDK

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

我们目前正在使用这个自己在 app.etherfuse.com (英语)。 。 。 .

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

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

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

使用量

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

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

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

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

收集静态稳定键信息

const bonds = await StablebondProgram.getBonds(rpcEndpoint);

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

const stablebondProgram = new StablebondProgram(rpcEndpoint, wallet);

实例方法

获取用户BondBalances

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

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

获取用户端

async getUserTokens(): Promise<Stablebond[]>

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

获取用户NFTs

async getUserNFTs(): Promise<PartialNFT[]>

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

有访问

async hasAccess(): Promise<boolean>

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

获得补助金

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

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

拥有KYC

async hasKYC(): Promise<boolean>

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

薄荷铜

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

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

甲骨文新鲜度:此操作需要最新的甲骨文价格数据. 见 甲骨文更新 见下文.

即时重试

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

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

甲骨文新鲜度:此操作需要最新的甲骨文价格数据. 见 甲骨文更新 见下文.

创建购买命令

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

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

甲骨文新鲜度:此操作需要最新的甲骨文价格数据. 见 甲骨文更新 见下文.

赎回命令

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

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

赎回铜牌

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

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

赎回NFT

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

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

静态方法

获取铜

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

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

获取BOND

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

在 Stablebond 程序中获取保证.

获取BondPrices

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

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

获得BondPrice

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

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

连锁债券价格

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

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

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

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

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

获取感兴趣的时间

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

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

参数:

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

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

甲骨文更新

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

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

检查甲骨文残骸

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 以获取更新指令。 在您的稳定债券操作前, 在单独的交易中提交 .

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 共发布 210 个版本,首次发布于 2024/03/26;过去 12 个月发布了 34 个版本。

版本发布日期距今
3.0.21latest2026/11/122 天前
3.0.202026/11/077 天前
3.0.192026/10/2321 天前
3.0.182026/09/251 个月前
3.0.172026/09/251 个月前
3.0.162026/09/251 个月前

关于 @etherfuse/stablebond-sdk 的常见问题

@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 和提交记录判断。