Skip to content

Commit

Permalink
fix: cosmwasmpool state export (#6666)
Browse files Browse the repository at this point in the history
* use CosmWasmExtension

* add changelog

* just implement getId for deserialization

* separate method for serializable pools

* fix accident

* add test

(cherry picked from commit d4582d4)

# Conflicts:
#	CHANGELOG.md
#	x/cosmwasmpool/genesis.go
#	x/cosmwasmpool/genesis_test.go
  • Loading branch information
czarcas7ic authored and mergify[bot] committed Oct 12, 2023
1 parent a08ff69 commit a8ce642
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 1 deletion.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Bug Fixes
* [#6644](https://github.com/osmosis-labs/osmosis/pull/6644) fix: genesis bug in pool incentives linking NoLock gauges and PoolIDs
<<<<<<< HEAD
=======
* [#6666](https://github.com/osmosis-labs/osmosis/pull/6666) fix: cosmwasmpool state export bug
* [#6674](https://github.com/osmosis-labs/osmosis/pull/6674) fix: remove dragonberry replace directive
>>>>>>> d4582d49 (fix: cosmwasmpool state export (#6666))
## v19.2.0

Expand Down
19 changes: 19 additions & 0 deletions x/cosmwasmpool/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ func (k *Keeper) InitGenesis(ctx sdk.Context, gen *types.GenesisState, unpacker
func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState {
params := k.GetParams(ctx)

<<<<<<< HEAD
// TODO: We remove this as there is an issue with resolving the
// type url for the cosmwasm pools.
// panic: unable to resolve type URL /
Expand All @@ -45,6 +46,24 @@ func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState {
// }
// poolAnys = append(poolAnys, any)
//}
=======
pools, err := k.GetPoolsSerializable(ctx)
if err != nil {
panic(err)
}
poolAnys := []*codectypes.Any{}
for _, poolI := range pools {
cosmwasmPool, ok := poolI.(types.CosmWasmExtension)
if !ok {
panic("invalid pool type")
}
any, err := codectypes.NewAnyWithValue(cosmwasmPool)
if err != nil {
panic(err)
}
poolAnys = append(poolAnys, any)
}
>>>>>>> d4582d49 (fix: cosmwasmpool state export (#6666))

return &types.GenesisState{
Params: params,
Expand Down
18 changes: 18 additions & 0 deletions x/cosmwasmpool/genesis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ func (s *PoolModuleSuite) TestInitGenesis() {
s.Require().Equal(expectedTotalLiquidity.String(), liquidity.String())
}

<<<<<<< HEAD
// TODO: Fix this test when fixing genesis export functionality
//func (s *PoolModuleSuite) TestExportGenesis() {
// s.Setup()
Expand All @@ -93,6 +94,23 @@ func (s *PoolModuleSuite) TestInitGenesis() {
// genesis := s.App.CosmwasmPoolKeeper.ExportGenesis(s.Ctx)
// s.Require().Len(genesis.Pools, 2)
//}
=======
func (s *PoolModuleSuite) TestExportGenesis() {
s.Setup()

for i := 0; i < 2; i++ {
s.FundAcc(s.TestAccs[0], initalDefaultSupply)
s.PrepareCustomTransmuterPool(s.TestAccs[0], defaultDenoms)
}

genesis := s.App.CosmwasmPoolKeeper.ExportGenesis(s.Ctx)
s.Require().Len(genesis.Pools, 2)

for _, pool := range genesis.Pools {
s.Require().Equal("/osmosis.cosmwasmpool.v1beta1.CosmWasmPool", pool.GetTypeUrl())
}
}
>>>>>>> d4582d49 (fix: cosmwasmpool state export (#6666))

func (s *PoolModuleSuite) TestMarshalUnmarshalGenesis() {
s.Setup()
Expand Down
2 changes: 1 addition & 1 deletion x/cosmwasmpool/model/store_model.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (p CosmWasmPool) GetAddress() sdk.AccAddress {
}

func (p CosmWasmPool) GetId() uint64 {
panic("CosmWasmPool.GetId not implemented")
return p.PoolId
}

func (p CosmWasmPool) GetSpreadFactor(ctx sdk.Context) osmomath.Dec {
Expand Down
17 changes: 17 additions & 0 deletions x/cosmwasmpool/pool_module.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,23 @@ func (k Keeper) GetPools(ctx sdk.Context) ([]poolmanagertypes.PoolI, error) {
)
}

// GetPoolsSerializable retrieves all pool objects stored in the keeper.
// Because the Pool struct has a non-serializable wasmKeeper field, this method
// utilizes the CosmWasmPool struct directly instead, which allows it to be serialized
// in import/export genesis.
func (k Keeper) GetPoolsSerializable(ctx sdk.Context) ([]poolmanagertypes.PoolI, error) {
return osmoutils.GatherValuesFromStorePrefix(
ctx.KVStore(k.storeKey), types.PoolsKey, func(value []byte) (poolmanagertypes.PoolI, error) {
pool := model.CosmWasmPool{}
err := k.cdc.Unmarshal(value, &pool)
if err != nil {
return nil, err
}
return &pool, nil
},
)
}

// GetPoolsWithWasmKeeper behaves the same as GetPools, but it also sets the WasmKeeper field of the pool.
func (k Keeper) GetPoolsWithWasmKeeper(ctx sdk.Context) ([]poolmanagertypes.PoolI, error) {
return osmoutils.GatherValuesFromStorePrefix(
Expand Down

0 comments on commit a8ce642

Please sign in to comment.