github.com/Finschia/finschia-sdk@v0.48.1/x/auth/signing/verify_test.go (about)

     1  package signing_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
     8  
     9  	"github.com/Finschia/finschia-sdk/codec"
    10  	kmultisig "github.com/Finschia/finschia-sdk/crypto/keys/multisig"
    11  	cryptotypes "github.com/Finschia/finschia-sdk/crypto/types"
    12  	"github.com/Finschia/finschia-sdk/crypto/types/multisig"
    13  	"github.com/Finschia/finschia-sdk/simapp"
    14  	"github.com/Finschia/finschia-sdk/testutil/testdata"
    15  	sdk "github.com/Finschia/finschia-sdk/types"
    16  	"github.com/Finschia/finschia-sdk/x/auth/ante"
    17  	"github.com/Finschia/finschia-sdk/x/auth/legacy/legacytx"
    18  	"github.com/Finschia/finschia-sdk/x/auth/signing"
    19  	"github.com/Finschia/finschia-sdk/x/auth/types"
    20  )
    21  
    22  func TestVerifySignature(t *testing.T) {
    23  	priv, pubKey, addr := testdata.KeyTestPubAddr()
    24  	priv1, pubKey1, addr1 := testdata.KeyTestPubAddr()
    25  
    26  	const (
    27  		memo    = "testmemo"
    28  		chainId = "test-chain"
    29  	)
    30  
    31  	app, ctx := createTestApp(false)
    32  	ctx = ctx.WithBlockHeight(1)
    33  
    34  	cdc := codec.NewLegacyAmino()
    35  	sdk.RegisterLegacyAminoCodec(cdc)
    36  	types.RegisterLegacyAminoCodec(cdc)
    37  	cdc.RegisterConcrete(testdata.TestMsg{}, "cosmos-sdk/Test", nil)
    38  
    39  	acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr)
    40  	_ = app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
    41  	app.AccountKeeper.SetAccount(ctx, acc1)
    42  	balances := sdk.NewCoins(sdk.NewInt64Coin("atom", 200))
    43  	require.NoError(t, simapp.FundAccount(app, ctx, addr, balances))
    44  	acc, err := ante.GetSignerAcc(ctx, app.AccountKeeper, addr)
    45  	require.NoError(t, simapp.FundAccount(app, ctx, addr, balances))
    46  
    47  	msgs := []sdk.Msg{testdata.NewTestMsg(addr)}
    48  	fee := legacytx.NewStdFee(50000, sdk.Coins{sdk.NewInt64Coin("atom", 150)})
    49  	signerData := signing.SignerData{
    50  		ChainID:       chainId,
    51  		AccountNumber: acc.GetAccountNumber(),
    52  		Sequence:      acc.GetSequence(),
    53  	}
    54  	signBytes := legacytx.StdSignBytes(signerData.ChainID, signerData.AccountNumber, signerData.Sequence, 10, fee, msgs, memo)
    55  	signature, err := priv.Sign(signBytes)
    56  	require.NoError(t, err)
    57  
    58  	stdSig := legacytx.StdSignature{PubKey: pubKey, Signature: signature}
    59  	sigV2, err := legacytx.StdSignatureToSignatureV2(cdc, stdSig)
    60  	require.NoError(t, err)
    61  
    62  	handler := MakeTestHandlerMap()
    63  	stdTx := legacytx.NewStdTx(msgs, fee, []legacytx.StdSignature{stdSig}, memo)
    64  	stdTx.TimeoutHeight = 10
    65  	err = signing.VerifySignature(pubKey, signerData, sigV2.Data, handler, stdTx)
    66  	require.NoError(t, err)
    67  
    68  	pkSet := []cryptotypes.PubKey{pubKey, pubKey1}
    69  	multisigKey := kmultisig.NewLegacyAminoPubKey(2, pkSet)
    70  	multisignature := multisig.NewMultisig(2)
    71  	msgs = []sdk.Msg{testdata.NewTestMsg(addr, addr1)}
    72  	multiSignBytes := legacytx.StdSignBytes(signerData.ChainID, signerData.AccountNumber, signerData.Sequence, 10, fee, msgs, memo)
    73  
    74  	sig1, err := priv.Sign(multiSignBytes)
    75  	require.NoError(t, err)
    76  	stdSig1 := legacytx.StdSignature{PubKey: pubKey, Signature: sig1}
    77  	sig1V2, err := legacytx.StdSignatureToSignatureV2(cdc, stdSig1)
    78  	require.NoError(t, err)
    79  
    80  	sig2, err := priv1.Sign(multiSignBytes)
    81  	require.NoError(t, err)
    82  	stdSig2 := legacytx.StdSignature{PubKey: pubKey, Signature: sig2}
    83  	sig2V2, err := legacytx.StdSignatureToSignatureV2(cdc, stdSig2)
    84  	require.NoError(t, err)
    85  
    86  	err = multisig.AddSignatureFromPubKey(multisignature, sig1V2.Data, pkSet[0], pkSet)
    87  	require.NoError(t, err)
    88  	err = multisig.AddSignatureFromPubKey(multisignature, sig2V2.Data, pkSet[1], pkSet)
    89  	require.NoError(t, err)
    90  
    91  	stdTx = legacytx.NewStdTx(msgs, fee, []legacytx.StdSignature{stdSig1, stdSig2}, memo)
    92  	stdTx.TimeoutHeight = 10
    93  
    94  	err = signing.VerifySignature(multisigKey, signerData, multisignature, handler, stdTx)
    95  	require.NoError(t, err)
    96  }
    97  
    98  // returns context and app with params set on account keeper
    99  func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) {
   100  	app := simapp.Setup(isCheckTx)
   101  	ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{})
   102  	app.AccountKeeper.SetParams(ctx, types.DefaultParams())
   103  
   104  	return app, ctx
   105  }