Some checks failed
CodeQL / Analyze (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Has been cancelled
141 lines
5.4 KiB
Go
141 lines
5.4 KiB
Go
package ibctesting
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
|
|
dbm "github.com/cosmos/cosmos-db"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"cosmossdk.io/log"
|
|
sdkmath "cosmossdk.io/math"
|
|
storetypes "cosmossdk.io/store/types"
|
|
|
|
"git.cw.tr/mukan-network/mukan-sdk/baseapp"
|
|
"git.cw.tr/mukan-network/mukan-sdk/client"
|
|
"git.cw.tr/mukan-network/mukan-sdk/codec"
|
|
codectypes "git.cw.tr/mukan-network/mukan-sdk/codec/types"
|
|
cryptocodec "git.cw.tr/mukan-network/mukan-sdk/crypto/codec"
|
|
servertypes "git.cw.tr/mukan-network/mukan-sdk/server/types"
|
|
simtestutil "git.cw.tr/mukan-network/mukan-sdk/testutil/sims"
|
|
sdk "git.cw.tr/mukan-network/mukan-sdk/types"
|
|
authtypes "git.cw.tr/mukan-network/mukan-sdk/x/auth/types"
|
|
banktypes "git.cw.tr/mukan-network/mukan-sdk/x/bank/types"
|
|
stakingtypes "git.cw.tr/mukan-network/mukan-sdk/x/staking/types"
|
|
|
|
abci "git.cw.tr/mukan-network/mukan-consensus/abci/types"
|
|
cmttypes "git.cw.tr/mukan-network/mukan-consensus/types"
|
|
|
|
"git.cw.tr/mukan-network/mukan-ibc/modules/core/keeper"
|
|
"git.cw.tr/mukan-network/mukan-ibc/testing/simapp"
|
|
)
|
|
|
|
var DefaultTestingAppInit AppCreator = SetupTestingApp
|
|
|
|
type TestingApp interface {
|
|
servertypes.ABCI
|
|
|
|
// ibc-go additions
|
|
GetBaseApp() *baseapp.BaseApp
|
|
GetIBCKeeper() *keeper.Keeper
|
|
GetTxConfig() client.TxConfig
|
|
|
|
// Implemented by SimApp
|
|
AppCodec() codec.Codec
|
|
|
|
// Implemented by BaseApp
|
|
LastCommitID() storetypes.CommitID
|
|
LastBlockHeight() int64
|
|
}
|
|
|
|
func SetupTestingApp() (TestingApp, map[string]json.RawMessage) {
|
|
db := dbm.NewMemDB()
|
|
app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, simtestutil.EmptyAppOptions{})
|
|
return app, app.DefaultGenesis()
|
|
}
|
|
|
|
// SetupWithGenesisValSet initializes a new SimApp with a validator set and genesis accounts
|
|
// that also act as delegators. For simplicity, each validator is bonded with a delegation
|
|
// of one consensus engine unit (10^6) in the default token of the simapp from first genesis
|
|
// account. A Nop logger is set in SimApp.
|
|
func SetupWithGenesisValSet(tb testing.TB, valSet *cmttypes.ValidatorSet, genAccs []authtypes.GenesisAccount, chainID string, powerReduction sdkmath.Int, balances ...banktypes.Balance) TestingApp {
|
|
tb.Helper()
|
|
return setupWithGenesisValSet(tb, valSet, genAccs, chainID, powerReduction, DefaultTestingAppInit, balances...)
|
|
}
|
|
|
|
func setupWithGenesisValSet(tb testing.TB, valSet *cmttypes.ValidatorSet, genAccs []authtypes.GenesisAccount, chainID string, powerReduction sdkmath.Int, appCreator AppCreator, balances ...banktypes.Balance) TestingApp {
|
|
tb.Helper()
|
|
app, genesisState := appCreator()
|
|
|
|
// ensure baseapp has a chain-id set before running InitChain
|
|
baseapp.SetChainID(chainID)(app.GetBaseApp())
|
|
|
|
// set genesis accounts
|
|
authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs)
|
|
genesisState[authtypes.ModuleName] = app.AppCodec().MustMarshalJSON(authGenesis)
|
|
|
|
validators := make([]stakingtypes.Validator, 0, len(valSet.Validators))
|
|
delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators))
|
|
|
|
bondAmt := sdk.TokensFromConsensusPower(1, powerReduction)
|
|
|
|
for _, val := range valSet.Validators {
|
|
pk, err := cryptocodec.FromCmtPubKeyInterface(val.PubKey)
|
|
require.NoError(tb, err)
|
|
pkAny, err := codectypes.NewAnyWithValue(pk)
|
|
require.NoError(tb, err)
|
|
validator := stakingtypes.Validator{
|
|
OperatorAddress: sdk.ValAddress(val.Address).String(),
|
|
ConsensusPubkey: pkAny,
|
|
Jailed: false,
|
|
Status: stakingtypes.Bonded,
|
|
Tokens: bondAmt,
|
|
DelegatorShares: sdkmath.LegacyOneDec(),
|
|
Description: stakingtypes.Description{},
|
|
UnbondingHeight: int64(0),
|
|
UnbondingTime: time.Unix(0, 0).UTC(),
|
|
Commission: stakingtypes.NewCommission(sdkmath.LegacyZeroDec(), sdkmath.LegacyZeroDec(), sdkmath.LegacyZeroDec()),
|
|
MinSelfDelegation: sdkmath.ZeroInt(),
|
|
}
|
|
|
|
validators = append(validators, validator)
|
|
delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress().String(), sdk.ValAddress(val.Address).String(), sdkmath.LegacyOneDec()))
|
|
}
|
|
|
|
// set validators and delegations
|
|
var stakingGenesis stakingtypes.GenesisState
|
|
app.AppCodec().MustUnmarshalJSON(genesisState[stakingtypes.ModuleName], &stakingGenesis)
|
|
|
|
bondDenom := stakingGenesis.Params.BondDenom
|
|
|
|
// add bonded amount to bonded pool module account
|
|
balances = append(balances, banktypes.Balance{
|
|
Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(),
|
|
Coins: sdk.Coins{sdk.NewCoin(bondDenom, bondAmt.Mul(sdkmath.NewInt(int64(len(valSet.Validators)))))},
|
|
})
|
|
|
|
// set validators and delegations
|
|
stakingGenesis = *stakingtypes.NewGenesisState(stakingGenesis.Params, validators, delegations)
|
|
genesisState[stakingtypes.ModuleName] = app.AppCodec().MustMarshalJSON(&stakingGenesis)
|
|
|
|
// update total supply
|
|
bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, sdk.NewCoins(), []banktypes.Metadata{}, []banktypes.SendEnabled{})
|
|
genesisState[banktypes.ModuleName] = app.AppCodec().MustMarshalJSON(bankGenesis)
|
|
|
|
stateBytes, err := json.MarshalIndent(genesisState, "", " ")
|
|
require.NoError(tb, err)
|
|
|
|
// init chain will set the validator set and initialize the genesis accounts
|
|
_, err = app.InitChain(
|
|
&abci.RequestInitChain{
|
|
ChainId: chainID,
|
|
Validators: []abci.ValidatorUpdate{},
|
|
AppStateBytes: stateBytes,
|
|
ConsensusParams: simtestutil.DefaultConsensusParams,
|
|
},
|
|
)
|
|
require.NoError(tb, err)
|
|
|
|
return app
|
|
}
|