mirror of
https://github.com/logos-storage/nim-merkletree.git
synced 2026-03-20 05:53:10 +00:00
46 lines
1.5 KiB
Nim
46 lines
1.5 KiB
Nim
import pkg/unittest2
|
|
import pkg/merkletree
|
|
import pkg/nimcrypto/sha2
|
|
import pkg/results
|
|
import pkg/questionable/results
|
|
import pkg/stew/byteutils
|
|
import pkg/chronos
|
|
|
|
import ./generictreetests
|
|
|
|
type
|
|
ByteHash* = seq[byte]
|
|
ByteTree* = MerkleTree[ByteHash, ByteTreeKey]
|
|
ByteProof* = MerkleProof[ByteHash, ByteTreeKey]
|
|
|
|
const
|
|
data = [
|
|
"00000000000000000000000000000001".toBytes,
|
|
"00000000000000000000000000000002".toBytes,
|
|
"00000000000000000000000000000003".toBytes,
|
|
"00000000000000000000000000000004".toBytes,
|
|
"00000000000000000000000000000005".toBytes,
|
|
"00000000000000000000000000000006".toBytes,
|
|
"00000000000000000000000000000007".toBytes,
|
|
"00000000000000000000000000000008".toBytes,
|
|
"00000000000000000000000000000009".toBytes,
|
|
"00000000000000000000000000000010".toBytes,
|
|
]
|
|
digestSize = sha256.sizeDigest
|
|
zero: seq[byte] = newSeq[byte](digestSize)
|
|
compress = func(x, y: seq[byte], key: ByteTreeKey): seq[byte] {.gcsafe, raises: [].} =
|
|
let input = x & y & @[key.byte]
|
|
let digest = sha256.digest(input)
|
|
@(digest.data)
|
|
|
|
makeTree = proc(data: seq[seq[byte]]): Future[ByteTree] {.async.} =
|
|
let tree = ByteTree()
|
|
let compress = func(x, y: seq[byte], key: ByteTreeKey): ?!seq[byte] =
|
|
# Use Result form of `compress` to match expected type of prepare
|
|
success compress(x, y, key)
|
|
tree.prepare(compress, zero, data).expect("should prepare merkletree")
|
|
tree.compute.expect("should compute merkletree")
|
|
return tree
|
|
|
|
testGenericTree("ByteTree", @data, zero, compress, makeTree)
|