# @dankest-llc/xchain-sdk 中文文档

规范地址：https://npmcn.com/package/%40dankest-llc/xchain-sdk/

版本：0\.27\.0
npm 元数据更新时间：2026-11-01T06:09:59.706Z
中文译文更新时间：2026-11-11T10:53:16.773Z
软件包许可：AGPL-3\.0-or-later

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

原始 npm 页面：https://www.npmjs.com/package/%40dankest-llc/xchain-sdk
原文对照：https://npmcn.com/package/%40dankest-llc/xchain-sdk/?lang=original
项目主页：https://xchain.io/
源码仓库：https://github.com/XChain-Platform/xchain-sdk

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

- 包体积（解压后）：3.5 MB，316 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.0\.0
- 运行依赖：23 个
- 首次发布：2026-08-01T19:20:42.380Z
- 最新版本发布：2026-11-01T06:09:59.388Z
- 近 30 天下载量：2762（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：26（近 12 个月 26 个）

## 中文简介

xchain-sdk 生成 XChain 平台 Action 命令并将其编码为未签名的块链交易,并从 XChain API 提取数据,如余额和交易历史等.

## 安装

```sh
npm install @dankest-llc/xchain-sdk
```

也可以使用：`pnpm add @dankest-llc/xchain-sdk`、`yarn add @dankest-llc/xchain-sdk`、`bun add @dankest-llc/xchain-sdk`

## README

# XChain 平台 - 软件开发者 Kit (SDK)

![npm version](https://img.shields.io/npm/v/%40dankest-llc%2Fxchain-sdk) ![Tests](https://img.shields.io/badge/tests-6%2C690%2B%20passing-brightgreen) ![Node](https://img.shields.io/badge/node-%3E%3D22-green) ![License](https://img.shields.io/badge/license-AGPL--3.0--or--later-blue)

![Coverage](https://img.shields.io/badge/coverage-unit%20%7C%20integration%20%7C%20boundary%20%7C%20fuzz%20%7C%20chaos%20%7C%20smoke%20%7C%20security%20%7C%20regression%20%7C%20performance-brightgreen)

SDK 用于 [XChain 平台](https://xchain.io/): 生成 XChain 交易并查询块链数据.

## 特征

-   **31 行动类型**数字 : `sdk.send()`, (中文(简体) ), `sdk.issue()`, (中文(简体) ), `sdk.mint()`, (中文(简体) ), `sdk.stake()`,还有27个方便方法
-   **交易周期**数字 : `sdk.submitAction()` 在一个呼叫中处理完整编码 - > 标志 - > 广播 - > 等待管道
-   **钱包会话**数字 : `sdk.session(wif)` 组合地址/关键/UTXO状态,用于一个地址的重复行动
-   **费用估计**数字 : `sdk.estimateFees()` 不签名或广播的返回费信息
-   **UTXO 链式**: 内置的 UTXO 缓存可防止在快速相继交易上重复花费
-   **工作流程配方**数字 : `sdk.issueAndDistribute()`, (中文(简体) ), `sdk.deployAndFund()`, (中文(简体) ), `sdk.stakeAndDelegate()`和更多
-   **跨链助手**:协调跨 BTC、LTC 和 DOGE SDK 实例的互换和平行行动
-   **事件驱动的确认**数字 : `sdk.waitForAction(txid)` 当索引器处理交易时解决
-   **合同结算门**数字 : `sdk.waitForContractState(index, { key: 'status', equals: 'FUNDED' })` 财务报告和审定财务报表 `sdk.waitForContractBalance(index, tick, { minQuantity })` 等待合同本身的状态,这是唯一不能与索引者相竞争的信号; `submitAction({ awaitContract: {...} })` 开同一扇门 所以在合同被记帐之前 押金不会回手控制
-   **互动反应**数字 : `npm run repl` 与预配置 SDK 实例一起跳入一个动态会话
-   **自动选择格式**: 为每个动作选择最小的编码格式
-   **PSBT 生成**: 与 xchain- 编码器集成以生成未签名的交易
-   **115+ 探索者查询方法**: 余额、代号、交易、市场、历史、合同
-   **批量构建器**: 流畅的API : `await sdk.batch().send({...}).mint({...}).build()` (单位:千美元)`build()` 正在同步)
-   **实时活动**: WebSocket 有自动重联和接续的流经 `onBlock()`, (中文(简体) ), `onAction()`, (中文(简体) ), `onAddress()`, (中文(简体) ), `onToken()`, (中文(简体) ), `onMarket()`, (中文(简体) ), `onDispenser()`, (中文(简体) ), `onBetFeed()`, (中文(简体) ), `onXcall()`, (中文(简体) ), `onAttestation()`和更多; `sdk.ws` 曝光低端客户端( q)`subscribe()`, (中文(简体) ), `on()`, (中文(简体) ), `listSubscriptions()`直接(...)
-   **加密信件**ECIES、ECDH和AES加密MESSAGE行动; `messaging.send()` 接受一个 `Buffer` 有效载荷和 `getMessages()` 曝光情况 `msg.bytes` 二进制 ECIS
-   **调制解析文件**数字 : `sdk.gatedFile.encryptFileBytes()` 财务报告和审定财务报表 `sdk.gatedFile.encryptPack()` 生产AES-256-GCM Ciphertext + 密钥用于 FILE v1 闸口内容; 密钥交接作为紧凑的33字节二进制有效载荷通过 `serializeKeyPayload()` 编号 : `parseKeyPayload()` (以二进制模式通过ECIES发送). 见 [调试内容](https://docs.xchain.io/protocol/token-gated-content)
-   **证明信封助手**数字 : `AttestationHelpers.llm({...})` 建造JSON信封,发给VM合同 `xchain.attestation.request(...)` 有提供者 id `'llm'`· ; `AttestationHelpers.httpGet({url})` 验证 URL并返回有效载荷字符串 `'http_get'`· ; `AttestationHelpers.requestOptions({redundancy, deadlineBlocks})` 构建网关选项对象。 根据设计,这些只是信封构建器:没有用户可推荐的ATTEST动作. ATTEST v0(请求)和v1(答复)为VM-发送:合同呼叫 `xchain.attestation.request(...)` 并释放出链上的证据。 因此,SDK帮助你塑造一个合同提出的要求,你通过 `getAttestations()`它没有(而且不能)直接编码ATTEST行动,同样,XCALL只编码VM-排放.
-   **拥有权交易助手**数字 : `ORDER`编号 :`SWAP`编号 :`DISPENSER` v0 载 `GIVE_OWNERSHIP` 编号 : `GET_OWNERSHIP` 旗帜; `SWEEP` 独立携带 `ORDERS` 编号 : `SWAPS` 编号 : `DISPENSERS` 旗帜( 是单一的) `ESCROWS` 旗帜)
-   **HTTP 402次付款**数字 : `X402Client` 财务报告和审定财务报表 `X402Gateway` 实施XChain-native, x402- 形状的按呼计酬流程,在链式SEND行动之上进行 `xchain-send` (按要求付费), `xchain-dispenser` (持有进入权),和 `xchain-deposit` (计算支出分类账)计划;客户只支付每笔勾 `maxAmount` 最高的,每一次都拒绝。 见 [x402 付款额](https://github.com/XChain-Platform/xchain-documentation/blob/master/protocol/x402-payments.md)
-   **以合同为目标的抽取**数字 : `session.stakeToContract({ amount, signingPubkey, targetContractIndex, tick })`, (中文(简体) ), `session.unstakeFromContract({...})`,以及 `session.delegateForContract({...})` 将STAKE v3 / UNSTAKE v1 / DELEGATE v1 与通过DEBOY v1(与 `COOLDOWN_BLOCKS` + 键 `SLASH_DESTINATION`) (中文(简体) ). 高级别食谱: `sdk.deployStakeableContract()` 财务报告和审定财务报表 `sdk.stakeToContractAndDelegate()`
-   **NFT 帮助者**数字 : `sdk.nft.unique()`, (中文(简体) ), `sdk.nft.edition()`, (中文(简体) ), `sdk.nft.collectionItem()`, (中文(简体) ), `sdk.nft.attachContentParams()`,以及 `sdk.nft.isNft()` 用于构建 NFT 模式(ISSUE 有 DECIMALS=0 + LOCK MAX SUPPLY=1) 外加高级 `sdk.issueNft()`, (中文(简体) ), `sdk.issueNftEdition()`, (中文(简体) ), `sdk.issueCollectionItem()`,以及 `sdk.attachContent()` 提交食谱
-   **项目登记册助手**数字 : `sdk.project.rosterParams()` 财务报告和审定财务报表 `sdk.project.rosterEditParams()` 为所有者测试的代号名册建立列表动作; `sdk.setRoster()` 运行列表然后 LINK 并等待索引器
-   **车票压缩**: 在默认情况下; 解决其紧凑的符号计数器 `^id` 在编码缩小链上有效载荷大小之前,通过探险器形成电线; 选择退出 `{ compactTickers: false }`
-   **MCP 服务器**数字 : `npx xchain-mcp` 将所有探索者查询工具曝光为 模型背景协议工具,供 AI 代理使用
-   **钱包认证( A)**:关键管理,PSBT签名,质疑-回应核查
-   **智能合同**:通过xchain-vm集成部署、执行、交存、退出
-   **飞行前合同身份**: 已部署的合同必须出口 `meta: { name, description, version }` (单位:千美元)`CONTRACT_META_REQUIRED`) (中文(简体) ). `sdk.deploy()`, (中文(简体) ), `session.deploy()`, (中文(简体) ), `session.deployChunk()`, (中文(简体) ), `sdk.deployAndFund()` 财务报告和审定财务报表 `sdk.deployStakeableContract()` 在动作组成前静地读取,并用链条本身的判决字符串拒绝,因此索引者会拒绝一份合同,永远不收费. `sdk.contracts.getExportedMeta(source)` 显示相同的读取
-   **枢纽发现**: xchain-hub 的自动解析服务端点
-   **用后退重试**:处理HTTP 429/502/503/504,尊重 `Retry-After` 页眉
-   **请求钩子**数字 : `onRequest`, (中文(简体) ), `onResponse`, (中文(简体) ), `onError`, (中文(简体) ), `onRetry` 调用
-   **类型脚本定义**: 满 `.d.ts` 用于 IDE 自动完成
-   **浏览器捆绑**: 用于客户端的浏览构建

## 文档

完整的 SDK 开发者指南发布于 [文件.xchain.io/组件/sdk](https://docs.xchain.io/components/sdk/)数字 :

| 文档 | 说明 |
| --- | --- |
| [读取](https://docs.xchain.io/components/sdk/) | 概述、安装、使用模式 |
| [配置](https://docs.xchain.io/components/sdk/configuration) | 构造选项, env vars, 枢纽发现, 重试, 集合, 钩子 |
| [行动](https://docs.xchain.io/components/sdk/actions) | 所有31个行动类型:参数、验证规则、格式版本、实例 |
| [交易周期](https://docs.xchain.io/components/sdk/lifecycle) | 提交操作、费用估算、UTXO链接、P2SH两相处理 |
| [钱包会话](https://docs.xchain.io/components/sdk/sessions) | 绑定钱包会话、便利方法、 UTXO 缓存 |
| [工作流量](https://docs.xchain.io/components/sdk/workflows) | 高级食谱:发布和分配、部署和基金、利害关系和删除 |
| [横琴](https://docs.xchain.io/components/sdk/crosschain) | 多链协调:平行行动、互换、链接 |
| [浏览器](https://docs.xchain.io/components/sdk/explorer) | 所有115+查询方法: 余额、指使、交易、市场 |
| [编码器](https://docs.xchain.io/components/sdk/encoder) | PSBT 生成:编码类型,选项,飞行前验证,P2SH 二相 |
| [批量构建器](https://docs.xchain.io/components/sdk/batch) | 多动作交易的流利 API |
| [合同](https://docs.xchain.io/components/sdk/contracts) | VM智能合同集成:部署,执行,交存,退出 |
| [网络安全套](https://docs.xchain.io/components/sdk/websocket) | 实时活动流:块、行动、地址、市场 |
| [钱包认证( A)](https://docs.xchain.io/components/sdk/wallet) | 关键管理、PSBT签署、质疑-答复核查 |
| [通讯](https://docs.xchain.io/components/sdk/messaging) | ECIES/ECDH/AES MESSAGE行动的加密 |
| [轻型客户端( SPV)](https://docs.xchain.io/components/sdk/light-client) | 针对计分加权检查站进行加密平衡/行动核查 |
| [NFT 注册创建器](https://docs.xchain.io/components/sdk/nft-and-registry) | NFT模式构建者、收集/内容附件、项目名册 |
| [格式选择](https://docs.xchain.io/components/sdk/format-selection) | SDK 如何选择最佳格式版本 |
| [错误](https://docs.xchain.io/components/sdk/errors) | 所有错误类别、代码和故障排除 |
| [实例](https://docs.xchain.io/components/sdk/examples) | 端到端代码示例 |

## 安装

```bash
npm install @dankest-llc/xchain-sdk
```

节点22或更新. 为了针对源进行开发,克隆此寄存器和 `npm install` 内部; 辅助的 AI 代理的 MCP 服务器单独发布为 [`xchain-mcp`](https://www.npmjs.com/package/xchain-mcp)。 。 。 .

## 快速启动

```js
const { XChainSDK } = require('@dankest-llc/xchain-sdk');

// Zero-config: a network alone targets the public XChain Platform.
// Mainnet/testnet default to the public hosts (hub.xchain.io discovers
// explorer/encoder, falling back to explorer.xchain.io / encoder.xchain.io);
// on any *-regtest network only the explorer defaults to localhost:8080. The
// encoder (needed for writes) needs ENCODER_URL or ENCODER_PORT, and the
// WebSocket needs a WEBSOCKET_* or EXPLORER_* URL or port (or the matching
// constructor options).
const sdk = new XChainSDK({ network: 'bitcoin-mainnet' });

// To point at your own services, pass full URLs (include the scheme; a
// bare host is treated as http://host:<dev-port>):
// const sdk = new XChainSDK({
//     network: 'bitcoin-mainnet',
//     explorerUrl: 'https://explorer.example.com',
//     encoderUrl:  'https://encoder.example.com'
// });

// Generate an action string
const result = await sdk.send({
    tick: 'MYTOKEN',
    amount: '100',
    destination: 'bc1q...',
    memo: 'Payment'
});
console.log(result.actionString); // 'SEND|0|MYTOKEN|100|bc1q...|Payment'

// Multi-destination SEND: one entry per recipient. The wire format version
// is chosen from the legs (v1 shared tick, v2 per-leg tick, v3 per-leg memo).
// A flat {tick, amount, destination} map can only ever express ONE leg, so
// the SDK refuses one against a multi-leg format instead of repeating leg 1.
const multi = await sdk.send({
    tick: 'MYTOKEN',
    legs: [
        { amount: '100', destination: 'bc1qaddr1...' },
        { amount: '250', destination: 'bc1qaddr2...' }
    ]
});
console.log(multi.actionString); // 'SEND|1|MYTOKEN|100|bc1qaddr1...|250|bc1qaddr2...'

// Full lifecycle: create, encode, sign, broadcast, wait for indexer
const tx = await sdk.submitAction(
    { action: 'SEND', params: { tick: 'MYTOKEN', amount: '100', destination: 'bc1q...' } },
    { pubkey: '02abc123...' },
    { wif: 'your-wif-key' }
);
console.log(tx.txid);    // transaction hash
console.log(tx.indexed); // action data from the indexer

// Wallet session: bind to a key and send multiple actions
const session = sdk.session('your-wif-key');
await session.send({ tick: 'MYTOKEN', amount: '50', destination: 'bc1q...' });
await session.send({ tick: 'MYTOKEN', amount: '50', destination: 'bc1q...' });
const balances = await session.getBalances();

// Workflow recipes: multi-step operations in one call
await sdk.issueAndDistribute('your-wif-key',
    { tick: 'NEWTOKEN', maxSupply: '1000000', decimals: 8 },
    [
        { destination: 'bc1qaddr1...', amount: '500000' },
        { destination: 'bc1qaddr2...', amount: '300000' }
    ]
);

// Deploy a smart contract. Every contract must export its identity: `meta.name`
// and `meta.description` are consensus-required (CONTRACT_META_REQUIRED), and
// `meta.version` is optional but indexed. Use STRING LITERALS: the chain evaluates
// `meta` at deploy, so a computed name is not what you read in the source, and the
// pre-flight cannot check it for you.
const code = `module.exports = {
    meta: {
        name:        'Escrow',                           // 1..64 bytes
        description: 'Two-party escrow with an arbiter', // 1..512 bytes
        version:     '1.0.0'                             // optional, 1..32 bytes
    },
    permissions: ['SEND'],
    initialize(xchain) { xchain.state.set('status', 'OPEN'); }
};`;
await session.deploy({ code, gasLimit: 200000 });

// A contract with no conforming meta is refused BEFORE anything is composed,
// signed or broadcast, with the exact verdict the indexer would have written:
//   SDKContractError: invalid: CONTRACT_MANIFEST (meta required)
// Pass { preflight: 'warn' | 'off' } (session/workflow seams) or
// { lint: 'warn' | 'off' } (sdk.deploy) to downgrade or skip the check; the
// deploy is still rejected on-chain. A computed or unreadable `meta` only warns.
sdk.contracts.getExportedMeta(code);  // { status: 'present', name: 'Escrow', ... }

// Query blockchain data. The token record arrives NESTED under `info`:
const token = await sdk.getToken('MYTOKEN');
token.info.tick_id;   // '42'   <- the fields live here
token.tick_id;        // undefined

// A tick that does not exist answers HTTP 404, so getToken() THROWS
// SDKExplorerError (code EXPLORER_HTTP_404) instead of answering an empty
// body. Use these for an existence check rather than a try/catch:
await sdk.tokenExists('MYTOKEN');   // true / false, never throws on absence
await sdk.findToken('MYTOKEN');     // the unwrapped info record, or null

// Both answer "absent" only for the 404. A timeout, network failure, 429 or
// 5xx still throws, because an explorer that could not answer is not proof
// that the ticker is free.
```

## 配置

| 变量 | 需求 | 默认 | 说明 |
| --- | --- | --- | --- |
| `NETWORK` | 对 | (无) | 默认硬币和网络(例如. `bitcoin-regtest`, (中文(简体) ), `dogecoin-mainnet`(中文(简体) ) |
| `SDK_API_PORT` | 没有 | `3005` | 可选 SDK 助手 API 的端口 |
| `SDK_API_KEY` | 没有 | (无) | 帮助 API 的 API 密钥; 需要作为 `Authorization: Bearer <key>` 每种方法,但 `ping` (方法在未设定时以 401 拒绝) |
| `CORS_ORIGIN` | 没有 | 已禁用 | 允许帮助者 API 的来源 |
| `SDK_API_MAX_BATCH` | 没有 | `20` | 最大 JSON- RPC 在一个阵列( 批量) 中调用 。 除正整数外的任何东西(`1e3`, (中文(简体) ), `50abc`, (中文(简体) ), `0`, (中文(简体) ), `-5`)还原为 `20` 并记录启动时的警告;没有值禁用上限 |
| `SDK_API_RATE_LIMIT` | 没有 | `300` | 每个窗口每个证书的请求( 未经认证时每个源地址) 。 非数值或负数值回落到 `300`; 明示 `0` 禁用限制器, 这是关闭它的唯一方法 |
| `SDK_API_RATE_WINDOW_MS` | 没有 | `60000` | 固定费率限制窗口的长度,以毫秒为单位。 除正整数毫秒外的任何东西(`60s`, (中文(简体) ), `1e5`, (中文(简体) ), `1.5`, (中文(简体) ), `0`)还原为 `60000` 并记录启动时的警告 |
| `EXPLORER_URL` 编号 : `EXPLORER_PORT` | 没有 | `127.0.0.1` 编号 : `8080` | x链- 探索器位置 。 一个 `explorerPort` 选项,但无需 URL 指向探索者及其 WebSocket `localhost` 在每一个网络上,并把它们 与中枢发现。 API 和 REPL 通行证 `EXPLORER_PORT` 所以在主网和测试网, `EXPLORER_PORT` 无 `EXPLORER_URL` 点数 `localhost`;在图书馆使用中, `EXPLORER_PORT` 让公共探险家独处 |
| `ENCODER_URL` 编号 : `ENCODER_PORT` | 没有 | `127.0.0.1` 编号 : `3003` | xchain- 编码器位置 |
| `ENCODER_API_KEY` | 没有 | (无) | API 密钥发送为 `x-api-key` 到一个x链编码器,其操作员设置 `API_KEY`; 也可以以 `encoderApiKey` 选项。 只有一个 `encoderUrl` 或者说 `encoderPort` 构造器选项给编码器打上针:如果没有一个,中枢发现可以重新给编码器客户端指针,然后键去任何主机中枢名称的编码器. 一个 `encoderPort` 选项,但无需 URL 指向编码器 `localhost` 每个网络。 帮助者 API(`npm run api`(a) 赔偿要求`npm run repl`(通过) `ENCODER_URL` 财务报告和审定财务报表 `ENCODER_PORT` 作为这些选项,所以有1个指针;在图书库使用中,只有变量没有。 当作证书 |
| `HUB_URL` | 没有 | (无) | 全xchain-hub URL 仅由 REPL 读取(`npm run repl`)),其优于 `HUB_API_HOST`; 库和助手 API 忽略它 |
| `HUB_API_HOST` 编号 : `HUB_PORT` | 没有 | `https://hub.xchain.io/<COIN>` 主网和测试网; 重新测试时没有中枢 | xchain-hub 位置由库和助手API读取. 使用裸体主机( 与 `HUB_PORT`默认值 `10000`或全数 `http://` 或者说 `https://` URL,在这种情况下 `HUB_PORT` 被忽略。 助手API通过 `HUB_PORT` 作为 `hubPort` 在主网和测试网, `HUB_PORT` 无 `HUB_API_HOST` 在中心点上 `localhost`;在图书馆使用中, `HUB_PORT` 独自离开公共中心 |
| `HUB_API_KEY` | 没有 | (无) | API 密钥用于 `getallconfigs` 对按键的枢纽; 公开的零配置发现应使用枢纽的链式注册端点代替 |
| `WEBSOCKET_URL` 编号 : `WEBSOCKET_PORT` | 没有 | `127.0.0.1` 编号 : `3007` | 探索者 WebSocket 更新的结束点 。 与裸体主机连接 `WEBSOCKET_PORT`; 满 `ws://` 或者说 `wss://` 按给定使用 URL, 并全 `http://` 或者说 `https://` URL变成 `ws://` 或者说 `wss://`,在两种情况下均未添加端口 |

## 脚本

| 命令 | 说明 |
| --- | --- |
| `npm run api` | 启动 JSON- RPC 服务器( 端口来自 `SDK_API_PORT`,默认3005 |
| `npm test` | 运行单元测试(6 351个测试) |
| `npm run repl` | 用预配置的 SDK 实例启动交互 REPL |
| `npm run build` | 生产浏览器捆绑 - > `dist/xchain_sdk.min.js` |
| `npm run build:dev` | 开发浏览器捆绑 - > `dist/xchain_sdk.js` |

### API 服务器模块

`npm run api` (单位:千美元)`node ./src/api/index.js`)运行 JSON-RPC 服务器作为一个独立进程,打开一个收听器 `SDK_API_PORT` 满载。 消费者想要拥有服务器,将服务器安装在现有快件下,选择自己的收听路径,或者从测试开始并阻止它,则需要模块直接而不是轰出脚本:

```js
const { createApp, startApi } = require('@dankest-llc/xchain-sdk/src/api');

// createApp(sdk) is synchronous and listener-free: it wires the same guard
// stack (rate limit, auth gate, batch cap, /openrpc.json, JSON-RPC router)
// as the CLI entry and returns the express app to mount yourself.
const app = createApp(sdk);

// startApi({ port }) builds the SDK from the environment, runs hub discovery,
// and resolves to the listening http.Server (port 0 for an ephemeral port).
const server = await startApi({ port: 0 });
await new Promise((resolve) => server.close(resolve));
```

请求 `src/api` 永不打开套接字;只打开 CLI 条目(`npm run api` 编号 : `node ./src/api/index.js`)开始自动收听.

## 测试套件

| 类型 | 测试 |
| --- | --- |
| 单位: 动作、 验证器、 格式选择、 方便方法、 探索器、 编码器、 重试、 WebSocket、 钱包、 认证、 合同、 联合签名人 | 3206+ (韩语) |
| 整合:跨模块流动、VM/合同整合、枢纽发现 | 98岁以上 |
| 安全:输入攻击表面、认证门 | 18岁以上 |
| 后退: 配置的临界路径套件,包括回转序列化 - > 剖析 - > 校验 | 23岁以上 |
| 边界:精确编码界限 | 35岁以上 |
| 模糊:垃圾类型,单码,原型污染 | 65岁以上 |
| 混乱: 反应错误、 HTTP 错误、超时 | 27岁以上 |
| 烟:靴子API服务器,端到端的JSON-RPC | 9个+ |
| 业绩 | 3个 |
| **共计** | **3484+ (英语)** |

* * *

**版权:2025-2026 Dankest, LLC**

**依据创用CC授权使用 [页:1](https://dankest.llc/)**

凭 **GNU 阿费罗通用公共许可证 v3.0** (AGPL-3.0-或-后期) 拥有可供专有使用的商业许可证.

您可以根据许可证的规定使用、修改和分发这些材料. 见 [自由主义](https://npmcn.com/package/%40dankest-llc/xchain-sdk/LICENSE.md) 财务报告和审定财务报表 [通知](https://npmcn.com/package/%40dankest-llc/xchain-sdk/NOTICE.md) 满期. 见 [许可概览](https://docs.xchain.io/legal/licensing)。 。 。 .

## 常见问题

### @dankest-llc/xchain-sdk 是什么？

xchain-sdk 生成 XChain 平台 Action 命令并将其编码为未签名的块链交易,并从 XChain API 提取数据,如余额和交易历史等\.

### 如何安装 @dankest-llc/xchain-sdk？

在项目目录运行 npm install @dankest-llc/xchain-sdk，或使用 pnpm add / yarn add / bun add。

### @dankest-llc/xchain-sdk 支持 TypeScript 吗？

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

### @dankest-llc/xchain-sdk 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @dankest-llc/xchain-sdk 需要什么版本的 Node\.js？

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

### @dankest-llc/xchain-sdk 可以商用吗？

@dankest-llc/xchain-sdk 使用 AGPL-3\.0-or-later 许可。最严格的 Copyleft：除分发外，通过网络向用户提供基于它的服务也需要开源对应源码。闭源 SaaS 使用前务必评估。以上为概括，不构成法律意见，请以许可原文为准。

### @dankest-llc/xchain-sdk 的下载量有多少？

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

### @dankest-llc/xchain-sdk 还在维护吗？

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

