Skip to content

Commit 40e064d

Browse files
Add decrement prepaid bad debt method (#458)
1 parent bcfb80a commit 40e064d

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

x/perp/keeper/state.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,3 +218,21 @@ func (pbd PrepaidBadDebtState) Increment(ctx sdk.Context, denom string, incremen
218218

219219
return amount
220220
}
221+
222+
/*
223+
Decrements the amount of bad debt prepaid by denom.
224+
225+
The lowest it can be decremented to is zero. Trying to decrement a prepaid bad
226+
debt balance to below zero will clip it at zero.
227+
228+
*/
229+
func (pbd PrepaidBadDebtState) Decrement(ctx sdk.Context, denom string, decrement sdk.Int) (
230+
amount sdk.Int,
231+
) {
232+
kv := pbd.getKVStore(ctx)
233+
amount = sdk.MaxInt(pbd.Get(ctx, denom).Sub(decrement), sdk.ZeroInt())
234+
235+
kv.Set([]byte(denom), sdk.Uint64ToBigEndian(amount.Uint64()))
236+
237+
return amount
238+
}

x/perp/keeper/state_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,18 @@ func TestPrepaidBadDebtState(t *testing.T) {
2626

2727
amount = perpKeeper.PrepaidBadDebtState().Get(ctx, "NUSD")
2828
assert.EqualValues(t, sdk.NewInt(150), amount)
29+
30+
t.Log("decrement and check")
31+
amount = perpKeeper.PrepaidBadDebtState().Decrement(ctx, "NUSD", sdk.NewInt(75))
32+
assert.EqualValues(t, sdk.NewInt(75), amount)
33+
34+
amount = perpKeeper.PrepaidBadDebtState().Get(ctx, "NUSD")
35+
assert.EqualValues(t, sdk.NewInt(75), amount)
36+
37+
t.Log("decrement to below zero and check")
38+
amount = perpKeeper.PrepaidBadDebtState().Decrement(ctx, "NUSD", sdk.NewInt(1000))
39+
assert.EqualValues(t, sdk.ZeroInt(), amount)
40+
41+
amount = perpKeeper.PrepaidBadDebtState().Get(ctx, "NUSD")
42+
assert.EqualValues(t, sdk.ZeroInt(), amount)
2943
}

0 commit comments

Comments
 (0)