# @acta-markets/ts-sdk 中文文档

规范地址：https://npmcn.com/package/%40acta-markets/ts-sdk/

版本：0\.4\.2
npm 元数据更新时间：2026-11-04T10:06:22.720Z
中文译文更新时间：2026-11-06T20:15:09.515Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40acta-markets/ts-sdk
原文对照：https://npmcn.com/package/%40acta-markets/ts-sdk/?lang=original
项目主页：https://beta.acta.markets/docs/quickstart/web-client-ts-sdk

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

- 包体积（解压后）：3.8 MB，625 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：7 个
- 首次发布：2026-02-16T13:59:40.991Z
- 最新版本发布：2026-11-04T10:06:22.491Z
- 近 30 天下载量：2391（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：48（近 12 个月 48 个）

## 中文简介

用于 Acta 选项的 TypeScript SDK: RFQ WebSocket 客户端, 命令签名, 和 Solana 指令

## 安装

```sh
npm install @acta-markets/ts-sdk
```

也可以使用：`pnpm add @acta-markets/ts-sdk`、`yarn add @acta-markets/ts-sdk`、`bun add @acta-markets/ts-sdk`

## README

# 剧本 SDK

类型脚本 SDK [行动a](https://beta.acta.markets/) 关于索拉纳的选项:WebSocket RFQ 为接客、制造商和金库操作员服务的客户,订单签名,检查服务签名 交易、 HTTP 读取和索拉纳指令构建器.

版本 0.4.x 说 WS 协议 `1.0.0`。阅读 [更改日志](https://unpkg.com/@acta-markets/ts-sdk/CHANGELOG.md) 在此之前 升级.

## 安装

```bash
npm install @acta-markets/ts-sdk
```

一揽子船舶无害环境管理和共同JS建设.

| 导入 | 目录 |
| --- | --- |
| `@acta-markets/ts-sdk/ws` | WebSocket 客户端、 钱包认证、 引文建筑、 选中的接受者签名 |
| `@acta-markets/ts-sdk/chain` | 账户获取器、 PDA 、 订单预览、 指令构建器、 保险库规划器 |
| `@acta-markets/ts-sdk/http` | 地点、信使、市场和金库 |
| `@acta-markets/ts-sdk/ws/keypair` | `KeypairAuthProvider` 节点 |
| `@acta-markets/ts-sdk/types` | 共享类型 |

浏览器应用程序应导入 `/ws`它不装入链式客户端或IDL.

## 取用者: 请求引用

```ts
import {
  ActaWsClient,
  ALL_MINTS,
  ALL_POSITIONS,
  DEVNET_WS,
  WalletAuthProvider,
  type WalletLike,
} from "@acta-markets/ts-sdk/ws";
import type { Address } from "@solana/kit";

export function connectTaker(wallet: WalletLike, market: Address) {
  const client = new ActaWsClient({
    url: DEVNET_WS,
    role: "taker",
    onDisconnect: "keep_quotes",
    products: ["covered_call", "cash_secured_put", "call_spread", "put_spread", "cash_put"],
    clientName: "my-app",
    clientVersion: "1.0.0",
  });

  client.on("error", console.error);
  client.on("quoteReceived", (quote) => console.log(quote.maker, quote.price));
  client.on("authenticated", () => {
    client.getMarketDescriptors();
    client.getPositions(ALL_POSITIONS);
    client.subscribe(["chain_events"], ALL_MINTS);
  });
  client.on("marketDescriptors", async () => {
    await client.createRfq({
      market,
      terms: { type: "cash_secured_put", strike: 136_000_000_000 },
      side: "sell",
      quantity: 20_000_000,
      timeoutSeconds: 30,
      requestId: crypto.randomUUID(),
    });
  });

  client.connectAndAuthenticate(new WalletAuthProvider(wallet));
  return client;
}
```

`url` 是 API 来源; 客户端附件 `/taker`, (中文(简体) ), `/maker`, (中文(简体) ), `/maker/data` 或者说 `/vault`。 。 。 . `DEVNET_WS` 财务报告和审定财务报表 `MAINNET_WS` 导出。 连接和等待前的注册处理器 页:1 `authenticated` 在交易之前. `createRfq` 需要市场描述符,所以等待 `marketDescriptors` 先说.

`price` 财务报告和审定财务报表 `strike` 是每个基础单位的1e9固定点值. `quantity` 进入 内薄膜原子. `createRfq`, (中文(简体) ), `acceptQuote` 财务报告和审定财务报表 `submitSignedSponsoredTx` 页:1 当服务器接受命令时,而不是交易降落时.

之后 `acceptQuote(rfqId, maker, orderIdHex)`,服务器发送 `sponsoredTxToSign`签名 仅与 `verifyAndSignTakerFill`,用于重建预期填充并拒绝 其他的任何东西。 将已接受的命令ID保存在重新连接之间; 超时或超时后 `unknown` 发送,呼叫 `getOrderStatus(orderIdHex)` 重试之前。 这个 [网络客户端指南](https://beta.acta.markets/docs/quickstart/web-client-ts-sdk) 拥有 完全签名和恢复流.

## 购买选项

买家用 `side: "buy"` (原始内容存档于2017-09-31). In the RFQ. 制作者从其制作者 PDA 中写入选项 因此,只有制造商同意 `taker_buy_rfqs` 有足够的监护权,见RFQ。 一个金库 其代表持有 `SIGN_WRITER_QUOTES` 也引用其附带腿部的购买和写作. 最好的购买报价是最低价格。 如果没有制作者能够收到RFQ,服务器会关闭它 随心所欲 `no_eligible_makers` 而不是等待暂停.

```ts
await client.createRfq({
  market,
  terms: { type: "covered_call", strike: 150_000_000_000 },
  side: "buy",
  quantity: 10_000_000,
  timeoutSeconds: 30,
  requestId: crypto.randomUUID(),
});
```

接受并签署 确切的销售: `verifyAndSignTakerFill` 从 RFQ 读取侧面 并拒绝填充,其侧面、条款或数额不尽相同。 买方支付下列费用的总保险费: 引出薄荷并成为位置 `holder`; 制造者或金库是 `writer`为 a 保险库引文通过解码金库为 `makerVault`:买方随后检查已发货 `OpenPositionForVaultWriter` 持单字节1,其中买方的钱包为签注人和 金库代表只签了身份证.

实物购买(`covered_call`, (中文(简体) ), `cash_secured_put`)通过交存 严格提前结算金额 `expiryTs`;程序拒绝以后的存款:

```ts
import { fetchMarket, fetchPosition } from "@acta-markets/ts-sdk";
import { flows } from "@acta-markets/ts-sdk/chain";

const { ixs } = await flows.buildDepositFundsIxs({
  programId,
  payer: buyer.address,
  owner: buyer,
  position: (await fetchPosition(rpc, positionPda)).data,
  market: (await fetchMarket(rpc, marketPda)).data,
});
```

分期付款和现金都不用押金和现金结算。 情况是结果已到 `state`数字 :

-   `settled` 与 `settlement.type` `physical` (存款,或出钱), `cash` (单位:千美元)`holder_payoff` 是你们的),或 `not_exercised` (在无存款的货币中:全部) 附带返回给作者).
-   `terminal_pending { slot, outcome }`: 链已确定位置和服务器 还没有封住那个位置。 显示它,但不要数它.

## 制作者:引用一个RFQ

```ts
import {
  ActaWsClient,
  buildSignedQuoteFromRfq,
  generateNonce,
  MAINNET_WS,
  type AuthProvider,
  type RfqBroadcastMessage,
} from "@acta-markets/ts-sdk/ws";
import type { SignerLike } from "@acta-markets/ts-sdk/chain";
import type { Address } from "@solana/kit";

export function runMaker(
  auth: AuthProvider,
  makerOwner: Address,
  makerSigner: SignerLike,
  priceFor: (rfq: RfqBroadcastMessage) => number,
) {
  const quotes = new ActaWsClient({
    url: MAINNET_WS,
    role: "maker",
    onDisconnect: "cancel_quotes",
    products: ["covered_call", "cash_secured_put"],
    clientName: "my-maker",
    clientVersion: "1.0.0",
  });
  let timing = { minValidity: 0, buffer: 0, clockOffsetMs: 0 };
  quotes.on("welcome", (welcome) => {
    timing = {
      minValidity: welcome.min_quote_validity_seconds,
      buffer: welcome.settlement_buffer_seconds,
      clockOffsetMs: welcome.server_time_unix_ms - Date.now(),
    };
  });
  quotes.on("rfqBroadcast", async (rfq) => {
    const now = Math.floor((Date.now() + timing.clockOffsetMs) / 1000);
    const validUntil = Math.max(
      now + timing.minValidity,
      rfq.expires_at + Math.max(timing.minValidity, timing.buffer),
    );
    if (validUntil > rfq.market.expiry_ts) return;
    const quote = await buildSignedQuoteFromRfq({
      rfq,
      terms: rfq.order_options[0],
      price: priceFor(rfq),
      validUntil,
      nonce: generateNonce(),
      makerOwner,
      makerSigner,
    });
    quotes.submitQuote(quote);
  });
  quotes.connectAndAuthenticate(auth);
  return quotes;
}
```

仅引用下列术语: `rfq.order_options`。 。 。 . `buildSignedQuoteFromRfq` 检查术语 和整数范围,而不是地点时间。 引文必须在RFQ过期后有效 大于 `min_quote_validity_seconds` 财务报告和审定财务报表 `settlement_buffer_seconds` 从 `Welcome`。使用第二个客户端 `makerEndpoint: "data"` 读取 和所有者推动`positionUpdated`, (中文(简体) ), `makerCapsUpdated`, (中文(简体) ), `tradeExecuted`所以,引语 套接字仅引用 。 这个 [创建者 API 引用](https://beta.acta.markets/docs/reference/maker-api) 覆盖引文生命周期.

## HTTP 读取

```ts
import { ActaHttpClient } from "@acta-markets/ts-sdk/http";
import { MAINNET_API } from "@acta-markets/ts-sdk/ws";

const http = new ActaHttpClient({ baseUrl: MAINNET_API });
const [venue, tokens, markets, vaults] = await Promise.all([
  http.venue(new AbortController().signal),
  http.tokens(),
  http.markets({ active: true }),
  http.vaults(),
]);
```

`tokens()` 返回 a `Map` 由薄荷键入. 答复以ETags重新验证.

## 链条

`/chain` 导出账户获取器、 PDA 帮助器、 命令预览和签名、 生成 指令构建者,以及 `flows`数字 :

-   `flows.buildOpenPositionFlowIxs` 财务报告和审定财务报表 `buildOpenSpreadFlowIxs` 返回制造器 Ed25519 核查和开放指示.
-   `flows.buildDepositFundsIxs` (a) 开户情况 在此之前 `expiryTs`。 。 。 .
-   `buildSettlePositionIx` 解决物理选项并展开。 无资金购买者 返回所有附带物给编剧,同样在 ITM 时.
-   `flows.VaultManagerPlanner` 建立金库资本、交易、扩展、交换和治理 说明. `trading.openPositionAsWriter` 财务报告和审定财务报表 `spreads.openSpreadAsWriter` 出售给a 制造器( 持有字节 ); `openPositionForWalletHolder` 财务报告和审定财务报表 `openSpreadForWalletHolder` 构建 打开钱包从金库购买(持有者字节1).
-   `decodeActaEventData` (root导出)读取事件版本 2: 1 `PositionOpened` 每个开放(作家、持有者、, `flags`,条件,毛和净溢价,抵押品)和1 `VaultCycleOpened` 每个金库侧. 升级返回前的版本 1 事件 `null`。 。 。 .

默认操作员连接到 `role: "vault"` (单位:千美元) `vaultPda`。签名 只与交易 `verifyAndSignSponsoredTx` 财务报告和审定财务报表 `verifyAndSignSwap` 从 `/ws`他们 仅签署预期意图的精确匹配并投出 `flows.VaultIntentError` (从 `/chain`否则.

需要有意识的铸造者 `rpc` - 托肯-2022薄荷需要它们的 实际符号程序。 传出 a `programId` 当您不使用默认程序时,每个流量. 这个 [保险库操作指南](https://beta.acta.markets/docs/protocol/vault-integration) 包括金库会议、服务交换和中场演出.

## 迁移到0.4.2

需要金库写入程序升级 。 Opcode,账户布局和种子不变.

| 0.4.1 (中文(简体) ) | 0.4.2 (中文(简体) ) |
| --- | --- |
| `OpenPositionForVaultAsTaker`, (中文(简体) ), `OpenSpreadForVaultAsTaker` | `OpenPositionForVaultWriter`, (中文(简体) ), `OpenSpreadForVaultWriter`附加时 `holderKind` |
| `OpenPositionForVaultAsMaker`, (中文(简体) ), `OpenSpreadForVaultAsMaker` | `OpenPositionForVaultHolder`, (中文(简体) ), `OpenSpreadForVaultHolder` |
| `VaultFundMakerPosition`, (中文(简体) ), `fundMakerPosition` | `FundPositionForVaultHolder`, (中文(简体) ), `fundHolderPosition` |
| `openPositionAsTaker`, (中文(简体) ), `openSpreadAsTaker` | `openPositionAsWriter`, (中文(简体) ), `openSpreadAsWriter` |
| `openPositionAsMaker`, (中文(简体) ), `openSpreadAsMaker` | `openPositionAsHolder`, (中文(简体) ), `openSpreadAsHolder` |
| 保险库写入槽 `actor`, (中文(简体) ), `maker`, (中文(简体) ), `makerCustodyAta` | `participant`, (中文(简体) ), `counterparty`, (中文(简体) ), `premiumSource` |
| 保险库持有人插槽 `taker`, (中文(简体) ), `takerUnderlyingAta`, (中文(简体) ), `takerQuoteAta` | `writer`, (中文(简体) ), `writerUnderlyingAta`, (中文(简体) ), `writerQuoteAta` |
| `OpenPosition` 插槽 `user`, (中文(简体) ), `userUnderlyingAta`, (中文(简体) ), `userQuoteAta` | `taker`, (中文(简体) ), `writerUnderlyingAta`, (中文(简体) ), `takerQuoteAta` |
| 存款 `makerPda`; 制造商传输 `makerOwnerPremiumAta` | `holderMakerPda`· ; `makerOwnerAta` |
| `OPEN_TAKER`, (中文(简体) ), `SIGN_MAKER_QUOTES`, (中文(简体) ), `FUND_MAKER` | `OPEN_AS_WRITER`, (中文(简体) ), `SIGN_HOLDER_QUOTES`, (中文(简体) ), `FUND_HOLDER`; 新建 `SIGN_WRITER_QUOTES` |
| 事件 `OpenPosition`, (中文(简体) ), `OpenSpread`, (中文(简体) ), `OpenTakerBuy`, (中文(简体) ), `OpenTakerBuySpread` | `PositionOpened` |
| 事件 `VaultPositionOpened`, (中文(简体) ), `VaultSpreadOpened` | `VaultCycleOpened` |
| `VaultMakerPositionFunded`· ; `TakerBuyFunded.user` | `VaultHolderPositionFunded`· ; `TakerBuyFunded.holder` |
| 存款中持有者不匹配 : `MakerNotOwner` | `NotPositionHolder` (1111号) |

## 迁移到0.4.0

职位角色是: `writer` 财务报告和审定财务报表 `holder`页:1.

| 0.3.x (单位:千美元) | 0.4.0 (中文(简体) ) |
| --- | --- |
| `Position.takerOwner`, (中文(简体) ), `makerOwner` | `writer`, (中文(简体) ), `holder` |
| `POSITION_OFFSET_TAKER_OWNER`, (中文(简体) ), `_MAKER_OWNER` | `POSITION_OFFSET_WRITER`, (中文(简体) ), `_HOLDER` |
| 存款 `makerOwner`, (中文(简体) ), `makerFundingAta` | `holder`, (中文(简体) ), `holderFundingAta` |
| 结算和清算 `userDestAta`, (中文(简体) ), `makerDestAta` | `writerDestAta`, (中文(简体) ), `holderDestAta` |
| 事件 `user`, (中文(简体) ), `makerOwner`, (中文(简体) ), `taker` | `holder`, (中文(简体) ), `writer` |
| `makerPayoff`, (中文(简体) ), `takerReturn`; WS 键 `maker_payoff`, (中文(简体) ), `taker_return` | `holderPayoff`, (中文(简体) ), `writerReturn`· ; `holder_payoff`, (中文(简体) ), `writer_return` |
| `fetchPositionsByMaker`, (中文(简体) ), `ByTaker` | `fetchPositionsByHolder`, (中文(简体) ), `ByWriter` |
| `buildDepositPremiumIx`, (中文(简体) ), `DepositPremium` | `buildMakerDepositIx`, (中文(简体) ), `MakerDeposit` |

见 [变化](https://npmcn.com/package/%40acta-markets/ts-sdk/CHANGELOG.md) 完整名单.

## 恢复

客户端重新连接并恢复订阅. 与 `autoReconcile`,默认,它 然后重新读取你的RFQ和位置。 无法读取的框架不会删除会话 : 你会得到 `unknownMessage` 或一个 `invalid_frame` 错误, 最多读一次 每5秒,因为被跳过的框架可能带有填充或位置变化.

## 列表呼号

列表方法为您收集每一页 `fetchAllPages`。用于“再装入”视图 使用页面方法,例如 `getPositionsPageAsync`,或将页面查询传递给 HTTP 历史方法,并将返回的光标作为不透明的值.

在电线上,WS列表 `limit` (最多200个)和标签 `cursor`返回时 `next_cursor`, (中文(简体) ), `null` 在最后一页。 REST 列表选择 `limit` (违约50, 最多200个,100个金库申请)和可选 `cursor`: 为第一个省略 页面,然后通过 `next_cursor` 就是这样 见 [呼叫合同](https://beta.acta.markets/docs/reference/ws-common#paging)。 。 。 .

## 文档

-   [Web 客户端指南](https://beta.acta.markets/docs/quickstart/web-client-ts-sdk)
-   [创建者 API 引用](https://beta.acta.markets/docs/reference/maker-api)
-   [网页公约](https://beta.acta.markets/docs/reference/ws-common)
-   [HTTP API 密码](https://beta.acta.markets/docs/reference/http-api)
-   [故障操作指南](https://beta.acta.markets/docs/protocol/vault-integration)

## 许可证

麻省理工学院

## 常见问题

### @acta-markets/ts-sdk 是什么？

用于 Acta 选项的 TypeScript SDK: RFQ WebSocket 客户端, 命令签名, 和 Solana 指令

### 如何安装 @acta-markets/ts-sdk？

在项目目录运行 npm install @acta-markets/ts-sdk，或使用 pnpm add / yarn add / bun add。

### @acta-markets/ts-sdk 支持 TypeScript 吗？

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

### @acta-markets/ts-sdk 支持 ESM 还是 CommonJS？

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

### @acta-markets/ts-sdk 可以商用吗？

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

### @acta-markets/ts-sdk 的下载量有多少？

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

### @acta-markets/ts-sdk 还在维护吗？

最新版本 0\.4\.2 发布于 2026/11/04（3 天前）；至今共发布 48 个版本，其中过去 12 个月发布了 48 个；首次发布于 2026/02/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

