@0dotxyz/p0-ts-sdk

中文文档
2.12.0发布于 2026/11/03MITTypeScriptESM + CJS构建来源已验证近 30 天下载 2.1万

P0 协议 TypeScript SDK - A Solana DeFi出借协议

中文使用文档
文档目录33 节
  1. 特征
  2. 安装
  3. 快速启动
  4. 1. 客户初始化
  5. 2. 装入您的账户
  6. 3. 寻找银行
  7. 4. 存款托肯
  8. 5. 对担保物的借款
  9. 6. 监测账户保健
  10. 实例
  11. 运行示例
  12. 核心概念
  13. 项目0 客户端
  14. 边距fi 账户和 Wrapper
  15. 银行
  16. 余额
  17. QQ 软件包结构
  18. 关键特性
  19. 类型安全
  20. 多重银行支持
  21. 健康计算
  22. 测试
  23. 发展
  24. 先决条件
  25. 设置
  26. 项目结构
  27. 可用的脚本
  28. · 出版
  29. 捐款
  30. 发展 工作流量
  31. 许可证
  32. 承认
  33. • 免责声明

项目 0 类型SDK

npm version npm downloads License: MIT TypeScript GitHub

一个现代的,型式安全的TypeScript SDK,用于与关于索拉纳的P0协议互动. 借出,借出,并管理以清洁,开发友好的API为杠杆的DeFi位置.

📖 读取完整文档

特征

  • 🔒 类型安全: 包含全面类型定义的完整类型脚本支持
  • 📦 树能震动:优化的无害环境管理和CJS构建 (<1MB)
  • 🧪 测试良好单位和与Vitest合并测试
  • 📚 丰富的实例: 7+ 涵盖所有核心特征的可运行实例
  • 🔄 现代工具: 由tsup,ESLint,Pretier所建 :
  • 🎯 索拉纳本土: 建在Anchor上,并实现全链集成
  • ⚡ 生产准备: 用于生产用途

安装

npm install @0dotxyz/p0-ts-sdk
# or
yarn add @0dotxyz/p0-ts-sdk
# or
pnpm add @0dotxyz/p0-ts-sdk

快速启动

1. 客户初始化

import { Connection, PublicKey } from "@solana/web3.js";
import { Project0Client, getConfig } from "@0dotxyz/p0-ts-sdk";

// Connect to Solana
const connection = new Connection("https://api.mainnet-beta.solana.com", "confirmed");

// Get configuration (mainnet-beta)
const config = getConfig("production");

// Initialize the client (loads all banks and oracle prices)
const client = await Project0Client.initialize(connection, config);

console.log(`Loaded ${client.banks.length} banks`);

2. 装入您的账户

import { MarginfiAccount, MarginfiAccountWrapper } from "@0dotxyz/p0-ts-sdk";

const accountAddress = new PublicKey("YOUR_MARGINFI_ACCOUNT_ADDRESS");

// Fetch your account
const account = await MarginfiAccount.fetch(accountAddress, client.program);

// Wrap it for cleaner API
const wrappedAccount = new MarginfiAccountWrapper(account, client);

3. 寻找银行

import { AssetTag } from "@0dotxyz/p0-ts-sdk";

// Option 1: Get bank by address
const bank = client.getBank(new PublicKey("BANK_ADDRESS"));

// Option 2: Get all banks for a mint (e.g., USDC)
const USDC_MINT = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const usdcBanks = client.getBanksByMint(USDC_MINT);

4. 存款托肯

// Build deposit transaction
const depositTx = await wrappedAccount.makeDepositTx(
  usdcBank.address,
  "100" // Amount in UI units (100 USDC)
);

// Simulate (optional, but recommended)
const simulation = await connection.simulateTransaction(depositTx);
console.log(`Compute units: ${simulation.value.unitsConsumed}`);

// Sign and send
// depositTx.sign([wallet]);
// await connection.sendTransaction(depositTx);

5. 对担保物的借款

// Check how much you can borrow (account health + bank borrow cap + bank liquidity)
const maxBorrow = wrappedAccount.computeMaxBorrowForBank(usdcBank.address);
console.log(`Max borrow: $${maxBorrow.toString()}`);

// Build borrow transaction
const borrowTx = await wrappedAccount.makeBorrowTx(
  usdcBank.address,
  "100" // Borrow 100 USDC
);

// Send transaction...

6. 监测账户保健

import { MarginRequirementType } from "@0dotxyz/p0-ts-sdk";

// Get free collateral in USD
const freeCollateral = wrappedAccount.computeFreeCollateral();
console.log(`Free collateral: $${freeCollateral.toString()}`);

// Get health components
const health = wrappedAccount.computeHealthComponents(MarginRequirementType.Initial);

const healthFactor = health.assets.div(health.liabilities);
console.log(`Health factor: ${healthFactor.toString()}`);

实例

看看这个 examples/ 完整、可运行的示例目录 :

每个例子包括:

  • QQ 完整设置指令
  • 详细评论
  • QQ 处理出错
  • 交易模拟

运行示例

cd examples
cp .env.example .env
# Edit .env with your values
tsx 01-deposit.ts

核心概念

项目0 客户端

管理协议交互的主要SDK客户端.

const client = await Project0Client.initialize(connection, config);

// Pre-loaded data (fetched once at initialization)
client.banks                // All available banks
client.bankMap              // Banks indexed by address
client.oraclePriceByBank   // Latest oracle prices
client.mintDataByBank      // Token mint metadata
client.addressLookupTables // For transaction optimization

// Methods
client.getBank(address)             // Get bank by address
client.getBanksByMint(mint, tag?)   // Get all banks for a mint

福利:

  • 单一初始化加载所有链条数据
  • 重新使用整个应用程序
  • 自动预告价格缓存
  • 内建的搜索表支持

边距fi 账户和 Wrapper

你的贷款账户在协议.

// Fetch raw account
const account = await MarginfiAccount.fetch(address, client.program);

// Wrap for clean API (recommended)
const wrapped = new MarginfiAccountWrapper(account, client);

// All methods have access to banks, oracles, etc.
wrapped.computeMaxBorrowForBank(bankAddress);
wrapped.makeDepositTx(bankAddress, amount);
wrapped.computeFreeCollateral();

银行

某地的贷款池.

const bank = client.getBank(bankAddress);

bank.mint; // Token mint address
bank.config; // Interest rates, weights, limits
bank.config.assetWeightInit; // Collateral factor (LTV)
bank.config.liabilityWeightInit; // Borrow weight

余额

你在特定银行的地位.

const balance = account.balances[0];

balance.bankPk; // Bank address
balance.assetShares; // Deposit shares
balance.liabilityShares; // Borrow shares
balance.active; // Is position active?

QQ 软件包结构

SDK提供了优化的切入点:

// Main SDK (core functionality)
import { Project0Client, MarginfiAccount, getConfig } from "@0dotxyz/p0-ts-sdk";

// Vendor utilities (oracle integrations, Jupiter, etc.)
import { fetchOracleData, OraclePrice } from "@0dotxyz/p0-ts-sdk/vendor";

为什么要单独出口供应商?

  • 简单使用大小的捆绑大小
  • 甲骨文库( Pyth, 范围) 很大
  • 树震你不需要的东西

关键特性

类型安全

导出类型的全类型脚本支持 :

import type {
  MarginfiAccountType,
  BankType,
  BalanceType,
  OraclePrice,
  MarginRequirementType,
  Project0Config,
} from "@0dotxyz/p0-ts-sdk";

多重银行支持

处理同一薄荷存在多家银行的案件:

// Get ALL SOL banks (main + Kamino)
const solBanks = client.getBanksByMint(WSOL_MINT);

// Filter by tag
const mainSolBanks = client.getBanksByMint(WSOL_MINT, AssetTag.SOL);
const kaminoBanks = client.getBanksByMint(WSOL_MINT, AssetTag.KAMINO);

健康计算

内建账户健康监测:

import { MarginRequirementType } from "@0dotxyz/p0-ts-sdk";

// Free collateral (how much you can still borrow)
const free = wrapped.computeFreeCollateral();

// Health components (assets vs liabilities)
const health = wrapped.computeHealthComponents(
  MarginRequirementType.Initial // or Maintenance
);

// Max amounts — bank-aware:
//   borrow   = min(health-based, remaining borrow cap, available bank liquidity, rate-limit headroom)
//   withdraw = min(health-based, available bank liquidity, rate-limit headroom)
//   deposit  = remaining deposit cap (optionally min'd with your wallet balance)
// (rate-limit headroom = bank net-outflow limiter in tokens + group USD limiter, if enabled)
const maxBorrow = wrapped.computeMaxBorrowForBank(bankAddress);
const maxWithdraw = wrapped.computeMaxWithdrawForBank(bankAddress);
const maxDeposit = wrapped.computeMaxDepositForBank(bankAddress, { walletBalance: 1_000 });

// Pass { ignoreBankLimits: true } to get the purely health-based borrow/withdraw amount

测试

SDK包括综合测试:

# Unit tests (fast, no RPC needed)
pnpm test:unit

# Integration tests (requires RPC)
SOLANA_RPC_URL=https://api.mainnet-beta.solana.com pnpm test:integration

# All tests
pnpm test

# With coverage
pnpm test:coverage

测试策略 :

  • 单位测试: 纯计算,转换,验证
  • 融合测试: 真实链数据,交易构建,模拟

见 试验. md 详细情况.

发展

先决条件

  • 节点.js 18.0.0
  • pnpm(建议)

设置

# Install dependencies
pnpm install

# Build the SDK
pnpm build

# Watch mode (for development)
pnpm dev

# Type check
pnpm typecheck

# Lint and format
pnpm lint
pnpm format

项目结构

p0-ts-sdk/
├── src/
│   ├── index.ts              # Main SDK exports
│   ├── vendor/               # Vendor entry point (oracles, etc.)
│   ├── config.ts             # Network configurations
│   ├── models/               # Core models
│   │   ├── client.ts         # Project0Client
│   │   ├── account.ts        # MarginfiAccount
│   │   ├── account-wrapper.ts # MarginfiAccountWrapper
│   │   ├── bank.ts           # Bank model
│   │   └── ...
│   ├── services/             # Business logic
│   │   ├── account/          # Account operations
│   │   ├── price/            # Oracle price fetching
│   │   └── ...
│   ├── instructions/         # Transaction builders
│   ├── types/                # TypeScript types
│   ├── idl/                  # Anchor IDL
│   └── utils/                # Helpers
├── tests/
│   ├── unit/                 # Unit tests (mocked)
│   ├── integration/          # Integration tests (real RPC)
│   └── fixtures/             # Test data
├── examples/                 # 7+ runnable examples
└── dist/                     # Build output
    ├── index.js              # ESM bundle
    ├── index.cjs             # CJS bundle
    ├── index.d.ts            # Type definitions
    └── vendor.*              # Vendor bundles

可用的脚本

脚本说明
pnpm build建立无害环境管理+CJS捆绑
pnpm dev开发的监视模式
pnpm test运行所有测试
pnpm test:unit仅运行单元测试
pnpm test:integration运行集成测试
pnpm test:coverage生成覆盖报告
pnpm lint使用 ESLint 键入
pnpm format格式为 Pretier
pnpm typecheck脚本类型检查
pnpm clean删除建筑文物
pnpm changeset创建发行的更改器
pnpm version从更改中跳出版本
pnpm release构建并发布到 npm

· 出版

此软件包使用 更改 用于版本管理和npm出版.

见 相关内容 详细指示,或 变化集/QUICKSTART.md 快速参考.

快速发布 :

npm login
pnpm changeset    # Document changes
pnpm version      # Bump version
pnpm release      # Publish to npm
git push --follow-tags

捐款

我们欢迎捐款! 请参见我们提供的准则:

  1. 叉子存储器
  2. 创建特性分支( E)git checkout -b feature/amazing-feature(中文(简体) )
  3. 用测试来改变
  4. 运行 pnpm test 财务报告和审定财务报表 pnpm lint
  5. 提交更改( E)git commit -m 'Add amazing feature'(中文(简体) )
  6. 推向分行(git push origin feature/amazing-feature(中文(简体) )
  7. 打开拉请求

发展 工作流量

# 1. Make changes
vim src/models/client.ts

# 2. Add tests
vim tests/unit/models/client.test.ts

# 3. Run tests
pnpm test:unit

# 4. Build
pnpm build

# 5. Test with examples
cd examples && tsx 01-deposit.ts

许可证

这个项目根据麻省理工学院许可证颁发——见 自由主义 详细文件.

承认

这个SDK是建在顶部的 边距协议利用其链上方案和基础设施.

此外,还感谢:

• 免责声明

这个SDK是一次性提供的。 总是:

  • 了解 DeFi 协议的风险
  • 监控您的账户健康
  • 采用适当的风险管理
  • 审计您的整合代码

为建筑商建造 🛠️由P0团队出道

版本与发布记录

@0dotxyz/p0-ts-sdk 共发布 167 个版本,首次发布于 2026/01/15;过去 12 个月发布了 167 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.12.0latest2026/11/032 天前
3.0.0-next.3next2026/11/032 天前
2.11.12026/11/032 天前
3.0.0-next.22026/11/032 天前
3.0.0-next.12026/10/2214 天前
3.0.0-next.02026/10/2016 天前

其他发布通道:alpha → 2.10.1-alpha.0,next → 3.0.0-next.3。

关于 @0dotxyz/p0-ts-sdk 的常见问题

@0dotxyz/p0-ts-sdk 是什么?

P0 协议 TypeScript SDK - A Solana DeFi出借协议

如何安装 @0dotxyz/p0-ts-sdk?

在项目目录运行 npm install @0dotxyz/p0-ts-sdk,或使用 pnpm add / yarn add / bun add。

@0dotxyz/p0-ts-sdk 支持 TypeScript 吗?

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

@0dotxyz/p0-ts-sdk 支持 ESM 还是 CommonJS?

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

@0dotxyz/p0-ts-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@0dotxyz/p0-ts-sdk 可以商用吗?

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

@0dotxyz/p0-ts-sdk 的下载量有多少?

根据 npm 官方下载统计,@0dotxyz/p0-ts-sdk 在 2026/10/04 – 2026/11/02 这 30 天内被下载 21,172 次,日均约 706 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@0dotxyz/p0-ts-sdk 还在维护吗?

最新版本 2.12.0 发布于 2026/11/03(2 天前);至今共发布 167 个版本,其中过去 12 个月发布了 167 个;首次发布于 2026/01/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。