diff --git a/poseidon2/merkle.nim b/poseidon2/merkle.nim index 0c4465f..6ca894c 100644 --- a/poseidon2/merkle.nim +++ b/poseidon2/merkle.nim @@ -15,7 +15,7 @@ func merkleRoot*(xs: openArray[F], isBottomLayer: static bool = true) : F = let b = high(xs) let m = b-a+1 - if m==1: + if m==1 and not isBottomLayer: return xs[a] else: diff --git a/tests/poseidon2/testMerkle.nim b/tests/poseidon2/testMerkle.nim index 178d568..203ae2c 100644 --- a/tests/poseidon2/testMerkle.nim +++ b/tests/poseidon2/testMerkle.nim @@ -48,6 +48,14 @@ suite "merkle root": let b = a & @[0.toF] check not bool(merkleRoot(a) == merkleRoot(b)) + test "merkle root of single element does not equal the element": + check not bool(merkleRoot([1.toF]) == 1.toF) + + test "merkle root differs from merkle root of merkle root": + let a = 1.toF + let b = 2.toF + check not bool(merkleRoot([a, b]) == merkleRoot([merkleRoot([a, b])])) + test "merkle root of bytes": let bytes = toSeq 1'u8..80'u8 let root = merkleRoot(bytes)