Skip to content

Commit

Permalink
add merkle digest tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dryajov committed Dec 18, 2023
1 parent 65848b9 commit 0a1c7ec
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
56 changes: 56 additions & 0 deletions tests/codex/merkletree/testmerkledigest.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import std/unittest
import std/sequtils
import std/random

import pkg/constantine/math/arithmetic

import pkg/poseidon2
import pkg/poseidon2/io
import pkg/poseidon2/sponge

import pkg/questionable/results

import pkg/codex/merkletree
import pkg/codex/utils/digest

suite "Digest - MerkleTree":

const KB = 1024

test "Hashes chunks of data with sponge, and combines them in merkle root":
let bytes = newSeqWith(64*KB, rand(byte))
var leaves: seq[Poseidon2Hash]
for i in 0..<32:
let
chunk = bytes[(i*2*KB)..<((i+1)*2*KB)]
digest = Sponge.digest(chunk, rate = 2)
leaves.add(digest)

let
digestTree = Poseidon2MerkleTree.digest(bytes, chunkSize = 2*KB).tryGet
tree = Poseidon2MerkleTree.init(leaves).tryGet
root = tree.root.tryGet
expected = digestTree.root.tryGet

check bool( root == expected )

test "Handles partial chunk at the end":

let bytes = newSeqWith(63*KB, rand(byte))
var leaves: seq[Poseidon2Hash]
for i in 0..<31:
let
chunk = bytes[(i*2*KB)..<((i+1)*2*KB)]
digest = Sponge.digest(chunk, rate = 2)
leaves.add(digest)

let partialChunk = bytes[(62*KB)..<(63*KB)]
leaves.add(Sponge.digest(partialChunk, rate = 2))

let
digestTree = Poseidon2MerkleTree.digest(bytes, chunkSize = 2*KB).tryGet
tree = Poseidon2MerkleTree.init(leaves).tryGet
root = tree.root.tryGet
expected = digestTree.root.tryGet

check bool( root == expected )
1 change: 1 addition & 0 deletions tests/codex/testmerkletree.nim
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import ./merkletree/testcodextree
import ./merkletree/testposeidon2tree
import ./merkletree/testcodexcoders
import ./merkletree/testmerkledigest

{.warning[UnusedImport]: off.}

0 comments on commit 0a1c7ec

Please sign in to comment.