// taken from https://github.com/crypto-browserify/buffer-reverse/blob/master/inplace.js function reverseInplace (buffer) { for (var i = 0, j = buffer.length - 1; i < j; ++i, --j) { var t = buffer[j]; buffer[j] = buffer[i]; buffer[i] = t; } return buffer; } function ripemd160 (bytearray) { const crypto = require('crypto'); const secret = 'abcdefg'; const hash = crypto.createHash('ripemd160', secret) .update(bytearray, 'binary', 'binary') .digest(); return hash; } function sha256 (bytearray) { const crypto = require('crypto'); const secret = 'abcdefg'; const hash = crypto.createHash('sha256', secret) .update(bytearray, 'binary', 'binary') .digest(); return hash; } export function OutpointToClaimId (outpointstr) { var outpointsplit = outpointstr.split(':'); var outpoint = {txid: outpointsplit[0], vout: outpointsplit[1]}; // Assuming endianess is LittleEndian - Javacsript endianess depends on hardware. // Can check with os.endianness(). Possible values are "BE" or "LE" as of Node.js v0.10.0 // convert txid to byte array then reverse bytes to get BigEndian var txidbytes = Buffer.from(outpoint.txid, 'hex'); var txidrevbytes = reverseInplace(txidbytes); // Get big endian of vout(uint32) var voutbytes = Buffer.allocUnsafe(4); voutbytes.writeInt32BE(outpoint.vout); // Merge arrays var claimidbytes = Buffer.concat([txidrevbytes, voutbytes]); // Hash - Sha256 claimidbytes = sha256(claimidbytes); // Hash - RipeMD160 claimidbytes = ripemd160(claimidbytes); // Return to little endian. claimidbytes = reverseInplace(claimidbytes); // Encode to hex string var claimid = claimidbytes.toString('hex'); return claimid; }