mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-04-04 15:55:23 +00:00 
			
		
		
		
	add cdp math fix and debugging
This commit is contained in:
		
							parent
							
								
									5987d966ef
								
							
						
					
					
						commit
						7c477eb75d
					
				| @ -1,6 +1,8 @@ | |||||||
| package keeper | package keeper | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 
 | ||||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
| 
 | 
 | ||||||
| 	"github.com/kava-labs/kava/x/cdp/types" | 	"github.com/kava-labs/kava/x/cdp/types" | ||||||
| @ -60,6 +62,7 @@ func (k Keeper) AuctionCollateral(ctx sdk.Context, deposits types.Deposits, debt | |||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return err | 				return err | ||||||
| 			} | 			} | ||||||
|  | 			fmt.Printf("AuctionCollateral:createFromD:loop%d:liquidator:%s\n", i, k.supplyKeeper.GetModuleAccount(ctx, types.LiquidatorMacc)) | ||||||
| 			debt = debt.Sub(debtChange) | 			debt = debt.Sub(debtChange) | ||||||
| 			totalCollateral = totalCollateral.Sub(collateralChange) | 			totalCollateral = totalCollateral.Sub(collateralChange) | ||||||
| 			dep.Amount = sdk.NewCoin(collateralDenom, collateralAmount.Sub(collateralChange)) | 			dep.Amount = sdk.NewCoin(collateralDenom, collateralAmount.Sub(collateralChange)) | ||||||
| @ -68,7 +71,7 @@ func (k Keeper) AuctionCollateral(ctx sdk.Context, deposits types.Deposits, debt | |||||||
| 			if !dep.Amount.IsZero() { | 			if !dep.Amount.IsZero() { | ||||||
| 				// figure out how much debt this deposit accounts for
 | 				// figure out how much debt this deposit accounts for
 | ||||||
| 				// (depositCollateral / totalCollateral) * totalDebtFromCDP
 | 				// (depositCollateral / totalCollateral) * totalDebtFromCDP
 | ||||||
| 				debtCoveredByDeposit := (collateralAmount.Quo(totalCollateral)).Mul(debt) | 				debtCoveredByDeposit := collateralAmount.Mul(debt).Quo(totalCollateral) // integer division (ie rounds down)
 | ||||||
| 				// if adding this deposit to the other partial deposits is less than a lot
 | 				// if adding this deposit to the other partial deposits is less than a lot
 | ||||||
| 				if (partialAuctionDeposits.SumCollateral().Add(collateralAmount)).LT(auctionSize) { | 				if (partialAuctionDeposits.SumCollateral().Add(collateralAmount)).LT(auctionSize) { | ||||||
| 					// append the deposit to the partial deposits and zero out the deposit
 | 					// append the deposit to the partial deposits and zero out the deposit
 | ||||||
| @ -79,7 +82,7 @@ func (k Keeper) AuctionCollateral(ctx sdk.Context, deposits types.Deposits, debt | |||||||
| 					// if the sum of partial deposits now makes a lot
 | 					// if the sum of partial deposits now makes a lot
 | ||||||
| 					partialCollateral := sdk.NewCoin(collateralDenom, auctionSize.Sub(partialAuctionDeposits.SumCollateral())) | 					partialCollateral := sdk.NewCoin(collateralDenom, auctionSize.Sub(partialAuctionDeposits.SumCollateral())) | ||||||
| 					partialAmount := partialCollateral.Amount | 					partialAmount := partialCollateral.Amount | ||||||
| 					partialDebt := (partialAmount.Quo(collateralAmount)).Mul(debtCoveredByDeposit) | 					partialDebt := partialAmount.Mul(debtCoveredByDeposit).Quo(collateralAmount) // integer division (ie rounds down)
 | ||||||
| 
 | 
 | ||||||
| 					// create a partial deposit from the deposit
 | 					// create a partial deposit from the deposit
 | ||||||
| 					partialDep := newPartialDeposit(dep.Depositor, partialCollateral, partialDebt) | 					partialDep := newPartialDeposit(dep.Depositor, partialCollateral, partialDebt) | ||||||
| @ -90,6 +93,7 @@ func (k Keeper) AuctionCollateral(ctx sdk.Context, deposits types.Deposits, debt | |||||||
| 					if err != nil { | 					if err != nil { | ||||||
| 						return err | 						return err | ||||||
| 					} | 					} | ||||||
|  | 					fmt.Printf("AuctionCollateral:createFromPD:loop%d:liquidator:%s\n", i, k.supplyKeeper.GetModuleAccount(ctx, types.LiquidatorMacc)) | ||||||
| 					debt = debt.Sub(debtChange) | 					debt = debt.Sub(debtChange) | ||||||
| 					totalCollateral = totalCollateral.Sub(collateralChange) | 					totalCollateral = totalCollateral.Sub(collateralChange) | ||||||
| 					// reset partial deposits and update the deposit amount
 | 					// reset partial deposits and update the deposit amount
 | ||||||
|  | |||||||
| @ -32,6 +32,7 @@ func (k Keeper) SeizeCollateral(ctx sdk.Context, cdp types.CDP) error { | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | 	fmt.Printf("SeizeCollateral:liquidator: %s\n", k.supplyKeeper.GetModuleAccount(ctx, types.LiquidatorMacc)) | ||||||
| 
 | 
 | ||||||
| 	// liquidate deposits and send collateral from cdp to liquidator
 | 	// liquidate deposits and send collateral from cdp to liquidator
 | ||||||
| 	for _, dep := range deposits { | 	for _, dep := range deposits { | ||||||
| @ -49,6 +50,7 @@ func (k Keeper) SeizeCollateral(ctx sdk.Context, cdp types.CDP) error { | |||||||
| 		} | 		} | ||||||
| 		k.DeleteDeposit(ctx, dep.CdpID, dep.Depositor) | 		k.DeleteDeposit(ctx, dep.CdpID, dep.Depositor) | ||||||
| 	} | 	} | ||||||
|  | 	fmt.Printf("SeizeCollateral:liquidator: %s\n", k.supplyKeeper.GetModuleAccount(ctx, types.LiquidatorMacc)) | ||||||
| 	err = k.AuctionCollateral(ctx, deposits, debt, cdp.Principal.Denom) | 	err = k.AuctionCollateral(ctx, deposits, debt, cdp.Principal.Denom) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ package keeper_test | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"errors" | 	"errors" | ||||||
|  | 	"fmt" | ||||||
| 	"math/rand" | 	"math/rand" | ||||||
| 	"testing" | 	"testing" | ||||||
| 	"time" | 	"time" | ||||||
| @ -166,6 +167,10 @@ func (suite *SeizeTestSuite) TestSeizeCollateralMultiDeposit() { | |||||||
| 	p := cdp.Principal.Amount | 	p := cdp.Principal.Amount | ||||||
| 	cl := cdp.Collateral.Amount | 	cl := cdp.Collateral.Amount | ||||||
| 	tpb := suite.keeper.GetTotalPrincipal(suite.ctx, "xrp", "usdx") | 	tpb := suite.keeper.GetTotalPrincipal(suite.ctx, "xrp", "usdx") | ||||||
|  | 	fmt.Printf("%s\n", cdp) | ||||||
|  | 	fmt.Printf("%s\n", deposits) | ||||||
|  | 	fmt.Printf("cdpaccount: %s\n", suite.app.GetSupplyKeeper().GetModuleAccount(suite.ctx, types.ModuleName)) | ||||||
|  | 	fmt.Printf("liquidator: %s\n", suite.app.GetSupplyKeeper().GetModuleAccount(suite.ctx, types.LiquidatorMacc)) | ||||||
| 	err = suite.keeper.SeizeCollateral(suite.ctx, cdp) | 	err = suite.keeper.SeizeCollateral(suite.ctx, cdp) | ||||||
| 	suite.NoError(err) | 	suite.NoError(err) | ||||||
| 	tpa := suite.keeper.GetTotalPrincipal(suite.ctx, "xrp", "usdx") | 	tpa := suite.keeper.GetTotalPrincipal(suite.ctx, "xrp", "usdx") | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 rhuairahrighairigh
						rhuairahrighairigh