I'm trying to implement my own Markle Tree, currently I'm working on getting the hashing done correctly.

I've used some hashes from http://blockexplorer.com/rawblock/000000000000a85d42610b292d2baebe54ff0c854847fe3d2ca37ac7d6e46b99

Example inputs (first two hashes from blockexplorer):

Ina: 3a459eab5f0cf8394a21e04d2ed3b2beeaa59795912e20b9c680e9db74dfb18c

Inb: be38f46f0eccba72416aed715851fd07b881ffb7928b7622847314588e06a6b7

Concatenated string (H1+H2): 3a459eab5f0cf8394a21e04d2ed3b2beeaa59795912e20b9c680e9db74dfb18cbe38f46f0eccba72416aed715851fd07b881ffb7928b7622847314588e06a6b7

Hash of concatenated string: Ans v1: b5916d6bc34bd4157aa73c3d799a6cfcef85e0659465734362d0cebb8901e93d

Final hash of concatenated string: Ans v2: 215f8397a3090a0bc8f4a2e98609a10d55fc7b939fa1ecf9803df20b1ee089a2

Result I got: 215f8397a3090a0bc8f4a2e98609a10d55fc7b939fa1ecf9803df20b1ee089a2

Expected result: 13a3595f2610c8e4d727130daade66c772fdec4bd2463d773fd0f85c20ced32d

Checked my calculations "manually" using http://www.fileformat.info/tool/hash.htm?hex=b5916d6bc34bd4157aa73c3d799a6cfcef85e0659465734362d0cebb8901e93d and got the same results.

Am I doing someting wrong following this example: https://en.bitcoin.it/wiki/Protocol_specification#Merkle_Trees . I take my input hashes, concatenate them together, and double SHA256 that string. I also tried treating the input strings as a and b, that is, first double SHA256 them, and only then join them together, but the result was also wrong. Does anyone have a step-by-step example of proper hashing of the Merkle Tree?


As it was pointed out to me by ArtForz in this post: https://bitcointalk.org/index.php?topic=44707.msg534605#msg534605 the hashes are stored in little endian notation, so I first need to reverse them before double-hashing them, and then reverse the output back to get the proper result.


Added two cents. In excel VBA

Private Function Sha256String(ByVal a)
b = a
While Len(b) > 0
c = c + Right(b, 2)
b = Left(b, Len(b) - 2)
Sha256String = c
End Function

Run that on a and b hashes, concatenate them, double hash as hex bytes: http://www.fileformat.info/tool Then run the function on the sha-256 answer.

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.