Bitcoin Forum

Bitcoin => Development & Technical Discussion => Topic started by: TierNolan on June 24, 2011, 02:55:41 PM



Title: merkle tree order of hashes
Post by: TierNolan on June 24, 2011, 02:55:41 PM
According to the paper, if you have 4 transactions, then the procedure is

12 = Hash(1,2)
34 = Hash(3,4)
root = hash(12,34)

However, it doesn't say how to handle non-power of 2 trees.

For 5 transactions, it could be something like:

Pass 1:

12 = Hash(1,2)
34 = Hash(3,4)
5_ = 5

Pass 2:

1234 = Hash(12,34)
5___ = 5_

Pass 3

root = Hash(1234, 5___)

However, that gives an unbalanced tree. 

Another option would be

1,2,3,4,5

becomes

5,12,34

and then

512,34

and then

51234

Is there some flexibility?  I couldn't see how the tree was defined in block explorer.


Title: Re: merkle tree order of hashes
Post by: kjj on June 24, 2011, 03:13:24 PM
According to the paper, if you have 4 transactions, then the procedure is

12 = Hash(1,2)
34 = Hash(3,4)
root = hash(12,34)

However, it doesn't say how to handle non-power of 2 trees.

For 5 transactions, it could be something like:

Pass 1:

12 = Hash(1,2)
34 = Hash(3,4)
5_ = 5

Pass 2:

1234 = Hash(12,34)
5___ = 5_

Pass 3

root = Hash(1234, 5___)

However, that gives an unbalanced tree. 

Another option would be

1,2,3,4,5

becomes

5,12,34

and then

512,34

and then

51234

Is there some flexibility?  I couldn't see how the tree was defined in block explorer.

Double the unpaired one.  https://en.bitcoin.it/wiki/Protocol_specification#Merkle_Trees (https://en.bitcoin.it/wiki/Protocol_specification#Merkle_Trees)


Title: Re: merkle tree order of hashes
Post by: TierNolan on June 24, 2011, 03:17:18 PM
Double the unpaired one.  https://en.bitcoin.it/wiki/Protocol_specification#Merkle_Trees (https://en.bitcoin.it/wiki/Protocol_specification#Merkle_Trees)

Ahh right.  I read that to mean that the "c" input was used twice rather than saying how the tree is constructed.

Thanks.