Skip to content

Commit

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

* 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

* fix merge conflict

---------

Co-authored-by: Adam Tucker <[email protected]>
Co-authored-by: Adam Tucker <[email protected]>
  • Loading branch information
3 people authored Oct 12, 2023
1 parent f36fce7 commit 8aca9a3
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ 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
* [#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

## v19.2.0
Expand Down
2 changes: 1 addition & 1 deletion x/cosmwasmpool/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +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)

pools, err := k.GetPools(ctx)
pools, err := k.GetPoolsSerializable(ctx)
if err != nil {
panic(err)
}
Expand Down
4 changes: 4 additions & 0 deletions x/cosmwasmpool/genesis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ func (s *PoolModuleSuite) TestExportGenesis() {

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())
}
}

func (s *PoolModuleSuite) TestMarshalUnmarshalGenesis() {
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 8aca9a3

Please sign in to comment.