| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package lightclient
- import (
- "fmt"
- "github.com/tendermint/tendermint/crypto/merkle"
- "github.com/tendermint/tendermint/crypto/tmhash"
- )
- //----------------------------------------
- // CommitID
- // CommitID contains the tree version number and its merkle root.
- type CommitID struct {
- Version int64
- Hash []byte
- }
- func (cid CommitID) IsZero() bool { //nolint
- return cid.Version == 0 && len(cid.Hash) == 0
- }
- func (cid CommitID) String() string {
- return fmt.Sprintf("CommitID{%v:%X}", cid.Hash, cid.Version)
- }
- //----------------------------------------
- // CommitInfo
- // NOTE: Keep CommitInfo a simple immutable struct.
- type CommitInfo struct {
- // Version
- Version int64
- // Store info for
- StoreInfos []StoreInfo
- }
- // Hash returns the simple merkle root hash of the stores sorted by name.
- func (ci CommitInfo) Hash() []byte {
- // TODO cache to ci.hash []byte
- m := make(map[string][]byte, len(ci.StoreInfos))
- for _, storeInfo := range ci.StoreInfos {
- m[storeInfo.Name] = storeInfo.Hash()
- }
- return merkle.SimpleHashFromMap(m)
- }
- func (ci CommitInfo) CommitID() CommitID {
- return CommitID{
- Version: ci.Version,
- Hash: ci.Hash(),
- }
- }
- //----------------------------------------
- // StoreInfo
- // StoreInfo contains the name and core reference for an
- // underlying store. It is the leaf of the rootMultiStores top
- // level simple merkle tree.
- type StoreInfo struct {
- Name string
- Core StoreCore
- }
- type StoreCore struct {
- // StoreType StoreType
- CommitID CommitID
- // ... maybe add more state
- }
- // Implements merkle.Hasher.
- func (si StoreInfo) Hash() []byte {
- // Doesn't write Name, since merkle.SimpleHashFromMap() will
- // include them via the keys.
- bz, _ := Cdc.MarshalBinaryLengthPrefixed(si.Core) // Does not error
- hasher := tmhash.New()
- _, err := hasher.Write(bz)
- if err != nil {
- // TODO: Handle with #870
- panic(err)
- }
- return hasher.Sum(nil)
- }
|