@@ -32,6 +32,10 @@ function wDivDown(uint256 x, uint256 y) returns uint256 {
32
32
return summaryMulDivDown (x , Util .wad (), y );
33
33
}
34
34
35
+ function wDivUp (uint256 x , uint256 y ) returns uint256 {
36
+ return summaryMulDivUp (x , Util .wad (), y );
37
+ }
38
+
35
39
rule liquidateImprovePosition (MorphoLiquidateHarness .MarketParams marketParams , uint256 seizedAssetsInput , uint256 repaidSharesInput ) {
36
40
MorphoLiquidateHarness .Id id = Util .libId (marketParams );
37
41
@@ -56,13 +60,21 @@ rule liquidateImprovePosition(MorphoLiquidateHarness.MarketParams marketParams,
56
60
(seizedAssets , repaidShares , repaidAssets , lif ) = liquidateView (marketParams , seizedAssetsInput , repaidSharesInput , collateralPrice );
57
61
require repaidAssets > 0 ;
58
62
59
- uint256 borrowerCollateralQuoted = summaryMulDivUp (borrowerCollateral , collateralPrice , Util .oraclePriceScale ());
63
+ uint256 borrowerCollateralQuoted = summaryMulDivDown (borrowerCollateral , collateralPrice , Util .oraclePriceScale ());
60
64
require borrowerCollateralQuoted >= summaryMulDivUp (lif , borrowerAssets , Util .wad ());
61
65
assert wDivDown (borrowerCollateralQuoted , borrowerAssets ) >= lif ;
62
66
63
67
uint256 seizedCollateralQuoted = summaryMulDivUp (seizedAssets , collateralPrice , Util .oraclePriceScale ());
64
68
assert summaryMulDivDown (lif , repaidAssets , Util .wad ()) >= seizedCollateralQuoted ;
65
- assert lif >= wDivDown (seizedCollateralQuoted , repaidAssets );
69
+ assert lif >= wDivUp (seizedCollateralQuoted , repaidAssets );
70
+
71
+ uint256 newBorrowerShares = require_uint256 (borrowerShares - repaidShares );
72
+ uint256 newTotalShares = require_uint256 (virtualTotalBorrowShares (id ) - repaidShares );
73
+ uint256 newTotalAssets = require_uint256 (virtualTotalBorrowAssets (id ) - repaidAssets );
74
+
75
+ require seizedAssets <= borrowerCollateral ;
76
+
77
+ uint256 newBorrowerAssets = summaryMulDivUp (newBorrowerShares , newTotalAssets , newTotalShares );
66
78
67
- // assert repaidShares * borrowerCollateral > seizedAssets * borrowerShares ;
79
+ assert repaidShares * borrowerCollateral >= seizedAssets * borrowerShares ;
68
80
}
0 commit comments