cage-keeper
is used to help facilitate Emergency Shutdown of the Maker Protocol. Emergency shutdown is an involved, deterministic process, requiring interaction from all user types: Vault owners, Dai holders, Redemption keepers, MKR governors, and other Maker Protocol Stakeholders. A high level overview is as follows:End.cage()
function, which freezes the USD price for each collateral type as well as many parts of the system.End.wait
has elapsed, Vault settlement and all Dai generating processes (auctions) are assumed to have concluded. At this point, Dai holders can begin to claim a proportional amount of each collateral type at a fixed rate.skim
their position in the End
contract. Thus, it is the responsibility of a MakerDAO Stakeholder (MKR holders, large Dai holders, etc) to ensure the system facilitates a Dai redemption phase without a time variable. The cage-keeper
is a tool to help stakeholders carry out this responsibility.End
contract, which is located here.urn
= Vaultilk
= Collateral Typecage-keeper
directly interacts with the End
, Flopper
and Flapper
contracts.cage-keeper
is to process all under-collateralized urns
. This accounting step is performed within End.skim()
, and since it is surrounded by other required/important steps in the Emergency Shutdown, a first iteration of this keeper will help to call most of the other public function calls within the End
contract.skim
all underwater urns and skip
all flip auctions. After the processing period has been facilitated and the End.wait
wait time has been reached, it will transition the system into the Dai redemption phase of Emergency Shutdown by calling End.thaw()
and End.flow()
. This first iteration of this keeper is naive, as it assumes it's the only keeper and attempts to account for all urns, ilks, and auctions. Because of this, it's important that the keeper's address has enough ETH to cover the gas costs involved with sending numerous transactions. Any transaction that attempts to call a function that's already been invoked by another Keeper/user would simply fail.skim
means more required ETH to cover gas costs). When new collateral types are added to the protocol, the operator should pull the latest version of the keeper, which would include contracts associated with the aforementioned collateral types.cage-keeper
facilitates the processing period, it can be turned off until End.wait
is nearly reached. Then, at that point, the operator would pass in the --previous-cage
argument during keeper start in order to bypass the feature that supports the processing period.tests\config
.