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 }