mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-27 00:35:18 +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