import std/sequtils import constantine/math/arithmetic import poseidon2/types import poseidon2/permutation import poseidon2/io import poseidon2/sponge import poseidon2/compress export sponge export compress export toBytes export elements export types #------------------------------------------------------------------------------- func merkleRoot*(xs: openArray[F]) : F = let a = low(xs) let b = high(xs) let m = b-a+1 if m==1: return xs[a] else: let halfn : int = m div 2 let n : int = 2*halfn let isOdd : bool = (n != m) var ys : seq[F] if not isOdd: ys = newSeq[F](halfn) else: ys = newSeq[F](halfn+1) for i in 0..