0

I want to learn how to calculate the Merkle root so I started from a simple example, a block with only 2 transactions (block #99997). However, I ran into a problem.

Mempool online block explorer says that the Merkle root of this block is: 5140e5972f672bf8e81bc189894c55a410723b095716eaeec845490aed785f0e.

However, I am getting the different value.

Two transactions are contained inside the block #99997 and their TXID are:

  • b86f5ef1da8ddbdb29ec269b535810ee61289eeac7bf2b2523b494551f03897c

  • 80c6f121c3e9fe0a59177e49874d8c703cbadee0700a782e4002e87d862373c6

I did the following steps:

  1. concatenation of transaction IDs
    (result:b86f5ef1da8ddbdb29ec269b535810ee61289eeac7bf2b2523b494551f03897c80c6f121c3e9fe0a59177e49874d8c703cbadee0700a782e4002e87d862373c6)
  2. SHA256 of the result from the step 1 (result:e08d8ecc5a02b113bea1e7e2786b8235ddb5ab6058910f30b4d966b30e484bda)
  3. SHA256 of the result from the step 2 (result:5ab58ee21a1ae7476d59e6b7ddb05a80e8b42a4bf5748e9c5db9eb860b2bd040)

As you can see I got the different value for the Merkle root than the one presented on the Mempool site.

Mine: 5ab58ee21a1ae7476d59e6b7ddb05a80e8b42a4bf5748e9c5db9eb860b2bd040

Their: 5140e5972f672bf8e81bc189894c55a410723b095716eaeec845490aed785f0e

What am I doing wrong?

1 Answer 1

1

I found the solution myself. Block explorers, for some reason, displays TXIDs in reversed form, so you need to unreverse it before using.

I didn't calculate TXIDs manually, I just took them from the mempool.space, so my calculation of Merkle root went wrong. I just needed to calculate TXIDs myself or to reverse the values presented there.

Thanks to Vojtěch Strnad.

4
  • 1
    The TXID is a hash, not a number, so the concept of endianness doesn't really apply here. However, it is normally presented in reverse order (it's not completely clear why Satoshi did it this way), so you have to unreverse it before doing calculations with it. Nov 28, 2023 at 0:37
  • @VojtěchStrnad I assume that he wanted to present everything in the same "reversed" way (little endian) regardless of whether it is a number or not.
    – Cosmos
    Nov 28, 2023 at 1:25
  • @VojtěchStrnad No, I do not need to "unreverse" it. I must keep it reversed. So after calculating a TXID, it is necessary to reverse it. Mempool.space is showing as it is (without reversing).
    – Cosmos
    Nov 28, 2023 at 1:38
  • 2
    You are right, you confused me with this "However, it is normally presented in reverse order (it's not completely clear why Satoshi did it this way).... I assumed you are talking about the way we are calculating merkle tree (since you mentioned Satoshi) and not the way it is represented in Block explorers. In block explorers it is presented in reversed form and when we are calculating merkle tree we are using "normal" form.
    – Cosmos
    Nov 28, 2023 at 2:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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