forked from cerc-io/laconicd-deprecated
error migration (#254)
* migrate errors * ante handler errors * return err instead of panic
This commit is contained in:
+33
-32
@@ -7,7 +7,7 @@ import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
|
||||
"github.com/cosmos/ethermint/crypto"
|
||||
@@ -38,17 +38,17 @@ func NewAnteHandler(ak auth.AccountKeeper, sk types.SupplyKeeper) sdk.AnteHandle
|
||||
switch castTx := tx.(type) {
|
||||
case auth.StdTx:
|
||||
stdAnte := sdk.ChainAnteDecorators(
|
||||
ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first
|
||||
ante.NewMempoolFeeDecorator(),
|
||||
ante.NewValidateBasicDecorator(),
|
||||
ante.NewValidateMemoDecorator(ak),
|
||||
ante.NewConsumeGasForTxSizeDecorator(ak),
|
||||
ante.NewSetPubKeyDecorator(ak), // SetPubKeyDecorator must be called before all signature verification decorators
|
||||
ante.NewValidateSigCountDecorator(ak),
|
||||
ante.NewDeductFeeDecorator(ak, sk),
|
||||
ante.NewSigGasConsumeDecorator(ak, sigGasConsumer),
|
||||
ante.NewSigVerificationDecorator(ak),
|
||||
ante.NewIncrementSequenceDecorator(ak), // innermost AnteDecorator
|
||||
authante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first
|
||||
authante.NewMempoolFeeDecorator(),
|
||||
authante.NewValidateBasicDecorator(),
|
||||
authante.NewValidateMemoDecorator(ak),
|
||||
authante.NewConsumeGasForTxSizeDecorator(ak),
|
||||
authante.NewSetPubKeyDecorator(ak), // SetPubKeyDecorator must be called before all signature verification decorators
|
||||
authante.NewValidateSigCountDecorator(ak),
|
||||
authante.NewDeductFeeDecorator(ak, sk),
|
||||
authante.NewSigGasConsumeDecorator(ak, sigGasConsumer),
|
||||
authante.NewSigVerificationDecorator(ak),
|
||||
authante.NewIncrementSequenceDecorator(ak), // innermost AnteDecorator
|
||||
)
|
||||
|
||||
return stdAnte(ctx, tx, sim)
|
||||
@@ -57,7 +57,7 @@ func NewAnteHandler(ak auth.AccountKeeper, sk types.SupplyKeeper) sdk.AnteHandle
|
||||
return ethAnteHandler(ctx, ak, sk, &castTx, sim)
|
||||
|
||||
default:
|
||||
return ctx, sdk.ErrInternal(fmt.Sprintf("transaction type invalid: %T", tx))
|
||||
return ctx, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "invalid transaction type: %T", tx)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,10 +122,11 @@ func ethAnteHandler(
|
||||
if r := recover(); r != nil {
|
||||
switch rType := r.(type) {
|
||||
case sdk.ErrorOutOfGas:
|
||||
log := fmt.Sprintf("out of gas in location: %v; gasUsed: %d",
|
||||
err = sdkerrors.Wrapf(
|
||||
sdkerrors.ErrOutOfGas,
|
||||
"out of gas in location: %v; gasUsed: %d",
|
||||
rType.Descriptor, ctx.GasMeter().GasConsumed(),
|
||||
)
|
||||
err = sdk.ErrOutOfGas(log)
|
||||
default:
|
||||
panic(r)
|
||||
}
|
||||
@@ -201,13 +202,13 @@ func validateSignature(ctx sdk.Context, ethTxMsg *evmtypes.MsgEthereumTx) (sdk.A
|
||||
// parse the chainID from a string to a base-10 integer
|
||||
chainID, ok := new(big.Int).SetString(ctx.ChainID(), 10)
|
||||
if !ok {
|
||||
return nil, emint.ErrInvalidChainID(fmt.Sprintf("invalid chainID: %s", ctx.ChainID()))
|
||||
return nil, sdkerrors.Wrap(emint.ErrInvalidChainID, ctx.ChainID())
|
||||
}
|
||||
|
||||
// validate sender/signature
|
||||
signer, err := ethTxMsg.VerifySig(chainID)
|
||||
if err != nil {
|
||||
return nil, sdk.ErrUnauthorized(fmt.Sprintf("signature verification failed: %s", err))
|
||||
return nil, sdkerrors.Wrap(err, "signature verification failed")
|
||||
}
|
||||
|
||||
return sdk.AccAddress(signer.Bytes()), nil
|
||||
@@ -221,12 +222,12 @@ func validateSignature(ctx sdk.Context, ethTxMsg *evmtypes.MsgEthereumTx) (sdk.A
|
||||
func validateIntrinsicGas(ethTxMsg *evmtypes.MsgEthereumTx) error {
|
||||
gas, err := ethcore.IntrinsicGas(ethTxMsg.Data.Payload, ethTxMsg.To() == nil, true)
|
||||
if err != nil {
|
||||
return sdk.ErrInternal(fmt.Sprintf("failed to compute intrinsic gas cost: %s", err))
|
||||
return sdkerrors.Wrap(err, "failed to compute intrinsic gas cost")
|
||||
}
|
||||
|
||||
if ethTxMsg.Data.GasLimit < gas {
|
||||
return sdk.ErrInternal(
|
||||
fmt.Sprintf("intrinsic gas too low: %d < %d", ethTxMsg.Data.GasLimit, gas),
|
||||
return fmt.Errorf(
|
||||
"intrinsic gas too low: %d < %d", ethTxMsg.Data.GasLimit, gas,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -243,10 +244,9 @@ func validateAccount(
|
||||
|
||||
// on InitChain make sure account number == 0
|
||||
if ctx.BlockHeight() == 0 && acc.GetAccountNumber() != 0 {
|
||||
return sdk.ErrInternal(
|
||||
fmt.Sprintf(
|
||||
"invalid account number for height zero (got %d)", acc.GetAccountNumber(),
|
||||
),
|
||||
return sdkerrors.Wrapf(
|
||||
sdkerrors.ErrInvalidSequence,
|
||||
"invalid account number for height zero (got %d)", acc.GetAccountNumber(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -258,8 +258,9 @@ func validateAccount(
|
||||
// validate sender has enough funds
|
||||
balance := acc.GetCoins().AmountOf(emint.DenomDefault)
|
||||
if balance.BigInt().Cmp(ethTxMsg.Cost()) < 0 {
|
||||
return sdk.ErrInsufficientFunds(
|
||||
fmt.Sprintf("insufficient funds: %s < %s", balance, ethTxMsg.Cost()),
|
||||
return sdkerrors.Wrapf(
|
||||
sdkerrors.ErrInsufficientFunds,
|
||||
"%s < %s%s", balance.String(), ethTxMsg.Cost().String(), emint.DenomDefault,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -274,8 +275,9 @@ func checkNonce(
|
||||
// current nonce).
|
||||
seq := acc.GetSequence()
|
||||
if ethTxMsg.Data.AccountNonce != seq {
|
||||
return sdk.ErrInvalidSequence(
|
||||
fmt.Sprintf("invalid nonce; got %d, expected %d", ethTxMsg.Data.AccountNonce, seq),
|
||||
return sdkerrors.Wrapf(
|
||||
sdkerrors.ErrInvalidSequence,
|
||||
"got nonce %d, expected %d", ethTxMsg.Data.AccountNonce, seq,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -302,10 +304,9 @@ func ensureSufficientMempoolFees(ctx sdk.Context, ethTxMsg *evmtypes.MsgEthereum
|
||||
// it is assumed that the minimum fees will only include the single valid denom
|
||||
if !ctx.MinGasPrices().IsZero() && !allGTE {
|
||||
// reject the transaction that does not meet the minimum fee
|
||||
return sdk.ErrInsufficientFee(
|
||||
fmt.Sprintf(
|
||||
"insufficient fee, got: %q required: %q", fee, ctx.MinGasPrices(),
|
||||
),
|
||||
return sdkerrors.Wrapf(
|
||||
sdkerrors.ErrInsufficientFee,
|
||||
"got: %q required: %q", fee, ctx.MinGasPrices(),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user