github.com/soomindae/tendermint@v0.0.5-0.20210528140126-84a0c70c8162/light/trust_options.go (about) 1 package light 2 3 import ( 4 "errors" 5 "fmt" 6 "time" 7 8 "github.com/soomindae/tendermint/crypto/tmhash" 9 ) 10 11 // TrustOptions are the trust parameters needed when a new light client 12 // connects to the network or when an existing light client that has been 13 // offline for longer than the trusting period connects to the network. 14 // 15 // The expectation is the user will get this information from a trusted source 16 // like a validator, a friend, or a secure website. A more user friendly 17 // solution with trust tradeoffs is that we establish an https based protocol 18 // with a default end point that populates this information. Also an on-chain 19 // registry of roots-of-trust (e.g. on the Cosmos Hub) seems likely in the 20 // future. 21 type TrustOptions struct { 22 // tp: trusting period. 23 // 24 // Should be significantly less than the unbonding period (e.g. unbonding 25 // period = 3 weeks, trusting period = 2 weeks). 26 // 27 // More specifically, trusting period + time needed to check headers + time 28 // needed to report and punish misbehavior should be less than the unbonding 29 // period. 30 Period time.Duration 31 32 // Header's Height and Hash must both be provided to force the trusting of a 33 // particular header. 34 Height int64 35 Hash []byte 36 } 37 38 // ValidateBasic performs basic validation. 39 func (opts TrustOptions) ValidateBasic() error { 40 if opts.Period <= 0 { 41 return errors.New("negative or zero period") 42 } 43 if opts.Height <= 0 { 44 return errors.New("negative or zero height") 45 } 46 if len(opts.Hash) != tmhash.Size { 47 return fmt.Errorf("expected hash size to be %d bytes, got %d bytes", 48 tmhash.Size, 49 len(opts.Hash), 50 ) 51 } 52 return nil 53 }