@1delta/calldata-sdk-sol

中文文档
0.0.26发布于 2026/10/30MITTypeScriptESM + CJS近 30 天下载 2962

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

中文使用文档
文档目录11 节
  1. 一项直接行动
  2. 保存 —— 由程序构建, 不是构建器
  3. Huma——队列的ID和即时路径
  4. 宿主的建造者做和不做
  5. 由动作和字节盖组成的
  6. 收费政策
  7. 测试
  8. 标志性——没有主机的会场
  9. 解决——三个出道,一个作曲家
  10. 利用—— ComposerMargin
  11. 不在这里

@ 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

一项直接行动

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/[email protected] (单位:千美元)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::MAXMIN_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-kitIDL编码器和 trade_pt 编号 : trade_pt_exact_out 编号 : buy_pt 编号 : sell_pt 从IDL编码为每 从市场账户中提取的账户(SY程序的CPI账户是ALT) 指数在上面.

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天的冷却,小队排入一个定居批次——和 队列路径后面的每个用户记录必须插入一次.

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模拟它.

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 共发布 24 个版本,首次发布于 2026/10/04;过去 12 个月发布了 24 个版本。

版本发布日期距今
0.0.26latest2026/10/308 天前
0.0.252026/10/308 天前
0.0.232026/10/299 天前
0.0.222026/10/2711 天前
0.0.212026/10/2711 天前
0.0.202026/10/2315 天前

关于 @1delta/calldata-sdk-sol 的常见问题

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