mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-10-31 22:37:26 +00:00 
			
		
		
		
	fix: enforce max number of liquidations in cdp begin blocker (#849)
* fix: enforce max number of liquidations in cdp begin blocker * address review comments
This commit is contained in:
		
							parent
							
								
									3a3dd7970d
								
							
						
					
					
						commit
						e4daffcaf8
					
				| @ -35,7 +35,7 @@ func BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock, k Keeper) { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 
 | ||||
| 		err = k.LiquidateCdps(ctx, cp.LiquidationMarketID, cp.Type, cp.LiquidationRatio) | ||||
| 		err = k.LiquidateCdps(ctx, cp.LiquidationMarketID, cp.Type, cp.LiquidationRatio, cp.CheckCollateralizationIndexCount) | ||||
| 		if err != nil && !errors.Is(err, pricefeedtypes.ErrNoValidPrice) { | ||||
| 			panic(err) | ||||
| 		} | ||||
|  | ||||
| @ -135,7 +135,7 @@ func (suite *ModuleTestSuite) TestBeginBlock() { | ||||
| 	finalXrpCollateral := acc.GetCoins().AmountOf("xrp") | ||||
| 	seizedXrpCollateral := originalXrpCollateral.Sub(finalXrpCollateral) | ||||
| 	xrpLiquidations := int(seizedXrpCollateral.Quo(i(10000000000)).Int64()) | ||||
| 	suite.Equal(len(suite.liquidations.xrp), xrpLiquidations) | ||||
| 	suite.Equal(10, xrpLiquidations) | ||||
| 
 | ||||
| 	acc = sk.GetModuleAccount(suite.ctx, cdp.ModuleName) | ||||
| 	originalBtcCollateral := acc.GetCoins().AmountOf("btc") | ||||
| @ -145,10 +145,10 @@ func (suite *ModuleTestSuite) TestBeginBlock() { | ||||
| 	finalBtcCollateral := acc.GetCoins().AmountOf("btc") | ||||
| 	seizedBtcCollateral := originalBtcCollateral.Sub(finalBtcCollateral) | ||||
| 	btcLiquidations := int(seizedBtcCollateral.Quo(i(100000000)).Int64()) | ||||
| 	suite.Equal(len(suite.liquidations.btc), btcLiquidations) | ||||
| 	suite.Equal(10, btcLiquidations) | ||||
| 
 | ||||
| 	acc = sk.GetModuleAccount(suite.ctx, auction.ModuleName) | ||||
| 	suite.Equal(suite.liquidations.debt, acc.GetCoins().AmountOf("debt").Int64()) | ||||
| 	suite.Equal(int64(71955653865), acc.GetCoins().AmountOf("debt").Int64()) | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -87,7 +87,7 @@ func (k Keeper) SeizeCollateral(ctx sdk.Context, cdp types.CDP) error { | ||||
| } | ||||
| 
 | ||||
| // LiquidateCdps seizes collateral from all CDPs below the input liquidation ratio
 | ||||
| func (k Keeper) LiquidateCdps(ctx sdk.Context, marketID string, collateralType string, liquidationRatio sdk.Dec) error { | ||||
| func (k Keeper) LiquidateCdps(ctx sdk.Context, marketID string, collateralType string, liquidationRatio sdk.Dec, count sdk.Int) error { | ||||
| 	price, err := k.pricefeedKeeper.GetCurrentPrice(ctx, marketID) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| @ -100,7 +100,7 @@ func (k Keeper) LiquidateCdps(ctx sdk.Context, marketID string, collateralType s | ||||
| 	// liquidation ratio = 1.5
 | ||||
| 	// normalizedRatio = (1/(0.5/1.5)) = 3
 | ||||
| 	normalizedRatio := sdk.OneDec().Quo(priceDivLiqRatio) | ||||
| 	cdpsToLiquidate := k.GetAllCdpsByCollateralTypeAndRatio(ctx, collateralType, normalizedRatio) | ||||
| 	cdpsToLiquidate := k.GetSliceOfCDPsByRatioAndType(ctx, count, normalizedRatio, collateralType) | ||||
| 	for _, c := range cdpsToLiquidate { | ||||
| 		k.hooks.BeforeCDPModified(ctx, c) | ||||
| 		err := k.SeizeCollateral(ctx, c) | ||||
|  | ||||
| @ -188,12 +188,12 @@ func (suite *SeizeTestSuite) TestLiquidateCdps() { | ||||
| 	suite.setPrice(d("0.2"), "xrp:usd") | ||||
| 	p, found := suite.keeper.GetCollateral(suite.ctx, "xrp-a") | ||||
| 	suite.True(found) | ||||
| 	suite.keeper.LiquidateCdps(suite.ctx, "xrp:usd", "xrp-a", p.LiquidationRatio) | ||||
| 	suite.keeper.LiquidateCdps(suite.ctx, "xrp:usd", "xrp-a", p.LiquidationRatio, p.CheckCollateralizationIndexCount) | ||||
| 	acc = sk.GetModuleAccount(suite.ctx, types.ModuleName) | ||||
| 	finalXrpCollateral := acc.GetCoins().AmountOf("xrp") | ||||
| 	seizedXrpCollateral := originalXrpCollateral.Sub(finalXrpCollateral) | ||||
| 	xrpLiquidations := int(seizedXrpCollateral.Quo(i(10000000000)).Int64()) | ||||
| 	suite.Equal(len(suite.liquidations.xrp), xrpLiquidations) | ||||
| 	suite.Equal(10, xrpLiquidations) | ||||
| } | ||||
| 
 | ||||
| func (suite *SeizeTestSuite) TestApplyLiquidationPenalty() { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Kevin Davis
						Kevin Davis