Skip to content

Commit 27ff1eb

Browse files
fix(x/protocolpool): withdraw rewards before export genesis (backport #23467) (#23471)
Co-authored-by: Julien Robert <julien@rbrt.fr>
1 parent a79ed8c commit 27ff1eb

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

simapp/app_config.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,28 @@ var (
174174
},
175175
// When ExportGenesis is not specified, the export genesis module order
176176
// is equal to the init genesis order
177-
// ExportGenesis: []string{},
177+
ExportGenesis: []string{
178+
consensustypes.ModuleName,
179+
accounts.ModuleName,
180+
authtypes.ModuleName,
181+
pooltypes.ModuleName, // Must be exported before bank
182+
banktypes.ModuleName,
183+
distrtypes.ModuleName,
184+
stakingtypes.ModuleName,
185+
slashingtypes.ModuleName,
186+
govtypes.ModuleName,
187+
minttypes.ModuleName,
188+
genutiltypes.ModuleName,
189+
evidencetypes.ModuleName,
190+
authz.ModuleName,
191+
feegrant.ModuleName,
192+
nft.ModuleName,
193+
group.ModuleName,
194+
upgradetypes.ModuleName,
195+
vestingtypes.ModuleName,
196+
circuittypes.ModuleName,
197+
epochstypes.ModuleName,
198+
},
178199
// Uncomment if you want to set a custom migration order here.
179200
// OrderMigrations: []string{},
180201
// SkipStoreKeys is an optional list of store keys to skip when constructing the

x/protocolpool/keeper/genesis.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,21 @@ func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) error
7676
}
7777

7878
func (k Keeper) ExportGenesis(ctx context.Context) (*types.GenesisState, error) {
79+
// refresh all funds
80+
if err := k.IterateAndUpdateFundsDistribution(ctx); err != nil {
81+
return nil, err
82+
}
83+
84+
// withdraw all rewards before exporting genesis
85+
if err := k.RecipientFundDistribution.Walk(ctx, nil, func(key sdk.AccAddress, value types.DistributionAmount) (stop bool, err error) {
86+
if _, err := k.withdrawRecipientFunds(ctx, key.Bytes()); err != nil {
87+
return true, err
88+
}
89+
return false, nil
90+
}); err != nil {
91+
return nil, err
92+
}
93+
7994
var cf []*types.ContinuousFund
8095
err := k.ContinuousFund.Walk(ctx, nil, func(key sdk.AccAddress, value types.ContinuousFund) (stop bool, err error) {
8196
recipient, err := k.authKeeper.AddressCodec().BytesToString(key)

x/protocolpool/keeper/genesis_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@ package keeper_test
33
import (
44
"time"
55

6+
"github.com/golang/mock/gomock"
7+
68
"cosmossdk.io/math"
79
"cosmossdk.io/x/protocolpool/types"
810

911
sdk "github.com/cosmos/cosmos-sdk/types"
1012
)
1113

12-
func (suite *KeeperTestSuite) TestInitGenesis() {
14+
func (suite *KeeperTestSuite) TestInitExportGenesis() {
15+
suite.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), types.ProtocolPoolDistrAccount, gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
16+
suite.bankKeeper.EXPECT().SendCoinsFromModuleToAccount(gomock.Any(), types.StreamAccount, gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
17+
1318
hour := time.Hour
1419
gs := types.NewGenesisState(
1520
[]*types.ContinuousFund{
@@ -49,5 +54,5 @@ func (suite *KeeperTestSuite) TestInitGenesis() {
4954
suite.Require().NoError(err)
5055
suite.Require().Equal(gs.ContinuousFund, exportedGenState.ContinuousFund)
5156
suite.Require().Equal(gs.Budget, exportedGenState.Budget)
52-
suite.Require().Equal(math.NewInt(101), exportedGenState.LastBalance.Amount.AmountOf("stake"))
57+
suite.Require().Equal(math.ZeroInt(), exportedGenState.LastBalance.Amount.AmountOf("stake"))
5358
}

0 commit comments

Comments
 (0)