AuctionModule

Git Source

Inherits: IAuctionModule, IncreAccessControl, Pausable, ReentrancyGuard

Author: webthethird

Handles auctioning tokens slashed by the SafetyModule, triggered by governance in the event of an insolvency in the vault which cannot be covered by the insurance fund

State Variables

safetyModule

SafetyModule contract which manages staked token rewards, slashing and auctions

ISafetyModule public safetyModule;

paymentToken

Payment token used to purchase lots in auctions

IERC20 public paymentToken;

_nextAuctionId

ID of the next auction

uint256 internal _nextAuctionId;

_numCompletedAuctions

uint256 internal _numCompletedAuctions;

_auctions

Mapping of auction IDs to auction information

mapping(uint256 => Auction) internal _auctions;

_tokensSoldPerAuction

Mapping of auction IDs to the number of tokens sold in that auction

mapping(uint256 => uint256) internal _tokensSoldPerAuction;

_fundsRaisedPerAuction

Mapping of auction IDs to the number of payment tokens raised in that auction

mapping(uint256 => uint256) internal _fundsRaisedPerAuction;

_tokenBalancesInAuction

Mapping of ERC20 tokens to the internally tracked balance of this contract

Used to enforce that only one auction may be active for a given token at a time

mapping(IERC20 => uint256) internal _tokenBalancesInAuction;

Functions

onlySafetyModule

Modifier for functions that should only be called by the SafetyModule

modifier onlySafetyModule();

constructor

AuctionModule constructor

constructor(ISafetyModule _safetyModule, IERC20 _paymentToken) payable;

Parameters

getCurrentLotSize

Returns the current lot size of the auction

Lot size starts at auction.initialLotSize and increases by auction.lotIncreaseIncrement every auction.lotIncreasePeriod seconds, unless the lot size times the number of remaining lots reaches the contract's total balance of tokens, then the size remains fixed at totalBalance / auction.remainingLots

function getCurrentLotSize(uint256 _auctionId) external view returns (uint256);

Parameters

Returns

getRemainingLots

Returns the number of lots still available for sale in the auction

function getRemainingLots(uint256 _auctionId) external view returns (uint256);

Parameters

Returns

getLotPrice

Returns the price of each lot in the auction

function getLotPrice(uint256 _auctionId) external view returns (uint256);

Parameters

Returns

getLotIncreaseIncrement

Returns the number of tokens by which the lot size increases each period

function getLotIncreaseIncrement(uint256 _auctionId) external view returns (uint256);

Parameters

Returns

getLotIncreasePeriod

Returns the amount of time between each lot size increase

function getLotIncreasePeriod(uint256 _auctionId) external view returns (uint256);

Parameters

Returns

getAuctionToken

Returns the address of the token being auctioned

function getAuctionToken(uint256 _auctionId) external view returns (IERC20);

Parameters

Returns

getStartTime

Returns the timestamp when the auction started

The auction starts when the SafetyModule calls startAuction

function getStartTime(uint256 _auctionId) external view returns (uint256);

Parameters

Returns

getEndTime

Returns the timestamp when the auction ends

Auction can end early if all lots are sold or if the auction is terminated by the SafetyModule

function getEndTime(uint256 _auctionId) external view returns (uint256);

Parameters

Returns

getTokensSold

Returns the number of tokens sold in the auction

function getTokensSold(uint256 _auctionId) external view returns (uint256);

Parameters

Returns

getFundsRaised

Returns the amount of funds raised in the auction

function getFundsRaised(uint256 _auctionId) external view returns (uint256);

Parameters

Returns

getNextAuctionId

Returns the ID of the next auction

function getNextAuctionId() external view returns (uint256);

Returns

isAuctionActive

Returns whether the auction is still active

function isAuctionActive(uint256 _auctionId) external view returns (bool);

Parameters

Returns

isAnyAuctionActive

Returns whether any auction is still active

function isAnyAuctionActive() public view returns (bool);

Returns

buyLots

Buys one or more lots at the current lot size, and ends the auction if all lots are sold

The caller must approve this contract to transfer the lotPrice x numLotsToBuy in payment tokens

function buyLots(uint256 _auctionId, uint8 _numLotsToBuy) external nonReentrant whenNotPaused;

Parameters

completeAuction

Ends an auction after the time limit has been reached and approves the transfer of unsold tokens and funds raised

This function can be called by anyone, but only after the auction's end time has passed

function completeAuction(uint256 _auctionId) external nonReentrant whenNotPaused;

Parameters

paused

Indicates whether auctions are currently paused

Contract is paused if either this contract or the SafetyModule has been paused

function paused() public view override returns (bool);

Returns

startAuction

Starts a new auction

Only callable by the SafetyModule

function startAuction(
    IERC20 _token,
    uint8 _numLots,
    uint128 _lotPrice,
    uint128 _initialLotSize,
    uint96 _lotIncreaseIncrement,
    uint16 _lotIncreasePeriod,
    uint32 _timeLimit
) external onlySafetyModule whenNotPaused returns (uint256);

Parameters

Returns

terminateAuction

Terminates an auction early and approves the transfer of unsold tokens and funds raised

Only callable by the SafetyModule

function terminateAuction(uint256 _auctionId) external onlySafetyModule;

Parameters

setPaymentToken

Sets the token required for payments in all auctions

Only callable by governance

function setPaymentToken(IERC20 _newPaymentToken) external onlyRole(GOVERNANCE);

Parameters

setSafetyModule

Replaces the SafetyModule contract

Only callable by governance

function setSafetyModule(ISafetyModule _newSafetyModule) 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);

_getCurrentLotSize

function _getCurrentLotSize(uint256 _auctionId) internal view returns (uint256);

_completeAuction

function _completeAuction(uint256 _auctionId, bool _terminatedEarly) internal;

Structs

Auction

Struct representing an auction

struct Auction {
    IERC20 token;
    bool active;
    uint128 lotPrice;
    uint128 initialLotSize;
    uint8 numLots;
    uint8 remainingLots;
    uint64 startTime;
    uint64 endTime;
    uint16 lotIncreasePeriod;
    uint96 lotIncreaseIncrement;
}

Properties

Last updated