SafetyModule
Inherits: ISafetyModule, IncreAccessControl, Pausable, ReentrancyGuard
Author: webthethird
Handles reward accrual and distribution for staked tokens, and allows governance to auction a percentage of user funds in the event of an insolvency in the vault
State Variables
governance
Address of the governance contract
address public immutable governance;
auctionModule
Address of the auction module, which sells user funds in the event of an insolvency
IAuctionModule public auctionModule;
smRewardDistributor
Address of the SMRewardDistributor contract, which distributes rewards to stakers
ISMRewardDistributor public smRewardDistributor;
stakedTokens
Array of staked tokens that are registered with the SafetyModule
IStakedToken[] public stakedTokens;
stakedTokenByAuctionId
Mapping from auction ID to staked token that was slashed for the auction
mapping(uint256 => IStakedToken) public stakedTokenByAuctionId;
Functions
onlyAuctionModule
Modifier for functions that can only be called by the AuctionModule contract, i.e., auctionEnded
modifier onlyAuctionModule();
constructor
SafetyModule constructor
constructor(address _auctionModule, address _smRewardDistributor, address _governance) payable;
Parameters
_auctionModule
address
Address of the auction module, which sells user funds in the event of an insolvency
_smRewardDistributor
address
Address of the SMRewardDistributor contract, which distributes rewards to stakers
_governance
address
Address of the governance contract, where unsold StakedToken funds are sent if there are no stakers
getStakedTokens
Returns the full list of staked tokens registered in the SafetyModule
function getStakedTokens() external view returns (IStakedToken[] memory);
Returns
<none>
IStakedToken[]
Array of StakedToken contracts
getNumStakedTokens
Gets the number of staked tokens registered in the SafetyModule
function getNumStakedTokens() public view returns (uint256);
Returns
<none>
uint256
Number of staked tokens
getStakedTokenIdx
Returns the index of the staked token in the stakedTokens
array
Reverts with SafetyModule_InvalidStakedToken
if the staked token is not registered
function getStakedTokenIdx(address token) public view returns (uint256);
Parameters
token
address
Address of the staked token
Returns
<none>
uint256
Index of the staked token in the stakedTokens
array
auctionEnded
Called by the AuctionModule when an auction ends, and returns the remaining balance of underlying tokens from the auction to the StakedToken
Only callable by the auction module
function auctionEnded(uint256 _auctionId, uint256 _remainingBalance) external onlyAuctionModule;
Parameters
_auctionId
uint256
ID of the auction
_remainingBalance
uint256
Amount of underlying tokens remaining from the auction
slashAndStartAuction
Slashes a portion of all users' staked tokens, capped by maxPercentUserLoss, then transfers the underlying tokens to the AuctionModule and starts an auction to sell them
Only callable by governance
function slashAndStartAuction(
address _stakedToken,
uint8 _numLots,
uint128 _lotPrice,
uint128 _initialLotSize,
uint256 _slashAmount,
uint96 _lotIncreaseIncrement,
uint16 _lotIncreasePeriod,
uint32 _timeLimit
) external onlyRole(GOVERNANCE) returns (uint256);
Parameters
_stakedToken
address
Address of the staked token to slash
_numLots
uint8
Number of lots in the auction
_lotPrice
uint128
Fixed price of each lot in the auction
_initialLotSize
uint128
Initial number of underlying tokens in each lot
_slashAmount
uint256
Amount of staked tokens to slash
_lotIncreaseIncrement
uint96
Amount of tokens by which the lot size increases each period
_lotIncreasePeriod
uint16
Number of seconds between each lot size increase
_timeLimit
uint32
Number of seconds before the auction ends if all lots are not sold
Returns
<none>
uint256
ID of the auction
terminateAuction
Terminates an auction early and returns any remaining underlying tokens to the StakedToken
Only callable by governance
function terminateAuction(uint256 _auctionId) external onlyRole(GOVERNANCE);
Parameters
_auctionId
uint256
ID of the auction
withdrawFundsRaisedFromAuction
Sends payment tokens raised in auctions from the AuctionModule to the governance treasury
Only callable by governance
function withdrawFundsRaisedFromAuction(uint256 _amount) external onlyRole(GOVERNANCE);
Parameters
_amount
uint256
Amount of payment tokens to withdraw
setAuctionModule
Sets the address of the AuctionModule contract
Only callable by governance
function setAuctionModule(IAuctionModule _newAuctionModule) external onlyRole(GOVERNANCE);
Parameters
_newAuctionModule
IAuctionModule
Address of the AuctionModule contract
setRewardDistributor
Sets the address of the SMRewardDistributor contract
Only callable by governance
function setRewardDistributor(ISMRewardDistributor _newRewardDistributor) external onlyRole(GOVERNANCE);
Parameters
_newRewardDistributor
ISMRewardDistributor
Address of the SMRewardDistributor contract
addStakedToken
Adds a new staked token to the SafetyModule's stakedTokens array
Only callable by governance, reverts if the staked token is already registered
function addStakedToken(IStakedToken _stakedToken) external onlyRole(GOVERNANCE);
Parameters
_stakedToken
IStakedToken
Address of the new staked token
pause
Pause the contract
Only callable by governance
function pause() external override onlyRole(GOVERNANCE);
unpause
Unpause the contract
Only callable by governance
function unpause() external override onlyRole(GOVERNANCE);
_returnFunds
function _returnFunds(IStakedToken _stakedToken, address _from, uint256 _amount) internal;
_settleSlashing
function _settleSlashing(IStakedToken _stakedToken) internal;
Last updated