var crypto = require("crypto"); exports.createCoinbase = createCoinbase; exports.createCbHash = createCbHash; exports.buildMerkleRoot = buildMerkleRoot; exports.doublesha = doublesha; exports.incbufBE = incbufBE; /* Create a coinbase buffer. * * Args: * cb1, cb2: Buffer, coinbase parts 1 and 2 * ex1, ex2: Buffer, extranounce 1 and 2 * * Returns: * Buffer, a complete coinbase */ function createCoinbase(ex1, ex2, cb1, cb2) { return Buffer.concat([ cb1, ex1, ex2, cb2 ]); } /* Create a coinbase hash. * * Args: * coinbase: Buffer, the coinbase * * Returns: * Buffer, the cbHashBin */ function createCbHash(coinbase) { return doublesha(coinbase); } /* Build a merkle root from a merkle branch and a coinbase hash. * * Returns: * Buffer, the merkle root * * Args: * merkleBranch: Array, hex encoded hashes * cbHash: Buffer, the coinbase hash */ function buildMerkleRoot(merkleBranch, cbHash) { var root = cbHashBin for (var i in merkleBranch) { var h = Buffer.from(merkleBranch[i], "hex"); root = doublesha(Buffer.concat(root, h)); } return root; } function hashLbry(blockHeader){ //double sha256 var hash = doublesha(blockHeader) // sha 512 var tmp = crypto.createHash("sha512").update(hash).digest(); //ripemd160 MARTIN FIX DETTE var rm1 = crypto.createHash("rmd160").update(tmp[0]).digest(); var rm2 = crypto.createHash("rmd160").update(tmp[tmp.length/2]).digest(); // double sha256 var hash = doublesha(rm1+rm2) return hash; } /* Run sha256 twice on a buffer. * * Returns: * Buffer, the double-sha256'd buffer * * Args: * buf: Buffer, will be double-sha256'd */ function doublesha(buf) { var tmp = crypto.createHash("sha256").update(buf).digest(); return crypto.createHash("sha256").update(tmp).digest(); } /* Increment a buffer. * * Args: * buf: Buffer, will be incremented. */ function incbufBE(buf) { for (var i = buf.length - 1; i >= 0; --i) { if (buf[i]++ !== 255) break; } }