Xam_Ni
1
import { Block } from "bitcoinjs-lib";
import scrypt from "scryptsy";
// Main: fetch blocks from each difficulty period
async function main() {
try {
// I want to create exact same hash from same input of already mined block
const blockHash =
"bd15d38eec25b454d3d9bc8fb498a460be8c6d9322e497f8cd57c3dc42f5123c";
// block header hex = 00000020e23f015ddfacac68673ddb557e0170a8f0583d502dfc4c647fb4afd334cd3e322b63ff23c957b567d88b616e918cc7ab787fbbcb70b4d34c83b4d252d2727a69eb77f568fcff031c3478320e
const block = Block.fromHex(
"00000020e23f015ddfacac68673ddb557e0170a8f0583d502dfc4c647fb4afd334cd3e322b63ff23c957b567d88b616e918cc7ab787fbbcb70b4d34c83b4d252d2727a69eb77f568fcff031c3478320e"
);
const headerBuffer = block.toBuffer(true); // it return only header uint8array
const header = Buffer.from(headerBuffer);
const pow = scrypt(header, header, 1024, 1, 1, 32);
const powHashBE = Buffer.from(pow); // Big-endian from scrypt
const powHashLE = Buffer.from(pow).reverse(); // what Core shows in getblockheader
const targetBuf = Block.calculateTarget(block.bits); // full 32-byte target
console.log("PoW hash (BE):", powHashBE.toString("hex"));
console.log("PoW hash (LE):", powHashLE.toString("hex"));
console.log("Target (BE):", targetBuf.toString("hex"));
console.log("Hash:", blockHash);
// How i can generate pow same as blockHash, as i am using same header
// output i am getting
// PoW hash (BE): ccb957e3358b200dff3c64a5c4fc755e5e103d1e94040e4624a9200100000000
// PoW hash (LE): 000000000120a924460e04941e3d105e5e75fcc4a5643cff0d208b35e357b9cc
// Target (BE): 0,0,0,0,3,255,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
// Hash: bd15d38eec25b454d3d9bc8fb498a460be8c6d9322e497f8cd57c3dc42f5123c
} catch (err) {
console.error("❌ Error:", err);
}
}
main();