Skip to content

Commit

Permalink
Change order for Troves and rewardSnapshot
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurka-o committed Jun 26, 2023
1 parent 4652566 commit c290bae
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 120 deletions.
48 changes: 24 additions & 24 deletions packages/contracts/contracts/Facets/TroveManagerFacet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
return s.lastFeeOperationTime[_asset];
}

function Troves(address _borrower, address _asset) external view returns (Trove memory) {
return s.Troves[_borrower][_asset];
function Troves(address _asset, address _borrower) external view returns (Trove memory) {
return s.Troves[_asset][_borrower];
}

function totalStakes(address _asset) external view returns (uint256) {
Expand All @@ -84,10 +84,10 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
}

function rewardSnapshots(
address _borrower,
address _asset
address _asset,
address _borrower
) external view returns (RewardSnapshot memory) {
return s.rewardSnapshots[_borrower][_asset];
return s.rewardSnapshots[_asset][_borrower];
}

function TroveOwners(address _asset, uint256 _index) external view returns (address) {
Expand Down Expand Up @@ -165,8 +165,8 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
uint256 pendingReward = LibTroveManager._getPendingReward(_asset, _borrower);
uint256 pendingKUSDDebtReward = LibTroveManager._getPendingKUSDDebtReward(_asset, _borrower);

uint256 currentAsset = s.Troves[_borrower][_asset].coll + pendingReward;
uint256 currentKUSDDebt = s.Troves[_borrower][_asset].debt + pendingKUSDDebtReward;
uint256 currentAsset = s.Troves[_asset][_borrower].coll + pendingReward;
uint256 currentKUSDDebt = s.Troves[_asset][_borrower].debt + pendingKUSDDebtReward;

return (currentAsset, currentKUSDDebt);
}
Expand All @@ -176,12 +176,12 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
address _asset,
address _borrower
) public view override returns (uint256) {
uint256 snapshotAsset = s.rewardSnapshots[_borrower][_asset].asset;
uint256 snapshotAsset = s.rewardSnapshots[_asset][_borrower].asset;
uint256 rewardPerUnitStaked = s.L_ASSETS[_asset] - (snapshotAsset);
if (rewardPerUnitStaked == 0 || !_isTroveActive(_asset, _borrower)) {
return 0;
}
uint256 stake = s.Troves[_borrower][_asset].stake;
uint256 stake = s.Troves[_asset][_borrower].stake;
uint256 pendingAssetReward = (stake * (rewardPerUnitStaked)) / (KumoMath.DECIMAL_PRECISION);
return pendingAssetReward;
}
Expand Down Expand Up @@ -237,7 +237,7 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {

// Record the index of the new Troveowner on their Trove struct
index = uint128(s.TroveOwners[_asset].length - 1);
s.Troves[_borrower][_asset].arrayIndex = index;
s.Troves[_asset][_borrower].arrayIndex = index;

return index;
}
Expand Down Expand Up @@ -396,28 +396,28 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
address _asset,
address _borrower
) external view override returns (uint256) {
return uint256(s.Troves[_borrower][_asset].status);
return uint256(s.Troves[_asset][_borrower].status);
}

function getTroveStake(
address _asset,
address _borrower
) external view override returns (uint256) {
return s.Troves[_borrower][_asset].stake;
return s.Troves[_asset][_borrower].stake;
}

function getTroveDebt(
address _asset,
address _borrower
) external view override returns (uint256) {
return s.Troves[_borrower][_asset].debt;
return s.Troves[_asset][_borrower].debt;
}

function getTroveColl(
address _asset,
address _borrower
) external view override returns (uint256) {
return s.Troves[_borrower][_asset].coll;
return s.Troves[_asset][_borrower].coll;
}

function getEntireSystemColl(address _asset) external view returns (uint256 entireSystemColl) {
Expand All @@ -432,8 +432,8 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {

function setTroveStatus(address _asset, address _borrower, uint256 _num) external override {
_requireCallerIsBorrowerOperations();
s.Troves[_borrower][_asset].asset = _asset;
s.Troves[_borrower][_asset].status = Status(_num);
s.Troves[_asset][_borrower].asset = _asset;
s.Troves[_asset][_borrower].status = Status(_num);
}

function increaseTroveColl(
Expand All @@ -442,8 +442,8 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
uint256 _collIncrease
) external override returns (uint256) {
_requireCallerIsBorrowerOperations();
uint256 newColl = s.Troves[_borrower][_asset].coll + _collIncrease;
s.Troves[_borrower][_asset].coll = newColl;
uint256 newColl = s.Troves[_asset][_borrower].coll + _collIncrease;
s.Troves[_asset][_borrower].coll = newColl;
return newColl;
}

Expand All @@ -453,8 +453,8 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
uint256 _collDecrease
) external override returns (uint256) {
_requireCallerIsBorrowerOperations();
uint256 newColl = s.Troves[_borrower][_asset].coll - _collDecrease;
s.Troves[_borrower][_asset].coll = newColl;
uint256 newColl = s.Troves[_asset][_borrower].coll - _collDecrease;
s.Troves[_asset][_borrower].coll = newColl;
return newColl;
}

Expand All @@ -464,8 +464,8 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
uint256 _debtIncrease
) external override returns (uint256) {
_requireCallerIsBorrowerOperations();
uint256 newDebt = s.Troves[_borrower][_asset].debt + _debtIncrease;
s.Troves[_borrower][_asset].debt = newDebt;
uint256 newDebt = s.Troves[_asset][_borrower].debt + _debtIncrease;
s.Troves[_asset][_borrower].debt = newDebt;
return newDebt;
}

Expand All @@ -475,8 +475,8 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
uint256 _debtDecrease
) external override returns (uint256) {
_requireCallerIsBorrowerOperations();
uint256 newDebt = s.Troves[_borrower][_asset].debt - _debtDecrease;
s.Troves[_borrower][_asset].debt = newDebt;
uint256 newDebt = s.Troves[_asset][_borrower].debt - _debtDecrease;
s.Troves[_asset][_borrower].debt = newDebt;
return newDebt;
}
}
36 changes: 18 additions & 18 deletions packages/contracts/contracts/Facets/TroveRedemptorFacet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@ contract TroveRedemptorFacet is ITroveRedemptorFacet, Modifiers {
for (vars.i = 0; vars.i < _troveArray.length; vars.i++) {
vars.user = _troveArray[vars.i];
// Skip non-active troves
if (s.Troves[vars.user][_asset].status != Status.active) {
if (s.Troves[_asset][vars.user].status != Status.active) {
continue;
}
vars.ICR = LibTroveManager._getCurrentICR(_asset, vars.user, _price);
Expand Down Expand Up @@ -866,15 +866,15 @@ contract TroveRedemptorFacet is ITroveRedemptorFacet, Modifiers {
// Determine the remaining amount (lot) to be redeemed, capped by the entire debt of the Trove minus the liquidation reserve
singleRedemption.KUSDLot = KumoMath._min(
_maxKUSDamount,
s.Troves[_borrower][vars._asset].debt - s.kumoParams.KUSD_GAS_COMPENSATION(_asset)
s.Troves[vars._asset][_borrower].debt - s.kumoParams.KUSD_GAS_COMPENSATION(_asset)
);

// Get the ETHLot of equivalent value in USD
singleRedemption.AssetLot = (singleRedemption.KUSDLot * KumoMath.DECIMAL_PRECISION) / _price;

// Decrease the debt and collateral of the current Trove according to the KUSD lot and corresponding Asset to send
uint256 newDebt = s.Troves[vars._borrower][vars._asset].debt - singleRedemption.KUSDLot;
uint256 newColl = s.Troves[vars._borrower][vars._asset].coll - singleRedemption.AssetLot;
uint256 newDebt = s.Troves[vars._asset][vars._borrower].debt - singleRedemption.KUSDLot;
uint256 newColl = s.Troves[vars._asset][vars._borrower].coll - singleRedemption.AssetLot;

if (newDebt == s.kumoParams.KUSD_GAS_COMPENSATION(vars._asset)) {
// No debt left in the Trove (except for the liquidation reserve), therefore the trove gets closed
Expand Down Expand Up @@ -920,16 +920,16 @@ contract TroveRedemptorFacet is ITroveRedemptorFacet, Modifiers {
_lowerPartialRedemptionHint
);

s.Troves[vars._borrower][vars._asset].debt = newDebt;
s.Troves[vars._borrower][vars._asset].coll = newColl;
s.Troves[vars._asset][vars._borrower].debt = newDebt;
s.Troves[vars._asset][vars._borrower].coll = newColl;
_updateStakeAndTotalStakes(vars._asset, vars._borrower);

emit TroveUpdated(
vars._asset,
vars._borrower,
newDebt,
newColl,
s.Troves[vars._borrower][vars._asset].stake,
s.Troves[vars._asset][vars._borrower].stake,
TroveManagerOperation.redeemCollateral
);
}
Expand Down Expand Up @@ -1172,7 +1172,7 @@ contract TroveRedemptorFacet is ITroveRedemptorFacet, Modifiers {
return false;
}

return (s.rewardSnapshots[_borrower][_asset].asset < s.L_ASSETS[_asset]);
return (s.rewardSnapshots[_asset][_borrower].asset < s.L_ASSETS[_asset]);
}

function applyPendingRewards(address _asset, address _borrower) external {
Expand All @@ -1193,9 +1193,9 @@ contract TroveRedemptorFacet is ITroveRedemptorFacet, Modifiers {
);

// Apply pending rewards to trove's state
s.Troves[_borrower][_asset].coll = s.Troves[_borrower][_asset].coll + pendingReward;
s.Troves[_borrower][_asset].debt =
s.Troves[_borrower][_asset].debt +
s.Troves[_asset][_borrower].coll = s.Troves[_asset][_borrower].coll + pendingReward;
s.Troves[_asset][_borrower].debt =
s.Troves[_asset][_borrower].debt +
pendingKUSDDebtReward;

LibTroveManager._updateTroveRewardSnapshots(_asset, _borrower);
Expand All @@ -1210,17 +1210,17 @@ contract TroveRedemptorFacet is ITroveRedemptorFacet, Modifiers {
emit TroveUpdated(
_asset,
_borrower,
s.Troves[_borrower][_asset].debt,
s.Troves[_borrower][_asset].coll,
s.Troves[_borrower][_asset].stake,
s.Troves[_asset][_borrower].debt,
s.Troves[_asset][_borrower].coll,
s.Troves[_asset][_borrower].stake,
TroveManagerOperation.applyPendingRewards
);
}
}

function _requireTroveIsActive(address _asset, address _borrower) internal view {
require(
s.Troves[_borrower][_asset].status == Status.active,
s.Troves[_asset][_borrower].status == Status.active,
"TroveManager: Trove does not exist or is closed"
);
}
Expand Down Expand Up @@ -1276,9 +1276,9 @@ contract TroveRedemptorFacet is ITroveRedemptorFacet, Modifiers {
address _asset,
address _borrower
) internal returns (uint256) {
uint256 newStake = _computeNewStake(_asset, s.Troves[_borrower][_asset].coll);
uint256 oldStake = s.Troves[_borrower][_asset].stake;
s.Troves[_borrower][_asset].stake = newStake;
uint256 newStake = _computeNewStake(_asset, s.Troves[_asset][_borrower].coll);
uint256 oldStake = s.Troves[_asset][_borrower].stake;
s.Troves[_asset][_borrower].stake = newStake;

s.totalStakes[_asset] = s.totalStakes[_asset] - oldStake + newStake;
emit TotalStakesUpdated(_asset, s.totalStakes[_asset]);
Expand Down
42 changes: 21 additions & 21 deletions packages/contracts/contracts/Libraries/LibTroveManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ library LibTroveManager {
uint256 pendingReward = _getPendingReward(_asset, _borrower);
uint256 pendingKUSDDebtReward = _getPendingKUSDDebtReward(_asset, _borrower);

uint256 currentAsset = s.Troves[_borrower][_asset].coll + pendingReward;
uint256 currentKUSDDebt = s.Troves[_borrower][_asset].debt + pendingKUSDDebtReward;
uint256 currentAsset = s.Troves[_asset][_borrower].coll + pendingReward;
uint256 currentKUSDDebt = s.Troves[_asset][_borrower].debt + pendingKUSDDebtReward;

return (currentAsset, currentKUSDDebt);
}
Expand All @@ -55,12 +55,12 @@ library LibTroveManager {
function _getPendingReward(address _asset, address _borrower) internal view returns (uint256) {
AppStorage storage s = LibAppStorage.diamondStorage();

uint256 snapshotAsset = s.rewardSnapshots[_borrower][_asset].asset;
uint256 snapshotAsset = s.rewardSnapshots[_asset][_borrower].asset;
uint256 rewardPerUnitStaked = s.L_ASSETS[_asset] - snapshotAsset;
if (rewardPerUnitStaked == 0 || !_isTroveActive(_asset, _borrower)) {
return 0;
}
uint256 stake = s.Troves[_borrower][_asset].stake;
uint256 stake = s.Troves[_asset][_borrower].stake;
uint256 pendingAssetReward = (stake * rewardPerUnitStaked) / KumoMath.DECIMAL_PRECISION;
return pendingAssetReward;
}
Expand All @@ -72,7 +72,7 @@ library LibTroveManager {
function _getTroveStatus(address _asset, address _borrower) internal view returns (uint256) {
AppStorage storage s = LibAppStorage.diamondStorage();

return uint256(s.Troves[_borrower][_asset].status);
return uint256(s.Troves[_asset][_borrower].status);
}

// Get the borrower's pending accumulated KUSD reward, earned by their stake
Expand All @@ -82,14 +82,14 @@ library LibTroveManager {
) internal view returns (uint256) {
AppStorage storage s = LibAppStorage.diamondStorage();

uint256 snapshotKUSDDebt = s.rewardSnapshots[_borrower][_asset].KUSDDebt;
uint256 snapshotKUSDDebt = s.rewardSnapshots[_asset][_borrower].KUSDDebt;
uint256 rewardPerUnitStaked = s.L_KUSDDebts[_asset] - snapshotKUSDDebt;

if (rewardPerUnitStaked == 0 || !_isTroveActive(_asset, _borrower)) {
return 0;
}

uint256 stake = s.Troves[_borrower][_asset].stake;
uint256 stake = s.Troves[_asset][_borrower].stake;

uint256 pendingKUSDDebtReward = (stake * rewardPerUnitStaked) / KumoMath.DECIMAL_PRECISION;

Expand Down Expand Up @@ -140,9 +140,9 @@ library LibTroveManager {
function _removeStake(address _asset, address _borrower) internal {
AppStorage storage s = LibAppStorage.diamondStorage();

uint256 stake = s.Troves[_borrower][_asset].stake;
uint256 stake = s.Troves[_asset][_borrower].stake;
s.totalStakes[_asset] = s.totalStakes[_asset] - stake;
s.Troves[_borrower][_asset].stake = 0;
s.Troves[_asset][_borrower].stake = 0;
}

function _closeTrove(address _asset, address _borrower, Status closedStatus) internal {
Expand All @@ -153,12 +153,12 @@ library LibTroveManager {
uint256 TroveOwnersArrayLength = s.TroveOwners[_asset].length;
_requireMoreThanOneTroveInSystem(_asset, TroveOwnersArrayLength);

s.Troves[_borrower][_asset].status = closedStatus;
s.Troves[_borrower][_asset].coll = 0;
s.Troves[_borrower][_asset].debt = 0;
s.Troves[_asset][_borrower].status = closedStatus;
s.Troves[_asset][_borrower].coll = 0;
s.Troves[_asset][_borrower].debt = 0;

s.rewardSnapshots[_borrower][_asset].asset = 0;
s.rewardSnapshots[_borrower][_asset].KUSDDebt = 0;
s.rewardSnapshots[_asset][_borrower].asset = 0;
s.rewardSnapshots[_asset][_borrower].KUSDDebt = 0;

_removeTroveOwner(_asset, _borrower, TroveOwnersArrayLength);
s.sortedTroves.remove(_asset, _borrower);
Expand Down Expand Up @@ -187,11 +187,11 @@ library LibTroveManager {
) internal {
AppStorage storage s = LibAppStorage.diamondStorage();

Status troveStatus = s.Troves[_borrower][_asset].status;
Status troveStatus = s.Troves[_asset][_borrower].status;
// It’s set in caller function `_closeTrove`
assert(troveStatus != Status.nonExistent && troveStatus != Status.active);

uint128 index = s.Troves[_borrower][_asset].arrayIndex;
uint128 index = s.Troves[_asset][_borrower].arrayIndex;
uint256 length = TroveOwnersArrayLength;
uint256 idxLast = length - 1;

Expand All @@ -200,7 +200,7 @@ library LibTroveManager {
address addressToMove = s.TroveOwners[_asset][idxLast];

s.TroveOwners[_asset][index] = addressToMove;
s.Troves[addressToMove][_asset].arrayIndex = index;
s.Troves[_asset][addressToMove].arrayIndex = index;
emit TroveIndexUpdated(_asset, addressToMove, index);

s.TroveOwners[_asset].pop();
Expand All @@ -209,8 +209,8 @@ library LibTroveManager {
function _updateTroveRewardSnapshots(address _asset, address _borrower) internal {
AppStorage storage s = LibAppStorage.diamondStorage();

s.rewardSnapshots[_borrower][_asset].asset = s.L_ASSETS[_asset];
s.rewardSnapshots[_borrower][_asset].KUSDDebt = s.L_KUSDDebts[_asset];
s.rewardSnapshots[_asset][_borrower].asset = s.L_ASSETS[_asset];
s.rewardSnapshots[_asset][_borrower].KUSDDebt = s.L_KUSDDebts[_asset];
emit TroveSnapshotsUpdated(_asset, s.L_ASSETS[_asset], s.L_KUSDDebts[_asset]);
}

Expand Down Expand Up @@ -256,8 +256,8 @@ library LibTroveManager {
{
AppStorage storage s = LibAppStorage.diamondStorage();

debt = s.Troves[_borrower][_asset].debt;
coll = s.Troves[_borrower][_asset].coll;
debt = s.Troves[_asset][_borrower].debt;
coll = s.Troves[_asset][_borrower].coll;

pendingKUSDDebtReward = _getPendingKUSDDebtReward(_asset, _borrower);
pendingReward = _getPendingReward(_asset, _borrower);
Expand Down
Loading

0 comments on commit c290bae

Please sign in to comment.