Skip to content

Commit

Permalink
Tried to organize functions in facets
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurka-o committed May 2, 2023
1 parent f176e29 commit f59931e
Show file tree
Hide file tree
Showing 11 changed files with 966 additions and 1,021 deletions.
29 changes: 11 additions & 18 deletions packages/contracts/contracts/BorrowerOperations.sol
Original file line number Diff line number Diff line change
Expand Up @@ -585,11 +585,10 @@ contract BorrowerOperations is KumoBase, CheckContract, IBorrowerOperations {
return usdValue;
}

function _getCollChange(uint256 _collReceived, uint256 _requestedCollWithdrawal)
internal
pure
returns (uint256 collChange, bool isCollIncrease)
{
function _getCollChange(
uint256 _collReceived,
uint256 _requestedCollWithdrawal
) internal pure returns (uint256 collChange, bool isCollIncrease) {
if (_collReceived != 0) {
collChange = _collReceived;
isCollIncrease = true;
Expand Down Expand Up @@ -643,11 +642,7 @@ contract BorrowerOperations is KumoBase, CheckContract, IBorrowerOperations {
}

// Send ETH to Active Pool and increase its recorded ETH balance
function _activePoolAddColl(
address _asset,
IActivePool _activePool,
uint256 _amount
) internal {
function _activePoolAddColl(address _asset, IActivePool _activePool, uint256 _amount) internal {
// (bool success, ) = address(_activePool).call{value: _amount}("");
// require(success, "BorrowerOps: Sending ETH to ActivePool failed");
IERC20Upgradeable(_asset).safeTransferFrom(
Expand Down Expand Up @@ -685,7 +680,7 @@ contract BorrowerOperations is KumoBase, CheckContract, IBorrowerOperations {

// --- 'Require' wrapper functions ---

function _requireSingularCollChange(uint256 _collWithdrawal, uint256 _amountSent) internal view {
function _requireSingularCollChange(uint256 _collWithdrawal, uint256 _amountSent) internal pure {
require(
_collWithdrawal == 0 || _amountSent == 0,
"BorrowerOperations: Cannot withdraw and add coll"
Expand All @@ -703,7 +698,7 @@ contract BorrowerOperations is KumoBase, CheckContract, IBorrowerOperations {
uint256 _collWithdrawal,
uint256 _KUSDChange,
uint256 _amountSent
) internal view {
) internal pure {
require(
_collWithdrawal != 0 || _KUSDChange != 0 || _amountSent != 0,
"BorrowerOps: There must be either a collateral change or a debt change"
Expand Down Expand Up @@ -953,12 +948,10 @@ contract BorrowerOperations is KumoBase, CheckContract, IBorrowerOperations {
return newTCR;
}

function getCompositeDebt(address _asset, uint256 _debt)
external
view
override
returns (uint256)
{
function getCompositeDebt(
address _asset,
uint256 _debt
) external view override returns (uint256) {
return _getCompositeDebt(_asset, _debt);
}
}
195 changes: 88 additions & 107 deletions packages/contracts/contracts/Facets/TroveManagerFacet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,10 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
return s.L_KUSDDebts[_asset];
}

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

Expand Down Expand Up @@ -137,30 +136,13 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
s.L_KUSDDebts[_asset] = 0;
}

// --- Getters ---

function getTroveOwnersCount(address _asset) external view override returns (uint256) {
return s.TroveOwners[_asset].length;
}

function getTroveFromTroveOwnersArray(address _asset, uint256 _index)
external
view
override
returns (address)
{
return s.TroveOwners[_asset][_index];
}

// --- Helper functions ---

// Return the nominal collateral ratio (ICR) of a given Trove, without the price. Takes a trove's pending coll and debt rewards from redistributions into account.
function getNominalICR(address _asset, address _borrower)
public
view
override
returns (uint256)
{
function getNominalICR(
address _asset,
address _borrower
) public view override returns (uint256) {
(uint256 currentAsset, uint256 currentKUSDDebt) = _getCurrentTroveAmounts(_asset, _borrower);

uint256 NICR = KumoMath._computeNominalCR(currentAsset, currentKUSDDebt);
Expand All @@ -176,11 +158,10 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
return LibTroveManager._getCurrentICR(_asset, _borrower, _price);
}

function _getCurrentTroveAmounts(address _asset, address _borrower)
internal
view
returns (uint256, uint256)
{
function _getCurrentTroveAmounts(
address _asset,
address _borrower
) internal view returns (uint256, uint256) {
uint256 pendingReward = LibTroveManager._getPendingReward(_asset, _borrower);
uint256 pendingKUSDDebtReward = LibTroveManager._getPendingKUSDDebtReward(_asset, _borrower);

Expand All @@ -191,12 +172,10 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
}

// Get the borrower's pending accumulated ETH reward, earned by their stake
function getPendingReward(address _asset, address _borrower)
public
view
override
returns (uint256)
{
function getPendingReward(
address _asset,
address _borrower
) public view override returns (uint256) {
uint256 snapshotAsset = s.rewardSnapshots[_borrower][_asset].asset;
uint256 rewardPerUnitStaked = s.L_ASSETS[_asset] - (snapshotAsset);
if (rewardPerUnitStaked == 0 || !_isTroveActive(_asset, _borrower)) {
Expand All @@ -208,13 +187,23 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
}

// Get the borrower's pending accumulated KUSD reward, earned by their stake
function getPendingKUSDDebtReward(address _asset, address _borrower)
function getPendingKUSDDebtReward(
address _asset,
address _borrower
) external view override returns (uint256) {
return LibTroveManager._getPendingKUSDDebtReward(_asset, _borrower);
}

// Return the Troves entire debt and coll, including pending rewards from redistributions.
function getEntireDebtAndColl(
address _asset,
address _borrower
)
external
view
override
returns (uint256)
returns (uint256 debt, uint256 coll, uint256 pendingKUSDDebtReward, uint256 pendingReward)
{
return LibTroveManager._getPendingKUSDDebtReward(_asset, _borrower);
return LibTroveManager._getEntireDebtAndColl(_asset, _borrower);
}

function removeStake(address _asset, address _borrower) external override {
Expand All @@ -228,19 +217,18 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
}

// Push the owner's address to the Trove owners list, and record the corresponding array index on the Trove struct
function addTroveOwnerToArray(address _asset, address _borrower)
external
override
returns (uint256 index)
{
function addTroveOwnerToArray(
address _asset,
address _borrower
) external override returns (uint256 index) {
_requireCallerIsBorrowerOperations();
return _addTroveOwnerToArray(_asset, _borrower);
}

function _addTroveOwnerToArray(address _asset, address _borrower)
internal
returns (uint128 index)
{
function _addTroveOwnerToArray(
address _asset,
address _borrower
) internal returns (uint128 index) {
/* Max array size is 2**128 - 1, i.e. ~3e30 troves. No risk of overflow, since troves have minimum KUSD
debt of liquidation reserve plus MIN_NET_DEBT. 3e30 KUSD dwarfs the value of all wealth in the world ( which is < 1e15 USD). */

Expand All @@ -260,12 +248,10 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
return LibKumoBase._getTCR(_asset, _price);
}

function checkRecoveryMode(address _asset, uint256 _price)
external
view
override
returns (bool)
{
function checkRecoveryMode(
address _asset,
uint256 _price
) external view override returns (bool) {
return LibKumoBase._checkRecoveryMode(_asset, _price);
}

Expand All @@ -283,11 +269,10 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
return LibTroveManager._getRedemptionFee(_asset, _assetDraw);
}

function getRedemptionFeeWithDecay(address _asset, uint256 _assetDraw)
external
view
returns (uint256)
{
function getRedemptionFeeWithDecay(
address _asset,
uint256 _assetDraw
) external view returns (uint256) {
return LibTroveManager._calcRedemptionFee(getRedemptionRateWithDecay(_asset), _assetDraw);
}

Expand All @@ -309,29 +294,24 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
);
}

function getBorrowingFee(address _asset, uint256 _KUSDDebt)
external
view
override
returns (uint256)
{
function getBorrowingFee(
address _asset,
uint256 _KUSDDebt
) external view override returns (uint256) {
return _calcBorrowingFee(getBorrowingRate(_asset), _KUSDDebt);
}

function getBorrowingFeeWithDecay(address _asset, uint256 _KUSDDebt)
external
view
override
returns (uint256)
{
function getBorrowingFeeWithDecay(
address _asset,
uint256 _KUSDDebt
) external view override returns (uint256) {
return _calcBorrowingFee(getBorrowingRateWithDecay(_asset), _KUSDDebt);
}

function _calcBorrowingFee(uint256 _borrowingRate, uint256 _KUSDDebt)
internal
pure
returns (uint256)
{
function _calcBorrowingFee(
uint256 _borrowingRate,
uint256 _KUSDDebt
) internal pure returns (uint256) {
return (_borrowingRate * _KUSDDebt) / KumoMath.DECIMAL_PRECISION;
}

Expand Down Expand Up @@ -394,44 +374,49 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {
);
}

// --- Getters ---

function getTroveOwnersCount(address _asset) external view override returns (uint256) {
return s.TroveOwners[_asset].length;
}

function getTroveFromTroveOwnersArray(
address _asset,
uint256 _index
) external view override returns (address) {
return s.TroveOwners[_asset][_index];
}

// --- Trove property getters ---
function _isTroveActive(address _asset, address _borrower) internal view returns (bool) {
return this.getTroveStatus(_asset, _borrower) == uint256(Status.active);
}

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

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

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

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

Expand All @@ -445,11 +430,7 @@ contract TroveManagerFacet is ITroveManagerFacet, Modifiers {

// --- Trove property setters, called by BorrowerOperations ---

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

0 comments on commit f59931e

Please sign in to comment.