github.com/Finschia/finschia-sdk@v0.48.1/client/tx/legacy_test.go (about)

     1  package tx_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  	"github.com/stretchr/testify/suite"
     8  
     9  	"github.com/Finschia/finschia-sdk/client"
    10  	tx2 "github.com/Finschia/finschia-sdk/client/tx"
    11  	"github.com/Finschia/finschia-sdk/codec"
    12  	"github.com/Finschia/finschia-sdk/simapp"
    13  	"github.com/Finschia/finschia-sdk/simapp/params"
    14  	"github.com/Finschia/finschia-sdk/testutil/testdata"
    15  	sdk "github.com/Finschia/finschia-sdk/types"
    16  	signing2 "github.com/Finschia/finschia-sdk/types/tx/signing"
    17  	"github.com/Finschia/finschia-sdk/x/auth/legacy/legacytx"
    18  	"github.com/Finschia/finschia-sdk/x/auth/tx"
    19  	banktypes "github.com/Finschia/finschia-sdk/x/bank/types"
    20  )
    21  
    22  const (
    23  	memo          = "waboom"
    24  	gas           = uint64(10000)
    25  	timeoutHeight = uint64(5)
    26  )
    27  
    28  var (
    29  	fee            = sdk.NewCoins(sdk.NewInt64Coin("bam", 100))
    30  	_, pub1, addr1 = testdata.KeyTestPubAddr()
    31  	_, _, addr2    = testdata.KeyTestPubAddr()
    32  	sig            = signing2.SignatureV2{
    33  		PubKey: pub1,
    34  		Data: &signing2.SingleSignatureData{
    35  			SignMode:  signing2.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
    36  			Signature: []byte("dummy"),
    37  		},
    38  	}
    39  	msg0 = banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin("wack", 1)))
    40  	msg1 = banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin("wack", 2)))
    41  )
    42  
    43  func buildTestTx(t *testing.T, builder client.TxBuilder) {
    44  	builder.SetMemo(memo)
    45  	builder.SetGasLimit(gas)
    46  	builder.SetFeeAmount(fee)
    47  	err := builder.SetMsgs(msg0, msg1)
    48  	require.NoError(t, err)
    49  	err = builder.SetSignatures(sig)
    50  	require.NoError(t, err)
    51  	builder.SetTimeoutHeight(timeoutHeight)
    52  }
    53  
    54  type TestSuite struct {
    55  	suite.Suite
    56  	encCfg   params.EncodingConfig
    57  	protoCfg client.TxConfig
    58  	aminoCfg client.TxConfig
    59  }
    60  
    61  func (s *TestSuite) SetupSuite() {
    62  	encCfg := simapp.MakeTestEncodingConfig()
    63  	s.encCfg = encCfg
    64  	s.protoCfg = tx.NewTxConfig(codec.NewProtoCodec(encCfg.InterfaceRegistry), tx.DefaultSignModes)
    65  	s.aminoCfg = legacytx.StdTxConfig{Cdc: encCfg.Amino}
    66  }
    67  
    68  func (s *TestSuite) TestCopyTx() {
    69  	// proto -> amino -> proto
    70  	protoBuilder := s.protoCfg.NewTxBuilder()
    71  	buildTestTx(s.T(), protoBuilder)
    72  	aminoBuilder := s.aminoCfg.NewTxBuilder()
    73  	err := tx2.CopyTx(protoBuilder.GetTx(), aminoBuilder, false)
    74  	s.Require().NoError(err)
    75  	protoBuilder2 := s.protoCfg.NewTxBuilder()
    76  	err = tx2.CopyTx(aminoBuilder.GetTx(), protoBuilder2, false)
    77  	s.Require().NoError(err)
    78  	// Check sigs, signers and msgs.
    79  	sigsV2_1, err := protoBuilder.GetTx().GetSignaturesV2()
    80  	s.Require().NoError(err)
    81  	sigsV2_2, err := protoBuilder2.GetTx().GetSignaturesV2()
    82  	s.Require().NoError(err)
    83  	s.Require().Equal(sigsV2_1, sigsV2_2)
    84  	s.Require().Equal(protoBuilder.GetTx().GetSigners(), protoBuilder2.GetTx().GetSigners())
    85  	s.Require().Equal(protoBuilder.GetTx().GetMsgs()[0], protoBuilder2.GetTx().GetMsgs()[0])
    86  	s.Require().Equal(protoBuilder.GetTx().GetMsgs()[1], protoBuilder2.GetTx().GetMsgs()[1])
    87  
    88  	// amino -> proto -> amino
    89  	aminoBuilder = s.aminoCfg.NewTxBuilder()
    90  	buildTestTx(s.T(), aminoBuilder)
    91  	protoBuilder = s.protoCfg.NewTxBuilder()
    92  	err = tx2.CopyTx(aminoBuilder.GetTx(), protoBuilder, false)
    93  	s.Require().NoError(err)
    94  	aminoBuilder2 := s.aminoCfg.NewTxBuilder()
    95  	err = tx2.CopyTx(protoBuilder.GetTx(), aminoBuilder2, false)
    96  	s.Require().NoError(err)
    97  	// Check sigs, signers, and msgs
    98  	sigsV2_1, err = aminoBuilder.GetTx().GetSignaturesV2()
    99  	s.Require().NoError(err)
   100  	sigsV2_2, err = aminoBuilder2.GetTx().GetSignaturesV2()
   101  	s.Require().NoError(err)
   102  	s.Require().Equal(sigsV2_1, sigsV2_2)
   103  	s.Require().Equal(aminoBuilder.GetTx().GetSigners(), aminoBuilder2.GetTx().GetSigners())
   104  	s.Require().Equal(aminoBuilder.GetTx().GetMsgs()[0], aminoBuilder2.GetTx().GetMsgs()[0])
   105  	s.Require().Equal(aminoBuilder.GetTx().GetMsgs()[1], aminoBuilder2.GetTx().GetMsgs()[1])
   106  }
   107  
   108  func (s *TestSuite) TestConvertTxToStdTx() {
   109  	// proto tx
   110  	protoBuilder := s.protoCfg.NewTxBuilder()
   111  	buildTestTx(s.T(), protoBuilder)
   112  	stdTx, err := tx2.ConvertTxToStdTx(s.encCfg.Amino, protoBuilder.GetTx())
   113  	s.Require().NoError(err)
   114  	s.Require().Equal(memo, stdTx.Memo)
   115  	s.Require().Equal(gas, stdTx.Fee.Gas)
   116  	s.Require().Equal(fee, stdTx.Fee.Amount)
   117  	s.Require().Equal(msg0, stdTx.Msgs[0])
   118  	s.Require().Equal(msg1, stdTx.Msgs[1])
   119  	s.Require().Equal(timeoutHeight, stdTx.TimeoutHeight)
   120  	s.Require().Equal(sig.PubKey, stdTx.Signatures[0].PubKey)
   121  	s.Require().Equal(sig.Data.(*signing2.SingleSignatureData).Signature, stdTx.Signatures[0].Signature)
   122  
   123  	// SIGN_MODE_DIRECT should fall back to an unsigned tx
   124  	err = protoBuilder.SetSignatures(signing2.SignatureV2{
   125  		PubKey: pub1,
   126  		Data: &signing2.SingleSignatureData{
   127  			SignMode:  signing2.SignMode_SIGN_MODE_DIRECT,
   128  			Signature: []byte("dummy"),
   129  		},
   130  	})
   131  	s.Require().NoError(err)
   132  	stdTx, err = tx2.ConvertTxToStdTx(s.encCfg.Amino, protoBuilder.GetTx())
   133  	s.Require().NoError(err)
   134  	s.Require().Equal(memo, stdTx.Memo)
   135  	s.Require().Equal(gas, stdTx.Fee.Gas)
   136  	s.Require().Equal(fee, stdTx.Fee.Amount)
   137  	s.Require().Equal(msg0, stdTx.Msgs[0])
   138  	s.Require().Equal(msg1, stdTx.Msgs[1])
   139  	s.Require().Equal(timeoutHeight, stdTx.TimeoutHeight)
   140  	s.Require().Empty(stdTx.Signatures)
   141  
   142  	// std tx
   143  	aminoBuilder := s.aminoCfg.NewTxBuilder()
   144  	buildTestTx(s.T(), aminoBuilder)
   145  	stdTx = aminoBuilder.GetTx().(legacytx.StdTx)
   146  	stdTx2, err := tx2.ConvertTxToStdTx(s.encCfg.Amino, stdTx)
   147  	s.Require().NoError(err)
   148  	s.Require().Equal(stdTx, stdTx2)
   149  }
   150  
   151  func TestTestSuite(t *testing.T) {
   152  	suite.Run(t, new(TestSuite))
   153  }