Skip to content

Commit

Permalink
address codec
Browse files Browse the repository at this point in the history
  • Loading branch information
julienrbrt committed Dec 4, 2024
1 parent fb1050a commit 34b81ea
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 34 deletions.
19 changes: 15 additions & 4 deletions ignite/cmd/testnet_inplace.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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) {
Expand All @@ -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
}
Expand All @@ -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)
Expand Down
37 changes: 20 additions & 17 deletions ignite/templates/app/files/app/export.go.plush
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package app
import (
"encoding/json"
"fmt"
"log"

cmtproto "github.com/cometbft/cometbft/api/cometbft/types/v1"

Expand Down Expand Up @@ -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,
Expand All @@ -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
Expand All @@ -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)
}
Expand Down Expand Up @@ -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)
}
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
}
Expand All @@ -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()))
Expand All @@ -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 {
Expand All @@ -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
Expand All @@ -259,5 +263,4 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str
if err != nil {
panic(err)
}
<% } %>
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ type valArgs struct {
newValAddr bytes.HexBytes
newOperatorAddress string
newValPubKey crypto.PubKey
accountsToFund []sdk.AccAddress
accountsToFund []string
upgradeToTrigger string
homeDir string
}
Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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))
Expand Down

0 comments on commit 34b81ea

Please sign in to comment.