# @1delta/calldata-sdk-sol 中文文档

规范地址：https://npmcn.com/package/%401delta/calldata-sdk-sol/

版本：0\.0\.26
npm 元数据更新时间：2026-10-30T15:18:26.053Z
中文译文更新时间：2026-11-06T15:05:05.611Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%401delta/calldata-sdk-sol
原文对照：https://npmcn.com/package/%401delta/calldata-sdk-sol/?lang=original

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

- 包体积（解压后）：8.6 MB，8 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：4 个
- 首次发布：2026-10-04T00:36:54.035Z
- 最新版本发布：2026-10-30T15:18:25.838Z
- 近 30 天下载量：2962（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：24（近 12 个月 24 个）

## 中文简介

SDK所服务的贷款人建立索拉纳交易——@1delta/calldata-sdk的对等:相同的入门点,指令而不是作曲的 calldata,过期的文物. 没有viem,没有索拉纳运行时间.

## 安装

```sh
npm install @1delta/calldata-sdk-sol
```

也可以使用：`pnpm add @1delta/calldata-sdk-sol`、`yarn add @1delta/calldata-sdk-sol`、`bun add @1delta/calldata-sdk-sol`

## README

# @ 1delta/ calldata- sdk- sol

> **从 `lending-sdks-sol/packages/calldata-sdk` 于2026-10-02查阅.** 路径 相对此软件包;原型为 `@1delta/sol-*` 名称映射到 `@1delta/calldata-sdk-sol`, (中文(简体) ), `margin-fetcher-sol`, (中文(简体) ), `svm-kit`。 。 。 .

同行 `@1delta/calldata-sdk`:同一个入场点,建造索拉纳 交易而不是作曲的调用数据。 EVM 软件包编码为一个 合同,这个 **从每个贷款人的建筑商那里拿来作为指示, 加上那些建筑者所遗漏的,加封印** - 交易于 ~60–90 s, 交付于 `SvmTransaction` 封装已定义的 EVM API 页:1 `chainType: 'svm'`。 。 。 .

在索拉纳岛上没有作曲家(SOLANA ARCHITECTURE PLAN §3). 名字保留下来了 总之.. `ComposerDirectLending.composeDirectMoneyMarketAction`, (中文(简体) ), `ComposerQuickActions.swapAndDeposit`, (中文(简体) ), `SvmTxUtilsLite` 所以API路线端口 通过导入路径, 追踪器端口 丰收 -tracer的摄取.

```
src/
  types/            SvmCallParams (instructions + tables + splits) ← EVMCallParams; mergeCallParams
  lending/
    types/          LendingOperation, QuickActionType, LendingMode — the EVM shape, reduced
    actions/        KaminoLending (/ktx/klend/*-instructions), JupiterLendLending (/borrow/operate-instructions),
                    SaveLending (the program's OWN instructions — no hosted builder; SAVE_FINANCE.md §3)
    direct/         ComposerDirectLending: the single entrypoint + depositAndBorrow / repayAndWithdraw
    utils/          getLenderData (lender key → market/reserve, vault, or Save market/reserve), toDecimalAmount
    consts/         U64_MAX, MIN_I128, the API bases
  spot/             ComposerSpot.jupiterSwap — Jupiter /swap-instructions, the instruction form
  quickActions/     ComposerQuickActions — swapAndDeposit, swapDepositAndBorrow, swapAndRepay, borrowAndSwap, …
  vaults/           ComposerVaultActions — kvault deposit/withdraw, Jupiter Lend earn deposit/withdraw/mint/redeem
  vaults/exponent/  ComposerExponentActions — Exponent PT trades from the VENDORED IDL, the program as the quoter (EXPONENT.md §3)
  vaults/solstice/  ComposerSolsticeActions — Solstice deposits, the three exits and their claims from the app-bundled IDLs; the program as the quoter by post-simulation balances (SOLSTICE.md §6)
  vaults/huma/      ComposerHumaActions — Huma 2.0 PST deposit (lender setup prepended), the queued redemption and its cancel, the instant withdrawal quoted by simulation (docs/HUMA.md §8)
  txUtils/          SvmTxUtilsLite — assemble: tables, blockhash, pack, simulate, budget, price, seal; `indexPatches` resolve instruction indexes a flash pair carries
  flashloan/        the flash providers (Jupiter Lend's program, Kamino's pair, Save's pair, Project 0's bracket) + `ComposerMargin` — open / close / adjust / migrate a loop on any venue (LOOPING.md)
  lending/actions/loopscale/  the venue-built loop: `/creditbook/flash_borrow` with our swap as its CPI, the returned message enveloped and simulated
```

## 一项直接行动

```ts
import {
  ComposerDirectLending,
  QuickActionType,
  LendingMode,
  SvmTxUtilsLite,
} from '@1delta/calldata-sdk-sol'
import { createSvmRpc, createSvmFetchers } from '@1delta/svm-kit'

const bundle = await ComposerDirectLending.composeDirectMoneyMarketAction({
  amount: 10_000_000n, // raw units, as on EVM
  lender: 'KAMINO_7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF',
  chainId: 'solana',
  actionType: QuickActionType.Deposit,
  lendingMode: LendingMode.NONE,
  account: wallet, // signer, fee payer, receiver
  callerAssetAddress: 'So11111111111111111111111111111111111111112',
  lenderAssetAddress: 'd4A2prbA2whesmvHaL88BH6Ewn5N4bTSU2Ze8P6Bc4Q', // the marketUid ref: Kamino's RESERVE
  decimals: 9, // Kamino's builder speaks decimal amounts
})

const fetchers = createSvmFetchers(createSvmRpc())
const { transactions, fees } = await SvmTxUtilsLite.assemble(bundle, {
  fetchers,
  payer: wallet,
})
// transactions[0]: { chainType: 'svm', transaction, lastValidBlockHeight, expiresAt, addressLookupTables, instructions }
```

`isAll` 退款/偿还 借出人自己的哨兵卡米诺 `u64::MAX` (十进制形式, `18446744073.709551615` 在小数点后9分,木星 借钱 `MIN_I128`原样保存 `u64::MAX` (退款为cTOKENS;部分为 退出按准备金现行汇率折算,下限为". 木星 借出新存款需求以外的动作 `jupiterLendParams.positionId` (位置为NFT;用户数据层列出了它们). 保存不需要超出范围 出贷人密钥和准备金:债务从钱包中除去 (单位:千美元)`saveParams.obligationIndex` 选择子账户),从链中读取; a 钱包中无的获得分配

-   `InitObligation` 在它的首次存款前.

## 保存 —— 由程序构建, 不是构建器

`SaveLending` (单位:千美元)`actions/save/`)没有对应方可调用. 它解决 市场地址簿 `/v1/markets/configs`,钱包的义务来自 链子, 和从义务本身的腿上取出的新药, 然后释放一个 每个动作的原子列表: `RefreshReserve` × 债务所触及的每一个准备金 → `RefreshObligation` 行动,债务的存款准备金为 按债务顺序记账。 它的11个编码器被固定字节精确 反对 `@solendprotocol/solend-sdk@0.14.27` (单位:千美元)`test/fixtures/save-instructions.json`),以及 `test/save.live.test.ts` 证明 以模拟借款、退款、新华邮箱 主网通过 `assemble`。在返回前,建筑者会读 Pyth 刷新集的接收账户,拒绝(`SaveStaleOracleError`当a 价格高于100 s——程序会拒绝120 s的刷新,以及 发布价格更新没有构建 . `SaveLending.flashLoanPair` 将身体包入 `FlashBorrow` . `FlashRepay(index)`; 两者必须保持顶级( 程序) 拒绝消费物价指数)和 `index` 是借款人ABSOLUTE在交易中的地位. 只有装配者知道这一点(它预先在 模拟探测器和封口信息上的两个 重复的同位素 ATA创建),因此一个建筑师从不写出:它释放出捆绑相对的索引 加一个 `indexPatches` 条目(`{ ix, dataOffset, target, width }`和 `assemble` 重写每段的字节——拒绝一个横跨 切开。 0号工程 `start_flashloan(end_index)` 是同一个机制与 `u64`两对都通过主网模拟(`save.live.test.ts`, (中文(简体) ), `project0.live.test.ts`) (中文(简体) ).

## Huma——队列的ID和即时路径

`ComposerHumaActions` (单位:千美元)`vaults/huma/`从回收的链上IDL编码. 三个事实 程序从来没有说明 每一个都有一个测试: 赎罪请求的id是 `last_request_id + 1` (单位:千美元)`next_request_id` 这是 处理器的 FIFO 头 — 当队列处于时, 已有请求的 ID 非空; 请求 PDA 种子为 `u128` 编号 **大号**; 和钱包 无 `LenderState` 需求 `create_lender_accounts_v2` 第一届会议之前 `deposit` (造者读取所出所出所出所出所出所出所出所出. 即时出口是 按液态资产比率计算,无许可的、累进的收费,因此 `instantWithdraw` 通过运行它来引用它( e)`quoteInstantWithdraw`,溶剂 引用器的机制)和封条 `max_fee = quote × (1 + tolerance)`。 。 。 . `ComposerVaultActions` 路线 `provider: 'huma'` 存款和 `redeemShares`· ; `test/huma.live.test.ts` 模拟主网上所有三道.

## 宿主的建造者做和不做

|  | 卡米诺 `/ktx/*-instructions` | 木星边缘 `/borrow/operate-instructions` |
| --- | --- | --- |
| 金额 | 小数字符串 | 原始, 已签名 (`+` 存款/借款, `−` 退/还) |
| ATA 创建, SOL 包装/ 取消包装 | **包含** | **缺席** ——本套件添加了它们(`actions/jupiter-lend/setup.ts`(中文(简体) ) |
| 计算单位限制 | 包括(抽出,我们自己设置) | 缺席 |
| 优先权费 | 缺席 | 缺席 |
| 查询表 | 内容包括(`lutsByAddress`(中文(简体) ) | 仅由RPC解决 |
| 一发(存款+借出) | 两个列表, 缩写 | 一个 `operate` 双腿 |
| "所有的"哨兵 | `u64::MAX` | `MIN_I128` 每边 |

测量的2026-09-16( `test/fixtures/`) (中文(简体) ). 木星的建造者 **模拟** 学习新的位置 `nftId`因此,签名者必须持有SOL; 无法运行交易答案的钱包 `{"message":"No return data found in logs"}`。 。 。 .

## 由动作和字节盖组成的

快速动作是调和:互换腿,放出腿,各自取出自自己的腿 建造者,带有 **分隔** 记录在每个边界。 装配工包 贪婪地——与1,232字节和64个账户锁一样多的指示——和 交换 + Kamino 存款符合 **一个** 928字节 交易为活(表载),削减为倒数 `Assembled.split` 加减 `description` 后缀 `(i/n)` 说吧 取决于 先前的(存储一个互换输出)不能被链条所模拟 预算额 `fallbackComputeUnits` 收费报告说 `simulated: false`。 。 。 .

借出腿在交换机上是大小的 **保证** 产出 (单位:千美元)`otherAmountThreshold` 精确输入, `outAmount` 因为主机 出贷人的指示需要固定数额——没有“交存合同” 平衡点 剩余部分留在钱包里。 更优先的ExactOut 引用一个回报.

## 收费政策

`SvmFeePolicy` 内 `svm-kit/fees.ts`:模拟 `unitsConsumed × (1 + margin)` → `getRecentPrioritizationFees` 超过交易 **可写** 账目 ∗ 样本中位数,下限为1 000 μL/CU,上限为2 M,硬顶为0.02 SOL 优先收费(重报,未剪接)。 每个数字都是压倒性的 电话.

## 测试

-   `pnpm test` - 离线 东道建筑商的反应是固定的 信件编译器在 `svm-kit` (两个地点都服务于 同样的请求密封和解封, 我们汇编他们的指示是 **字节相同** 交易时的 `order: 'address'` 卡米诺的 `@solana/kit`木星的首次出现 `web3.js`) (中文(简体) ).
-   `pnpm test:live` - 建造者和公众RPC:卡米诺储金,木星放出 存款与我们的设置,互换 —— 存款;每个组装,模拟和 编入预算。 无所寄出.

## 标志性——没有主机的会场

指标(Pendle on Solana)没有发表引文或构建终点;其SDK是 (原始内容存档于2018-03-29). AGPL on web3.js. 因此,这个包 构建了腿本身: CMM和核心IDLs 销售商`vaults/exponent/idl/`,ABI,地址固定), `MarketThree` 编号 : `Vault` 解码通过 `svm-kit`IDL编码器和 `trade_pt` 编号 : `trade_pt_exact_out` 编号 : `buy_pt` 编号 : `sell_pt` 从IDL编码为每 从市场账户中提取的账户(SY程序的CPI账户是ALT) 指数在上面.

```ts
import {
  ComposerExponentActions,
  readMarketThree,
} from '@1delta/calldata-sdk-sol'

const market = await readMarketThree(fetchers, clmmMarket) // from the tracer's exponent_meta.market_address
const q = await ComposerExponentActions.quote(
  { market, direction: 'SyToPt', amountIn: 1_000_000_000n }, // no wallet needed: runs as the pool
  { fetchers },
)
// q = { amountOut: 1014764897n, exact: true, source: 'simulation', ptPriceInSy: 0.98545, unitsConsumed: 127806 }
const leg = await ComposerExponentActions.tradePt(
  {
    market: clmmMarket,
    account: wallet,
    direction: 'SyToPt',
    amountIn: q.amountIn,
    amountConstraint: (q.amountOut * 995n) / 1000n,
  }, // 50 bps
  { fetchers, market },
)
const { transactions } = await SvmTxUtilsLite.assemble(leg, {
  fetchers,
  payer: wallet,
})
```

引文是对指令的模拟: `trade_pt` 返回时 `TradePtReturnData` 皇家警察把它交回来,所以收费,抽查过境和现场 限制是程序自己的。 仅引用一个大小的引用可以借用池中的身份 (单位:千美元)`sigVerify: false`),钱包引文作为钱包运行. `midQuote` 这是 aPI 中间, 标记 `exact: false`。 。 。 . `buy_pt` 编号 : `sell_pt` (base QQ PT) 在一个资助的钱包上编码但尚未模拟验证—— Exponent.md 第4节.

## 解决——三个出道,一个作曲家

溶剂(USX 发号牌:eUSX,SR-/JR-strcUSX)没有发布IDL,也没有公开发布 构建器; 应用程序同时捆绑程序IDL和那些被销售的 (单位:千美元)`@1delta/margin-fetcher-sol`是因为 `vaults/solstice/idl/`) (中文(简体) ). 每个用户指令 由它们编码,并按位置检查它们的位置 `test/solstice.test.ts`使作曲家超越编码器的是 退出: eUSX `unlock`成为7天的代管人, 高级假期立即收费或 通过15天的冷却,小队排入一个定居批次——和 队列路径后面的每个用户记录必须插入一次.

```ts
import {
  ComposerSolsticeActions,
  ComposerVaultActions,
} from '@1delta/calldata-sdk-sol'
import { fetchSolsticeVaults } from '@1delta/margin-fetcher-sol'

const ctx = { rpc, vaults: await fetchSolsticeVaults({ rpc }) }
const lock = await ComposerSolsticeActions.deposit(
  { vault: 'eUSX', account, amount: 1_000_000_000n },
  ctx,
)
const q = await ComposerSolsticeActions.simulate(
  { vault: 'JR-strcUSX', direction: 'deposit', amount: 1_000_000_000n },
  ctx,
) // the program's number
const req = await ComposerSolsticeActions.requestRedeem(
  { vault: 'SR-strcUSX', account, shares },
  ctx,
) // init + senior_unlock_queued
const now = await ComposerSolsticeActions.redeemInstant(
  { vault: 'SR-strcUSX', account, shares },
  ctx,
) // 10 bps
const usx = await ComposerSolsticeActions.claim(
  { vault: 'JR-strcUSX', account, batch: 'AUG-26-26' },
  ctx,
)
// or through the uniform surface:
await ComposerVaultActions.deposit(
  { provider: 'solstice', vault: 'eUSX', account, amount, decimals: 6 },
  { solstice: ctx },
)
```

`solstice.live.test.ts` 在主网上模拟每一个都是借来的 方案所属身份——存款与分类账估计数一致,为1e-6 离开行说的地方, 和必须失败的路径 程序本身的检查.

## 利用—— `ComposerMargin`

每个会场都通过它自己的堆栈(LOOPING.md):一对闪光(Jupiter) Lend的闪存程序在0 bps, 卡米诺的后备配对, Save's)或一个括号 (项目0) `start_flashloan … end_flashloan`围绕 `depositAndBorrow` (单位:千美元) 木星交换,在一个原子列表。 作曲家大小从呼叫者神谕 (原产地费毛额增加) ),引用64-锁预算下的互换,尝试每一次 闪出最便宜的候选人 × 两条路线,直到密封消息符合1,232 字节和手一 `SvmCallParams` 改为 `assemble`模拟它.

```ts
import {
  ComposerMargin,
  MarginTradeType,
  SvmTxUtilsLite,
} from '@1delta/calldata-sdk-sol'

const build = await ComposerMargin.createMarginFlashLoan(
  {
    account: wallet,
    marginData: {
      marginTradeType: MarginTradeType.Open,
      collateral: {
        lender: 'KAMINO_7u3He…',
        lenderAssetAddress: SOL_RESERVE,
        mint: WRAPPED_SOL,
        decimals: 9,
      },
      debt: {
        lender: 'KAMINO_7u3He…',
        lenderAssetAddress: USDC_RESERVE,
        mint: USDC,
        decimals: 6,
      },
    },
    input: { mint: WRAPPED_SOL, amount: 100_000_000n }, // 0.1 SOL
    targetLeverage: 2,
    slippageBps: 100,
    priceCollInDebtE18: usdcPerSolRawE18, // from the rows' oracle prices
    elevationGroup: 2, // Kamino: requested between the deposit and the borrow
  },
  { rpc, jupiterSwapApi, save: { rpc }, project0: { rpc, publicData } },
)
// build.meta: { flash: { provider, feeBps }, sizing: { side, flashAmount, … }, swap, lockBudget, route, bytes, accountKeys }
const { transactions } = await SvmTxUtilsLite.assemble(build, {
  fetchers,
  payer: wallet,
})
```

现场发现什么`test/margin.live.test.ts`主网模拟, 2026-09-20:一个2×SOL/USDC的开口适合在木星月台(Vault 1)上的一次交易, Kamino主(现有义务),保存主和项目0;a 3x JitosOL/ 苏尔 卡米诺在列表中请求第2高地组。 钱包上的卡米诺环 拒绝履行任何义务`KaminoObligationRequired` ——托管借款 建设者需要存在;先存出). 同资产MIGRATE Kamino – 保存 措施 1,243 B -- -- 11起以上 -- -- 并被拒绝 (单位:千美元)`TransactionTooLarge`),我们寻找对子钥匙的表格是: 杠杆 循环尺度环路为会场所建: `LoopscaleLending.openLoop` (或 `ComposerMargin.createLoopscaleLoop`, (中文(简体) ), `/creditbook/flash_borrow` 与 钱包在一个 `user-wallet` 页眉和 `cpiIxs[].data` 内 **基础64** (医生说) 基数58;基数58为500).

公共RPCs 429 全跑的活门(每个建筑都读取会场的) 账户,引用三个闪存提供者和措施); 设置 `SVM_RPC_URLS` 运行 一次一个案例.

## 不在这里

-   **指数YT、流动性、订货簿、到期后赎回** - 再来一次IDL 使用同一方法(EXPONENT.md 第4节),分别作出指示.
-   **1Delta查询表本身** —— 说 `flashloan/lut.ts` 计划他们和 `pnpm flash-lut --keypair <file> --send` 创建它们;直到地址 内 `ONEDELTA_FLASH_LOOKUP_TABLES` 任何压缩都不要超出场地本身 图表.
-   **简单换地** - SOLANA PLAN § 5.1 中继木星的密封交易; 这里的指令表用于构成.
-   **Token-2022检测** ——ATA出产需要薄荷程序;通过 `jupiterLendParams.tokenProgram` (美元) 符号列表 知见已.

## 常见问题

### @1delta/calldata-sdk-sol 是什么？

SDK所服务的贷款人建立索拉纳交易——@1delta/calldata-sdk的对等:相同的入门点,指令而不是作曲的 calldata,过期的文物\. 没有viem,没有索拉纳运行时间\.

### 如何安装 @1delta/calldata-sdk-sol？

在项目目录运行 npm install @1delta/calldata-sdk-sol，或使用 pnpm add / yarn add / bun add。

### @1delta/calldata-sdk-sol 支持 TypeScript 吗？

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

### @1delta/calldata-sdk-sol 支持 ESM 还是 CommonJS？

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

### @1delta/calldata-sdk-sol 可以商用吗？

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

### @1delta/calldata-sdk-sol 的下载量有多少？

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

### @1delta/calldata-sdk-sol 还在维护吗？

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

