Skip to content

Commit 9fa5175

Browse files
committed
Denom symbol migration
1 parent b6fe2dd commit 9fa5175

File tree

5 files changed

+120
-2
lines changed

5 files changed

+120
-2
lines changed

app/app.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,6 +1185,7 @@ func New(
11851185
appupgradev6.New(
11861186
app.ModuleManager,
11871187
app.configurator,
1188+
app.BankKeeper,
11881189
),
11891190
}
11901191

app/upgrade/v6/denom_symbol.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package v6
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"strings"
7+
8+
sdk "github.com/cosmos/cosmos-sdk/types"
9+
10+
"github.com/CoreumFoundation/coreum/v6/pkg/config/constant"
11+
wbankkeeper "github.com/CoreumFoundation/coreum/v6/x/wbank/keeper"
12+
)
13+
14+
func migrateDenomSymbol(ctx context.Context, bankKeeper wbankkeeper.BaseKeeperWrapper) error {
15+
var denom string
16+
var newSymbol string
17+
18+
sdkCtx := sdk.UnwrapSDKContext(ctx)
19+
switch sdkCtx.ChainID() {
20+
case string(constant.ChainIDMain):
21+
denom = constant.DenomMain
22+
newSymbol = "TX"
23+
case string(constant.ChainIDTest):
24+
denom = constant.DenomTest
25+
newSymbol = "TESTTX"
26+
case string(constant.ChainIDDev):
27+
denom = constant.DenomDev
28+
newSymbol = "DEVTX"
29+
default:
30+
return fmt.Errorf("unknown chain id: %s", sdkCtx.ChainID())
31+
}
32+
33+
meta, found := bankKeeper.GetDenomMetaData(ctx, denom)
34+
if !found {
35+
return fmt.Errorf("denom metadata not found for %s", denom)
36+
}
37+
38+
meta.Display = strings.ToLower(newSymbol)
39+
meta.Symbol = newSymbol
40+
41+
// Optionally adjust DenomUnits to reflect the new display name
42+
for i := range meta.DenomUnits {
43+
if meta.DenomUnits[i].Denom == strings.ToLower(meta.Display) || meta.DenomUnits[i].Exponent == 6 {
44+
meta.DenomUnits[i].Denom = strings.ToLower(newSymbol)
45+
}
46+
}
47+
48+
bankKeeper.SetDenomMetaData(ctx, meta)
49+
50+
return nil
51+
}

app/upgrade/v6/upgrade.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ import (
88
"github.com/cosmos/cosmos-sdk/types/module"
99

1010
"github.com/CoreumFoundation/coreum/v6/app/upgrade"
11+
wbankkeeper "github.com/CoreumFoundation/coreum/v6/x/wbank/keeper"
1112
)
1213

1314
// Name defines the upgrade name.
1415
const Name = "v6"
1516

1617
// New makes an upgrade handler for v6 upgrade.
17-
func New(mm *module.Manager, configurator module.Configurator) upgrade.Upgrade {
18+
func New(mm *module.Manager, configurator module.Configurator, bankKeeper wbankkeeper.BaseKeeperWrapper) upgrade.Upgrade {
1819
return upgrade.Upgrade{
1920
Name: Name,
2021
StoreUpgrades: store.StoreUpgrades{
@@ -26,6 +27,10 @@ func New(mm *module.Manager, configurator module.Configurator) upgrade.Upgrade {
2627
return nil, err
2728
}
2829

30+
if err := migrateDenomSymbol(ctx, bankKeeper); err != nil {
31+
return nil, err
32+
}
33+
2934
return vmap, nil
3035
},
3136
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
//go:build integrationtests
2+
3+
package upgrade
4+
5+
import (
6+
"strings"
7+
"testing"
8+
9+
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
10+
"github.com/stretchr/testify/require"
11+
12+
integrationtests "github.com/CoreumFoundation/coreum/v6/integration-tests"
13+
"github.com/CoreumFoundation/coreum/v6/pkg/config/constant"
14+
)
15+
16+
type denomSymbol struct {
17+
}
18+
19+
func (d *denomSymbol) Before(t *testing.T) {
20+
ctx, chain := integrationtests.NewCoreumTestingContext(t)
21+
requireT := require.New(t)
22+
23+
client := banktypes.NewQueryClient(chain.ClientContext)
24+
denomMetadata, err := client.DenomMetadata(ctx, &banktypes.QueryDenomMetadataRequest{
25+
Denom: chain.ChainSettings.Denom,
26+
})
27+
requireT.NoError(err)
28+
switch chain.ChainSettings.ChainID {
29+
case string(constant.ChainIDMain):
30+
requireT.Equal(strings.ToUpper(constant.DenomMainDisplay), denomMetadata.Metadata.Symbol)
31+
case string(constant.ChainIDTest):
32+
requireT.Equal(strings.ToUpper(constant.DenomTestDisplay), denomMetadata.Metadata.Symbol)
33+
case string(constant.ChainIDDev):
34+
requireT.Equal(strings.ToUpper(constant.DenomDevDisplay), denomMetadata.Metadata.Symbol)
35+
default:
36+
requireT.FailNowf("unknown chain id: %s", chain.ChainSettings.ChainID)
37+
}
38+
}
39+
40+
func (d *denomSymbol) After(t *testing.T) {
41+
ctx, chain := integrationtests.NewCoreumTestingContext(t)
42+
requireT := require.New(t)
43+
44+
client := banktypes.NewQueryClient(chain.ClientContext)
45+
denomMetadata, err := client.DenomMetadata(ctx, &banktypes.QueryDenomMetadataRequest{
46+
Denom: chain.ChainSettings.Denom,
47+
})
48+
requireT.NoError(err)
49+
switch chain.ChainSettings.ChainID {
50+
case string(constant.ChainIDMain):
51+
requireT.Equal("TX", denomMetadata.Metadata.Symbol)
52+
case string(constant.ChainIDTest):
53+
requireT.Equal("TESTTX", denomMetadata.Metadata.Symbol)
54+
case string(constant.ChainIDDev):
55+
requireT.Equal("DEVTX", denomMetadata.Metadata.Symbol)
56+
default:
57+
requireT.FailNowf("unknown chain id: %s", chain.ChainSettings.ChainID)
58+
}
59+
}

integration-tests/upgrade/upgrade_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ func TestUpgrade(t *testing.T) {
5151
}
5252

5353
func upgradeV5ToV6(t *testing.T) {
54-
tests := []upgradeTest{}
54+
tests := []upgradeTest{
55+
&denomSymbol{},
56+
}
5557

5658
for _, test := range tests {
5759
test.Before(t)

0 commit comments

Comments
 (0)