My question is in relation to the operational difference between a merkle root and a plain old message digest.

To calculate a merkle root I need to complete the following steps :

  • hash each transaction in a block
  • create a merkle tree from all the hashed transactions
  • work back up the merkle tree hashing pairs of transactions until I calculate the merkle root

To create a plain old message digest I would do the following :

  • Take all transactions in a block hash them at the same time to create a message digest

My question is, how is a merkle root more beneficial from an operational standpoint than a plain old message digest?


Initially, they appear the same, only considering that there is a hash included in the block.

A Merkle Tree is more efficient to prove a transaction is included in a block since otherwise, it is necessary to have and hash each transaction to prove a transaction is included using a message digest, so a full node can do this, but an SPV client (and a pruned node looking outside the blocks it has kept) cannot.

There is some more information on how this works in these answers: Merkle Root and Merkle Proofs

  • So both a message digest and a merkle root provide the same function, but a merkle root is more efficient? – user76129 Feb 5 '18 at 11:59
  • @T-Pane Not completely the same function, only initially. If I have Message Digest I cannot change one single thing, as you understand the same is true for Merkle Tree but, I can walk a Merkle Tree. The technique is given in this answer. – Willtech Feb 5 '18 at 12:07