@ 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::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-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(美元) 符号列表 知见已.