I am trying to build a merkle root which contains only the coinbase transaction from bitcoind.

After creating the coinbase transaction, do I need to convert it to little endian, hash it twice and then put it in the blockheader as it is, or do I have to it reconvert it again before I put it in the blockheader?

I mean:

step 1: convert coinbase transaction to little endian
step 2: double SHA256
step 3: reconvert to little endian or let it as it's?
step 4: put it on the blockheader

I am a little confused

Thank you for help


Whenever data is serialized to bytes in Bitcoin, the bytes are represented in little endian. (Data that is already in bytes does not need to be serialized or otherwise converted.)

When there is only a single element in the merkle tree, the root of the tree is the hash of that element. Therefore, you would only need to serialize the coinbase transaction and hash the bytes resulting from the serialization. The resulting hash is the coinbase's txid as well as the merkle root.

  • ah, thank you, i thought we do this when it's an odd number of transactions, and according to the documentation, it says when it contains only the coinbase transaction, the merkle root will be the same
    – Hamita
    Jul 24 '20 at 18:14
  • 2
    This answer is incorrect. The sha256d(txid+txid) formula is used to compute the parent node in a Merkle tree when the number of elements in a level is odd, but in case there is only one element, there is no next level - you're already done. Sep 27 at 14:47
  • @PieterWuille: Thanks, I updated my answer.
    – Murch
    Sep 27 at 15:14

I put the answer for my question here, if someone else need it, the right answer is: Convert before hashing and after hashing

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.