Skip to content

Commit

Permalink
chore: update merkle tree hash function to keccak256
Browse files Browse the repository at this point in the history
  • Loading branch information
hacheigriega committed Sep 10, 2024
1 parent dc43c87 commit 69514b7
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 1 deletion.
2 changes: 1 addition & 1 deletion cmd/sedad/utils/merkle.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
// - Each hash pair is sorted to make proofs more succinct.
// - "Super root" computation is supported.
func RootFromEntries(entries [][]byte) []byte {
return rootFromEntries(sha3.New256(), entries)
return rootFromEntries(sha3.NewLegacyKeccak256(), entries)
}

func rootFromEntries(sha hash.Hash, entries [][]byte) []byte {
Expand Down
68 changes: 68 additions & 0 deletions cmd/sedad/utils/merkle_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package utils_test

import (
"bytes"
"encoding/hex"
"testing"

"github.com/sedaprotocol/seda-chain/cmd/sedad/utils"
"github.com/stretchr/testify/require"
)

func TestRootFromEntries(t *testing.T) {
// Define a custom hash for testing
// customHash := sha3.New256()

tests := []struct {
name string
entries []string // hex-encoded entries
expected string
}{
{
name: "empty entries",
entries: []string{},
expected: "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
},
{
name: "single entry",
entries: []string{"a6f4b3e2d9c18f75ba7e3c21d5f8a239ce4b7a2d3f85c9e6b7d2f3a4c9d8f2"},
expected: "5e1756cab080e11a355db5b61438d37608798fa026a73217aab18174fb9908c1",
},
{
name: "two entries",
entries: []string{
"22e922a540bb7af9b2456ecb0663619804db6e736f28702398c594b93e526acaefa2d0fb95f0c45c",
"a54cfd0002b948adba2acd65025cad55aa8558ccd84e421f6e6b9519f2e465a577be05ba32de0317",
},
expected: "53ab91fafdc336733a74a2121ddfb07347b5f2a3972a2d8461bddceeb4269c8f",
},
{
name: "five entries",
entries: []string{
"5ef99dd9c6c8070b95a8b2e6f709f457cbba95d4883b719f5ba4ef6fc81cfe119bf9df2e4c49ea06",
"4e9bbe0628ddee1a89578919948d513d1abd6ff2fedb400cefa5c3e6ba3ff912919c5d103fcafaad",
"9c09ebebf888a7cac4dbadadf15f6c07d38b4ea1d3faac2d74e9aed2654274471bd4498df4da23cb",
"3940ae8fd7928039a8d630301e25d9ede15bd94700f4b73c5543b3089bc47efcfdaa0a4104418dd6",
"67b17cf31449cf9c738738b4382afa789d8bb794eab3a42ac0c6990d67d23c8f7e785b2d3d317fda",
},
expected: "89e1e3bdeee88210c0d09c9aa2c7522178b08834d3274dbd8cd6af62a0da36c2",
},
}

for _, tt := range tests {
expected, err := hex.DecodeString(tt.expected)
require.NoError(t, err)
entries := make([][]byte, len(tt.entries))
for i := range tt.entries {
entries[i], err = hex.DecodeString(tt.entries[i])
require.NoError(t, err)
}

t.Run(tt.name, func(t *testing.T) {
got := utils.RootFromEntries(entries)
if !bytes.Equal(got, expected) {
t.Errorf("RootFromEntries() = %x, want %x", got, expected)
}
})
}
}

0 comments on commit 69514b7

Please sign in to comment.