Browse Source

Merge pull request #196 from tendermint/joon/simple-proofs-from-map

add SimpleProofsFromMap
pull/1780/head
Anton Kaliaev 7 years ago
committed by GitHub
parent
commit
40a73fa75c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 6 deletions
  1. +3
    -3
      merkle/simple_map.go
  2. +14
    -0
      merkle/simple_proof.go
  3. +3
    -3
      merkle/simple_tree_test.go

+ 3
- 3
merkle/simple_map.go View File

@ -60,9 +60,9 @@ func (sm *SimpleMap) KVPairs() cmn.KVPairs {
//----------------------------------------
// A local extension to KVPair that can be hashed.
type kvPair cmn.KVPair
type KVPair cmn.KVPair
func (kv kvPair) Hash() []byte {
func (kv KVPair) Hash() []byte {
hasher := ripemd160.New()
err := encodeByteSlice(hasher, kv.Key)
if err != nil {
@ -78,7 +78,7 @@ func (kv kvPair) Hash() []byte {
func hashKVPairs(kvs cmn.KVPairs) []byte {
kvsH := make([]Hasher, 0, len(kvs))
for _, kvp := range kvs {
kvsH = append(kvsH, kvPair(kvp))
kvsH = append(kvsH, KVPair(kvp))
}
return SimpleHashFromHashers(kvsH)
}

+ 14
- 0
merkle/simple_proof.go View File

@ -22,6 +22,20 @@ func SimpleProofsFromHashers(items []Hasher) (rootHash []byte, proofs []*SimpleP
return
}
func SimpleProofsFromMap(m map[string]Hasher) (rootHash []byte, proofs []*SimpleProof) {
sm := NewSimpleMap()
for k, v := range m {
sm.Set(k, v)
}
sm.Sort()
kvs := sm.kvs
kvsH := make([]Hasher, 0, len(kvs))
for _, kvp := range kvs {
kvsH = append(kvsH, KVPair(kvp))
}
return SimpleProofsFromHashers(kvsH)
}
// Verify that leafHash is a leaf hash of the simple-merkle-tree
// which hashes to rootHash.
func (sp *SimpleProof) Verify(index int, total int, leafHash []byte, rootHash []byte) bool {


+ 3
- 3
merkle/simple_tree_test.go View File

@ -3,7 +3,7 @@ package merkle
import (
"bytes"
. "github.com/tendermint/tmlibs/common"
cmn "github.com/tendermint/tmlibs/common"
. "github.com/tendermint/tmlibs/test"
"testing"
@ -21,7 +21,7 @@ func TestSimpleProof(t *testing.T) {
items := make([]Hasher, total)
for i := 0; i < total; i++ {
items[i] = testItem(RandBytes(32))
items[i] = testItem(cmn.RandBytes(32))
}
rootHash := SimpleHashFromHashers(items)
@ -53,7 +53,7 @@ func TestSimpleProof(t *testing.T) {
// Trail too long should make it fail
origAunts := proof.Aunts
proof.Aunts = append(proof.Aunts, RandBytes(32))
proof.Aunts = append(proof.Aunts, cmn.RandBytes(32))
{
ok = proof.Verify(i, total, itemHash, rootHash)
if ok {


Loading…
Cancel
Save