Emergency Shutdown (ES) CLI
Level: Intermediate
Estimated-Time: 30 minutes
Emergency Shutdown (ES) is the last resort to protect the Maker Protocol against a serious threat, such as but not limited to governance attacks, long-term market irrationality, hacks and security breaches. The Emergency Shutdown Module (ESM) is responsible for coordinating emergency shutdown, the process used to gracefully shutdown the Maker Protocol and properly allocate collateral to both Vault users and Dai holders. This guide outlines the steps and procedures necessary to check, interact with and trigger the ESM.
- 1.Installation
- 2.Contract Address Setup
- 3.Commands and Explanations
- Checking your MKR balance
- Checking and setting your MKR approval
- Checking the live() flag
- Checking the ESM threshold
- Deposit a trial amount of MKR into the ESM
- Depositing MKR into the ESM
- Checking how much MKR is in the ESM
- Checking whether the ESM has been triggered
- Triggering the ESM
In order to interface with the Ethereum blockchain, the user needs to install seth, a command line tool as part of the Dapp.Tools toolset. We also provide further installation information here. Once the user has installed and configured
seth
correctly to use the main Ethereum network and the address which holds their MKR they can query contract balances, approvals and transfers.* The user will require the following contract addresses; MCD_END and MCD_ESM accessible at [Changelog.makerdao.com](https://changelog.makerdao.com) as well as the Maker contract address, to be added in place of MKR_ADR below, which can be verified on [Etherscan](https://etherscan.io/token/0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2).
* These should be setup in the following manner:
export MCD_END= 0xab14d3ce3f733cacb76ec2abe7d2fcb00c99f3d5
export MCD_ESM= 0x0581a0abe32aae9b5f0f68defab77c6759100085
export MKR_ADR= <MKR ADDRESS from Etherscan.io>
export MY_ADR= <USER ADDRESS>
#example values for depositing into the ESM
export TRIAL_AMOUNT=$(seth --to-uint256 $(seth --to-wei 0.1 eth))
export REMAINING_AMOUNT=$(seth --to-uint256 $(seth --to-wei 50000 eth))
Before depositing your MKR into the ESM contract, first check your address MKR balance:
seth --from-wei $(seth call $MKR_ADR "balanceOf(address)" $MY_ADR | seth --to-dec)
# 100000.000000000000000000
In order to execute the contract functions of the MKR token it is required that approvals be set on the token. The first step is to check if the ESM contract is allowed to withdraw from your address:
seth call $MKR_ADR "allowance(address,address)" $MY_ADR $MCD_ESM
# 0x0000000000000000000000000000000000000000000000000000000000000000 -> not allowed
If the ESM contract is not allowed to withdraw from your address, the following can be used to set the allowance on the MKR token. This will approve the ESM to withdraw from the user's wallet:
seth send $MKR_ADR "approve(address)" $MCD_ESM
Following which we again check to confirm that the ESM is allowed to withdraw from the user's account. This action will return uint256 to confirm the allowance to withdraw.
seth call $MKR_ADR "allowance(address,address)" $MY_ADR $MCD_ESM
# 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -> allowed
Live contracts have
live
= 1, indicating that the system is running normally. Thus when cage()
is invoked, it sets the flag to 0.seth call $MCD_END "live()" | seth --to-dec
# 1 -> system is running normally
In order to check the
min
value, you can call:seth --from-wei $(seth call $MCD_ESM "min()" | seth --to-dec)
# 50000.000000000000000000
To deposit a small amount of MKR into the esm contract to test correct deposit function, we use the
join
function and specify a small amount.seth send $MCD_ESM "join(uint256)" $TRIAL_AMOUNT
To check for the total amount of MKR that has been added to the ESM we call the
Sum()
functionseth --from-wei $(seth call $MCD_ESM "Sum()" | seth --to-dec)
# 50050.000000000000000000
To check how much MKR you have included in the ESM we can call lowercase
sum()
with the user address as an argument:seth --from-wei $(seth call $MCD_ESM "sum(address)" $MY_ADR | seth --to-dec)
# 50.000000000000000000
To deposit MKR into the esm contract we use the
join
function and specify the amount.seth send $MCD_ESM "join(uint256)" $REMAINING_AMOUNT
Please specify the amount of MKR that you intend to deposit into the ESM.
To validate that the Emergency Shutdown has been triggered, the
fired()
function can be called which will return a boolean.seth call $MCD_ESM "fired()" | seth --to-dec
# 0 -> ES has not been triggered
In order for the emergency shutdown to trigger, it is required that the
Sum()
is greater than the min()
. Only then can the fire()
function be executed successfully.seth send $MCD_ESM "fire()"
Note: If triggering the ESM is not successful, ensure gas is set at an appropriate level
Note: The triggering of the ESM is not to be taken lightly; for a full explanation of the implications please review the below documentation.