diff --git a/ignite/cmd/testnet_inplace.go b/ignite/cmd/testnet_inplace.go index dd9bc6d77b..af6f62f16b 100644 --- a/ignite/cmd/testnet_inplace.go +++ b/ignite/cmd/testnet_inplace.go @@ -5,6 +5,7 @@ import ( "github.com/spf13/cobra" + "github.com/cosmos/cosmos-sdk/codec/address" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ignite/cli/v29/ignite/pkg/cliui" @@ -91,6 +92,10 @@ func testnetInplace(cmd *cobra.Command, session *cliui.Session) error { accounts string accErr *cosmosaccount.AccountDoesNotExistError ) + + prefix := getAddressPrefix(cmd) + addressCodec := address.NewBech32Codec(prefix) + valAddressCodec := address.NewBech32Codec(prefix + "valoper") for _, acc := range cfg.Accounts { sdkAcc, err := ca.GetByName(acc.Name) if errors.As(err, &accErr) { @@ -100,19 +105,20 @@ func testnetInplace(cmd *cobra.Command, session *cliui.Session) error { return err } - sdkAddr, err := sdkAcc.Address(getAddressPrefix(cmd)) + sdkAddr, err := sdkAcc.Address(prefix) if err != nil { return err } if len(cfg.Validators) == 0 { return errors.Errorf("no validators found for account %s", sdkAcc.Name) } + if cfg.Validators[0].Name == acc.Name { - accAddr, err := sdk.AccAddressFromBech32(sdkAddr) + accAddr, err := addressCodec.StringToBytes(sdkAddr) if err != nil { return err } - operatorAddress = sdk.ValAddress(accAddr) + operatorAddress = accAddr } accounts = accounts + "," + sdkAddr } @@ -122,9 +128,14 @@ func testnetInplace(cmd *cobra.Command, session *cliui.Session) error { return err } + operatorAddressStr, err := valAddressCodec.BytesToString(operatorAddress) + if err != nil { + return err + } + args := chain.InPlaceArgs{ NewChainID: fmt.Sprintf("local%s", chainID), - NewOperatorAddress: operatorAddress.String(), + NewOperatorAddress: operatorAddressStr, AccountsToFund: accounts, } return c.TestnetInPlace(cmd.Context(), args) diff --git a/ignite/templates/app/files/app/export.go.plush b/ignite/templates/app/files/app/export.go.plush index 85434215b0..5ef5bfd456 100644 --- a/ignite/templates/app/files/app/export.go.plush +++ b/ignite/templates/app/files/app/export.go.plush @@ -3,7 +3,6 @@ package app import ( "encoding/json" "fmt" - "log" cmtproto "github.com/cometbft/cometbft/api/cometbft/types/v1" @@ -42,9 +41,6 @@ func (app *App) ExportAppStateAndValidators(forZeroHeight bool, jailAllowedAddrs } validators, err := staking.WriteValidators(ctx, app.StakingKeeper) - if err != nil { - return servertypes.ExportedApp{}, err - } return servertypes.ExportedApp{ AppState: appState, @@ -54,7 +50,7 @@ func (app *App) ExportAppStateAndValidators(forZeroHeight bool, jailAllowedAddrs }, err } -// prepare for fresh start at zero height +// prepForZeroHeightGenesis prepares for fresh start at zero height // NOTE zero height genesis is a temporary feature which will be deprecated // // in favor of export at a block height @@ -69,7 +65,7 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str allowedAddrsMap := make(map[string]bool) for _, addr := range jailAllowedAddrs { - _, err := sdk.ValAddressFromBech32(addr) + _, err := app.InterfaceRegistry().SigningContext().ValidatorAddressCodec().StringToBytes(addr) if err != nil { panic(err) } @@ -98,12 +94,15 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str } for _, delegation := range dels { - valAddr, err := sdk.ValAddressFromBech32(delegation.ValidatorAddress) + valAddr, err := app.InterfaceRegistry().SigningContext().ValidatorAddressCodec().StringToBytes(delegation.ValidatorAddress) if err != nil { panic(err) } - delAddr := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress) + delAddr, err := app.InterfaceRegistry().SigningContext().AddressCodec().StringToBytes(delegation.DelegatorAddress) + if err != nil { + panic(err) + } _, _ = app.DistrKeeper.WithdrawDelegationRewards(ctx, delAddr, valAddr) } @@ -155,11 +154,14 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str // reinitialize all delegations for _, del := range dels { - valAddr, err := sdk.ValAddressFromBech32(del.ValidatorAddress) + valAddr, err := app.InterfaceRegistry().SigningContext().ValidatorAddressCodec().StringToBytes(del.ValidatorAddress) + if err != nil { + panic(err) + } + delAddr, err := app.InterfaceRegistry().SigningContext().AddressCodec().StringToBytes(del.DelegatorAddress) if err != nil { panic(err) } - delAddr := sdk.MustAccAddressFromBech32(del.DelegatorAddress) if err := app.DistrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr); err != nil { // never called as BeforeDelegationCreated always returns nil @@ -196,7 +198,7 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str err = app.StakingKeeper.UnbondingDelegations.Walk( ctx, nil, - func(key collections.Pair[[]byte, []byte], ubd stakingtypes.UnbondingDelegation) (stop bool, err error) { + func(_ collections.Pair[[]byte, []byte], ubd stakingtypes.UnbondingDelegation) (stop bool, err error) { for i := range ubd.Entries { ubd.Entries[i].CreationHeight = 0 } @@ -214,7 +216,6 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str // update bond intra-tx counters. store := ctx.KVStore(app.GetKey(stakingtypes.StoreKey)) iter := storetypes.KVStoreReversePrefixIterator(store, stakingtypes.ValidatorsKey) - counter := int16(0) for ; iter.Valid(); iter.Next() { addr := sdk.ValAddress(stakingtypes.AddressFromValidatorsKey(iter.Key())) @@ -223,15 +224,19 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str panic("expected validator, not found") } + valAddr, err := app.StakingKeeper.ValidatorAddressCodec().BytesToString(addr) + if err != nil { + panic(err) + } + validator.UnbondingHeight = 0 - if applyAllowedAddrs && !allowedAddrsMap[addr.String()] { + if applyAllowedAddrs && !allowedAddrsMap[valAddr] { validator.Jailed = true } if err = app.StakingKeeper.SetValidator(ctx, validator); err != nil { panic(err) } - counter++ } if err := iter.Close(); err != nil { @@ -241,10 +246,9 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str _, err = app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) if err != nil { - log.Fatal(err) + panic(err) } -<%= if (!IsChainMinimal) { %> /* Handle slashing state. */ // reset start height on signing infos @@ -259,5 +263,4 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str if err != nil { panic(err) } -<% } %> } diff --git a/ignite/templates/app/files/cmd/{{binaryNamePrefix}}d/cmd/testnet.go.plush b/ignite/templates/app/files/cmd/{{binaryNamePrefix}}d/cmd/testnet.go.plush index 4acf1551ca..26528a6552 100644 --- a/ignite/templates/app/files/cmd/{{binaryNamePrefix}}d/cmd/testnet.go.plush +++ b/ignite/templates/app/files/cmd/{{binaryNamePrefix}}d/cmd/testnet.go.plush @@ -44,7 +44,7 @@ type valArgs struct { newValAddr bytes.HexBytes newOperatorAddress string newValPubKey crypto.PubKey - accountsToFund []sdk.AccAddress + accountsToFund []string upgradeToTrigger string homeDir string } @@ -205,12 +205,20 @@ func initAppForTestnet(app *app.App, args valArgs) *app.App { defaultCoins := sdk.NewCoins(sdk.NewInt64Coin(bondDenom, 1000000000)) // Fund local accounts - for _, account := range args.accountsToFund { + // Fund local accounts + for _, accountStr := range args.accountsToFund { err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, defaultCoins) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } + + account, err := app.AuthKeeper.AddressCodec().StringToBytes(accountStr) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } + err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, account, defaultCoins) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) @@ -246,18 +254,9 @@ func getCommandArgs(appOpts servertypes.AppOptions) (valArgs, error) { } args.upgradeToTrigger = upgradeToTrigger - // validate and set accounts to fund + // parsing and set accounts to fund accountsString := cast.ToString(appOpts.Get(flagAccountsToFund)) - - for _, account := range strings.Split(accountsString, ",") { - if account != "" { - addr, err := sdk.AccAddressFromBech32(account) - if err != nil { - return args, fmt.Errorf("invalid bech32 address format %w", err) - } - args.accountsToFund = append(args.accountsToFund, addr) - } - } + args.accountsToFund = append(args.accountsToFund, strings.Split(accountsString, ",")...) // home dir homeDir := cast.ToString(appOpts.Get(flags.FlagHome))