forked from cerc-io/laconicd-deprecated
simplified sig verification, started handler tests
This commit is contained in:
+3
-6
@@ -9,8 +9,6 @@ import (
|
||||
|
||||
"github.com/cosmos/ethermint/types"
|
||||
ethcmn "github.com/ethereum/go-ethereum/common"
|
||||
|
||||
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -93,10 +91,9 @@ func handleEthTx(sdkCtx sdk.Context, tx sdk.Tx, am auth.AccountMapper) (sdk.Cont
|
||||
}
|
||||
|
||||
// validate signature
|
||||
gethTx := ethTx.ConvertTx(chainID)
|
||||
signer := ethtypes.NewEIP155Signer(chainID)
|
||||
sdkCtx.GasMeter().ConsumeGas(verifySigCost, "ante verify")
|
||||
_, err := ethTx.VerifySig(chainID)
|
||||
|
||||
_, err := signer.Sender(&gethTx)
|
||||
if err != nil {
|
||||
return sdkCtx, sdk.ErrUnauthorized("signature verification failed").Result(), true
|
||||
}
|
||||
@@ -125,7 +122,7 @@ func handleEmbeddedTx(sdkCtx sdk.Context, tx sdk.Tx, am auth.AccountMapper) (sdk
|
||||
|
||||
signerAcc, err := validateSignature(sdkCtx, etx, signer, sig, am)
|
||||
if err.Code() != sdk.CodeOK {
|
||||
return sdkCtx, err.Result(), false
|
||||
return sdkCtx, err.Result(), true
|
||||
}
|
||||
|
||||
// TODO: Fees!
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"math/big"
|
||||
"crypto/ecdsa"
|
||||
|
||||
"github.com/cosmos/ethermint/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
|
||||
ethcmn "github.com/ethereum/go-ethereum/common"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestBadSig(t *testing.T) {
|
||||
tx := types.NewTestEthTxs(types.TestChainID, []*ecdsa.PrivateKey{types.TestPrivKey1}, []ethcmn.Address{types.TestAddr1})[0]
|
||||
|
||||
tx.Data.Signature = types.NewEthSignature(new(big.Int), new(big.Int), new(big.Int))
|
||||
|
||||
ms, key := SetupMultiStore()
|
||||
ctx := sdk.NewContext(ms, abci.Header{ChainID: types.TestChainID.String()}, false, nil)
|
||||
|
||||
accountMapper := auth.NewAccountMapper(types.NewTestCodec(), key, auth.ProtoBaseAccount)
|
||||
handler := AnteHandler(accountMapper)
|
||||
|
||||
_, res, abort := handler(ctx, tx)
|
||||
|
||||
require.True(t, abort, "Antehandler did not abort")
|
||||
require.Equal(t, sdk.ABCICodeType(0x10004), res.Code, "Result is OK on bad tx")
|
||||
|
||||
}
|
||||
|
||||
func TestInsufficientGas(t *testing.T) {
|
||||
tx := types.NewTestEthTxs(types.TestChainID, []*ecdsa.PrivateKey{types.TestPrivKey1}, []ethcmn.Address{types.TestAddr1})[0]
|
||||
|
||||
tx.Data.GasLimit = 0
|
||||
|
||||
ms, key := SetupMultiStore()
|
||||
ctx := sdk.NewContext(ms, abci.Header{ChainID: types.TestChainID.String()}, false, nil)
|
||||
|
||||
accountMapper := auth.NewAccountMapper(types.NewTestCodec(), key, auth.ProtoBaseAccount)
|
||||
handler := AnteHandler(accountMapper)
|
||||
|
||||
_, res, abort := handler(ctx, tx)
|
||||
|
||||
require.True(t, abort, "Antehandler did not abort")
|
||||
require.Equal(t, sdk.ABCICodeType(0x1000c), res.Code, "Result is OK on bad tx")
|
||||
|
||||
}
|
||||
|
||||
func TestWrongNonce(t *testing.T) {
|
||||
tx := types.NewTestEthTxs(types.TestChainID, []*ecdsa.PrivateKey{types.TestPrivKey1}, []ethcmn.Address{types.TestAddr1})[0]
|
||||
|
||||
tx.Data.AccountNonce = 12
|
||||
|
||||
ms, key := SetupMultiStore()
|
||||
ctx := sdk.NewContext(ms, abci.Header{ChainID: types.TestChainID.String()}, false, nil)
|
||||
|
||||
accountMapper := auth.NewAccountMapper(types.NewTestCodec(), key, auth.ProtoBaseAccount)
|
||||
handler := AnteHandler(accountMapper)
|
||||
|
||||
_, res, abort := handler(ctx, tx)
|
||||
|
||||
require.True(t, abort, "Antehandler did not abort")
|
||||
require.Equal(t, sdk.ABCICodeType(0x10004), res.Code, "Result is OK on bad tx")
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"github.com/cosmos/cosmos-sdk/store"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
dbm "github.com/tendermint/tendermint/libs/db"
|
||||
)
|
||||
|
||||
func SetupMultiStore() (sdk.MultiStore, *sdk.KVStoreKey) {
|
||||
db := dbm.NewMemDB()
|
||||
capKey := sdk.NewKVStoreKey("capkey")
|
||||
ms := store.NewCommitMultiStore(db)
|
||||
ms.MountStoreWithDB(capKey, sdk.StoreTypeIAVL, db)
|
||||
ms.LoadLatestVersion()
|
||||
return ms, capKey
|
||||
}
|
||||
Reference in New Issue
Block a user