Skip to content

Commit ab642c8

Browse files
authored
Merge pull request #448 from persistenceOne/puneet/fix-ibcfeechannels
fix: ibcfeechannels
2 parents f3fc6b1 + d780e25 commit ab642c8

File tree

7 files changed

+202
-15
lines changed

7 files changed

+202
-15
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ bin/
1212

1313
.DS_Store
1414
*.swp
15+
.run/

app/constants/constants.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,16 @@ var (
4242
"ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", // ATOM
4343
}
4444
)
45+
46+
// SetConfig address/coin params at the global state
47+
func SetConfig() {
48+
cfg := sdk.GetConfig()
49+
50+
cfg.SetBech32PrefixForAccount(Bech32PrefixAccAddr, Bech32PrefixAccPub)
51+
cfg.SetBech32PrefixForValidator(Bech32PrefixValAddr, Bech32PrefixValPub)
52+
cfg.SetBech32PrefixForConsensusNode(Bech32PrefixConsAddr, Bech32PrefixConsPub)
53+
cfg.SetCoinType(CoinType)
54+
cfg.SetPurpose(Purpose)
55+
56+
cfg.Seal()
57+
}

app/upgrades/testnet/v16.0.0-rc0/upgrades.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ package v16_0_0_rc0
22

33
import (
44
"context"
5+
"fmt"
56

67
upgradetypes "cosmossdk.io/x/upgrade/types"
78
sdk "github.com/cosmos/cosmos-sdk/types"
89
"github.com/cosmos/cosmos-sdk/types/module"
10+
ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"
11+
12+
"github.com/persistenceOne/persistenceCore/v16/app/keepers"
913
"github.com/persistenceOne/persistenceCore/v16/app/upgrades"
1014
)
1115

@@ -20,7 +24,29 @@ func CreateUpgradeHandler(args upgrades.UpgradeHandlerArgs) upgradetypes.Upgrade
2024
return vm, err
2125
}
2226

27+
err = ResetIBCTransferVersions(sdkCtx, args.Keepers)
28+
if err != nil {
29+
return vm, err
30+
}
31+
2332
sdkCtx.Logger().Info("Upgrade complete")
2433
return vm, nil
2534
}
2635
}
36+
37+
func ResetIBCTransferVersions(sdkCtx sdk.Context, keepers *keepers.AppKeepers) error {
38+
39+
channels := keepers.IBCKeeper.ChannelKeeper.GetAllChannels(sdkCtx)
40+
for _, channel := range channels {
41+
if channel.PortId == ibctransfertypes.PortID && channel.Version != ibctransfertypes.V1 {
42+
channelDb, ok := keepers.IBCKeeper.ChannelKeeper.GetChannel(sdkCtx, channel.PortId, channel.ChannelId)
43+
if !ok {
44+
return fmt.Errorf("channel %s not found", channel.ChannelId)
45+
}
46+
channelDb.Version = ibctransfertypes.V1
47+
keepers.IBCKeeper.ChannelKeeper.SetChannel(sdkCtx, channel.PortId, channel.ChannelId, channelDb)
48+
}
49+
}
50+
51+
return nil
52+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package v16_0_0_rc0_test
2+
3+
import (
4+
"testing"
5+
6+
"cosmossdk.io/log"
7+
"github.com/CosmWasm/wasmd/x/wasm"
8+
dbm "github.com/cosmos/cosmos-db"
9+
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
10+
ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"
11+
channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types"
12+
"github.com/persistenceOne/persistenceCore/v16/app/constants"
13+
v1600rc0 "github.com/persistenceOne/persistenceCore/v16/app/upgrades/testnet/v16.0.0-rc0"
14+
"github.com/stretchr/testify/require"
15+
16+
"github.com/persistenceOne/persistenceCore/v16/app"
17+
)
18+
19+
func TestResetIBCTransferVersions(t *testing.T) {
20+
constants.SetConfig()
21+
testApp := app.NewApplication(log.NewNopLogger(), dbm.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(t.TempDir()), []wasm.Option{})
22+
ctx := testApp.NewContext(true)
23+
24+
type args struct {
25+
portID string
26+
channelID string
27+
version string
28+
}
29+
tests := []struct {
30+
name string
31+
args args
32+
}{
33+
{
34+
name: "correct case",
35+
args: args{ibctransfertypes.PortID, "channel-0", ibctransfertypes.V1},
36+
},
37+
{
38+
name: "fee version should be converted to v1",
39+
args: args{ibctransfertypes.PortID, "channel-1", "{\"fee_version\":\"ics29-1\",\"app_version\":\"ics20-1\"}"},
40+
},
41+
{
42+
name: "random port ids should not be affected",
43+
args: args{"ica-controller-xxx", "channel-2", ibctransfertypes.V1},
44+
},
45+
{
46+
name: "random port ids should not be affected 2",
47+
args: args{"ica-controller-xxxyyy", "channel-3", "ibcfee-0,controller-1"},
48+
},
49+
}
50+
for _, tt := range tests {
51+
t.Run(tt.name, func(t *testing.T) {
52+
testApp.IBCKeeper.ChannelKeeper.SetChannel(ctx, tt.args.portID, tt.args.channelID, channeltypes.Channel{
53+
Version: tt.args.version,
54+
})
55+
err := v1600rc0.ResetIBCTransferVersions(ctx, testApp.AppKeepers)
56+
require.NoError(t, err)
57+
channel, ok := testApp.IBCKeeper.ChannelKeeper.GetChannel(ctx, tt.args.portID, tt.args.channelID)
58+
require.True(t, ok)
59+
if tt.args.portID == ibctransfertypes.PortID {
60+
require.Equal(t, ibctransfertypes.V1, channel.Version)
61+
} else {
62+
require.Equal(t, tt.args.version, channel.Version)
63+
64+
}
65+
66+
})
67+
}
68+
}

app/upgrades/v16.0.0/upgrades.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ package v16_0_0
22

33
import (
44
"context"
5+
"fmt"
56

67
upgradetypes "cosmossdk.io/x/upgrade/types"
78
sdk "github.com/cosmos/cosmos-sdk/types"
89
"github.com/cosmos/cosmos-sdk/types/module"
10+
ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"
11+
12+
"github.com/persistenceOne/persistenceCore/v16/app/keepers"
913
"github.com/persistenceOne/persistenceCore/v16/app/upgrades"
1014
)
1115

@@ -20,7 +24,28 @@ func CreateUpgradeHandler(args upgrades.UpgradeHandlerArgs) upgradetypes.Upgrade
2024
return vm, err
2125
}
2226

27+
err = ResetIBCTransferVersions(sdkCtx, args.Keepers)
28+
if err != nil {
29+
return vm, err
30+
}
31+
2332
sdkCtx.Logger().Info("Upgrade complete")
2433
return vm, nil
2534
}
2635
}
36+
37+
func ResetIBCTransferVersions(sdkCtx sdk.Context, keepers *keepers.AppKeepers) error {
38+
channels := keepers.IBCKeeper.ChannelKeeper.GetAllChannels(sdkCtx)
39+
for _, channel := range channels {
40+
if channel.PortId == ibctransfertypes.PortID && channel.Version != ibctransfertypes.V1 {
41+
channelDb, ok := keepers.IBCKeeper.ChannelKeeper.GetChannel(sdkCtx, channel.PortId, channel.ChannelId)
42+
if !ok {
43+
return fmt.Errorf("channel %s not found", channel.ChannelId)
44+
}
45+
channelDb.Version = ibctransfertypes.V1
46+
keepers.IBCKeeper.ChannelKeeper.SetChannel(sdkCtx, channel.PortId, channel.ChannelId, channelDb)
47+
}
48+
}
49+
50+
return nil
51+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package v16_0_0_test
2+
3+
import (
4+
"testing"
5+
6+
"cosmossdk.io/log"
7+
"github.com/CosmWasm/wasmd/x/wasm"
8+
dbm "github.com/cosmos/cosmos-db"
9+
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
10+
ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"
11+
channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types"
12+
"github.com/persistenceOne/persistenceCore/v16/app/constants"
13+
v1600 "github.com/persistenceOne/persistenceCore/v16/app/upgrades/v16.0.0"
14+
"github.com/stretchr/testify/require"
15+
16+
"github.com/persistenceOne/persistenceCore/v16/app"
17+
)
18+
19+
func TestResetIBCTransferVersions(t *testing.T) {
20+
constants.SetConfig()
21+
testApp := app.NewApplication(log.NewNopLogger(), dbm.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(t.TempDir()), []wasm.Option{})
22+
ctx := testApp.NewContext(true)
23+
24+
type args struct {
25+
portID string
26+
channelID string
27+
version string
28+
}
29+
tests := []struct {
30+
name string
31+
args args
32+
}{
33+
{
34+
name: "correct case",
35+
args: args{ibctransfertypes.PortID, "channel-0", ibctransfertypes.V1},
36+
},
37+
{
38+
name: "fee version should be converted to v1",
39+
args: args{ibctransfertypes.PortID, "channel-1", "{\"fee_version\":\"ics29-1\",\"app_version\":\"ics20-1\"}"},
40+
},
41+
{
42+
name: "random port ids should not be affected",
43+
args: args{"ica-controller-xxx", "channel-2", ibctransfertypes.V1},
44+
},
45+
{
46+
name: "random port ids should not be affected 2",
47+
args: args{"ica-controller-xxxyyy", "channel-3", "ibcfee-0,controller-1"},
48+
},
49+
}
50+
for _, tt := range tests {
51+
t.Run(tt.name, func(t *testing.T) {
52+
testApp.IBCKeeper.ChannelKeeper.SetChannel(ctx, tt.args.portID, tt.args.channelID, channeltypes.Channel{
53+
Version: tt.args.version,
54+
})
55+
err := v1600.ResetIBCTransferVersions(ctx, testApp.AppKeepers)
56+
require.NoError(t, err)
57+
channel, ok := testApp.IBCKeeper.ChannelKeeper.GetChannel(ctx, tt.args.portID, tt.args.channelID)
58+
require.True(t, ok)
59+
if tt.args.portID == ibctransfertypes.PortID {
60+
require.Equal(t, ibctransfertypes.V1, channel.Version)
61+
} else {
62+
require.Equal(t, tt.args.version, channel.Version)
63+
64+
}
65+
66+
})
67+
}
68+
}

cmd/persistenceCore/cmd/root.go

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
serverconfig "github.com/cosmos/cosmos-sdk/server/config"
2727
servertypes "github.com/cosmos/cosmos-sdk/server/types"
2828
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
29-
sdk "github.com/cosmos/cosmos-sdk/types"
3029
"github.com/cosmos/cosmos-sdk/types/tx/signing"
3130
"github.com/cosmos/cosmos-sdk/version"
3231
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
@@ -46,7 +45,7 @@ import (
4645
)
4746

4847
func NewRootCmd() *cobra.Command {
49-
setConfig()
48+
constants.SetConfig()
5049

5150
tempDir := tempDir()
5251
tempApp := app.NewApplication(log.NewNopLogger(), dbm.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir), []wasm.Option{})
@@ -136,19 +135,6 @@ func NewRootCmd() *cobra.Command {
136135
return rootCmd
137136
}
138137

139-
// setConfig params at the package state
140-
func setConfig() {
141-
cfg := sdk.GetConfig()
142-
143-
cfg.SetBech32PrefixForAccount(constants.Bech32PrefixAccAddr, constants.Bech32PrefixAccPub)
144-
cfg.SetBech32PrefixForValidator(constants.Bech32PrefixValAddr, constants.Bech32PrefixValPub)
145-
cfg.SetBech32PrefixForConsensusNode(constants.Bech32PrefixConsAddr, constants.Bech32PrefixConsPub)
146-
cfg.SetCoinType(constants.CoinType)
147-
cfg.SetPurpose(constants.Purpose)
148-
149-
cfg.Seal()
150-
}
151-
152138
func initCometbftConfig() *cmtcfg.Config {
153139
cfg := cmtcfg.DefaultConfig()
154140

0 commit comments

Comments
 (0)