# @0dotxyz/p0-ts-sdk 中文文档

规范地址：https://npmcn.com/package/%400dotxyz/p0-ts-sdk/

版本：2\.12\.0
npm 元数据更新时间：2026-11-03T09:22:12.726Z
中文译文更新时间：2026-11-05T21:06:43.492Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%400dotxyz/p0-ts-sdk
原文对照：https://npmcn.com/package/%400dotxyz/p0-ts-sdk/?lang=original
项目主页：https://github.com/0dotxyz/p0-ts-sdk#readme
源码仓库：https://github.com/0dotxyz/p0-ts-sdk

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

- 包体积（解压后）：27.8 MB，33 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18\.0\.0
- 运行依赖：16 个
- 首次发布：2026-01-15T12:17:59.653Z
- 最新版本发布：2026-11-03T09:22:12.314Z
- 近 30 天下载量：21172（2026-10-04 至 2026-11-02，npm 官方下载统计）
- 已发布版本数：167（近 12 个月 167 个）

## 中文简介

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

## 安装

```sh
npm install @0dotxyz/p0-ts-sdk
```

也可以使用：`pnpm add @0dotxyz/p0-ts-sdk`、`yarn add @0dotxyz/p0-ts-sdk`、`bun add @0dotxyz/p0-ts-sdk`

## README

# 项目 0 类型SDK

[![npm version](https://img.shields.io/npm/v/@0dotxyz/p0-ts-sdk.svg?style=flat-square)](https://www.npmjs.com/package/@0dotxyz/p0-ts-sdk) [![npm downloads](https://img.shields.io/npm/dm/@0dotxyz/p0-ts-sdk.svg?style=flat-square)](https://www.npmjs.com/package/@0dotxyz/p0-ts-sdk) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/badge/TypeScript-5.5-blue.svg?style=flat-square)](https://www.typescriptlang.org/) [![GitHub](https://img.shields.io/badge/GitHub-0dotxyz%2Fp0--ts--sdk-181717.svg?style=flat-square&logo=github)](https://github.com/0dotxyz/p0-ts-sdk)

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

📖 **[读取完整文档](https://docs.0.xyz/docs/typescript-sdk/getting-started)**

## 特征

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

## 安装

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

## 快速启动

### 1\. 客户初始化

```typescript
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\. 装入您的账户

```typescript
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\. 寻找银行

```typescript
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\. 存款托肯

```typescript
// 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\. 对担保物的借款

```typescript
// 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\. 监测账户保健

```typescript
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/`](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/examples) 完整、可运行的示例目录 :

-   **[01 - 存储. ts](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/examples/01-deposit.ts)** - 存款和赚取利息
-   **[02-浏览数(ts)](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/examples/02-borrow.ts)** - 借你的担保品
-   **[03- 撤销( ts)](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/examples/03-withdraw.ts)** - 收回你的存款
-   **[04还款](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/examples/04-repay.ts)** - 偿还借入的款项
-   **[05-oracle-prices.ts (英语)](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/examples/05-oracle-prices.ts)** - 与甲骨文价格饲料合作
-   **[06a -- -- 账户 -- -- 健康模拟](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/examples/06a-account-health-simulated.ts)** - 监测账户保健
-   **[06b-账户-健康计算](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/examples/06b-account-health-calculated.ts)** - 计算健康指标

每个例子包括:

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

### 运行示例

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

## 核心概念

### 项目0 客户端

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

```typescript
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

你的贷款账户在协议.

```typescript
// 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();
```

### 银行

某地的贷款池.

```typescript
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
```

### 余额

你在特定银行的地位.

```typescript
const balance = account.balances[0];

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

## QQ 软件包结构

SDK提供了优化的切入点:

```typescript
// 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, 范围) 很大
-   树震你不需要的东西

## 关键特性

### 类型安全

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

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

### 多重银行支持

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

```typescript
// 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);
```

### 健康计算

内建账户健康监测:

```typescript
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包括综合测试:

```bash
# 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](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/TESTING.md) 详细情况.

## 发展

### 先决条件

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

### 设置

```bash
# 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 |

## · 出版

此软件包使用 [更改](https://github.com/changesets/changesets) 用于版本管理和npm出版.

见 [相关内容](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/RELEASING.md) 详细指示,或 [变化集/QUICKSTART.md](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/.changeset/QUICKSTART.md) 快速参考.

**快速发布 :**

```bash
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.  打开拉请求

### 发展 工作流量

```bash
# 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
```

## 许可证

这个项目根据麻省理工学院许可证颁发——见 [自由主义](https://npmcn.com/package/%400dotxyz/p0-ts-sdk/LICENSE) 详细文件.

## 承认

这个SDK是建在顶部的 [边距协议](https://github.com/mrgnlabs/marginfi-v2)利用其链上方案和基础设施.

此外,还感谢:

-   [索拉纳网络3.js](https://github.com/solana-labs/solana-web3.js) - 索拉纳·爪哇脚本 API
-   [锁定](https://github.com/coral-xyz/anchor) - 索拉纳发展框架

## • 免责声明

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

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

* * *

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

## 常见问题

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

