关于 kamino
这是一份使用 Kamino Finance SDK 和 CLI 在 Solana 上开发的指南,介绍借贷、杠杆头寸、集中流动性策略及聚合预言机价格等功能。
主要功能
- 01借贷市场操作与头寸管理
- 02杠杆头寸操作
- 03集中流动性策略
- 04聚合预言机价格访问
- 05借贷命令行工具
适用场景
- 01开发 Solana 借贷应用
- 02自动执行借款与还款
- 03管理受支持 DEX 上的流动性策略
- 04在 DeFi 应用中使用聚合价格
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sendaifun/ skills --skill kamino安装后在 Claude Code 中输入/kamino确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
docs/troubleshooting.mdexamples/lending/borrow-repay.mddeposit-withdraw.mdleverage.mdexamples/liquidity/strategy-management.mdexamples/oracle/price-feeds.mdresources/klend-api-reference.mdkliquidity-api-reference.mdprogram-addresses.mdscope-api-reference.mdtemplates/full-integration.tslending-setup.tsliquidity-setup.ts详细介绍
Kamino Finance 开发指南
使用 Kamino Finance 在 Solana 上构建复杂的 DeFi 应用——这是一个全面的 DeFi 协议,提供借贷、自动化流动性管理、杠杆交易和预言机聚合功能。
概述
Kamino Finance 提供:
- Kamino Lend (K-Lend):具有隔离市场的借贷协议
- Kamino Liquidity (K-Liquidity):自动化 CLMM 流动性管理策略
- Scope Oracle:用于可靠定价的预言机价格聚合器
- Multiply/Leverage:对资产建立杠杆多头/空头头寸
- Vaults:产生收益的金库策略
- Obligation Orders:基于 LTV 和价格的自动化订单执行
快速入门
安装
# Lending SDK
npm install @kamino-finance/klend-sdk
# Liquidity SDK
npm install @kamino-finance/kliquidity-sdk
# Oracle SDK
npm install @kamino-finance/scope-sdk
# Required peer dependencies
npm install @solana/web3.js @coral-xyz/anchor decimal.js
环境设置
# .env file
SOLANA_RPC_URL=https://api.mainnet-beta.solana.com
WALLET_KEYPAIR_PATH=./keypair.json
Kamino 借贷 (klend-sdk)
借贷 SDK 支持通过 Kamino 借贷市场进行存款、借款、还款和清算。
核心类
| 类 | 用途 |
|---|---|
KaminoMarket | 加载并与借贷市场交互 |
KaminoAction | 构建借贷交易(存款、借款、还款、提取) |
KaminoObligation | 管理用户债务头寸 |
KaminoReserve | 访问储备配置和统计数据 |
VanillaObligation | 标准债务类型 |
初始化市场
import { KaminoMarket } from "@kamino-finance/klend-sdk";
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection("https://api.mainnet-beta.solana.com");
// Main lending market address
const MAIN_MARKET = new PublicKey("7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF");
// Load market with basic data
const market = await KaminoMarket.load(connection, MAIN_MARKET);
// Load reserves for detailed data
await market.loadReserves();
// Get specific reserve
const usdcReserve = market.getReserve("USDC");
console.log("Total Deposits:", usdcReserve?.stats.totalDepositsWads.toString());
console.log("LTV:", usdcReserve?.stats.loanToValueRatio);
console.log("Borrow APY:", usdcReserve?.stats.borrowInterestAPY);
console.log("Supply APY:", usdcReserve?.stats.supplyInterestAPY);
// Refresh all data including obligations
await market.refreshAll();
存入抵押品
import { KaminoAction, VanillaObligation, PROGRAM_ID } from "@kamino-finance/klend-sdk";
import { Keypair, sendAndConfirmTransaction } from "@solana/web3.js";
import Decimal from "decimal.js";
async function deposit(
market: KaminoMarket,
wallet: Keypair,
tokenSymbol: string,
amount: Decimal
) {
// Build deposit transaction
const kaminoAction = await KaminoAction.buildDepositTxns(
market,
amount.toString(), // Amount in base units
tokenSymbol, // e.g., "USDC", "SOL"
wallet.publicKey,
new VanillaObligation(PROGRAM_ID),
0, // Additional compute budget (optional)
true, // Include Ata init instructions
undefined, // Referrer (optional)
undefined, // Current slot (optional)
"finalized" // Commitment
);
// Get all instructions
const instructions = [
...kaminoAction.setupIxs,
...kaminoAction.lendingIxs,
...kaminoAction.cleanupIxs,
];
// Create and send transaction
const tx = new Transaction().add(...instructions);
const signature = await sendAndConfirmTransaction(connection, tx, [wallet]);
return signature;
}
借入资产
async function borrow(
market: KaminoMarket,
wallet: Keypair,
tokenSymbol: string,
amount: Decimal
) {
const kaminoAction = await KaminoAction.buildBorrowTxns(
market,
amount.toString(),
tokenSymbol,
wallet.publicKey,
new VanillaObligation(PROGRAM_ID),
0,
true,
false, // Include deposit for fees (optional)
undefined,
undefined,
"finalized"
);
const instructions = [
...kaminoAction.setupIxs,
...kaminoAction.lendingIxs,
...kaminoAction.cleanupIxs,
];
const tx = new Transaction().add(...instructions);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
偿还贷款
async function repay(
market: KaminoMarket,
wallet: Keypair,
tokenSymbol: string,
amount: Decimal | "max"
) {
const repayAmount = amount === "max" ? "max" : amount.toString();
const kaminoAction = await KaminoAction.buildRepayTxns(
market,
repayAmount,
tokenSymbol,
wallet.publicKey,
new VanillaObligation(PROGRAM_ID),
0,
true,
undefined,
"finalized"
);
const instructions = [
...kaminoAction.setupIxs,
...kaminoAction.lendingIxs,
...kaminoAction.cleanupIxs,
];
const tx = new Transaction().add(...instructions);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
提取抵押品
async function withdraw(
market: KaminoMarket,
wallet: Keypair,
tokenSymbol: string,
amount: Decimal | "max"
) {
const withdrawAmount = amount === "max" ? "max" : amount.toString();
const kaminoAction = await KaminoAction.buildWithdrawTxns(
market,
withdrawAmount,
tokenSymbol,
wallet.publicKey,
new VanillaObligation(PROGRAM_ID),
0,
true,
undefined,
"finalized"
);
const instructions = [
...kaminoAction.setupIxs,
...kaminoAction.lendingIxs,
...kaminoAction.cleanupIxs,
];
const tx = new Transaction().add(...instructions);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
获取用户债务
// Get single vanilla obligation for user
const obligation = await market.getUserVanillaObligation(wallet.publicKey);
if (obligation) {
console.log("Deposits:", obligation.state.deposits);
console.log("Borrows:", obligation.state.borrows);
console.log("Health Factor:", obligation.refreshedStats.borrowLimit);
}
// Get all obligations for user
const allObligations = await market.getAllUserObligations(wallet.publicKey);
// Get obligations for specific reserve
const reserveObligations = await market.getAllUserObligationsForReserve(
wallet.publicKey,
usdcReserve
);
// Check if reserve is part of obligation
const isReserveInObligation = market.isReserveInObligation(
obligation,
usdcReserve
);
清算
async function liquidate(
market: KaminoMarket,
liquidator: Keypair,
obligationOwner: PublicKey,
repayTokenSymbol: string,
withdrawTokenSymbol: string,
repayAmount: Decimal
) {
const kaminoAction = await KaminoAction.buildLiquidateTxns(
market,
repayAmount.toString(),
repayTokenSymbol,
withdrawTokenSymbol,
obligationOwner,
liquidator.publicKey,
new VanillaObligation(PROGRAM_ID),
0,
true,
"finalized"
);
const instructions = [
...kaminoAction.setupIxs,
...kaminoAction.lendingIxs,
...kaminoAction.cleanupIxs,
];
const tx = new Transaction().add(...instructions);
return await sendAndConfirmTransaction(connection, tx, [liquidator]);
}
杠杆/Multiply 操作
Kamino 通过 Multiply 功能支持杠杆头寸。
开立杠杆头寸
import {
getLeverageDepositIxns,
getLeverageWithdrawIxns,
calculateLeverageMultiplier
} from "@kamino-finance/klend-sdk/leverage";
async function openLeveragedPosition(
market: KaminoMarket,
wallet: Keypair,
collateralToken: string,
borrowToken: string,
depositAmount: Decimal,
targetLeverage: number // e.g., 2x, 3x
) {
// Calculate parameters for target leverage
const leverageParams = await calculateLeverageMultiplier(
market,
collateralToken,
borrowToken,
depositAmount,
targetLeverage
);
// Build leverage deposit instructions
const { instructions, lookupTables } = await getLeverageDepositIxns(
market,
wallet.publicKey,
collateralToken,
borrowToken,
depositAmount,
leverageParams,
new VanillaObligation(PROGRAM_ID)
);
// Execute transaction with address lookup tables
const tx = new VersionedTransaction(/* ... */);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
平仓杠杆头寸
async function closeLeveragedPosition(
market: KaminoMarket,
wallet: Keypair,
collateralToken: string,
borrowToken: string
) {
const { instructions, lookupTables } = await getLeverageWithdrawIxns(
market,
wallet.publicKey,
collateralToken,
borrowToken,
"max", // Withdraw full position
new VanillaObligation(PROGRAM_ID)
);
const tx = new VersionedTransaction(/* ... */);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
债务订单
根据 LTV 或价格阈值自动执行操作。
基于 LTV 的订单
import {
createLtvBasedOrder,
LtvOrderType
} from "@kamino-finance/klend-sdk/obligation_orders";
// Create order to repay when LTV exceeds threshold
async function createLtvOrder(
market: KaminoMarket,
wallet: Keypair,
targetLtv: number, // e.g., 0.8 for 80%
repayToken: string,
repayAmount: Decimal
) {
const orderIx = await createLtvBasedOrder(
market,
wallet.publicKey,
new VanillaObligation(PROGRAM_ID),
{
type: LtvOrderType.REPAY_ON_HIGH_LTV,
triggerLtv: targetLtv,
repayToken,
repayAmount: repayAmount.toString(),
}
);
const tx = new Transaction().add(orderIx);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
基于价格的订单
import {
createPriceBasedOrder,
PriceOrderType
} from "@kamino-finance/klend-sdk/obligation_orders";
// Create stop-loss order
async function createStopLossOrder(
market: KaminoMarket,
wallet: Keypair,
tokenSymbol: string,
triggerPrice: Decimal,
action: "repay" | "withdraw"
) {
const orderIx = await createPriceBasedOrder(
market,
wallet.publicKey,
new VanillaObligation(PROGRAM_ID),
{
type: PriceOrderType.STOP_LOSS,
tokenSymbol,
triggerPrice: triggerPrice.toString(),
action,
}
);
const tx = new Transaction().add(orderIx);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
Kamino 流动性 (kliquidity-sdk)
在 Orca、Raydium 和 Meteora 上集中流动性头寸的自动化流动性管理。
初始化 SDK
import { Kamino } from "@kamino-finance/kliquidity-sdk";
import { Connection, clusterApiUrl } from "@solana/web3.js";
const connection = new Connection(clusterApiUrl("mainnet-beta"));
const kamino = new Kamino("mainnet-beta", connection);
获取策略
// Get all strategies
const strategies = await kamino.getStrategies();
// Get strategy by address
const strategy = await kamino.getStrategyByAddress(
new PublicKey("strategy_address")
);
// Get strategy by kToken mint
const strategyByMint = await kamino.getStrategyByKTokenMint(
new PublicKey("ktoken_mint")
);
// Get strategies with filters
const filteredStrategies = await kamino.getAllStrategiesWithFilters({
strategyType: "NON_PEGGED", // NON_PEGGED, PEGGED, STABLE
status: "LIVE", // LIVE, STAGING, DEPRECATED
tokenA: new PublicKey("..."), // Filter by token A
tokenB: new PublicKey("..."), // Filter by token B
});
策略类型
| 类型 | 描述 | 示例交易对 |
|---|---|---|
NON_PEGGED | 不相关资产 | SOL-BONK、SOL-USDC |
PEGGED | 弱相关资产 | BSOL-JitoSOL、mSOL-SOL |
STABLE | 价格稳定资产 | USDC-USDT、USDH-USDC |
获取策略数据
// Get share price
const sharePrice = await kamino.getStrategySharePrice(strategy);
console.log("Share Price:", sharePrice.toString());
// Get share data
const shareData = await kamino.getStrategyShareData(strategy);
console.log("Total Shares:", shareData.totalShares);
console.log("Token A per Share:", shareData.tokenAPerShare);
console.log("Token B per Share:", shareData.tokenBPerShare);
// Get token amounts per share
const tokenAmounts = await kamino.getTokenAAndBPerShare(strategy);
console.log("Token A:", tokenAmounts.tokenA);
console.log("Token B:", tokenAmounts.tokenB);
// Get strategy price range
const range = await kamino.getStrategyRange(strategy);
console.log("Lower Price:", range.lowerPrice);
console.log("Upper Price:", range.upperPrice);
console.log("Current Price:", range.currentPrice);
存入策略
import Decimal from "decimal.js";
async function depositToStrategy(
kamino: Kamino,
wallet: Keypair,
strategyAddress: PublicKey,
tokenAAmount: Decimal,
tokenBAmount: Decimal,
slippage: Decimal // e.g., new Decimal(0.01) for 1%
) {
const strategy = await kamino.getStrategyByAddress(strategyAddress);
// Build deposit instructions
const depositIxs = await kamino.deposit(
strategy,
wallet.publicKey,
tokenAAmount,
tokenBAmount,
slippage
);
// Create transaction with extra compute budget
const tx = kamino.createTransactionWithExtraBudget();
tx.add(...depositIxs);
await kamino.assignBlockInfoToTransaction(tx);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
单币存入
async function singleTokenDeposit(
kamino: Kamino,
wallet: Keypair,
strategyAddress: PublicKey,
tokenAmount: Decimal,
isTokenA: boolean, // true for Token A, false for Token B
slippage: Decimal
) {
const strategy = await kamino.getStrategyByAddress(strategyAddress);
const depositIxs = await kamino.singleTokenDeposit(
strategy,
wallet.publicKey,
tokenAmount,
isTokenA,
slippage
);
const tx = kamino.createTransactionWithExtraBudget();
tx.add(...depositIxs);
await kamino.assignBlockInfoToTransaction(tx);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
从策略中提取
async function withdrawFromStrategy(
kamino: Kamino,
wallet: Keypair,
strategyAddress: PublicKey,
shareAmount: Decimal, // Number of shares to withdraw
slippage: Decimal
) {
const strategy = await kamino.getStrategyByAddress(strategyAddress);
const withdrawIxs = await kamino.withdraw(
strategy,
wallet.publicKey,
shareAmount,
slippage
);
const tx = kamino.createTransactionWithExtraBudget();
tx.add(...withdrawIxs);
await kamino.assignBlockInfoToTransaction(tx);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
// Withdraw all shares
async function withdrawAllShares(
kamino: Kamino,
wallet: Keypair,
strategyAddress: PublicKey,
slippage: Decimal
) {
const strategy = await kamino.getStrategyByAddress(strategyAddress);
const withdrawIxs = await kamino.withdrawAllShares(
strategy,
wallet.publicKey,
slippage
);
const tx = kamino.createTransactionWithExtraBudget();
tx.add(...withdrawIxs);
await kamino.assignBlockInfoToTransaction(tx);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
收取费用和奖励
async function collectFeesAndRewards(
kamino: Kamino,
wallet: Keypair,
strategyAddress: PublicKey
) {
const strategy = await kamino.getStrategyByAddress(strategyAddress);
const collectIxs = await kamino.collectFeesAndRewards(
strategy,
wallet.publicKey
);
const tx = kamino.createTransactionWithExtraBudget();
tx.add(...collectIxs);
await kamino.assignBlockInfoToTransaction(tx);
return await sendAndConfirmTransaction(connection, tx, [wallet]);
}
获取池信息
// Get supported DEXes
const dexes = kamino.getSupportedDexes();
// Returns: ["ORCA", "RAYDIUM", "METEORA"]
// Get fee tiers for DEX
const feeTiers = kamino.getFeeTiersForDex("ORCA");
// Get pools for token pair
const orcaPools = await kamino.getOrcaPoolsForTokens(tokenAMint, tokenBMint);
const raydiumPools = await kamino.getRaydiumPoolsForTokens(tokenAMint, tokenBMint);
const meteoraPools = await kamino.getMeteoraPoolsForTokens(tokenAMint, tokenBMint);
// Get current price for pair
const price = await kamino.getPriceForPair("ORCA", tokenAMint, tokenBMint);
再平衡方法
// Get available rebalance methods
const methods = kamino.getRebalanceMethods();
// Returns: ["MANUAL", "DRIFT", "TAKE_PROFIT", "PERIODIC", "PRICE_PERCENTAGE", ...]
// Get enabled methods
const enabledMethods = kamino.getEnabledRebalanceMethods();
// Get default method
const defaultMethod = kamino.getDefaultRebalanceMethod();
// Read rebalance parameters for strategy
const driftParams = await kamino.readDriftRebalanceParams(strategy);
const periodicParams = await kamino.readPeriodicRebalanceParams(strategy);
const priceParams = await kamino.readPricePercentageParams(strategy);
创建新策略
async function createStrategy(
kamino: Kamino,
admin: Keypair,
params: {
dex: "ORCA" | "RAYDIUM" | "METEORA";
tokenAMint: PublicKey;
tokenBMint: PublicKey;
feeTierBps: Decimal;
rebalanceMethod: string;
}
) {
const strategyKeypair = Keypair.generate();
// Check token accounts exist
const tokenAAccount = await kamino.getAssociatedTokenAddressAndData(
params.tokenAMint,
admin.publicKey
);
const tokenBAccount = await kamino.getAssociatedTokenAddressAndData(
params.tokenBMint,
admin.publicKey
);
// Create strategy account
const createAccountIx = await kamino.createStrategyAccount(
strategyKeypair.publicKey
);
// Initialize strategy
const initIxs = await kamino.initializeStrategy(
strategyKeypair.publicKey,
admin.publicKey,
params
);
const tx = kamino.createTransactionWithExtraBudget();
tx.add(createAccountIx, ...initIxs);
await kamino.assignBlockInfoToTransaction(tx);
return await sendAndConfirmTransaction(
connection,
tx,
[admin, strategyKeypair],
{ commitment: "finalized" }
);
}
Scope Oracle (scope-sdk)
提供可靠定价数据的预言机价格聚合器。
初始化 Scope
import { Scope } from "@kamino-finance/scope-sdk";
import { Connection, clusterApiUrl } from "@solana/web3.js";
const connection = new Connection(clusterApiUrl("mainnet-beta"));
const scope = new Scope("mainnet-beta", connection);
获取预言机价格
// Get all oracle prices
const prices = await scope.getOraclePrices();
// Prices indexed by token
console.log("SOL Price:", prices.get("SOL"));
console.log("USDC Price:", prices.get("USDC"));
// Get specific price
const solPrice = await scope.getPrice("SOL");
console.log("SOL/USD:", solPrice.price.toString());
console.log("Timestamp:", solPrice.timestamp);
console.log("Confidence:", solPrice.confidence);
价格数据源
Scope 从多个预言机来源聚合数据:
- Pyth:实时市场价格
- Switchboard:去中心化预言机网络
- TWAP:时间加权平均价格
- CLMM Prices:基于 DEX 的价格
// Get price with source info
const priceData = await scope.getPriceWithMetadata("SOL");
console.log("Price:", priceData.price);
console.log("Source:", priceData.source);
console.log("Age (slots):", priceData.ageSlots);
CLI 命令
借贷 CLI
# Deposit tokens
yarn cli deposit --url <RPC> --owner ./keypair.json --token USDC --amount 100
# Print all lending market accounts
yarn cli print-all-lending-market-accounts --rpc <RPC>
# Print all reserve accounts
yarn cli print-all-reserve-accounts --rpc <RPC>
# Print all obligation accounts
yarn cli print-all-obligation-accounts --rpc <RPC>
# Filter with jq
yarn cli print-all-reserve-accounts --rpc <RPC> | jq '.lastUpdateSlot'
yarn cli print-all-obligation-accounts --rpc <RPC> | jq --stream 'select(.[0][1] == "owner")'
程序地址
主网
| 程序 | 地址 |
|---|---|
| Kamino Lending | KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD |
| Main Market | 7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF |
| Kamino Liquidity | KLIQ... (varies) |
| Scope Oracle | ScopE... (varies) |
储备配置
每个储备都有可配置的参数:
interface ReserveConfig {
// Collateral configuration
loanToValueRatio: number; // Max borrowing power (e.g., 0.8 = 80%)
liquidationThreshold: number; // Liquidation trigger (e.g., 0.85 = 85%)
liquidationBonus: number; // Liquidator reward (e.g., 0.05 = 5%)
// Interest rate model
optimalUtilizationRate: number; // Target utilization
borrowRateCurve: {
baseRate: number;
optimalRate: number;
maxRate: number;
};
// Fees
protocolTakeRate: number; // Protocol fee on interest
hostFeeRate: number; // Host integration fee
// Limits
depositLimit: number; // Max deposits
borrowLimit: number; // Max borrows
// Status
depositEnabled: boolean;
borrowEnabled: boolean;
withdrawEnabled: boolean;
}
错误处理
import { KaminoError, ErrorCode } from "@kamino-finance/klend-sdk";
try {
await kaminoAction.execute();
} catch (error) {
if (error instanceof KaminoError) {
switch (error.code) {
case ErrorCode.InsufficientCollateral:
console.error("Not enough collateral for this borrow");
break;
case ErrorCode.BorrowLimitExceeded:
console.error("Borrow limit reached for this reserve");
break;
case ErrorCode.LiquidationThresholdExceeded:
console.error("Position is at risk of liquidation");
break;
case ErrorCode.InvalidObligation:
console.error("Obligation account not found or invalid");
break;
default:
console.error("Kamino error:", error.message);
}
} else {
throw error;
}
}
最佳实践
健康因子监控
async function checkHealthFactor(
market: KaminoMarket,
wallet: PublicKey
): Promise<number> {
await market.refreshAll();
const obligation = await market.getUserVanillaObligation(wallet);
if (!obligation) return Infinity;
const stats = obligation.refreshedStats;
const healthFactor = stats.borrowLimit / stats.borrowedValue;
if (healthFactor < 1.1) {
console.warn("WARNING: Health factor below 1.1, consider adding collateral");
}
return healthFactor;
}
交易优化
// Use lookup tables for smaller transactions
const { instructions, lookupTables } = await kaminoAction.buildWithLookupTables();
// Create versioned transaction
const messageV0 = new TransactionMessage({
payerKey: wallet.publicKey,
recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
instructions,
}).compileToV0Message(lookupTables);
const tx = new VersionedTransaction(messageV0);
tx.sign([wallet]);
await sendAndConfirmTransaction(connection, tx, [wallet]);
滑点保护
// For liquidity operations, always use slippage protection
const slippage = new Decimal(0.005); // 0.5% max slippage
const depositIxs = await kamino.deposit(
strategy,
wallet.publicKey,
tokenAAmount,
tokenBAmount,
slippage // Protects against price movement
);
TypeScript 类型
import type {
// Lending types
KaminoMarket,
KaminoAction,
KaminoObligation,
KaminoReserve,
VanillaObligation,
ReserveConfig,
ObligationStats,
// Liquidity types
Kamino,
WhirlpoolStrategy,
StrategyWithAddress,
ShareData,
PositionRange,
RebalanceMethod,
StrategiesFilters,
// Oracle types
Scope,
OraclePrices,
PriceData,
} from "@kamino-finance/klend-sdk";
Kamino 2.0 / K-Lend(新功能)
架构更新
Kamino 2.0 推出了全面集成的应用,包含两个关键层:
- 市场层:具有高级风险参数的核心借贷市场
- 金库层:由策展人管理、旨在优化收益的金库策略
新增抵押品支持(2025 年)
| 资产 | 类型 | 备注 |
|---|---|---|
| nxSOL | LST | Nansen 流动性质押代币 |
| Huma RWA | RWA | 由现实世界资产支持的抵押品 |
| JitoSOL | LST | Jito 流动性质押代币 |
K-Lend V2 功能(2025 年第 4 季度)
- 模块化借贷:为 RWA 和机构使用场景设立隔离市场
- 增强型风险引擎:改进清算参数
- 多抵押品仓位:以多种资产作为借款抵押品
治理(2026 年第 1 季度)
将启用由 KMNO 质押者参与的去中心化决策,让代币持有者能够对以下事项投票:
- 储备参数
- 新市场上架
- 协议费用
安全里程碑
- 完成第四次协议验证(2025 年 10 月)
- 150 万美元漏洞赏金计划正在进行
资源
- Kamino Finance 网站
- Kamino 文档
- klend-sdk GitHub
- kliquidity-sdk GitHub
- scope-sdk GitHub
- farms-sdk GitHub
- Kamino Discord
技能结构
kamino/
├── SKILL.md # This file
├── resources/
│ ├── klend-api-reference.md # Complete lending API
│ ├── kliquidity-api-reference.md # Complete liquidity API
│ ├── scope-api-reference.md # Oracle API reference
│ ├── reserve-configs.md # Reserve configurations
│ └── program-addresses.md # All program addresses
├── examples/
│ ├── lending/
│ │ ├── deposit-withdraw.md # Deposit & withdraw examples
│ │ ├── borrow-repay.md # Borrowing examples
│ │ ├── leverage.md # Multiply/leverage examples
│ │ └── liquidation.md # Liquidation bot example
│ ├── liquidity/
│ │ ├── strategy-management.md # Strategy operations
│ │ ├── deposits-withdrawals.md # LP operations
│ │ └── rebalancing.md # Rebalance strategies
│ └── oracle/
│ └── price-feeds.md # Oracle usage examples
├── templates/
│ ├── lending-setup.ts # Lending starter
│ ├── liquidity-setup.ts # Liquidity starter
│ └── full-integration.ts # Complete integration
└── docs/
├── troubleshooting.md # Common issues
└── advanced-patterns.md # Complex patterns
评论
支持 Markdown