Building the merkle root from transactions in a template block

1

I want to compute the merkle root for transactions in a given template block - bitcoind:getblocktemplate().

I understand the merkle root is a hash of all the transactions in a block from the last up to the coinbase transaction, but this is currently way above my pay grade and the documentation I can find for this process is abstract and sketchy at best.

Has anyone done this in JavaScript or know of a resource that could be helpful?

Thanks in advance.

client.getBlockTemplate( function(error, template) {
    if (error) return console.log(error);

    // SETUP MINING
    nonce=0;
    const block = {
        version: template.version
        ,previousblockhash: template.previousblockhash
        ,merkleroot: calculateMerkleRoot(template)
        ,time: template.mintime
        ,bits: template.bits
    }           

    // START MINER
    miner(block,nonce);
});

Corbin

Posted 2018-03-10T20:55:50.983

Reputation: 115

1It's named after Ralph Merkle, not Angela Merkel.Pieter Wuille 2018-03-11T03:00:07.813

Oh HAHAHAHAHAHA, fixed.Corbin 2018-03-11T03:03:28.343

Answers

1

I'm much closer now I hope this helps someone else trying to do this!

REQUIREMENTS:

NPM bitcoin bitcoin-js merkle-lib

CODE:

client.getBlockTemplate( function(error, template) {
    if (error) return console.log(error);
    txhashes = template.transactions.map(function(tx){ return Buffer.from(tx.txid, 'hex').reverse() });
    merkleRoot = fastMerkleRoot(txhashes, bcrypto.hash256);
    console.log(merkleRoot);
)};

The result is in a Buffer and I'm having trouble converting it to hex.

Corbin

Posted 2018-03-10T20:55:50.983

Reputation: 115