Operations procedures
Revoking a strategy with normal migration
Let's say we found a problem in one of the strategies and we want to return all funds. There are two ways of doing it.
The scripts below use the HEGIC vault as an example.
From the vault
# Grab the gov account
gov = accounts.at(vault.governance(), force=True)
# The cream strategy is the first in the withdrawal queue
s1 = Contract(vault.withdrawalQueue(0))
# Revoke msg should be sent from gov or guardian
vault.revokeStrategy(s1, {"from": gov})
After running the command you will notice:
vault.strategies(s1).dict()['debtRatio'] == 0
Last step is running a harvest
to return funds to vault:
s1.harvest({"from": gov})
>>> hegic.balanceOf(s1)
0
>>> hegic.balanceOf(vault)/1e18
291731.2666932462
From the strategy
From the strategy itself we can turn on emergency mode. To do it we need to run:
# Grab the strategist account
strategist = accounts.at(s1.strategist(), force=True)
# Turn on the emergency exit
s1.setEmergencyExit({'from': strategist})
# Harvest to move funds to the vault
s1.harvest({'from': strategist})
We should also see the strategy's debtRatio
going to 0
and funds returning to the vault.
Emergency Procedures
We can also shutdown the vault to return assets as soon as possible. To do that we will need a guardian or governance account:
# Sound the alarm
vault.setEmergencyShutdown(true, {'from': gov})
# Harvest all strategies
s1.harvest({'from': gov})
s2.harvest({'from': gov})
s3.harvest({'from': gov})
# Check all the tokens are back in the vault
>>> hegic.balanceOf(vault) == vault.totalAssets()
True
You will notice that this procedure doesn't change the debt ratio:
>>> vault.strategies(s1).dict()['debtRatio']
1600
It drops the credit to 0
:
>>> vault.creditAvailable(s1)
0