Skip to content

Commit

Permalink
feat: export genesis in simapp v2 (backport #21199) (#21325)
Browse files Browse the repository at this point in the history
Co-authored-by: Randy Grok <98407738+randygrok@users.noreply.github.com>
Co-authored-by: Julien Robert <julien@rbrt.fr>
  • Loading branch information
3 people committed Aug 16, 2024
1 parent ce55ced commit 905e450
Show file tree
Hide file tree
Showing 13 changed files with 388 additions and 48 deletions.
2 changes: 1 addition & 1 deletion server/v2/cometbft/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ require (
cosmossdk.io/errors v1.0.1
cosmossdk.io/log v1.4.0
cosmossdk.io/server/v2 v2.0.0-20240802142126-a26970e547ab // main
cosmossdk.io/server/v2/appmanager v0.0.0-20240731205446-aee9803a0af6 // main
cosmossdk.io/server/v2/appmanager v0.0.0-20240816111545-aeeaca64da2c // main
cosmossdk.io/store/v2 v2.0.0-20240731205446-aee9803a0af6 // main
cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000
github.com/cometbft/cometbft v1.0.0-rc1
Expand Down
4 changes: 2 additions & 2 deletions server/v2/cometbft/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ cosmossdk.io/schema v0.1.1 h1:I0M6pgI7R10nq+/HCQfbO6BsGBZA8sQy+duR1Y3aKcA=
cosmossdk.io/schema v0.1.1/go.mod h1:RDAhxIeNB4bYqAlF4NBJwRrgtnciMcyyg0DOKnhNZQQ=
cosmossdk.io/server/v2 v2.0.0-20240802142126-a26970e547ab h1:6IGp/R/6D4NZT+MKIoM2OkmxZG4UFh32HgwN7mYynvk=
cosmossdk.io/server/v2 v2.0.0-20240802142126-a26970e547ab/go.mod h1:alRmtz2gedZe+goFHbNjkBPNTkShFW6HEeXiyT7hdHM=
cosmossdk.io/server/v2/appmanager v0.0.0-20240731205446-aee9803a0af6 h1:vrHmVjfEjEwQh90dim272gYq7OFILg4Yrv3XzreMpe4=
cosmossdk.io/server/v2/appmanager v0.0.0-20240731205446-aee9803a0af6/go.mod h1:Xm5IOSjw45Sew7fiVckaTCIU5oQPs20V+54NOqR3H4o=
cosmossdk.io/server/v2/appmanager v0.0.0-20240816111545-aeeaca64da2c h1:sxMoOFQvf5g1Wl1D2HidVtLpQhK1YCVq0YiDeT6qTNQ=
cosmossdk.io/server/v2/appmanager v0.0.0-20240816111545-aeeaca64da2c/go.mod h1:fJDDnWJCBRxLLIyu2byqtf3KTRYIVS4OxKwdZozJi20=
cosmossdk.io/store v1.0.0-rc.0.0.20240815194237-858ec2fcb897 h1:o024zaPHYtmUGL2BCX1ns9rfZmMc19U4hQ2CAPt2Xgg=
cosmossdk.io/store v1.0.0-rc.0.0.20240815194237-858ec2fcb897/go.mod h1:Ma4uny4RFegWTbU71fBmkSIoHrWHlLC/JwwgWgehZm4=
cosmossdk.io/store/v2 v2.0.0-20240731205446-aee9803a0af6 h1:/ffIfMKzoCVUI38t5Vq3BNW9U8exRMxK5QgS/ujn0lA=
Expand Down
10 changes: 5 additions & 5 deletions simapp/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ import (
circuittypes "cosmossdk.io/x/circuit/types"
"cosmossdk.io/x/consensus"
consensusparamkeeper "cosmossdk.io/x/consensus/keeper"
consensusparamtypes "cosmossdk.io/x/consensus/types"
consensustypes "cosmossdk.io/x/consensus/types"
distr "cosmossdk.io/x/distribution"
distrkeeper "cosmossdk.io/x/distribution/keeper"
distrtypes "cosmossdk.io/x/distribution/types"
Expand Down Expand Up @@ -262,7 +262,7 @@ func NewSimApp(
keys := storetypes.NewKVStoreKeys(
authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
govtypes.StoreKey, consensusparamtypes.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey,
govtypes.StoreKey, consensustypes.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey,
evidencetypes.StoreKey, circuittypes.StoreKey,
authzkeeper.StoreKey, nftkeeper.StoreKey, group.StoreKey, pooltypes.StoreKey,
accounts.StoreKey, epochstypes.StoreKey,
Expand All @@ -285,7 +285,7 @@ func NewSimApp(
cometService := runtime.NewContextAwareCometInfoService()

// set the BaseApp's parameter store
app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper(appCodec, runtime.NewEnvironment(runtime.NewKVStoreService(keys[consensusparamtypes.StoreKey]), logger.With(log.ModuleKey, "x/consensus")), authtypes.NewModuleAddress(govtypes.ModuleName).String())
app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper(appCodec, runtime.NewEnvironment(runtime.NewKVStoreService(keys[consensustypes.StoreKey]), logger.With(log.ModuleKey, "x/consensus")), authtypes.NewModuleAddress(govtypes.ModuleName).String())
bApp.SetParamStore(app.ConsensusParamsKeeper.ParamsStore)

// add keepers
Expand Down Expand Up @@ -499,7 +499,7 @@ func NewSimApp(
// properly initialized with tokens from genesis accounts.
// NOTE: The genutils module must also occur after auth so that it can access the params from auth.
genesisModuleOrder := []string{
consensusparamtypes.ModuleName,
consensustypes.ModuleName,
accounts.ModuleName,
authtypes.ModuleName,
banktypes.ModuleName,
Expand All @@ -516,7 +516,7 @@ func NewSimApp(
group.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
consensusparamtypes.ModuleName,
consensustypes.ModuleName,
circuittypes.ModuleName,
pooltypes.ModuleName,
epochstypes.ModuleName,
Expand Down
2 changes: 0 additions & 2 deletions simapp/v2/app_di.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"cosmossdk.io/depinject"
"cosmossdk.io/log"
"cosmossdk.io/runtime/v2"
serverv2 "cosmossdk.io/server/v2"
"cosmossdk.io/x/accounts"
authkeeper "cosmossdk.io/x/auth/keeper"
authzkeeper "cosmossdk.io/x/authz/keeper"
Expand Down Expand Up @@ -92,7 +91,6 @@ func NewSimApp[T transaction.Tx](
logger log.Logger,
viper *viper.Viper,
) *SimApp[T] {
viper.Set(serverv2.FlagHome, DefaultNodeHome) // TODO possibly set earlier when viper is created
var (
app = &SimApp[T]{}
appBuilder *runtime.AppBuilder[T]
Expand Down
155 changes: 155 additions & 0 deletions simapp/v2/app_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
package simapp

import (
"context"
"crypto/sha256"
"encoding/json"
"testing"
"time"

"github.com/cometbft/cometbft/types"
"github.com/spf13/viper"
"github.com/stretchr/testify/require"

app2 "cosmossdk.io/core/app"
"cosmossdk.io/core/comet"
context2 "cosmossdk.io/core/context"
"cosmossdk.io/core/store"
"cosmossdk.io/core/transaction"
"cosmossdk.io/log"
sdkmath "cosmossdk.io/math"
serverv2 "cosmossdk.io/server/v2"
comettypes "cosmossdk.io/server/v2/cometbft/types"
"cosmossdk.io/store/v2/db"
authtypes "cosmossdk.io/x/auth/types"
banktypes "cosmossdk.io/x/bank/types"

"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
"github.com/cosmos/cosmos-sdk/testutil/mock"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
sdk "github.com/cosmos/cosmos-sdk/types"
)

func NewTestApp(t *testing.T) (*SimApp[transaction.Tx], context.Context) {
t.Helper()

logger := log.NewTestLogger(t)

vp := viper.New()
vp.Set("store.app-db-backend", string(db.DBTypeGoLevelDB))
vp.Set(serverv2.FlagHome, t.TempDir())

app := NewSimApp[transaction.Tx](logger, vp)
genesis := app.ModuleManager().DefaultGenesis()

privVal := mock.NewPV()
pubKey, err := privVal.GetPubKey()
require.NoError(t, err)

// create validator set with single validator
validator := types.NewValidator(pubKey, 1)
valSet := types.NewValidatorSet([]*types.Validator{validator})

// generate genesis account
senderPrivKey := secp256k1.GenPrivKey()
acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0)
balance := banktypes.Balance{
Address: acc.GetAddress().String(),
Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(100000000000000))),
}

genesis, err = simtestutil.GenesisStateWithValSet(
app.AppCodec(),
genesis,
valSet,
[]authtypes.GenesisAccount{acc},
balance,
)
require.NoError(t, err)

genesisBytes, err := json.Marshal(genesis)
require.NoError(t, err)

st := app.GetStore().(comettypes.Store)
ci, err := st.LastCommitID()
require.NoError(t, err)

bz := sha256.Sum256([]byte{})

ctx := context.Background()

_, newState, err := app.InitGenesis(
ctx,
&app2.BlockRequest[transaction.Tx]{
Time: time.Now(),
Hash: bz[:],
ChainId: "theChain",
AppHash: ci.Hash,
IsGenesis: true,
},
genesisBytes,
nil,
)
require.NoError(t, err)

changes, err := newState.GetStateChanges()
require.NoError(t, err)

_, err = st.Commit(&store.Changeset{Changes: changes})
require.NoError(t, err)

return app, ctx
}

func MoveNextBlock(t *testing.T, app *SimApp[transaction.Tx], ctx context.Context) {
t.Helper()

bz := sha256.Sum256([]byte{})

st := app.GetStore().(comettypes.Store)
ci, err := st.LastCommitID()
require.NoError(t, err)

height, err := app.LoadLatestHeight()
require.NoError(t, err)

// TODO: this is a hack to set the comet info in the context for distribution module dependency.
ctx = context.WithValue(ctx, context2.CometInfoKey, comet.Info{
Evidence: nil,
ValidatorsHash: nil,
ProposerAddress: nil,
LastCommit: comet.CommitInfo{},
})

_, newState, err := app.DeliverBlock(
ctx,
&app2.BlockRequest[transaction.Tx]{
Height: height + 1,
Time: time.Now(),
Hash: bz[:],
AppHash: ci.Hash,
})
require.NoError(t, err)

changes, err := newState.GetStateChanges()
require.NoError(t, err)

_, err = st.Commit(&store.Changeset{Changes: changes})
require.NoError(t, err)
}

func TestSimAppExportAndBlockedAddrs_WithOneBlockProduced(t *testing.T) {
app, ctx := NewTestApp(t)

MoveNextBlock(t, app, ctx)

_, err := app.ExportAppStateAndValidators(nil)
require.NoError(t, err)
}

func TestSimAppExportAndBlockedAddrs_NoBlocksProduced(t *testing.T) {
app, _ := NewTestApp(t)

_, err := app.ExportAppStateAndValidators(nil)
require.NoError(t, err)
}
27 changes: 23 additions & 4 deletions simapp/v2/export.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,29 @@
package simapp

import (
servertypes "github.com/cosmos/cosmos-sdk/server/types"
"context"

v2 "github.com/cosmos/cosmos-sdk/x/genutil/v2"
)

// ExportAppStateAndValidators exports the state of the application for a genesis file.
func (app *SimApp[T]) ExportAppStateAndValidators(forZeroHeight bool, jailAllowedAddrs, modulesToExport []string) (servertypes.ExportedApp, error) {
panic("not implemented")
// ExportAppStateAndValidators exports the state of the application for a genesis
// file.
func (app *SimApp[T]) ExportAppStateAndValidators(jailAllowedAddrs []string) (v2.ExportedApp, error) {
// as if they could withdraw from the start of the next block
ctx := context.Background()

latestHeight, err := app.LoadLatestHeight()
if err != nil {
return v2.ExportedApp{}, err
}

genesis, err := app.ExportGenesis(ctx, latestHeight)
if err != nil {
return v2.ExportedApp{}, err
}

return v2.ExportedApp{
AppState: genesis,
Height: int64(latestHeight),
}, nil
}
8 changes: 4 additions & 4 deletions simapp/v2/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ require (
cosmossdk.io/depinject v1.0.0
cosmossdk.io/log v1.4.0
cosmossdk.io/math v1.3.0
cosmossdk.io/runtime/v2 v2.0.0-20240815194237-858ec2fcb897 // main
cosmossdk.io/runtime/v2 v2.0.0-20240816111545-aeeaca64da2c // main
cosmossdk.io/server/v2 v2.0.0-20240815194237-858ec2fcb897 // main
cosmossdk.io/server/v2/cometbft v0.0.0-00010101000000-000000000000
cosmossdk.io/store/v2 v2.0.0-20240815194237-858ec2fcb897 // indirect; main
cosmossdk.io/store/v2 v2.0.0-20240815194237-858ec2fcb897 // main
cosmossdk.io/tools/confix v0.0.0-00010101000000-000000000000
cosmossdk.io/x/accounts v0.0.0-20240226161501-23359a0b6d91
cosmossdk.io/x/auth v0.0.0-00010101000000-000000000000
Expand All @@ -33,7 +33,7 @@ require (
cosmossdk.io/x/staking v0.0.0-00010101000000-000000000000
cosmossdk.io/x/upgrade v0.0.0-20230613133644-0a778132a60f
github.com/cometbft/cometbft v1.0.0-rc1
github.com/cosmos/cosmos-db v1.0.2
github.com/cosmos/cosmos-db v1.0.2 // indirect
// this version is not used as it is always replaced by the latest Cosmos SDK version
github.com/cosmos/cosmos-sdk v0.53.0
github.com/spf13/cobra v1.8.1
Expand All @@ -56,7 +56,7 @@ require (
cosmossdk.io/errors v1.0.1 // indirect
cosmossdk.io/errors/v2 v2.0.0-20240731132947-df72853b3ca5 // indirect
cosmossdk.io/schema v0.1.1 // indirect
cosmossdk.io/server/v2/appmanager v0.0.0-20240815194237-858ec2fcb897 // indirect; main
cosmossdk.io/server/v2/appmanager v0.0.0-20240816111545-aeeaca64da2c // indirect; main
cosmossdk.io/server/v2/stf v0.0.0-20240815194237-858ec2fcb897 // indirect; main
cosmossdk.io/store v1.1.1-0.20240815194237-858ec2fcb897 // indirect; main
cosmossdk.io/x/accounts/defaults/lockup v0.0.0-20240417181816-5e7aae0db1f5 // indirect
Expand Down
8 changes: 4 additions & 4 deletions simapp/v2/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -210,14 +210,14 @@ cosmossdk.io/log v1.4.0 h1:Ttt9d6fQ0GlktwhcysOeNiIjixW7l0rYBocmoXOb11k=
cosmossdk.io/log v1.4.0/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU=
cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE=
cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k=
cosmossdk.io/runtime/v2 v2.0.0-20240815194237-858ec2fcb897 h1:FoBilDe/aYTPd4SuM8DWCsUM6mfv18v3RPTrNuhK9FM=
cosmossdk.io/runtime/v2 v2.0.0-20240815194237-858ec2fcb897/go.mod h1:bFme7eCFsnWvMRYR23kheaWpSuZGJmx7ucnEE9Bo9PU=
cosmossdk.io/runtime/v2 v2.0.0-20240816111545-aeeaca64da2c h1:G1ZYl1rCI/8aGES3KZBXBBvoBEr3mLdTMATgDQHJ9a4=
cosmossdk.io/runtime/v2 v2.0.0-20240816111545-aeeaca64da2c/go.mod h1:bFme7eCFsnWvMRYR23kheaWpSuZGJmx7ucnEE9Bo9PU=
cosmossdk.io/schema v0.1.1 h1:I0M6pgI7R10nq+/HCQfbO6BsGBZA8sQy+duR1Y3aKcA=
cosmossdk.io/schema v0.1.1/go.mod h1:RDAhxIeNB4bYqAlF4NBJwRrgtnciMcyyg0DOKnhNZQQ=
cosmossdk.io/server/v2 v2.0.0-20240815194237-858ec2fcb897 h1:0+G0h2TUKqZdtr36Xse+HABj6clPQjYCB6afAefc5BA=
cosmossdk.io/server/v2 v2.0.0-20240815194237-858ec2fcb897/go.mod h1:fVFP3ER/Wwg69A2YzGyBLwBD/xNJLrjtaoJhW+WIjAI=
cosmossdk.io/server/v2/appmanager v0.0.0-20240815194237-858ec2fcb897 h1:6nIswqM7uuETXuQXijp65zkn7Z1qBqlscPcSc8pM6UY=
cosmossdk.io/server/v2/appmanager v0.0.0-20240815194237-858ec2fcb897/go.mod h1:fJDDnWJCBRxLLIyu2byqtf3KTRYIVS4OxKwdZozJi20=
cosmossdk.io/server/v2/appmanager v0.0.0-20240816111545-aeeaca64da2c h1:sxMoOFQvf5g1Wl1D2HidVtLpQhK1YCVq0YiDeT6qTNQ=
cosmossdk.io/server/v2/appmanager v0.0.0-20240816111545-aeeaca64da2c/go.mod h1:fJDDnWJCBRxLLIyu2byqtf3KTRYIVS4OxKwdZozJi20=
cosmossdk.io/server/v2/stf v0.0.0-20240815194237-858ec2fcb897 h1:wI05I4dFEGpzyiq50Sl3Wh0Nqo0A/bg2OFIljGEa7ME=
cosmossdk.io/server/v2/stf v0.0.0-20240815194237-858ec2fcb897/go.mod h1:jkbBZd+xq+SjX8L65GjvToWq1MQ0fjvQFp2dwVbhnk0=
cosmossdk.io/store v1.0.0-rc.0.0.20240815194237-858ec2fcb897 h1:o024zaPHYtmUGL2BCX1ns9rfZmMc19U4hQ2CAPt2Xgg=
Expand Down
Loading

0 comments on commit 905e450

Please sign in to comment.