erigon-pulse/cl/utils/merkle.go
2023-02-10 01:09:05 +01:00

27 lines
694 B
Go

package utils
import (
libcommon "github.com/ledgerwatch/erigon-lib/common"
)
// Check if leaf at index verifies against the Merkle root and branch
func IsValidMerkleBranch(leaf libcommon.Hash, branch []libcommon.Hash, depth uint64, index uint64, root [32]byte) bool {
value := leaf
for i := uint64(0); i < depth; i++ {
if (index / PowerOf2(i) % 2) == 1 {
value = Keccak256(append(branch[i][:], value[:]...))
} else {
value = Keccak256(append(value[:], branch[i][:]...))
}
}
return value == root
}
func PreparateRootsForHashing(roots []libcommon.Hash) [][32]byte {
ret := make([][32]byte, len(roots))
for i := range roots {
copy(ret[i][:], roots[i][:])
}
return ret
}