BIP-71: Recover FTM from Validator 167
Background
On August 1st, the keys to the wallet for validator 167, which is not the Beethoven X validator, got compromised and his wallet was drained. In addition, the attacker also unstaked all the staked FTM from validator 167. Beethoven X has delegated 1M FTM to the affected validator through sFTMx. These funds are not at risk, but are also not earning any rewards at the moment. Over the past week, we’ve investigated ways to unlock the 1M FTM that we have delegated. After developing and testing options, we have deployed a contract to Fantom which allows our treasury to unstake the 1M FTM without any impact to sFTMx holders.
Technical details
When a delegator or staker wants to unlock the FTM pre-maturely, a penalty needs to be paid. In the normal use case when a user is withdrawing FTM, if we need to unlock early, the user who initiates the request will pay this penalty when he burns the sFTMx. In this scenario we don’t have a user that pays it and if we just unlock, it would result in a drop in the rate of sFTMx per FTM. We want to avoid this scenario under all circumstances. We’ve developed a contract that will unlock the vault and in the same transaction refund the sFTMx staking contract with the same amount of FTM so that no decrease in the rate will occur.
The contract source code can be found here: https://github.com/beethovenxfi/sftmx/blob/main/contracts/VaultUnlocker.sol The tests here: https://github.com/beethovenxfi/sftmx/blob/main/scripts/VaultUnlocker.ts The tenderly simulation here: https://dashboard.tenderly.co/shared/simulation/d493f3fa-776a-433c-86b4-f39b6b2f5082
The penalty that is due for the withdrawal is increasing over time at roughly 170 FTM per day. In light of this, we would like to move this proposal forward as fast as possible.
Motivation To make sure that sFTMx holders earn yield on all the staked FTM, we’ll need to withdraw and re-stake to a different validator.
Specification
The treasury will use this unlocker contract https://ftmscan.com/address/0xd0f62fbe32a72cd18ab8943b52220a7af6c743f4 to retrieve the funds. The course of action will be:
- Transfer 6k FTM to the unlocker contract to fund the recovery of the penalty
- Transfer ownership of the three affected staking vaults to above contract
- Call unlockVault for each of the three affected staking vaults
- Call harvestVault on the staking contract to initialize the 7 day withdrawal
- Retrieve left-over FTM from the unlocker contract
After 7 days, we will withdraw the FTM from these vaults into the free pool.
We are in close contact with validator 167 and he has confirmed that he will reimburse the treasury for any penalty that it needed to pay in order to unlock the funds.
Risk/Impact
The current cost for the penalty of delegating sits at 3.3k FTM. While the validator has given their word that they’ll reimburse any associated costs, then there is a chance that the treasury would need to cover the amount otherwise.
| Voter | Cast Power | Vote & Rationale |
|---|---|---|
0x28aa...AD0108 | 5.654M | Yes |
0x43C4...69a89d | 3.927M | Yes |
0x04a4...F851d7 | 1.051M | Yes |
0x92d6...Ba847F | 741,246 | Yes |
0x5B30...58D2F6 | 653,550 | Yes |
VOTE POWER
Proposal Status
- Thu August 15 2024, 08:00 pmVoting Period Starts
- Mon August 19 2024, 08:00 pmEnd Voting Period
Current Results
1-Yes
15.68M
2-Abstain
4,937.36
