mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-10-31 23:47:29 +00:00 
			
		
		
		
	feat(x/precisebank): Implement ExportGenesis (#1915)
This commit is contained in:
		
							parent
							
								
									7990021431
								
							
						
					
					
						commit
						dbc3ad7fd2
					
				| @ -47,11 +47,27 @@ func InitGenesis( | ||||
| 		)) | ||||
| 	} | ||||
| 
 | ||||
| 	// TODO: After keeper methods are implemented
 | ||||
| 	// - Set account FractionalBalances
 | ||||
| 	// Set FractionalBalances in state
 | ||||
| 	for _, bal := range gs.Balances { | ||||
| 		addr := sdk.MustAccAddressFromBech32(bal.Address) | ||||
| 
 | ||||
| 		keeper.SetFractionalBalance(ctx, addr, bal.Amount) | ||||
| 	} | ||||
| 
 | ||||
| 	// Set remainder amount in state
 | ||||
| 	keeper.SetRemainderAmount(ctx, gs.Remainder) | ||||
| } | ||||
| 
 | ||||
| // ExportGenesis returns a GenesisState for a given context and keeper.
 | ||||
| func ExportGenesis(ctx sdk.Context, keeper keeper.Keeper) *types.GenesisState { | ||||
| 	return types.NewGenesisState(types.FractionalBalances{}, sdkmath.ZeroInt()) | ||||
| 	balances := types.FractionalBalances{} | ||||
| 	keeper.IterateFractionalBalances(ctx, func(addr sdk.AccAddress, amount sdkmath.Int) bool { | ||||
| 		balances = append(balances, types.NewFractionalBalance(addr.String(), amount)) | ||||
| 
 | ||||
| 		return false | ||||
| 	}) | ||||
| 
 | ||||
| 	remainder := keeper.GetRemainderAmount(ctx) | ||||
| 
 | ||||
| 	return types.NewGenesisState(balances, remainder) | ||||
| } | ||||
|  | ||||
| @ -7,6 +7,7 @@ import ( | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 
 | ||||
| 	"github.com/kava-labs/kava/x/precisebank" | ||||
| 	"github.com/kava-labs/kava/x/precisebank/keeper" | ||||
| 	"github.com/kava-labs/kava/x/precisebank/testutil" | ||||
| 	"github.com/kava-labs/kava/x/precisebank/types" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
| @ -163,34 +164,78 @@ func (suite *GenesisTestSuite) TestInitGenesis() { | ||||
| 				"module account should be created & stored in account store", | ||||
| 			) | ||||
| 
 | ||||
| 			// TODO: Check module state once implemented
 | ||||
| 			// Verify balances are set in state, get full list of balances in
 | ||||
| 			// state to ensure they are set AND no extra balances are set
 | ||||
| 			var bals []types.FractionalBalance | ||||
| 			suite.Keeper.IterateFractionalBalances(suite.Ctx, func(addr sdk.AccAddress, bal sdkmath.Int) bool { | ||||
| 				bals = append(bals, types.NewFractionalBalance(addr.String(), bal)) | ||||
| 
 | ||||
| 			// Verify balances
 | ||||
| 			// IterateBalances() or something
 | ||||
| 				return false | ||||
| 			}) | ||||
| 
 | ||||
| 			// Ensure reserve balance matches sum of all fractional balances
 | ||||
| 			// sum up IterateBalances()
 | ||||
| 			suite.Require().ElementsMatch(tc.genesisState.Balances, bals, "balances should be set in state") | ||||
| 
 | ||||
| 			// - etc
 | ||||
| 			remainder := suite.Keeper.GetRemainderAmount(suite.Ctx) | ||||
| 			suite.Require().Equal(tc.genesisState.Remainder, remainder, "remainder should be set in state") | ||||
| 
 | ||||
| 			// Additional verification of state via invariants
 | ||||
| 			invariantFn := keeper.AllInvariants(suite.Keeper) | ||||
| 			msg, broken := invariantFn(suite.Ctx) | ||||
| 			suite.Require().False(broken, "invariants should not be broken after InitGenesis") | ||||
| 			suite.Require().Empty(msg, "invariants should not return a message after InitGenesis") | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (suite *GenesisTestSuite) TestExportGenesis_Valid() { | ||||
| 	// ExportGenesis(moduleState) should return a valid genesis state
 | ||||
| func (suite *GenesisTestSuite) TestExportGenesis() { | ||||
| 	// ExportGenesis(InitGenesis(genesisState)) == genesisState
 | ||||
| 	// Must also be valid.
 | ||||
| 
 | ||||
| 	tests := []struct { | ||||
| 		name    string | ||||
| 		maleate func() | ||||
| 		name             string | ||||
| 		initGenesisState func() *types.GenesisState | ||||
| 	}{ | ||||
| 		{ | ||||
| 			"InitGenesis(DefaultGenesisState)", | ||||
| 			func() { | ||||
| 				precisebank.InitGenesis( | ||||
| 			func() *types.GenesisState { | ||||
| 				return types.DefaultGenesisState() | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			"balances, no remainder", | ||||
| 			func() *types.GenesisState { | ||||
| 				err := suite.BankKeeper.MintCoins( | ||||
| 					suite.Ctx, | ||||
| 					suite.Keeper, | ||||
| 					suite.AccountKeeper, | ||||
| 					suite.BankKeeper, | ||||
| 					types.DefaultGenesisState(), | ||||
| 					types.ModuleName, | ||||
| 					sdk.NewCoins(sdk.NewCoin(types.IntegerCoinDenom, sdkmath.NewInt(1))), | ||||
| 				) | ||||
| 				suite.Require().NoError(err) | ||||
| 
 | ||||
| 				return types.NewGenesisState( | ||||
| 					types.FractionalBalances{ | ||||
| 						types.NewFractionalBalance(sdk.AccAddress{1}.String(), types.ConversionFactor().QuoRaw(2)), | ||||
| 						types.NewFractionalBalance(sdk.AccAddress{2}.String(), types.ConversionFactor().QuoRaw(2)), | ||||
| 					}, | ||||
| 					sdkmath.ZeroInt(), | ||||
| 				) | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			"balances, remainder", | ||||
| 			func() *types.GenesisState { | ||||
| 				err := suite.BankKeeper.MintCoins( | ||||
| 					suite.Ctx, | ||||
| 					types.ModuleName, | ||||
| 					sdk.NewCoins(sdk.NewCoin(types.IntegerCoinDenom, sdkmath.NewInt(1))), | ||||
| 				) | ||||
| 				suite.Require().NoError(err) | ||||
| 
 | ||||
| 				return types.NewGenesisState( | ||||
| 					types.FractionalBalances{ | ||||
| 						types.NewFractionalBalance(sdk.AccAddress{1}.String(), types.ConversionFactor().QuoRaw(2)), | ||||
| 						types.NewFractionalBalance(sdk.AccAddress{2}.String(), types.ConversionFactor().QuoRaw(2).SubRaw(1)), | ||||
| 					}, | ||||
| 					sdkmath.OneInt(), | ||||
| 				) | ||||
| 			}, | ||||
| 		}, | ||||
| @ -198,37 +243,18 @@ func (suite *GenesisTestSuite) TestExportGenesis_Valid() { | ||||
| 
 | ||||
| 	for _, tc := range tests { | ||||
| 		suite.Run(tc.name, func() { | ||||
| 			tc.maleate() | ||||
| 			// Reset state
 | ||||
| 			suite.SetupTest() | ||||
| 
 | ||||
| 			genesisState := precisebank.ExportGenesis(suite.Ctx, suite.Keeper) | ||||
| 			initGs := tc.initGenesisState() | ||||
| 
 | ||||
| 			suite.Require().NoError(genesisState.Validate(), "exported genesis state should be valid") | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (suite *GenesisTestSuite) TestExportImportedState() { | ||||
| 	// ExportGenesis(InitGenesis(genesisState)) == genesisState
 | ||||
| 
 | ||||
| 	tests := []struct { | ||||
| 		name             string | ||||
| 		initGenesisState *types.GenesisState | ||||
| 	}{ | ||||
| 		{ | ||||
| 			"InitGenesis(DefaultGenesisState)", | ||||
| 			types.DefaultGenesisState(), | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, tc := range tests { | ||||
| 		suite.Run(tc.name, func() { | ||||
| 			suite.Require().NotPanics(func() { | ||||
| 				precisebank.InitGenesis( | ||||
| 					suite.Ctx, | ||||
| 					suite.Keeper, | ||||
| 					suite.AccountKeeper, | ||||
| 					suite.BankKeeper, | ||||
| 					tc.initGenesisState, | ||||
| 					initGs, | ||||
| 				) | ||||
| 			}) | ||||
| 
 | ||||
| @ -236,7 +262,7 @@ func (suite *GenesisTestSuite) TestExportImportedState() { | ||||
| 			suite.Require().NoError(genesisState.Validate(), "exported genesis state should be valid") | ||||
| 
 | ||||
| 			suite.Require().Equal( | ||||
| 				tc.initGenesisState, | ||||
| 				initGs, | ||||
| 				genesisState, | ||||
| 				"exported genesis state should equal initial genesis state", | ||||
| 			) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 drklee3
						drklee3