Skip to content

Commit

Permalink
refactor: update FX denom in bank module (#923)
Browse files Browse the repository at this point in the history
  • Loading branch information
zakir-code authored Jan 20, 2025
1 parent 0d36177 commit 73af7fa
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 9 deletions.
26 changes: 24 additions & 2 deletions app/upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"math/big"
"os"
"path/filepath"
"strings"
"testing"

"cosmossdk.io/collections"
Expand Down Expand Up @@ -629,7 +628,7 @@ func checkPundiAIFXERC20Token(t *testing.T, ctx sdk.Context, myApp *app.App) {
has, err := myApp.Erc20Keeper.ERC20Token.Has(ctx, fxtypes.DefaultDenom)
require.NoError(t, err)
require.True(t, has)
has, err = myApp.Erc20Keeper.ERC20Token.Has(ctx, strings.ToUpper(fxtypes.FXDenom))
has, err = myApp.Erc20Keeper.ERC20Token.Has(ctx, fxtypes.OriginalFXDenom())
require.NoError(t, err)
require.False(t, has)
}
Expand All @@ -638,6 +637,7 @@ func checkModulesData(t *testing.T, ctx sdk.Context, myApp *app.App) {
t.Helper()

checkCrisisModule(t, ctx, myApp)
checkBankModule(t, ctx, myApp)
checkEvmParams(t, ctx, myApp)
}

Expand All @@ -648,3 +648,25 @@ func checkEvmParams(t *testing.T, ctx sdk.Context, myApp *app.App) {
require.Equal(t, fxtypes.DefaultDenom, params.EvmDenom)
require.Equal(t, evmtypes.DefaultHeaderHashNum, params.HeaderHashNum)
}

func checkBankModule(t *testing.T, ctx sdk.Context, myApp *app.App) {
t.Helper()

fxDenom := fxtypes.OriginalFXDenom()
totalSupply := sdkmath.ZeroInt()
myApp.BankKeeper.IterateAllBalances(ctx, func(addr sdk.AccAddress, balance sdk.Coin) bool {
require.NotEqual(t, fxDenom, balance.Denom)
if balance.Denom == fxtypes.DefaultDenom {
totalSupply = totalSupply.Add(balance.Amount)
}
return false
})

supply := myApp.BankKeeper.GetSupply(ctx, fxtypes.DefaultDenom)
require.Equal(t, totalSupply, supply.Amount)

myApp.BankKeeper.IterateSendEnabledEntries(ctx, func(denom string, sendEnabled bool) (stop bool) {
require.NotEqual(t, fxDenom, denom)
return false
})
}
60 changes: 56 additions & 4 deletions app/upgrades/v8/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"math/big"
"strings"

"cosmossdk.io/collections"
sdkmath "cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
upgradetypes "cosmossdk.io/x/upgrade/types"
Expand Down Expand Up @@ -205,6 +206,9 @@ func upgradeMainnet(
}

func migrateModulesData(ctx sdk.Context, app *keepers.AppKeepers) error {
if err := migrateBankModule(ctx, app.BankKeeper); err != nil {
return err
}
if err := migrateEvmParams(ctx, app.EvmKeeper); err != nil {
return err
}
Expand Down Expand Up @@ -260,9 +264,10 @@ func migrateCrosschainModuleAccount(ctx sdk.Context, ak authkeeper.AccountKeeper
}

func migrateBridgeBalance(ctx sdk.Context, bankKeeper bankkeeper.Keeper, accountKeeper authkeeper.AccountKeeper) error {
fxDenom := fxtypes.OriginalFXDenom()
mds := bankKeeper.GetAllDenomMetaData(ctx)
for _, md := range mds {
if md.Base == fxtypes.DefaultDenom || (len(md.DenomUnits) == 0 || len(md.DenomUnits[0].Aliases) == 0) && md.Symbol != pundixSymbol {
if md.Base == fxDenom || (len(md.DenomUnits) == 0 || len(md.DenomUnits[0].Aliases) == 0) && md.Symbol != pundixSymbol {
continue
}
dstBase := md.Base
Expand Down Expand Up @@ -335,11 +340,12 @@ func migrateERC20TokenToCrosschain(ctx sdk.Context, bankKeeper bankkeeper.Keeper
}

func updateMetadata(ctx sdk.Context, bankKeeper bankkeeper.Keeper) error {
fxDenom := fxtypes.OriginalFXDenom()
mds := bankKeeper.GetAllDenomMetaData(ctx)

removeMetadata := make([]string, 0, 2)
for _, md := range mds {
if md.Base == fxtypes.DefaultDenom || (len(md.DenomUnits) == 0 || len(md.DenomUnits[0].Aliases) == 0) && md.Symbol != pundixSymbol {
if md.Base == fxDenom || (len(md.DenomUnits) == 0 || len(md.DenomUnits[0].Aliases) == 0) && md.Symbol != pundixSymbol {
continue
}
// remove alias
Expand Down Expand Up @@ -653,7 +659,7 @@ func migrateMetadataDisplay(ctx sdk.Context, bankKeeper bankkeeper.Keeper) error
}

func migrateErc20FXToPundiAI(ctx sdk.Context, keeper erc20keeper.Keeper) error {
fxDenom := strings.ToUpper(fxtypes.FXDenom)
fxDenom := fxtypes.OriginalFXDenom()
erc20Token, err := keeper.GetERC20Token(ctx, fxDenom)
if err != nil {
return err
Expand All @@ -675,5 +681,51 @@ func migrateMetadataFXToPundiAI(ctx sdk.Context, keeper bankkeeper.Keeper) error
if !ok {
return errors.New("bank keeper not implement bank.BaseKeeper")
}
return bk.BaseViewKeeper.DenomMetadata.Remove(ctx, strings.ToUpper(fxtypes.FXDenom))
return bk.BaseViewKeeper.DenomMetadata.Remove(ctx, fxtypes.OriginalFXDenom())
}

func migrateBankModule(ctx sdk.Context, bankKeeper bankkeeper.Keeper) error {
fxDenom := fxtypes.OriginalFXDenom()

sendEnabledEntry, found := bankKeeper.GetSendEnabledEntry(ctx, fxDenom)
if found {
bankKeeper.DeleteSendEnabled(ctx, fxDenom)
bankKeeper.SetSendEnabled(ctx, fxtypes.DefaultDenom, sendEnabledEntry.Enabled)
}

var err error
fxSupply := bankKeeper.GetSupply(ctx, fxDenom)
apundiaiSupply := sdkmath.ZeroInt()

bk, ok := bankKeeper.(bankkeeper.BaseKeeper)
if !ok {
return errors.New("bank keeper not implement bank.BaseKeeper")
}
bk.IterateAllBalances(ctx, func(address sdk.AccAddress, coin sdk.Coin) (stop bool) {
if coin.Denom != fxDenom {
return false
}
if err = bk.Balances.Remove(ctx, collections.Join(address, coin.Denom)); err != nil {
return true
}
coin.Denom = fxtypes.DefaultDenom
coin.Amount = fxtypes.SwapAmount(coin.Amount)
if !coin.IsPositive() {
return false
}
apundiaiSupply = apundiaiSupply.Add(coin.Amount)
if err = bk.Balances.Set(ctx, collections.Join(address, coin.Denom), coin.Amount); err != nil {
return true
}
return false
})
if err != nil {
return err
}

ctx.Logger().Info("migrate fx to apundiai", "FX supply", fxSupply.Amount.String(), "apundiai supply", apundiaiSupply.String())
if err = bk.Supply.Remove(ctx, fxDenom); err != nil {
return err
}
return bk.Supply.Set(ctx, fxtypes.DefaultDenom, apundiaiSupply)
}
4 changes: 4 additions & 0 deletions types/constant.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,7 @@ func SwapCoin(coin sdk.Coin) sdk.Coin {
coin.Amount = SwapAmount(coin.Amount)
return coin
}

func OriginalFXDenom() string {
return strings.ToUpper(FXDenom)
}
2 changes: 1 addition & 1 deletion x/erc20/migrations/v8/keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func (m Migrator) migrateParams(ctx sdk.Context, store storetypes.KVStore) error
}

func (m Migrator) migrateTokenPair(ctx sdk.Context, store storetypes.KVStore) error {
fxDenom := strings.ToUpper(fxtypes.FXDenom)
fxDenom := fxtypes.OriginalFXDenom()
iterator := storetypes.KVStorePrefixIterator(store, KeyPrefixTokenPair)
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
Expand Down
4 changes: 2 additions & 2 deletions x/erc20/migrations/v8/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
)

func (m Migrator) MigrateToken(ctx sdk.Context) error {
fxDenom := strings.ToUpper(fxtypes.FXDenom)
fxDenom := fxtypes.OriginalFXDenom()
// add FX bridge token
if err := m.addToken(ctx, fxDenom, ""); err != nil {
return err
Expand Down Expand Up @@ -74,7 +74,7 @@ func (m Migrator) addIBCToken(ctx sdk.Context, base, alias string) error {
}

func (m Migrator) addBridgeToken(ctx sdk.Context, base, alias string) error {
fxDenom := strings.ToUpper(fxtypes.FXDenom)
fxDenom := fxtypes.OriginalFXDenom()
if getExcludeBridgeToken(ctx, alias) {
return nil
}
Expand Down

0 comments on commit 73af7fa

Please sign in to comment.