package light import ( "errors" "fmt" "time" "github.com/tendermint/tendermint/crypto/tmhash" ) // TrustOptions are the trust parameters needed when a new light client // connects to the network or when an existing light client that has been // offline for longer than the trusting period connects to the network. // // The expectation is the user will get this information from a trusted source // like a validator, a friend, or a secure website. A more user friendly // solution with trust tradeoffs is that we establish an https based protocol // with a default end point that populates this information. Also an on-chain // registry of roots-of-trust (e.g. on the Cosmos Hub) seems likely in the // future. type TrustOptions struct { // tp: trusting period. // // Should be significantly less than the unbonding period (e.g. unbonding // period = 3 weeks, trusting period = 2 weeks). // // More specifically, trusting period + time needed to check headers + time // needed to report and punish misbehavior should be less than the unbonding // period. Period time.Duration // Header's Height and Hash must both be provided to force the trusting of a // particular header. Height int64 Hash []byte } // ValidateBasic performs basic validation. func (opts TrustOptions) ValidateBasic() error { if opts.Period <= 0 { return errors.New("negative or zero period") } if opts.Height <= 0 { return errors.New("negative or zero height") } if len(opts.Hash) != tmhash.Size { return fmt.Errorf("expected hash size to be %d bytes, got %d bytes", tmhash.Size, len(opts.Hash), ) } return nil }