@acta-markets/ts-sdk

中文文档
0.4.2发布于 2026/11/04MITTypeScriptESM + CJS近 30 天下载 2391

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

中文使用文档
文档目录12 节
  1. 安装
  2. 取用者: 请求引用
  3. 购买选项
  4. 制作者:引用一个RFQ
  5. HTTP 读取
  6. 链条
  7. 迁移到0.4.2
  8. 迁移到0.4.0
  9. 恢复
  10. 列表呼号
  11. 文档
  12. 许可证

剧本 SDK

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

版本 0.4.x 说 WS 协议 1.0.0。阅读 更改日志 在此之前 升级.

安装

npm install @acta-markets/ts-sdk

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

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

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

取用者: 请求引用

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) 重试之前。 这个 网络客户端指南 拥有 完全签名和恢复流.

购买选项

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

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;程序拒绝以后的存款:

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

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 引用 覆盖引文生命周期.

HTTP 读取

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 当您不使用默认程序时,每个流量. 这个 保险库操作指南 包括金库会议、服务交换和中场演出.

迁移到0.4.2

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

0.4.1 (中文(简体) )0.4.2 (中文(简体) )
OpenPositionForVaultAsTaker, (中文(简体) ), OpenSpreadForVaultAsTakerOpenPositionForVaultWriter, (中文(简体) ), OpenSpreadForVaultWriter附加时 holderKind
OpenPositionForVaultAsMaker, (中文(简体) ), OpenSpreadForVaultAsMakerOpenPositionForVaultHolder, (中文(简体) ), OpenSpreadForVaultHolder
VaultFundMakerPosition, (中文(简体) ), fundMakerPositionFundPositionForVaultHolder, (中文(简体) ), fundHolderPosition
openPositionAsTaker, (中文(简体) ), openSpreadAsTakeropenPositionAsWriter, (中文(简体) ), openSpreadAsWriter
openPositionAsMaker, (中文(简体) ), openSpreadAsMakeropenPositionAsHolder, (中文(简体) ), openSpreadAsHolder
保险库写入槽 actor, (中文(简体) ), maker, (中文(简体) ), makerCustodyAtaparticipant, (中文(简体) ), counterparty, (中文(简体) ), premiumSource
保险库持有人插槽 taker, (中文(简体) ), takerUnderlyingAta, (中文(简体) ), takerQuoteAtawriter, (中文(简体) ), writerUnderlyingAta, (中文(简体) ), writerQuoteAta
OpenPosition 插槽 user, (中文(简体) ), userUnderlyingAta, (中文(简体) ), userQuoteAtataker, (中文(简体) ), writerUnderlyingAta, (中文(简体) ), takerQuoteAta
存款 makerPda; 制造商传输 makerOwnerPremiumAtaholderMakerPda· ; makerOwnerAta
OPEN_TAKER, (中文(简体) ), SIGN_MAKER_QUOTES, (中文(简体) ), FUND_MAKEROPEN_AS_WRITER, (中文(简体) ), SIGN_HOLDER_QUOTES, (中文(简体) ), FUND_HOLDER; 新建 SIGN_WRITER_QUOTES
事件 OpenPosition, (中文(简体) ), OpenSpread, (中文(简体) ), OpenTakerBuy, (中文(简体) ), OpenTakerBuySpreadPositionOpened
事件 VaultPositionOpened, (中文(简体) ), VaultSpreadOpenedVaultCycleOpened
VaultMakerPositionFunded· ; TakerBuyFunded.userVaultHolderPositionFunded· ; TakerBuyFunded.holder
存款中持有者不匹配 : MakerNotOwnerNotPositionHolder (1111号)

迁移到0.4.0

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

0.3.x (单位:千美元)0.4.0 (中文(简体) )
Position.takerOwner, (中文(简体) ), makerOwnerwriter, (中文(简体) ), holder
POSITION_OFFSET_TAKER_OWNER, (中文(简体) ), _MAKER_OWNERPOSITION_OFFSET_WRITER, (中文(简体) ), _HOLDER
存款 makerOwner, (中文(简体) ), makerFundingAtaholder, (中文(简体) ), holderFundingAta
结算和清算 userDestAta, (中文(简体) ), makerDestAtawriterDestAta, (中文(简体) ), holderDestAta
事件 user, (中文(简体) ), makerOwner, (中文(简体) ), takerholder, (中文(简体) ), writer
makerPayoff, (中文(简体) ), takerReturn; WS 键 maker_payoff, (中文(简体) ), taker_returnholderPayoff, (中文(简体) ), writerReturn· ; holder_payoff, (中文(简体) ), writer_return
fetchPositionsByMaker, (中文(简体) ), ByTakerfetchPositionsByHolder, (中文(简体) ), ByWriter
buildDepositPremiumIx, (中文(简体) ), DepositPremiumbuildMakerDepositIx, (中文(简体) ), MakerDeposit

见 变化 完整名单.

恢复

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

列表呼号

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

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

文档

许可证

麻省理工学院

版本与发布记录

@acta-markets/ts-sdk 共发布 48 个版本,首次发布于 2026/02/16;过去 12 个月发布了 48 个版本。

版本发布日期距今
0.4.2latest2026/11/043 天前
0.4.12026/11/044 天前
0.4.02026/11/044 天前
0.3.22026/11/025 天前
0.3.12026/11/025 天前
0.3.02026/10/308 天前

其他发布通道:beta → 0.0.25-beta,vaults → 0.1.6-vaults.4。

关于 @acta-markets/ts-sdk 的常见问题

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