0.7.1 โข Published 2 months ago
@substreams/node v0.7.1
@substreams/node
Substreams for
Node.js
& Web
Install
npm install @substreams/node
โ ๏ธWarning: This package is native ESM. If your project uses CommonJS, you'll have to convert to ESM or use the dynamic import()
function. Please don't open issues for questions regarding CommonJS / ESM.
Example
import { createModuleHashHex, createRegistry, createRequest } from "@substreams/core";
import { readPackage } from "@substreams/manifest";
import { BlockEmitter } from "@substreams/node";
import { createNodeTransport } from "@substreams/node/createNodeTransport";
// or
import { createWebTransport } from "@substreams/node/createWebTransport";
// auth API token
// https://app.streamingfast.io/
// https://app.pinax.network/
if (!process.env.SUBSTREAMS_API_KEY) {
throw new Error("SUBSTREAMS_API_KEY is require");
}
const token = process.env.SUBSTREAMS_API_KEY;
const baseUrl = "https://eth.substreams.pinax.network:443";
// User parameters
const manifest = "https://github.com/pinax-network/substreams-erc20-balance-changes/releases/download/v1.2.0/erc20-balance-changes-mainnet-v1.2.0.spkg";
const outputModule = "map_balance_changes";
const startBlockNum = 17381140;
const stopBlockNum = "+3";
// Read Substream
const substreamPackage = await readPackage(manifest);
if (!substreamPackage.modules) {
throw new Error("No modules found in substream package");
}
const moduleHash = await createModuleHashHex(substreamPackage.modules, outputModule);
console.log({ moduleHash });
// Connect Transport
const headers = new Headers({ "X-User-Agent": "@substreams/node", "X-Api-Key": SUBSTREAMS_API_KEY });
const registry = createRegistry(substreamPackage);
const transport = createNodeTransport(baseUrl, token, registry, headers);
const request = createRequest({
substreamPackage,
outputModule,
startBlockNum,
stopBlockNum,
});
// NodeJS Events
const emitter = new BlockEmitter(transport, request, registry);
// Session Trace ID
emitter.on("session", (session) => {
console.dir(session);
});
// Stream Blocks
emitter.on("anyMessage", (message, cursor, clock) => {
console.dir(message);
console.dir(cursor);
console.dir(clock);
});
// End of Stream
emitter.on("close", (error) => {
if (error) {
console.error(error);
}
console.timeEnd("๐ close");
});
// Fatal Error
emitter.on("fatalError", (error) => {
console.error(error);
});
console.log("โ
start");
console.time("๐ close");
const cancel = emitter.start();
console.log("โ
start");
console.time("๐ close");
emitter.start();
// Cancel after 3 seconds
setTimeout(() => {
emitter.stop();
}, 3000);
0.7.1
2 months ago
0.7.0
2 months ago
0.6.2
1 year ago
0.6.1
1 year ago
0.6.0
1 year ago
0.5.3
1 year ago
0.5.2
2 years ago
0.5.1
2 years ago
0.5.0
2 years ago
0.4.4
2 years ago
0.3.0
2 years ago
0.2.1
2 years ago
0.2.0
2 years ago
0.4.1
2 years ago
0.1.4
2 years ago
0.4.0
2 years ago
0.2.2
2 years ago
0.4.3
2 years ago
0.4.2
2 years ago
0.1.5
2 years ago
0.1.3
2 years ago
0.1.2
2 years ago
0.1.1
2 years ago
0.1.0
2 years ago
0.0.1
2 years ago