Skip to content

k-nuth/js-api

Repository files navigation

Javascript/Typescript API

Bitcoin Cash full node as a Javascript/Typescript library

NPM Version License js-standard-style Telegram

Knuth Javascript/Typescript API is a high performance implementation of the Bitcoin Cash protocol focused on users requiring extra performance and flexibility. It is a Bitcoin Cash node you can use as a library.

Getting started with Javascript

  1. Create a new Javascript console project:
$ mkdir HelloKnuth
$ cd HelloKnuth
$ npm init
  1. Add a reference to our Javascript API package:
$ npm install @knuth/bch
  1. Create a new file called index.js and write some code:
const kth = require("@knuth/bch")

let running_ = false;

async function main() {
    process.on('SIGINT', shutdown);
    const config = kth.settings.getDefault(kth.network.mainnet);
    const node = new kth.node.Node(config, false);
    await node.launch(kth.startModules.all);
    console.log("Knuth node has been launched.");
    running_ = true;

    const [_, height] = await node.chain.getLastHeight();
    console.log(`Current height in local copy: ${height}`);

    if (await comeBackAfterTheBCHHardFork(node)) {
        console.log("Bitcoin Cash has been created!");
    }

    node.close();
    console.log("Good bye!");
}

async function comeBackAfterTheBCHHardFork(node) {
    const hfHeight = 478559;
    while (running_) {
        const [_, height] = await node.chain.getLastHeight();
        if (height >= hfHeight) return true;
        await sleep(10000);
    }
    return false;
}

function shutdown() {
    console.log('Graceful shutdown ...');
    running_ = false;
}

function sleep(ms) {
    return new Promise((r) => setTimeout(r, ms));
}

(async () => {
    try {
        await main();
    } catch (e) {
        console.log(e);
    }
})();
  1. Enjoy Knuth node as a Javascript library:
$ node index.js

Getting started with Typescript

  1. Create a new Typescript console project:
$ mkdir HelloKnuth
$ cd HelloKnuth
$ npm init
  1. Add a reference to our Typescript API package and TypeScript definitions for Node.js:
$ npm install @knuth/bch
$ npm install @types/node

  1. Create a new file called index.ts and write some code:
import * as kth from "@knuth/bch";

let running_ = false;

async function main() {
    process.on('SIGINT', shutdown);
    const config = kth.settings.getDefault(kth.network.mainnet);
    const node = new kth.node.Node(config, false);
    await node.launch(kth.startModules.all);
    console.log("Knuth node has been launched.");
    running_ = true;

    const [_, height] = await node.chain.getLastHeight();
    console.log(`Current height in local copy: ${height}`);

    if (await comeBackAfterTheBCHHardFork(node)) {
        console.log("Bitcoin Cash has been created!");
    }

    node.close();
    console.log("Good bye!");
}

async function comeBackAfterTheBCHHardFork(node : kth.node.Node) {
    const hfHeight = 478559;
    while (running_) {
        const [_, height] = await node.chain.getLastHeight();
        if (height >= hfHeight) return true;
        await sleep(10000);
    }
    return false;
}

function shutdown() {
    console.log('Graceful shutdown ...');
    running_ = false;
}

function sleep(ms : number) {
    return new Promise((r) => setTimeout(r, ms));
}

(async () => {
    try {
        await main();
    } catch (e) {
        console.log(e);
    }
})();
  1. Enjoy Knuth node as a Typescript library:
$ ts-node index.ts

Issues

Each of our modules has its own Github repository, but in case you want to create an issue, please do so in our main repository.