github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/ante/utils_test.go (about) 1 package ante_test 2 3 import ( 4 "fmt" 5 "math/big" 6 "testing" 7 "time" 8 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client" 10 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 11 types2 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types" 12 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/simapp/helpers" 13 ibcmsg "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/ibc-adapter" 14 ibc_tx "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/ibc-tx" 15 clienttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/02-client/types" 16 channeltypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/04-channel/types" 17 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/mock" 18 helpers2 "github.com/fibonacci-chain/fbc/libs/ibc-go/testing/simapp/helpers" 19 20 "github.com/stretchr/testify/suite" 21 22 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 23 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 24 25 "github.com/fibonacci-chain/fbc/app" 26 ante "github.com/fibonacci-chain/fbc/app/ante" 27 appconfig "github.com/fibonacci-chain/fbc/app/config" 28 "github.com/fibonacci-chain/fbc/app/crypto/ethsecp256k1" 29 fbchain "github.com/fibonacci-chain/fbc/app/types" 30 evmtypes "github.com/fibonacci-chain/fbc/x/evm/types" 31 32 ethcrypto "github.com/ethereum/go-ethereum/crypto" 33 34 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 35 tmcrypto "github.com/fibonacci-chain/fbc/libs/tendermint/crypto" 36 ) 37 38 type AnteTestSuite struct { 39 suite.Suite 40 41 ctx sdk.Context 42 app *app.FBChainApp 43 anteHandler sdk.AnteHandler 44 } 45 46 func (suite *AnteTestSuite) SetupTest() { 47 checkTx := false 48 chainId := "fbchain-3" 49 50 suite.app = app.Setup(checkTx) 51 suite.app.Codec().RegisterConcrete(&sdk.TestMsg{}, "test/TestMsg", nil) 52 53 suite.ctx = suite.app.BaseApp.NewContext(checkTx, abci.Header{Height: 1, ChainID: chainId, Time: time.Now().UTC()}) 54 suite.app.EvmKeeper.SetParams(suite.ctx, evmtypes.DefaultParams()) 55 56 suite.anteHandler = ante.NewAnteHandler(suite.app.AccountKeeper, suite.app.EvmKeeper, suite.app.SupplyKeeper, nil, suite.app.WasmHandler, suite.app.IBCKeeper, suite.app.StakingKeeper, suite.app.ParamsKeeper) 57 58 err := fbchain.SetChainId(chainId) 59 suite.Nil(err) 60 61 appconfig.RegisterDynamicConfig(suite.app.Logger()) 62 } 63 64 func TestAnteTestSuite(t *testing.T) { 65 suite.Run(t, new(AnteTestSuite)) 66 } 67 68 func newTestMsg(addrs ...sdk.AccAddress) *sdk.TestMsg { 69 return sdk.NewTestMsg(addrs...) 70 } 71 72 func newTestCoins() sdk.Coins { 73 return sdk.NewCoins(fbchain.NewPhotonCoinInt64(500000000)) 74 } 75 76 func newTestStdFee() auth.StdFee { 77 return auth.NewStdFee(220000, sdk.NewCoins(fbchain.NewPhotonCoinInt64(150))) 78 } 79 80 // GenerateAddress generates an Ethereum address. 81 func newTestAddrKey() (sdk.AccAddress, tmcrypto.PrivKey) { 82 privkey, _ := ethsecp256k1.GenerateKey() 83 addr := ethcrypto.PubkeyToAddress(privkey.ToECDSA().PublicKey) 84 85 return sdk.AccAddress(addr.Bytes()), privkey 86 } 87 88 func newTestSDKTx( 89 ctx sdk.Context, msgs []sdk.Msg, privs []tmcrypto.PrivKey, 90 accNums []uint64, seqs []uint64, fee auth.StdFee, 91 ) sdk.Tx { 92 93 sigs := make([]auth.StdSignature, len(privs)) 94 for i, priv := range privs { 95 signBytes := auth.StdSignBytes(ctx.ChainID(), accNums[i], seqs[i], fee, msgs, "") 96 97 sig, err := priv.Sign(signBytes) 98 if err != nil { 99 panic(err) 100 } 101 102 sigs[i] = auth.StdSignature{ 103 PubKey: priv.PubKey(), 104 Signature: sig, 105 } 106 } 107 108 return auth.NewStdTx(msgs, fee, sigs, "") 109 } 110 111 func newTestEthTx(ctx sdk.Context, msg *evmtypes.MsgEthereumTx, priv tmcrypto.PrivKey) (sdk.Tx, error) { 112 chainIDEpoch, err := fbchain.ParseChainID(ctx.ChainID()) 113 if err != nil { 114 return nil, err 115 } 116 117 privkey, ok := priv.(ethsecp256k1.PrivKey) 118 if !ok { 119 return nil, fmt.Errorf("invalid private key type: %T", priv) 120 } 121 122 if err := msg.Sign(chainIDEpoch, privkey.ToECDSA()); err != nil { 123 return nil, err 124 } 125 126 return msg, nil 127 } 128 129 func newTxConfig() client.TxConfig { 130 interfaceRegistry := types2.NewInterfaceRegistry() 131 marshaler := codec.NewProtoCodec(interfaceRegistry) 132 return ibc_tx.NewTxConfig(marshaler, ibc_tx.DefaultSignModes) 133 } 134 135 func mockIbcTx(accNum, seqNum []uint64, priv tmcrypto.PrivKey, chainId string, addr sdk.AccAddress) *sdk.Tx { 136 txConfig := newTxConfig() 137 packet := channeltypes.NewPacket([]byte(mock.MockPacketData), 1, 138 "transfer", "channel-0", 139 "transfer", "channel-1", 140 clienttypes.NewHeight(1, 0), 0) 141 msgs := []ibcmsg.Msg{channeltypes.NewMsgRecvPacket(packet, []byte("proof"), clienttypes.NewHeight(0, 1), addr.String())} 142 ibcTx, err := helpers2.GenTx( 143 txConfig, 144 msgs, 145 sdk.CoinAdapters{sdk.NewCoinAdapter(sdk.DefaultIbcWei, sdk.NewIntFromBigInt(big.NewInt(0)))}, 146 helpers.DefaultGenTxGas, 147 chainId, 148 accNum, 149 seqNum, 150 1, 151 priv, 152 ) 153 if err != nil { 154 return nil 155 } 156 return &ibcTx 157 }