github.com/karalabe/go-ethereum@v0.8.5/core/types/derive_sha.go (about)

     1  package types
     2  
     3  import (
     4  	"github.com/ethereum/go-ethereum/ethdb"
     5  	"github.com/ethereum/go-ethereum/ethutil"
     6  	"github.com/ethereum/go-ethereum/trie"
     7  )
     8  
     9  type DerivableList interface {
    10  	Len() int
    11  	GetRlp(i int) []byte
    12  }
    13  
    14  func DeriveSha(list DerivableList) []byte {
    15  	db, _ := ethdb.NewMemDatabase()
    16  	trie := trie.New(nil, db)
    17  	for i := 0; i < list.Len(); i++ {
    18  		trie.Update(ethutil.Encode(i), list.GetRlp(i))
    19  	}
    20  
    21  	return trie.Root()
    22  }