#kaspa #nodejs #bindings #wasm-bindings #wasm32 #integration #browser

kaspa-wasm

KASPA WASM绑定

6个版本

0.13.4 2024年1月24日
0.0.4 2023年10月31日
0.0.3 2023年4月17日
0.0.0 2023年3月23日

#2949 in 魔法豆

每月下载量 35次

MIT/ApacheLGPL-3.0-only

14KB

kaspa-wasm Kaspa的WASM32绑定

github crates.io docs.rs license

Rusty-Kaspa WASM32绑定提供在Node.js和Web浏览器等JavaScript环境中直接集成Rust代码和Rusty-Kaspa代码库的功能。

文档

请注意,虽然WASM直接绑定JavaScript和Rust资源,但它们在JavaScript侧的名称与在Rust中的名称不同,因为它们遵循JavaScript的'camelCase'约定和Rust的'snake_case'约定。

接口

API目前分为以下几组

  • 交易API — 与交易相关的原语绑定。
  • RPC API — 使用WebSocket(wRPC)连接的Kaspa节点RPC接口绑定
  • 钱包API — 异步核心钱包处理任务的API。

使用RPC

有多种方式可以使用RPC

  • 控制WebSocket-framed JSON-RPC协议(您需要手动处理序列化)
  • 使用RpcClient类来自动处理连接并提供以异步函数调用的形式提供的RPC接口。

NODEJS: 在Node.js环境中使用WASM RPC客户端,您需要在加载WASM32库之前引入一个W3C WebSocket对象。您可以使用任何暴露W3C兼容WebSocket实现的Node.js模块。其中两个这样的模块是WebSocket(提供自定义实现)和isomorphic-ws(基于ws WebSocket模块构建)。

在Web应用中加载

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

在Node.js应用中加载

// 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
// globalThis.WebSocket = require('websocket').w3cwebsocket;

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

// 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("127.0.0.1", Encoding.Borsh, "testnet-10");

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

有关更多详情,请参阅与Kaspa集成指南。

依赖项

~42–60MB
~1M SLoC