@dashevo/wasm-sdk

中文文档
5.0.3发布于 2026/11/04TypeScriptES Module零依赖近 30 天下载 6182

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

中文使用文档
文档目录14 节
  1. 安装
  2. 使用量
  3. 节点.js(ESM)
  4. 浏览器( Bundler, 无害环境管理)
  5. 高级:原始文物(分离.wasm)
  6. 如何捆绑
  7. 构建(贡献者)
  8. 测试(贡献者)
  9. API 要点
  10. 日志
  11. 环境兼容性
  12. 解决问题
  13. 贡献许可( L)
  14. 国家过渡

温斯多克

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

SDK规定:

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

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


安装

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

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

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

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

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


使用量

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

节点.js(ESM)

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, 无害环境管理)

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 通过您的捆绑器导入原始条目:

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

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

// 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 资产.
  1. 原始文物(选入): 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:

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

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

测试(贡献者)

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

yarn workspace @dashevo/wasm-sdk test:unit

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

yarn workspace @dashevo/wasm-sdk test:functional

API 要点

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

// 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是无声的. 您可以在全球或通过构建者启用追踪日志 :

// 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还会让帮助者去构建和提交状态过渡(需要网络客户端和有效输入):

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 共发布 82 个版本,首次发布于 2025/09/19;过去 12 个月发布了 72 个版本。

版本发布日期距今
5.0.3latest2026/11/047 天前
5.0.22026/11/029 天前
5.0.12026/10/2714 天前
5.0.02026/10/2715 天前
5.0.0-rc.82026/10/2319 天前
5.0.0-rc.72026/10/2220 天前

其他发布通道:2.1-dev → 2.1.0-dev.8,2.1-pr → 2.1.0-pr.2716.1,2.1-rc → 2.1.0-rc.1,2.2-dev → 2.2.0-dev.2,3.0-dev → 3.0.0-dev.11,3.0-rc → 3.0.0-rc.3。

关于 @dashevo/wasm-sdk 的常见问题

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