SafetyModule

Git Source

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

getStakedTokens

Returns the full list of staked tokens registered in the SafetyModule

function getStakedTokens() external view returns (IStakedToken[] memory);

Returns

getNumStakedTokens

Gets the number of staked tokens registered in the SafetyModule

function getNumStakedTokens() public view returns (uint256);

Returns

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

Returns

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

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

Returns

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

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

setAuctionModule

Sets the address of the AuctionModule contract

Only callable by governance

function setAuctionModule(IAuctionModule _newAuctionModule) external onlyRole(GOVERNANCE);

Parameters

setRewardDistributor

Sets the address of the SMRewardDistributor contract

Only callable by governance

function setRewardDistributor(ISMRewardDistributor _newRewardDistributor) external onlyRole(GOVERNANCE);

Parameters

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

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