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  }