Address
0x9eb2ce1be2dd6947e4f5aabe33106f48861dfd74Current Holdings
$0.00
TXs sent
not counted
First Active
2023-05-13
block 17,253,209
Last Active
21 days ago
block 27,392,838
Net worth historyi
9 snapshots · to block 27,556,731coverage change 26 Augcoverage change 27 Augcoverage change 27 Augcoverage change 27 Augcoverage change 27 Aug
exact matchBorrowerOperationssolc 0.8.14+commit.80d49f37runtime exact · creation exact
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
import "./IDfrancBase.sol";
import "./IStabilityPool.sol";
import "./IDCHFToken.sol";
import "./IMONStaking.sol";
import "./ICollSurplusPool.sol";
import "./ISortedTroves.sol";
import "./IActivePool.sol";
import "./IDefaultPool.sol";
import "./IStabilityPoolManager.sol";
import "./ITroveManagerHelpers.sol";
// Common interface for the Trove Manager.
interface ITroveManager is IDfrancBase {
enum Status {
nonExistent,
active,
closedByOwner,
closedByLiquidation,
closedByRedemption
}
// Store the necessary data for a trove
struct Trove {
address asset;
uint256 debt;
uint256 coll;
uint256 stake;
Status status;
uint128 arrayIndex;
}
/*
* --- Variable container structs for liquidations ---
*
* These structs are used to hold, return and assign variables inside the liquidation functions,
* in order to avoid the error: "CompilerError: Stack too deep".
**/
struct LocalVariables_OuterLiquidationFunction {
uint256 price;
uint256 DCHFInStabPool;
bool recoveryModeAtStart;
uint256 liquidatedDebt;
uint256 liquidatedColl;
}
struct LocalVariables_InnerSingleLiquidateFunction {
uint256 collToLiquidate;
uint256 pendingDebtReward;
uint256 pendingCollReward;
}
struct LocalVariables_LiquidationSequence {
uint256 remainingDCHFInStabPool;
uint256 i;
uint256 ICR;
address user;
bool backToNormalMode;
uint256 entireSystemDebt;
uint256 entireSystemColl;
}
struct LocalVariables_AssetBorrowerPrice {
address _asset;
address _borrower;
uint256 _price;
}
struct LiquidationValues {
uint256 entireTroveDebt;
uint256 entireTroveColl;
uint256 collGasCompensation;
uint256 DCHFGasCompensation;
uint256 debtToOffset;
uint256 collToSendToSP;
uint256 debtToRedistribute;
uint256 collToRedistribute;
uint256 collSurplus;
}
struct LiquidationTotals {
uint256 totalCollInSequence;
uint256 totalDebtInSequence;
uint256 totalCollGasCompensation;
uint256 totalDCHFGasCompensation;
uint256 totalDebtToOffset;
uint256 totalCollToSendToSP;
uint256 totalDebtToRedistribute;
uint256 totalCollToRedistribute;
uint256 totalCollSurplus;
}
struct ContractsCache {
IActivePool activePool;
IDefaultPool defaultPool;
IDCHFToken dchfToken;
IMONStaking monStaking;
ISortedTroves sortedTroves;
ICollSurplusPool collSurplusPool;
address gasPoolAddress;
}
// --- Variable container structs for redemptions ---
struct RedemptionTotals {
uint256 remainingDCHF;
uint256 totalDCHFToRedeem;
uint256 totalAssetDrawn;
uint256 ETHFee;
uint256 ETHToSendToRedeemer;
uint256 decayedBaseRate;
uint256 price;
uint256 totalDCHFSupplyAtStart;
}
struct SingleRedemptionValues {
uint256 DCHFLot;
uint256 ETHLot;
bool cancelledPartial;
}
// --- Events ---
event Liquidation(
address indexed _asset,
uint256 _liquidatedDebt,
uint256 _liquidatedColl,
uint256 _collGasCompensation,
uint256 _DCHFGasCompensation
);
event Redemption(
address indexed _asset,
uint256 _attemptedDCHFAmount,
uint256 _actualDCHFAmount,
uint256 _AssetSent,
uint256 _AssetFee
);
event TroveUpdated(
address indexed _asset,
address indexed _borrower,
uint256 _debt,
uint256 _coll,
uint256 stake,
uint8 operation
);
event TroveLiquidated(
address indexed _asset,
address indexed _borrower,
uint256 _debt,
uint256 _coll,
uint8 operation
);
event BaseRateUpdated(address indexed _asset, uint256 _baseRate);
event LastFeeOpTimeUpdated(address indexed _asset, uint256 _lastFeeOpTime);
event TotalStakesUpdated(address indexed _asset, uint256 _newTotalStakes);
event SystemSnapshotsUpdated(
address indexed _asset,
uint256 _totalStakesSnapshot,
uint256 _totalCollateralSnapshot
);
event LTermsUpdated(address indexed _asset, uint256 _L_ETH, uint256 _L_DCHFDebt);
event TroveSnapshotsUpdated(address indexed _asset, uint256 _L_ETH, uint256 _L_DCHFDebt);
event TroveIndexUpdated(address indexed _asset, address _borrower, uint256 _newIndex);
event TroveUpdated(
address indexed _asset,
address indexed _borrower,
uint256 _debt,
uint256 _coll,
uint256 _stake,
TroveManagerOperation _operation
);
event TroveLiquidated(
address indexed _asset,
address indexed _borrower,
uint256 _debt,
uint256 _coll,
TroveManagerOperation _operation
);
enum TroveManagerOperation {
applyPendingRewards,
liquidateInNormalMode,
liquidateInRecoveryMode,
redeemCollateral
}
// --- Functions ---
function isContractTroveManager() external pure returns (bool);
function troveManagerHelpers() external view returns (ITroveManagerHelpers);
function setAddresses(
address _stabilityPoolManagerAddress,
address _gasPoolAddress,
address _collSurplusPoolAddress,
address _dchfTokenAddress,
address _sortedTrovesAddress,
address _monStakingAddress,
address _dfrancParamsAddress,
address _troveManagerHelpersAddress
) external;
function stabilityPoolManager() external view returns (IStabilityPoolManager);
function dchfToken() external view returns (IDCHFToken);
function monStaking() external view returns (IMONStaking);
function liquidate(address _asset, address borrower) external;
function liquidateTroves(address _asset, uint256 _n) external;
function batchLiquidateTroves(address _asset, address[] memory _troveArray) external;
function redeemCollateral(
address _asset,
uint256 _DCHFamount,
address _firstRedemptionHint,
address _upperPartialRedemptionHint,
address _lowerPartialRedemptionHint,
uint256 _partialRedemptionHintNICR,
uint256 _maxIterations,
uint256 _maxFee
) external;
}