Skip to content

Commit

Permalink
add migration pfm (#499)
Browse files Browse the repository at this point in the history
* add migration pfm

* refactor

* refactor
  • Loading branch information
hoank101 committed Apr 24, 2024
1 parent dbe5621 commit a6c6a10
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 0 deletions.
4 changes: 4 additions & 0 deletions app/upgrades/v6_6_0/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@ import (
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types"
icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types"

"github.com/notional-labs/composable/v6/app/keepers"
"github.com/notional-labs/composable/v6/app/upgrades"
bech32authmigration "github.com/notional-labs/composable/v6/bech32-migration/auth"
bech32govmigration "github.com/notional-labs/composable/v6/bech32-migration/gov"
bech32icamigration "github.com/notional-labs/composable/v6/bech32-migration/ica"
bech32mintmigration "github.com/notional-labs/composable/v6/bech32-migration/mint"
bech32PfmMigration "github.com/notional-labs/composable/v6/bech32-migration/pfmmiddleware"
bech32slashingmigration "github.com/notional-labs/composable/v6/bech32-migration/slashing"
bech32stakingmigration "github.com/notional-labs/composable/v6/bech32-migration/staking"
bech32transfermiddlewaremigration "github.com/notional-labs/composable/v6/bech32-migration/transfermiddleware"
Expand Down Expand Up @@ -45,6 +48,7 @@ func CreateUpgradeHandler(
bech32mintmigration.MigrateAddressBech32(ctx, keys[minttypes.StoreKey], codec)
bech32transfermiddlewaremigration.MigrateAddressBech32(ctx, keys[transfermiddlewaretypes.StoreKey], codec)
bech32WasmMigration.MigrateAddressBech32(ctx, keys[wasm.StoreKey], codec)
bech32PfmMigration.MigrateAddressBech32(ctx, keys[routertypes.StoreKey], codec, keepers)
return mm.RunMigrations(ctx, configurator, vm)
}
}
42 changes: 42 additions & 0 deletions app/upgrades/v6_6_0/upgrades_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types"
apptesting "github.com/notional-labs/composable/v6/app"
"github.com/notional-labs/composable/v6/bech32-migration/utils"
"github.com/stretchr/testify/suite"
Expand Down Expand Up @@ -58,6 +59,7 @@ func (s *UpgradeTestSuite) TestForMigratingNewPrefix() {
prepareForTestingICAHostModule(s)
prepareForTestingMintModule(s)
prepareForTestingTransferMiddlewareModule(s)
prepareForTestingPfmMiddlewareModule(s)

/* == UPGRADE == */
upgradeHeight := int64(5)
Expand All @@ -72,6 +74,7 @@ func (s *UpgradeTestSuite) TestForMigratingNewPrefix() {
checkUpgradeICAHostModule(s)
checkUpgradeMintModule(s)
checkUpgradeTransferMiddlewareModule(s)
checkUpgradePfmMiddlewareModule(s)
}

func prepareForTestingGovModule(s *UpgradeTestSuite) (sdk.AccAddress, govtypes.Proposal) {
Expand Down Expand Up @@ -214,6 +217,37 @@ func prepareForTestingTransferMiddlewareModule(s *UpgradeTestSuite) {
s.App.TransferMiddlewareKeeper.SetAllowRlyAddress(s.Ctx, acc1.String())
}

func prepareForTestingPfmMiddlewareModule(s *UpgradeTestSuite) {
store := s.Ctx.KVStore(s.App.GetKey(routertypes.StoreKey))
inFlightPacket := routertypes.InFlightPacket{
PacketData: []byte("{\"amount\":\"10000\",\"denom\":\"transfer/channel-6660/ppica\",\"memo\":\"{\\\"forward\\\":{\\\"receiver\\\":\\\"osmo1wkjvpgkuchq0r8425g4z4sf6n85zj5wth3u77y\\\",\\\"port\\\":\\\"transfer\\\",\\\"channel\\\":\\\"channel-9\\\",\\\"timeout\\\":600000000000,\\\"retries\\\":0}}\",\"receiver\":\"centauri1wkjvpgkuchq0r8425g4z4sf6n85zj5wtmqzjv9\",\"sender\":\"osmo1wkjvpgkuchq0r8425g4z4sf6n85zj5wth3u77y\"}"),
OriginalSenderAddress: "centauri1wkjvpgkuchq0r8425g4z4sf6n85zj5wtmqzjv9",
RefundChannelId: "channel-9",
RefundPortId: "transfer",
RefundSequence: 18,
PacketSrcPortId: "transfer",
PacketSrcChannelId: "channel-66660",

PacketTimeoutTimestamp: 1712153063084849609,
PacketTimeoutHeight: "5-123",

RetriesRemaining: int32(0),
Timeout: uint64(600000000000),
Nonrefundable: false,
}

encCdc := apptesting.MakeEncodingConfig()

key := routertypes.RefundPacketKey("channel-9", "transfer", 0)
bz := encCdc.Amino.MustMarshal(&inFlightPacket)
store.Set(key, bz)

key = routertypes.RefundPacketKey("channel-9", "transfer", 2)
inFlightPacket.OriginalSenderAddress = "centauri1hj5fveer5cjtn4wd6wstzugjfdxzl0xpzxlwgs"
bz = encCdc.Amino.MustMarshal(&inFlightPacket)
store.Set(key, bz)
}

func checkUpgradeGovModule(s *UpgradeTestSuite, acc1 sdk.AccAddress, proposal govtypes.Proposal) {
// CONVERT ACC TO NEW PREFIX
_, bz, _ := bech32.DecodeAndConvert(acc1.String())
Expand Down Expand Up @@ -409,6 +443,14 @@ func checkUpgradeTransferMiddlewareModule(s *UpgradeTestSuite) {
s.Suite.Equal(found, true)
}

func checkUpgradePfmMiddlewareModule(s *UpgradeTestSuite) {
data := s.App.RouterKeeper.GetAndClearInFlightPacket(s.Ctx, "channel-9", "transfer", 0)
s.Suite.Equal("pica1wkjvpgkuchq0r8425g4z4sf6n85zj5wtykvtv3", data.OriginalSenderAddress)

data = s.App.RouterKeeper.GetAndClearInFlightPacket(s.Ctx, "channel-9", "transfer", 2)
s.Suite.Equal("pica1hj5fveer5cjtn4wd6wstzugjfdxzl0xpas3hgy", data.OriginalSenderAddress)
}

func CreateVestingAccount(s *UpgradeTestSuite,
) vestingtypes.ContinuousVestingAccount {
str := `{"@type":"/cosmos.vesting.v1beta1.ContinuousVestingAccount","base_vesting_account":{"base_account":{"address":"centauri1alga5e8vr6ccr9yrg0kgxevpt5xgmgrvfkc5p8","pub_key":{"@type":"/cosmos.crypto.multisig.LegacyAminoPubKey","threshold":4,"public_keys":[{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AlnzK22KrkylnvTCvZZc8eZnydtQuzCWLjJJSMFUvVHf"},{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Aiw2Ftg+fnoHDU7M3b0VMRsI0qurXlerW0ahtfzSDZA4"},{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AvEHv+MVYRVau8FbBcJyG0ql85Tbbn7yhSA0VGmAY4ku"},{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Az5VHWqi3zMJu1rLGcu2EgNXLLN+al4Dy/lj6UZTzTCl"},{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ai4GlSH3uG+joMnAFbQC3jQeHl9FPvVTlRmwIFt7d7TI"},{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A2kAzH2bZr530jmFq/bRFrT2q8SRqdnfIebba+YIBqI1"}]},"account_number":46,"sequence":27},"original_vesting":[{"denom":"stake","amount":"22165200000000"}],"delegated_free":[{"denom":"stake","amount":"443382497453"}],"delegated_vesting":[{"denom":"stake","amount":"22129422502547"}],"end_time":1770994800},"start_time":1676300400}`
Expand Down
67 changes: 67 additions & 0 deletions bech32-migration/pfmmiddleware/pfmmiddleware.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package pfmmiddleware

import (
"encoding/json"

"github.com/cosmos/cosmos-sdk/codec"
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types"
transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
"github.com/notional-labs/composable/v6/app/keepers"
"github.com/notional-labs/composable/v6/bech32-migration/utils"
)

func MigrateAddressBech32(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec, keepers *keepers.AppKeepers) {
ctx.Logger().Info("Migration of address bech32 for pfmmiddleware module begin")
totalAddr := uint64(0)

store := ctx.KVStore(storeKey)

channelKey := []byte("channel")
iterator := sdk.KVStorePrefixIterator(store, channelKey)
for ; iterator.Valid(); iterator.Next() {
totalAddr++
fullKey := iterator.Key()
if !store.Has(fullKey) {
continue
}
bz := store.Get(fullKey)
var inFlightPacket routertypes.InFlightPacket
cdc.MustUnmarshal(bz, &inFlightPacket)
inFlightPacket.OriginalSenderAddress = utils.SafeConvertAddress(inFlightPacket.OriginalSenderAddress)
var data transfertypes.FungibleTokenPacketData
if err := transfertypes.ModuleCdc.UnmarshalJSON(inFlightPacket.PacketData, &data); err != nil {
continue
}
data.Receiver = utils.SafeConvertAddress(data.Receiver)
data.Sender = utils.SafeConvertAddress(data.Sender)

d := make(map[string]interface{})
err := json.Unmarshal([]byte(data.Memo), &d)
// parse memo
if err == nil && d["forward"] != nil {
var m routertypes.PacketMetadata
err = json.Unmarshal([]byte(data.Memo), &m)
if err != nil {
continue
}
m.Forward.Receiver = utils.SafeConvertAddress(m.Forward.Receiver)
bzM, err := json.Marshal(m)
if err != nil {
continue
}
data.Memo = string(bzM)
}
bz = cdc.MustMarshal(&data)
inFlightPacket.PacketData = bz
bz = cdc.MustMarshal(&inFlightPacket)
totalAddr++
store.Set(fullKey, bz)
}

ctx.Logger().Info(
"Migration of address bech32 for pfmmiddleware module done",
"totalAddr", totalAddr,
)
}

0 comments on commit a6c6a10

Please sign in to comment.