2017-06-28 03:19:22 -07:00
|
|
|
package stack
|
2017-06-27 11:53:06 -07:00
|
|
|
|
|
|
|
import (
|
2017-06-29 06:40:26 -07:00
|
|
|
"github.com/pkg/errors"
|
2017-06-27 11:53:06 -07:00
|
|
|
"github.com/tendermint/basecoin"
|
|
|
|
"github.com/tendermint/basecoin/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2017-06-29 06:40:26 -07:00
|
|
|
NameVoid = "void"
|
|
|
|
NameFail = "fail"
|
|
|
|
NamePanic = "panic"
|
2017-06-27 11:53:06 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
// voidHandler just used to return okay to everything
|
|
|
|
type voidHandler struct{}
|
|
|
|
|
|
|
|
var _ basecoin.Handler = voidHandler{}
|
|
|
|
|
|
|
|
func (_ voidHandler) Name() string {
|
|
|
|
return NameVoid
|
|
|
|
}
|
|
|
|
|
|
|
|
// CheckTx always returns an empty success tx
|
|
|
|
func (_ voidHandler) CheckTx(ctx basecoin.Context, store types.KVStore, tx basecoin.Tx) (res basecoin.Result, err error) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// DeliverTx always returns an empty success tx
|
|
|
|
func (_ voidHandler) DeliverTx(ctx basecoin.Context, store types.KVStore, tx basecoin.Tx) (res basecoin.Result, err error) {
|
|
|
|
return
|
|
|
|
}
|
2017-06-29 06:40:26 -07:00
|
|
|
|
|
|
|
// failHandler always returns an error
|
|
|
|
type failHandler struct {
|
|
|
|
err error
|
|
|
|
}
|
|
|
|
|
|
|
|
var _ basecoin.Handler = failHandler{}
|
|
|
|
|
|
|
|
func (_ failHandler) Name() string {
|
|
|
|
return NameFail
|
|
|
|
}
|
|
|
|
|
|
|
|
// CheckTx always returns the given error
|
|
|
|
func (f failHandler) CheckTx(ctx basecoin.Context, store types.KVStore, tx basecoin.Tx) (res basecoin.Result, err error) {
|
|
|
|
return res, errors.WithStack(f.err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// DeliverTx always returns the given error
|
|
|
|
func (f failHandler) DeliverTx(ctx basecoin.Context, store types.KVStore, tx basecoin.Tx) (res basecoin.Result, err error) {
|
|
|
|
return res, errors.WithStack(f.err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// panicHandler always panics, using the given error (first choice) or msg (fallback)
|
|
|
|
type panicHandler struct {
|
|
|
|
msg string
|
|
|
|
err error
|
|
|
|
}
|
|
|
|
|
|
|
|
var _ basecoin.Handler = panicHandler{}
|
|
|
|
|
|
|
|
func (_ panicHandler) Name() string {
|
|
|
|
return NamePanic
|
|
|
|
}
|
|
|
|
|
|
|
|
// CheckTx always panics
|
|
|
|
func (p panicHandler) CheckTx(ctx basecoin.Context, store types.KVStore, tx basecoin.Tx) (res basecoin.Result, err error) {
|
|
|
|
if p.err != nil {
|
|
|
|
panic(p.err)
|
|
|
|
}
|
|
|
|
panic(p.msg)
|
|
|
|
}
|
|
|
|
|
|
|
|
// DeliverTx always panics
|
|
|
|
func (p panicHandler) DeliverTx(ctx basecoin.Context, store types.KVStore, tx basecoin.Tx) (res basecoin.Result, err error) {
|
|
|
|
if p.err != nil {
|
|
|
|
panic(p.err)
|
|
|
|
}
|
|
|
|
panic(p.msg)
|
|
|
|
}
|