Bitcoin Cash full node as a Javascript/Typescript library
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.
- Create a new Javascript console project:
$ mkdir HelloKnuth
$ cd HelloKnuth
$ npm init
- Add a reference to our Javascript API package:
$ npm install @knuth/bch
- 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);
}
})();
- Enjoy Knuth node as a Javascript library:
$ node index.js
- Create a new Typescript console project:
$ mkdir HelloKnuth
$ cd HelloKnuth
$ npm init
- Add a reference to our Typescript API package and TypeScript definitions for Node.js:
$ npm install @knuth/bch
$ npm install @types/node
- 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);
}
})();
- Enjoy Knuth node as a Typescript library:
$ ts-node index.ts
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.