@dfns/kaspa-wasm

中文文档
0.14.1发布于 2024/08/21ISCTypeScriptCommonJS零依赖近 30 天下载 1万

KASPA WASM bindings

原始使用文档
文档目录12 节
  1. WASM32 bindings for Rusty Kaspa SDK
  2. Documentation
  3. Interfaces
  4. WASM32 SDK release packages
  5. SDK folder structure
  6. Building from Source
  7. Running Web examples
  8. Running NodeJs examples
  9. Using RPC
  10. Loading in a Web App
  11. Loading in a Node.js App
  12. Creating Documentation

WASM32 bindings for Rusty Kaspa SDK

github crates.io docs.rs license

Rusty-Kaspa WASM32 bindings offer direct integration of Rust code and Rusty-Kaspa codebase within JavaScript and TypeScript environments such as Node.js and Web Browsers.

Documentation

Please note that while WASM directly binds JavaScript and Rust resources, their names on JavaScript side are different from their name in Rust as they conform to the 'camelCase' convention in JavaScript and to the 'snake_case' convention in Rust.

The WASM32 bindings can be used in both TypeScript and JavaScript environments, where in JavaScript types will not be constrained by TypeScript type definitions.

Interfaces

The SDK is currently separated into the following top-level categories:

  • RPC API — RPC API for the Kaspa node using WebSockets.
  • Wallet SDK — Bindings for primitives related to key management and transactions.
  • Wallet API — API for the Rusty Kaspa Wallet framework.

WASM32 SDK release packages

The SDK is built as 4 packages for Web Browsers as follows:

  • KeyGen - Key & Address Generation only
  • RPC - RPC only
  • Core - RPC + Key & Address Generation + Wallet SDK
  • Full - Full SDK + Integrated Wallet For NodeJS, the SDK is built as a single package containing all features.

SDK folder structure

The following is a brief overview of the SDK folder structure (as available in the release):

  • web/kaspa - full Rusty Kaspa WASM32 SDK bindings for use in web browsers.
  • web/kaspa-rpc - only the RPC bindings for use in web browsers (reduced WASM binary size).
  • nodejs/kaspa - full Rusty Kaspa WASM32 SDK bindings for use with NodeJS.
  • docs - Rusty Kaspa WASM32 SDK documentation.
  • examples folders contain examples for NodeJS and web browsers.
  • examples/data - folder user by examples for configuration and wallet data storage.
  • examples/javascript - JavaScript examples.
  • examples/javascript/general - General SDK examples (keys & derivation, addresses, encryption, etc.).
  • examples/javascript/transactions - Creating, sending and receiving transactions.
  • examples/javascript/wallet - Interfacing with the Rusty Kaspa Wallet framework.
  • examples/typescript - TypeScript examples.

If you are using JavaScript and Visual Studio Code, it is highly recommended you replicate the jsconfig.json configuration file as is done in the SDK examples. This file allows Visual Studio to provide TypeScript-like code completion, type checking and documentation.

Included documentation in the release can be accessed by loading the docs/kaspa/index.html file in a web browser.

Building from Source

To build the WASM32 SDK from source, you need to have the Rust environment installed. To do that, follow instructions in the Rusty Kaspa README.

Once you have Rust installed, you can build the WASM32 SDK as follows:

  • ./build-release - build the release version of the WASM32 SDK + Docs. The release version also contains debug builds of the libraries.
  • ./build-web - build the web package (ES6 module)
  • ./build-node - build the NodeJS package (CommonJS module)
  • ./build-docs - runs build-web and then generates TypeDoc documentation from the resulting build.

Please note that to build from source, you need to have TypeDoc installed globally via npm install -g typedoc (see below).

Running Web examples

IMPORTANT: To view web examples, you need to serve them from a local web server and serve them from the root of the SDK folder (kaspa-wasm32-sdk if using a redistributable or rusty-kaspa/wasm if building from source). This is because examples use relative paths. WASM32 currently can not be loaded using the file:// protocol.

You can use any web server of your choice. If you don't have one, you can run one as follows:

cargo install http-server
http-server

Access the examples at http://localhost:7878/examples/web/index.html. (Make sure to change the port if you are using a different server. Many servers will serve on http://localhost:8000/examples/web/index.html by default)

If building from source, you must run build-release or build-web scripts before running the examples.

Running NodeJs examples

This applies to running examples while building the project from source as some dependencies are instantiated as a part of the build process. You just need to run node init to initialize a local config.

NOTES:

  • npm install will install NodeJs types for TypeScript and W3C websocket modules

  • npm install -g typedoc is needed for the release build to generate documentation

  • node init creates a local examples/data/config.json that contains a private key (mnemonic) use across NodeJS examples. You can override address used in some examples by specifying the address as a command line argument.

  • Majority of examples will accept following arguments: node <script> [address] [mainnet|testnet-10|testnet-11] [--address <address>] [--network <mainnet|testnet-10|testnet-11>] [--encoding <borsh|json>].

    By default all wRPC connections use Borsh binary encoding.

Example:

cd wasm
./build-release
cd examples
npm install
node init
node nodejs/javascript/general/rpc.js

Using RPC

There are multiple ways to use RPC:

  • Control over WebSocket-framed JSON-RPC protocol (you have to manually handle serialization)
  • Use RpcClient class that handles the connectivity automatically and provides RPC interfaces in a form of async function calls.

NODEJS: To use WASM RPC client in the Node.js environment, you need to introduce a W3C WebSocket object before loading the WASM32 library. The compatible WebSocket library is WebSocket and is included in the kaspa NPM package. kaspa package is a wrapper around kaspa-wasm that imports and installs this WebSocket shim in the globalThis object and then re-exports kaspa-wasm exports.

Loading in a Web App

<html>
    <head>
        <script type="module">
            import * as kaspa from './kaspa/kaspa-wasm.js';
            (async () => {
                await kaspa.default('./kaspa/kaspa-wasm_bg.wasm');
                console.log(kaspa.version());
                // ...
            })();
        </script>
    </head>
    <body></body>
</html>

Loading in a Node.js App

//
// W3C WebSocket module shim
// this is provided by NPM `kaspa` module and is only needed
// if you are building WASM libraries for NodeJS from source
//
// @ts-ignore
// globalThis.WebSocket = require('websocket').w3cwebsocket;
//

let {
    RpcClient,
    Encoding,
    initConsolePanicHook
} = require('./kaspa');

// enabling console panic hooks allows WASM to print panic details to console
// initConsolePanicHook();
// enabling browser panic hooks will create a full-page DIV with panic details
// this is useful for mobile devices where console is not available
// initBrowserPanicHook();
// if port is not specified, it will use the default port for the specified network
const rpc = new RpcClient({
    url: "127.0.0.1", 
    encoding: Encoding.Borsh, 
    network : "testnet-10"
});

(async () => {
    try {
        await rpc.connect();
        let info = await rpc.getInfo();
        console.log(info);
    } finally {
        await rpc.disconnect();
    }
})();

For more details, please follow the integrating with Kaspa guide.

Creating Documentation

Please note that to build documentation from source you need to have the Rust environment installed. The build script will first build the WASM32 SDK and then generate typedoc documentation from it.

You can build documentation from source as follows:

npm install -g typedoc
./build-docs

The resulting documentation will be located in docs/typedoc/

版本与发布记录

@dfns/kaspa-wasm 共发布 1 个版本,首次发布于 2024/08/21;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.14.1latest2024/08/212 年前

关于 @dfns/kaspa-wasm 的常见问题

@dfns/kaspa-wasm 是什么?

KASPA WASM bindings

如何安装 @dfns/kaspa-wasm?

在项目目录运行 npm install @dfns/kaspa-wasm,或使用 pnpm add / yarn add / bun add。

@dfns/kaspa-wasm 支持 TypeScript 吗?

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

@dfns/kaspa-wasm 支持 ESM 还是 CommonJS?

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

@dfns/kaspa-wasm 可以商用吗?

@dfns/kaspa-wasm 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dfns/kaspa-wasm 的下载量有多少?

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

@dfns/kaspa-wasm 还在维护吗?

最新版本 0.14.1 发布于 2024/08/21(2 年前);至今共发布 1 个版本,其中过去 12 个月发布了 0 个;首次发布于 2024/08/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。