lumina-node-wasm

Crates.iolumina-node-wasm
lib.rslumina-node-wasm
version0.6.0
sourcesrc
created_at2024-01-17 14:53:42.37413
updated_at2024-10-29 17:01:41.003901
descriptionBrowser compatibility layer for the Lumina node
homepagehttps://www.eiger.co
repositoryhttps://github.com/eigerco/lumina
max_upload_size
id1103061
size101,886
Eiger (eiger-releases)

documentation

README

Lumina node wasm

A compatibility layer for the Lumina node to work within a browser environment and be operable with javascript.

Example

Starting lumina inside a dedicated worker

import { spawnNode, NodeConfig, Network } from "lumina-node";

const node = await spawnNode();
const mainnetConfig = NodeConfig.default(Network.Mainnet);

await node.start(mainnetConfig);

await node.waitConnected();
await node.requestHeadHeader();

Manual setup

Note that spawnNode implicitly calls wasm initialisation code. If you want to set things up manually, make sure to call the default export before using any of the wasm functionality.

import init, { NodeConfig, Network } from "lumina-node";

await init();
const config = NodeConfig.default(Network.Mainnet);

// client and worker accept any object with MessagePort like interface e.g. Worker
const channel = new MessageChannel();
const worker = new NodeWorker(channel.port1);

// note that this runs lumina in the current context (and doesn't create a new web-worker). Promise created with `.run()` never completes.
const worker_promise = worker.run();

// client port can be used locally or transferred like any plain MessagePort
const client = await new NodeClient(channel.port2);
await client.waitConnected();
await client.requestHeadHeader();

Rust API

For comprehensive and fully typed interface documentation, see lumina-node and celestia-types documentation on docs.rs. You can see there the exact structure of more complex types, such as ExtendedHeader. JavaScript API's goal is to provide similar interface to Rust when possible, e.g. NodeClient mirrors Node.

Commit count: 274

cargo fmt