The surplus auction is used to sell off a fixed amount of the surplus in exchange for protocol tokens. The surplus comes from the stability fees charged to SAFEs (and stored in the
AccountingEngine). Bidders submit increasing amounts of protocol tokens and the winner receives all auctioned surplus in exchange for their coins which are burned or transferred to another address.
contractEnabled - settlement flag (available only in the pre-settlement surplus auction house)
AUCTION_HOUSE_TYPE - flag set to
authorizedAccounts[usr: address] - addresses allowed to call
bids[id: uint] - storage of all
safeEngine - storage of the
protocolToken - address of the protocol token
auctionsStarted - total auction count
bidDuration - bid lifetime / max bid duration (default: 3 hours)
bidIncrease - minimum bid increase (default: 5%)
totalAuctionLength - maximum auction duration (default: 2 days)
protocolTokenBidReceiver - receiver of protocol tokens after an auction is settled. Only present in the
Bid - state of a specific auction
bidAmount - quantity being offered for the
amountToSell- amount of surplus sold
auctionDeadline - when the auction will finish
isAuthorized - checks whether an address is part of
authorizedAddresses (and thus can call authed functions).
uint256 data) - update a
address addr) - update an
address parameter. Only present in the
initialBid: uint256) - start a new surplus auction.
restartAuction(id: uint256) - restart an auction if there have been 0 bids and the
auctionDeadline has passed.
bid: uint256) - submit a bid with an increasing amount of protocol tokens for a fixed amount of system coins.
disableContract() - disable the contract.
settleAuction(id: uint256) - claim a winning bid / settles a completed auction.
terminateAuctionPrematurely(id: uint256) - is used in case Governance wishes to upgrade (only) the
PreSettlementSurplusAuctionHouse or in case
GlobalSettlement is triggered. It settles
increaseBidSize phase auctions, sending back the protocol tokens submitted by the
AddAuthorization - emitted when a new address becomes authorized. Contains:
account - the new authorized account
RemoveAuthorization - emitted when an address is de-authorized. Contains:
account - the address that was de-authorized
ModifyParameters - emitted after a parameter is modified
RestartAuction - emitted after an auction is restarted. Contains:
id - the ID of the auction being restarted
auctionDeadline - the new auction deadline
IncreaseBidSize - emitted when someone bids a higher amount of protocol tokens for the same amount of system coins. Contains:
id - the ID of the auction that's being bid on
highBidder - the new high bidder
amountToBuy - the amount of system coins to buy
bid - the amount of protocol tokens bid
bidExpiry - the new deadline when the auction will end which can be before the original
StartAuction- emitted when
uint256) is successfully executed. Contains:
id - auction id
auctionsStarted - total amount of auctions that have started up until now
amountToSell - amount of system coins sold in the auction.
initialBid - starting bid for the auction
auctionDeadline - the auction's deadline
SettleAuction - emitted after an auction is settled. Contains:
id - the ID of the auction that was settled
DisableContract - emitted after the contract is disabled
TerminateAuctionPrematurely - emitted after an auction is terminated before its deadline. Contains:
id - the ID of the auction that was terminated
sender - the address that terminated the auction
highBidder - the auction's high bidder
bidAmount - the latest bid amount
In a surplus auction, bidders compete for a fixed
amountToSell of system coins with increasing
bidAmounts of protocol tokens.
The surplus auction ends when the last bid's duration is passed (
bidDuration) without another bid getting placed or when the auction duration (
totalAuctionLength) has been surpassed. When the auction settles, the protocol tokens received are burnt in the case of a
BurningSurplusAuctionHouse or transferred to a separate address in the case of
In case governance disables the surplus auction house by calling
disableContract, anyone can call
terminateAuctionPrematurely in order to quickly settle an auction and return the protocol token bid to the