Skip to main content

Perform Proof of Work

You can perform Proof of Work(POW) operations using the following functions :

You will need to provide a block and a targetScore to any of these functions. If successful, they will return nonce.

Example Code

import * as bigInt from "big-integer";
import { PowHelper } from "@iota/crypto.js";
import { BigIntHelper } from "@iota/util.js";
import { IPowProvider } from "@iota/iota.js";
import { NodePowProvider } from "@iota/pow-node.js";
import { WasmPowProvider } from "@iota/pow-wasm.js";
import { NeonPowProvider } from "@iota/pow-neon.js";

async function run() {
const dataLength = 500;
const targetScore = 100;
const iterations = 1;

await doPow("Neon Pow", dataLength, targetScore, iterations, new NeonPowProvider(3));
await doPow("Node Pow", dataLength, targetScore, iterations, new NodePowProvider(3));
await doPow("Wasm Pow", dataLength, targetScore, iterations, new WasmPowProvider(3));
}

async function doPow(
name: string,
dataLength: number,
targetScore: number,
iterations: number,
powProvider: IPowProvider
) {
console.log(name);
console.log("Target Score", targetScore);
console.log("Data Length", dataLength);
console.log("Iterations", iterations);

let totalTime = 0;
for (let i = 0; i < iterations; i++) {
const data = new Uint8Array(dataLength).fill(1);
BigIntHelper.write8(bigInt(0), data, data.length - 8);
console.log("\tIteration", i + 1);
const startTime = Date.now();
const nonce = await powProvider.pow(data, targetScore);
console.log("\tNonce", nonce);
BigIntHelper.write8(bigInt(nonce), data, data.length - 8);
const score = PowHelper.score(data);
console.log("\tScore", score);
totalTime += Date.now() - startTime;
}

console.log("Average Time (s)", (totalTime / iterations / 1000).toFixed(2));
console.log();
}

run()
.then(() => console.log("Done"))
.catch(err => console.error(err));

Expected Output


Neon Pow
Target Score 100
Data Length 500
Iterations 1
Iteration 1
Nonce 173109
Score 118.098
Average Time (s) 0.62

Node Pow
Target Score 100
Data Length 500
Iterations 1
Iteration 1
Nonce 173109
Score 118.098
Average Time (s) 27.11

Wasm Pow
Target Score 100
Data Length 500
Iterations 1
Iteration 1
Nonce 173109
Score 118.098
Average Time (s) 25.42

Local Pow
Target Score 100
Data Length 500
Iterations 1
Iteration 1
Nonce 173109
Score 118.098
Average Time (s) 24.54

Done