github.com/okex/exchain@v1.8.0/libs/tendermint/lite/proxy/block.go (about) 1 package proxy 2 3 import ( 4 "bytes" 5 "errors" 6 7 "github.com/okex/exchain/libs/tendermint/types" 8 ) 9 10 func ValidateBlockMeta(meta *types.BlockMeta, sh types.SignedHeader) error { 11 if meta == nil { 12 return errors.New("expecting a non-nil BlockMeta") 13 } 14 // TODO: check the BlockID?? 15 return ValidateHeader(&meta.Header, sh) 16 } 17 18 func ValidateBlock(meta *types.Block, sh types.SignedHeader) error { 19 if meta == nil { 20 return errors.New("expecting a non-nil Block") 21 } 22 err := ValidateHeader(&meta.Header, sh) 23 if err != nil { 24 return err 25 } 26 if !bytes.Equal(meta.Data.Hash(meta.Height), meta.Header.DataHash) { 27 return errors.New("data hash doesn't match header") 28 } 29 return nil 30 } 31 32 func ValidateHeader(head *types.Header, sh types.SignedHeader) error { 33 if head == nil { 34 return errors.New("expecting a non-nil Header") 35 } 36 if sh.Header == nil { 37 return errors.New("unexpected empty SignedHeader") 38 } 39 // Make sure they are for the same height (obvious fail). 40 if head.Height != sh.Height { 41 return errors.New("header heights mismatched") 42 } 43 // Check if they are equal by using hashes. 44 if !bytes.Equal(head.Hash(), sh.Hash()) { 45 return errors.New("headers don't match") 46 } 47 return nil 48 }