package errors
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
cmn "github.com/tendermint/tendermint/libs/common"
|
|
)
|
|
|
|
//----------------------------------------
|
|
// Error types
|
|
|
|
type errCommitNotFound struct{}
|
|
|
|
func (e errCommitNotFound) Error() string {
|
|
return "Commit not found by provider"
|
|
}
|
|
|
|
type errUnexpectedValidators struct {
|
|
got []byte
|
|
want []byte
|
|
}
|
|
|
|
func (e errUnexpectedValidators) Error() string {
|
|
return fmt.Sprintf("Validator set is different. Got %X want %X",
|
|
e.got, e.want)
|
|
}
|
|
|
|
type errTooMuchChange struct{}
|
|
|
|
func (e errTooMuchChange) Error() string {
|
|
return "Insufficient signatures to validate due to valset changes"
|
|
}
|
|
|
|
type errUnknownValidators struct {
|
|
chainID string
|
|
height int64
|
|
}
|
|
|
|
func (e errUnknownValidators) Error() string {
|
|
return fmt.Sprintf("Validators are unknown or missing for chain %s and height %d",
|
|
e.chainID, e.height)
|
|
}
|
|
|
|
type errEmptyTree struct{}
|
|
|
|
func (e errEmptyTree) Error() string {
|
|
return "Tree is empty"
|
|
}
|
|
|
|
//----------------------------------------
|
|
// Methods for above error types
|
|
|
|
//-----------------
|
|
// ErrCommitNotFound
|
|
|
|
// ErrCommitNotFound indicates that a the requested commit was not found.
|
|
func ErrCommitNotFound() error {
|
|
return cmn.ErrorWrap(errCommitNotFound{}, "")
|
|
}
|
|
|
|
func IsErrCommitNotFound(err error) bool {
|
|
if err_, ok := err.(cmn.Error); ok {
|
|
_, ok := err_.Data().(errCommitNotFound)
|
|
return ok
|
|
}
|
|
return false
|
|
}
|
|
|
|
//-----------------
|
|
// ErrUnexpectedValidators
|
|
|
|
// ErrUnexpectedValidators indicates a validator set mismatch.
|
|
func ErrUnexpectedValidators(got, want []byte) error {
|
|
return cmn.ErrorWrap(errUnexpectedValidators{
|
|
got: got,
|
|
want: want,
|
|
}, "")
|
|
}
|
|
|
|
func IsErrUnexpectedValidators(err error) bool {
|
|
if err_, ok := err.(cmn.Error); ok {
|
|
_, ok := err_.Data().(errUnexpectedValidators)
|
|
return ok
|
|
}
|
|
return false
|
|
}
|
|
|
|
//-----------------
|
|
// ErrTooMuchChange
|
|
|
|
// ErrTooMuchChange indicates that the underlying validator set was changed by >1/3.
|
|
func ErrTooMuchChange() error {
|
|
return cmn.ErrorWrap(errTooMuchChange{}, "")
|
|
}
|
|
|
|
func IsErrTooMuchChange(err error) bool {
|
|
if err_, ok := err.(cmn.Error); ok {
|
|
_, ok := err_.Data().(errTooMuchChange)
|
|
return ok
|
|
}
|
|
return false
|
|
}
|
|
|
|
//-----------------
|
|
// ErrUnknownValidators
|
|
|
|
// ErrUnknownValidators indicates that some validator set was missing or unknown.
|
|
func ErrUnknownValidators(chainID string, height int64) error {
|
|
return cmn.ErrorWrap(errUnknownValidators{chainID, height}, "")
|
|
}
|
|
|
|
func IsErrUnknownValidators(err error) bool {
|
|
if err_, ok := err.(cmn.Error); ok {
|
|
_, ok := err_.Data().(errUnknownValidators)
|
|
return ok
|
|
}
|
|
return false
|
|
}
|
|
|
|
//-----------------
|
|
// ErrEmptyTree
|
|
|
|
func ErrEmptyTree() error {
|
|
return cmn.ErrorWrap(errEmptyTree{}, "")
|
|
}
|
|
|
|
func IsErrEmptyTree(err error) bool {
|
|
if err_, ok := err.(cmn.Error); ok {
|
|
_, ok := err_.Data().(errEmptyTree)
|
|
return ok
|
|
}
|
|
return false
|
|
}
|