github.com/Finschia/finschia-sdk@v0.49.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 t.Helper() 45 builder.SetMemo(memo) 46 builder.SetGasLimit(gas) 47 builder.SetFeeAmount(fee) 48 err := builder.SetMsgs(msg0, msg1) 49 require.NoError(t, err) 50 err = builder.SetSignatures(sig) 51 require.NoError(t, err) 52 builder.SetTimeoutHeight(timeoutHeight) 53 } 54 55 type TestSuite struct { 56 suite.Suite 57 encCfg params.EncodingConfig 58 protoCfg client.TxConfig 59 aminoCfg client.TxConfig 60 } 61 62 func (s *TestSuite) SetupSuite() { 63 encCfg := simapp.MakeTestEncodingConfig() 64 s.encCfg = encCfg 65 s.protoCfg = tx.NewTxConfig(codec.NewProtoCodec(encCfg.InterfaceRegistry), tx.DefaultSignModes) 66 s.aminoCfg = legacytx.StdTxConfig{Cdc: encCfg.Amino} 67 } 68 69 func (s *TestSuite) TestCopyTx() { 70 // proto -> amino -> proto 71 protoBuilder := s.protoCfg.NewTxBuilder() 72 buildTestTx(s.T(), protoBuilder) 73 aminoBuilder := s.aminoCfg.NewTxBuilder() 74 err := tx2.CopyTx(protoBuilder.GetTx(), aminoBuilder, false) 75 s.Require().NoError(err) 76 protoBuilder2 := s.protoCfg.NewTxBuilder() 77 err = tx2.CopyTx(aminoBuilder.GetTx(), protoBuilder2, false) 78 s.Require().NoError(err) 79 // Check sigs, signers and msgs. 80 sigsV2_1, err := protoBuilder.GetTx().GetSignaturesV2() 81 s.Require().NoError(err) 82 sigsV2_2, err := protoBuilder2.GetTx().GetSignaturesV2() 83 s.Require().NoError(err) 84 s.Require().Equal(sigsV2_1, sigsV2_2) 85 s.Require().Equal(protoBuilder.GetTx().GetSigners(), protoBuilder2.GetTx().GetSigners()) 86 s.Require().Equal(protoBuilder.GetTx().GetMsgs()[0], protoBuilder2.GetTx().GetMsgs()[0]) 87 s.Require().Equal(protoBuilder.GetTx().GetMsgs()[1], protoBuilder2.GetTx().GetMsgs()[1]) 88 89 // amino -> proto -> amino 90 aminoBuilder = s.aminoCfg.NewTxBuilder() 91 buildTestTx(s.T(), aminoBuilder) 92 protoBuilder = s.protoCfg.NewTxBuilder() 93 err = tx2.CopyTx(aminoBuilder.GetTx(), protoBuilder, false) 94 s.Require().NoError(err) 95 aminoBuilder2 := s.aminoCfg.NewTxBuilder() 96 err = tx2.CopyTx(protoBuilder.GetTx(), aminoBuilder2, false) 97 s.Require().NoError(err) 98 // Check sigs, signers, and msgs 99 sigsV2_1, err = aminoBuilder.GetTx().GetSignaturesV2() 100 s.Require().NoError(err) 101 sigsV2_2, err = aminoBuilder2.GetTx().GetSignaturesV2() 102 s.Require().NoError(err) 103 s.Require().Equal(sigsV2_1, sigsV2_2) 104 s.Require().Equal(aminoBuilder.GetTx().GetSigners(), aminoBuilder2.GetTx().GetSigners()) 105 s.Require().Equal(aminoBuilder.GetTx().GetMsgs()[0], aminoBuilder2.GetTx().GetMsgs()[0]) 106 s.Require().Equal(aminoBuilder.GetTx().GetMsgs()[1], aminoBuilder2.GetTx().GetMsgs()[1]) 107 } 108 109 func (s *TestSuite) TestConvertTxToStdTx() { 110 // proto tx 111 protoBuilder := s.protoCfg.NewTxBuilder() 112 buildTestTx(s.T(), protoBuilder) 113 stdTx, err := tx2.ConvertTxToStdTx(s.encCfg.Amino, protoBuilder.GetTx()) 114 s.Require().NoError(err) 115 s.Require().Equal(memo, stdTx.Memo) 116 s.Require().Equal(gas, stdTx.Fee.Gas) 117 s.Require().Equal(fee, stdTx.Fee.Amount) 118 s.Require().Equal(msg0, stdTx.Msgs[0]) 119 s.Require().Equal(msg1, stdTx.Msgs[1]) 120 s.Require().Equal(timeoutHeight, stdTx.TimeoutHeight) 121 s.Require().Equal(sig.PubKey, stdTx.Signatures[0].PubKey) 122 s.Require().Equal(sig.Data.(*signing2.SingleSignatureData).Signature, stdTx.Signatures[0].Signature) 123 124 // SIGN_MODE_DIRECT should fall back to an unsigned tx 125 err = protoBuilder.SetSignatures(signing2.SignatureV2{ 126 PubKey: pub1, 127 Data: &signing2.SingleSignatureData{ 128 SignMode: signing2.SignMode_SIGN_MODE_DIRECT, 129 Signature: []byte("dummy"), 130 }, 131 }) 132 s.Require().NoError(err) 133 stdTx, err = tx2.ConvertTxToStdTx(s.encCfg.Amino, protoBuilder.GetTx()) 134 s.Require().NoError(err) 135 s.Require().Equal(memo, stdTx.Memo) 136 s.Require().Equal(gas, stdTx.Fee.Gas) 137 s.Require().Equal(fee, stdTx.Fee.Amount) 138 s.Require().Equal(msg0, stdTx.Msgs[0]) 139 s.Require().Equal(msg1, stdTx.Msgs[1]) 140 s.Require().Equal(timeoutHeight, stdTx.TimeoutHeight) 141 s.Require().Empty(stdTx.Signatures) 142 143 // std tx 144 aminoBuilder := s.aminoCfg.NewTxBuilder() 145 buildTestTx(s.T(), aminoBuilder) 146 stdTx = aminoBuilder.GetTx().(legacytx.StdTx) 147 stdTx2, err := tx2.ConvertTxToStdTx(s.encCfg.Amino, stdTx) 148 s.Require().NoError(err) 149 s.Require().Equal(stdTx, stdTx2) 150 } 151 152 func TestTestSuite(t *testing.T) { 153 suite.Run(t, new(TestSuite)) 154 }