# @dashevo/wasm-sdk 中文文档

规范地址：https://npmcn.com/package/%40dashevo/wasm-sdk/

版本：5\.0\.3
npm 元数据更新时间：2026-11-03T19:36:37.495Z
中文译文更新时间：2026-11-11T12:32:06.248Z
软件包许可：未声明

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

原始 npm 页面：https://www.npmjs.com/package/%40dashevo/wasm-sdk
原文对照：https://npmcn.com/package/%40dashevo/wasm-sdk/?lang=original

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

- 包体积（解压后）：79.7 MB，11 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=18\.18
- 运行依赖：0 个
- 首次发布：2025-09-19T10:54:07.833Z
- 最新版本发布：2026-11-03T19:36:37.282Z
- 近 30 天下载量：6182（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：82（近 12 个月 72 个）

## 中文简介

用于JavaScript和TypeScript的Dash平台WebAssembly SDK. 该核心在Rust中实施并被编译为WebAssembly;一薄的无害环境管理包装器暴露出一个方便的JS API,它同时在Node.js和现代浏览器中工作.

## 安装

```sh
npm install @dashevo/wasm-sdk
```

也可以使用：`pnpm add @dashevo/wasm-sdk`、`yarn add @dashevo/wasm-sdk`、`bun add @dashevo/wasm-sdk`

## README

# 温斯多克

用于JavaScript和TypeScript的Dash平台WebAssembly SDK. 该核心在Rust中实施并被编译为WebAssembly;一薄的无害环境管理包装器暴露出一个方便的JS API,它同时在Node.js和现代浏览器中工作.

SDK规定:

-   密码学的公用设施:元能生成/验证,密钥衍生,密钥对生成,地址验证,信件签名.
-   平台状态过渡和查询:身份,文档,数据合同,令牌,组,时代/系统,投票,证明(当支持时).
-   构建者模式( E)`WasmSdkBuilder`)为网络支持的查询配置和构建客户端.

本套装载有单一档案的无害环境管理材料(`dist/sdk.js`) 由Wasm内置并编译出浏览器主线程. 高级用户还可以选择在下列情况下单独使用原始文物: `dist/raw/*`。 。 。 .

* * *

## 安装

从 npm( 消费者应用程序) :

```bash
npm install @dashevo/wasm-sdk
# or
yarn add @dashevo/wasm-sdk
```

从这个单列波(贡献者):

```bash
# fast for development
yarn build
# or optimized
yarn run build:release
```

套件为只使用无害环境管理("类型":"模块"). 在CommonJS中,使用动态导入 ().

* * *

## 使用量

总是打电话 `await init()` 在使用 API 之前的一次。 拨打多次电话是天真而安全的.

### 节点.js(ESM)

```js
import init, * as sdk from '@dashevo/wasm-sdk';

// Initialize Wasm (Node uses an inlined binary; no assets to load)
await init();

// Crypto helpers
const { address } = sdk.generate_key_pair('testnet');
console.log('Address:', address);

// Optional: enable logs (silent by default)
await sdk.WasmSdk.setLogLevel('warn'); // or 'info' | 'debug' | full filter

// Platform queries via a client
let builder = sdk.WasmSdkBuilder.testnetTrusted();
builder = builder.withSettings(5000, 10000, 3, true);
const client = await builder.withLogs('warn').build();

const DPNS = 'GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec';
const docs = await client.getDocuments({
  dataContractId: DPNS,
  documentTypeName: 'domain',
  limit: 5,
});
console.log('Docs:', docs.length);

client.free();
```

### 浏览器( Bundler, 无害环境管理)

```js
import init, * as sdk from '@dashevo/wasm-sdk';

// Initialize Wasm (browser compiles in a Web Worker; no separate .wasm files)
await init();

const ok = sdk.validate_address('yXXX...', 'testnet');
```

### 高级:原始文物(分离.wasm)

如果你喜欢管理 `.wasm` 通过您的捆绑器导入原始条目:

```js
import init, * as sdk from '@dashevo/wasm-sdk/raw';
await init(); // wasm-bindgen will resolve and fetch wasm_sdk_bg.wasm
```

配置您的捆绑器 。 网络包装5:

```js
// webpack config
module.exports = {
  experiments: { asyncWebAssembly: true },
  module: { rules: [{ test: /\.wasm$/, type: 'asset/resource' }] },
};
```

* * *

## 如何捆绑

可出版的建筑提供了两种消费SDK的方法:

1.  单个文件( 默认) : `import '@dashevo/wasm-sdk'`

-   `dist/sdk.js` 将瓦斯姆(基数64)纳入避免资产管道和MIME问题.
-   浏览器:在Web Worker中编译出内嵌字节来避免主行行道摊位和8MB同步限制;再用主线程进行即时处理.
-   节点: 内部使用 inlined 字节; 您仍然调用 `await init()` 为一致的API.
-   包装器导入了一种已消毒的原生胶的变体,所以捆绑者不会"看到"任何 `new URL('…wasm')` 因而不能释放出一个 `.wasm` 资产.

2.  原始文物(选入): `import '@dashevo/wasm-sdk/raw'`

-   `dist/raw/wasm_sdk.js` (未修改的同位素输出)+ `dist/raw/wasm_sdk_bg.wasm`。 。 。 .
-   您的捆绑者必须服务于 `.wasm` 与正确的内容类型和 URL 重写.

为什么是这个设计?

-   在测试/测试中消除Flashy Wasm资产处理,并简化消费者设置.
-   为资产管道用户保留一个逃生舱口.

* * *

## 构建(贡献者)

先决条件: Rust工具链, `wasm-pack`,和(可选的)二进制结构.

命令( 在 repo 根或内部运行) `packages/wasm-sdk`:

```bash
# Development build (fast)
yarn workspace @dashevo/wasm-sdk build

# Release build (optimized)
yarn workspace @dashevo/wasm-sdk build:release
```

* * *

## 测试(贡献者)

单位测试(节点+浏览器/Karma):

```bash
yarn workspace @dashevo/wasm-sdk test:unit
```

功能测试( 联网; 离线时可能跳过一些 ) :

```bash
yarn workspace @dashevo/wasm-sdk test:functional
```

* * *

## API 要点

实例(见下文) `await init()`:

```js
// Addresses & keys
const { address, private_key_wif } = sdk.generate_key_pair('mainnet');
sdk.validate_address(address, 'mainnet');
const addr = sdk.pubkey_to_address('02...pubkeyHex', 'testnet');

// Mnemonics & derivation
const m = sdk.generate_mnemonic(12);
const r = sdk.derive_key_from_seed_with_path(m, undefined, "m/44'/5'/0'/0/0", 'mainnet');

// Network client
let b = sdk.WasmSdkBuilder.testnetTrusted();
const client = await b.withSettings(5000, 10000, 3, true).withLogs('info').build();
const status = await client.getStatus();
// Enumerate contracts one page at a time, ascending by id (pass the last key as startAfter)
const contracts = await client.getDataContractsByRange({ limit: 100 });
// Check that contracts held locally are still current (versions only; the contracts themselves only with includeContracts)
const versions = await client.getDataContractsLatestVersions({ contractIds: ['GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec'] });
// Contract groups: a group's owner/admins/name, its members one kind at a time (page with nextStartAfter), and the groups a contract is in
const contractGroupId = '8Y4NJ3bDgNvWm6tMMXAdEWQEvkqbCiCSwK9KpQTPMFZ2'; // a contract group id, not a contract id
const groupInfo = await client.getContractGroupInfo(contractGroupId);
const members = await client.getContractGroupMembers({ contractGroupId, kind: 'contracts', limit: 50 });
const memberships = await client.getContractGroupsForContract('GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec');
// What is left of the budgets of an identity's keys: a bigint per budgeted key (0n = spent), null for a key without a budget
const budgets = await client.getIdentityKeysRemainingBudgets('5mjGWa9mruHnLBht3ntBi8CZ6sNk3hZZsQMgTvgQobjS', [3, 4]);
// Raise the limits of a key: add credits to its budget, or move its expiry later (signed by a MASTER key or an unlimited CRITICAL key)
const key = await client.identityUpdateKeyLimits({ identity, keyId: 5, addBudget: 100000000n, signer });
// Seed a contract the app already holds (a bundled snapshot); pair with the versions check above
client.addKnownContract(contract);
client.free();
```

整个表面包括身份、文件、合同、信使、群体、时代/系统以及证明助手.

### 日志

默认SDK是无声的. 您可以在全球或通过构建者启用追踪日志 :

```js
// Globally
await sdk.WasmSdk.setLogLevel('info');

// Or on the builder (applies immediately)
await sdk.WasmSdkBuilder.new_testnet().withLogs('wasm_sdk=debug,rs_dapi_client=warn').build();
```

接受值是简单的等值 ('off''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.

* * *

## 环境兼容性

-   仅限无害环境管理包 ("类型":"模块"). 在 CJS 中使用动态导入 .
-   节点.js:16+推荐(18+首选).
-   浏览器:有WebAssembly + Web Workers的现代引擎.

* * *

## 解决问题

-   在浏览器中
    
    -   确保您导入默认条目( E)`@dashevo/wasm-sdk`除非您已经配置了瓦斯姆资产.
    -   永远 `await init()` 在调用函数之前.
-   提供错误的Karma/webpack:
    
    -   默认的单文件构建不适用 。 如果你选择加入 `@dashevo/wasm-sdk/raw`配置一个 `.wasm` 资产规则和正确 MIME 类型.

* * *

## 贡献许可( L)

这个包是Dash平台单列波的一部分. 遵循存储处的贡献准则,不犯秘密。 有关许可详情,请参见根库.

* * *

## 国家过渡

除了只读查询之外,SDK还会让帮助者去构建和提交状态过渡(需要网络客户端和有效输入):

```js
import init, * as sdk from '@dashevo/wasm-sdk';
await init();

const builder = sdk.WasmSdkBuilder.testnetTrusted();
const client = await builder.build();

// Identity create (example — requires a valid proof and keys)
const proofJson = JSON.stringify({ /* platform-provided proof object */ });
const assetLockWif = 'Kx...';
const pubKeysJson = JSON.stringify([
  { keyType: 'ECDSA_SECP256K1', purpose: 'AUTHENTICATION', securityLevel: 'MASTER', privateKeyHex: '...' },
]);
await sdk.identityCreate(proofJson, assetLockWif, pubKeysJson)
  .then(() => {/* submitted */})
  .catch((e) => {/* handle error */});

// Token transfer (negative example if parameters are invalid)
await sdk.tokenTransfer('contractId', 0, '1000', 'senderIdentityId', 'recipientIdentityId', assetLockWif, null)
  .catch(() => {});

client.free();
```

## 常见问题

### @dashevo/wasm-sdk 是什么？

用于JavaScript和TypeScript的Dash平台WebAssembly SDK\. 该核心在Rust中实施并被编译为WebAssembly;一薄的无害环境管理包装器暴露出一个方便的JS API,它同时在Node\.js和现代浏览器中工作\.

### 如何安装 @dashevo/wasm-sdk？

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

### @dashevo/wasm-sdk 支持 TypeScript 吗？

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

### @dashevo/wasm-sdk 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @dashevo/wasm-sdk 需要什么版本的 Node\.js？

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

### @dashevo/wasm-sdk 可以商用吗？

@dashevo/wasm-sdk 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @dashevo/wasm-sdk 的下载量有多少？

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

### @dashevo/wasm-sdk 还在维护吗？

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

