tmerror now dumps stack trace on %+v as well

This commit is contained in:
Ethan Frey 2017-06-29 20:43:39 +02:00
parent 4eef581396
commit aa0c246f64
2 changed files with 13 additions and 6 deletions

View File

@ -5,6 +5,8 @@ package errors
**/ **/
import ( import (
"fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
abci "github.com/tendermint/abci/types" abci "github.com/tendermint/abci/types"
@ -37,6 +39,17 @@ func (t tmerror) Message() string {
return t.msg return t.msg
} }
// Format handles "%+v" to expose the full stack trace
// concept from pkg/errors
func (t tmerror) Format(s fmt.State, verb rune) {
// special case also show all info
if verb == 'v' && s.Flag('+') {
fmt.Fprintf(s, "%+v\n", t.stackTracer)
}
// always print the normal error
fmt.Fprintf(s, "(%d) %s\n", t.code, t.msg)
}
// Result converts any error into a abci.Result, preserving as much info // Result converts any error into a abci.Result, preserving as much info
// as possible if it was already a TMError // as possible if it was already a TMError
func Result(err error) abci.Result { func Result(err error) abci.Result {

View File

@ -1,8 +1,6 @@
package stack package stack
import ( import (
"fmt"
crypto "github.com/tendermint/go-crypto" crypto "github.com/tendermint/go-crypto"
"github.com/tendermint/basecoin" "github.com/tendermint/basecoin"
@ -53,9 +51,7 @@ func (h Signatures) DeliverTx(ctx basecoin.Context, store types.KVStore, tx base
func addSigners(ctx basecoin.Context, sigs []crypto.PubKey) basecoin.Context { func addSigners(ctx basecoin.Context, sigs []crypto.PubKey) basecoin.Context {
perms := make([]basecoin.Actor, len(sigs)) perms := make([]basecoin.Actor, len(sigs))
fmt.Printf("Add %d signers\n", len(sigs))
for i, s := range sigs { for i, s := range sigs {
fmt.Printf("Add %X\n", s.Address())
perms[i] = SigPerm(s.Address()) perms[i] = SigPerm(s.Address())
} }
// add the signers to the context and continue // add the signers to the context and continue
@ -63,10 +59,8 @@ func addSigners(ctx basecoin.Context, sigs []crypto.PubKey) basecoin.Context {
} }
func getSigners(tx basecoin.Tx) ([]crypto.PubKey, basecoin.Tx, error) { func getSigners(tx basecoin.Tx) ([]crypto.PubKey, basecoin.Tx, error) {
fmt.Println("getSigners")
stx, ok := tx.Unwrap().(Signed) stx, ok := tx.Unwrap().(Signed)
if !ok { if !ok {
fmt.Printf("Not okay: %#v\n", tx)
return nil, basecoin.Tx{}, errors.Unauthorized() return nil, basecoin.Tx{}, errors.Unauthorized()
} }
sig, err := stx.Signers() sig, err := stx.Signers()