[SWIP-25] Upgrade Vault Factory To v3 And Introduce the StakeWise Boost Feature

Executive summary

In this proposal, we suggest an upgrade to the Vault Factory contract, introducing new modules that widen the scope of possible DeFi integrations for osETH and rever the exit queue mechanics to v1, allowing for smoother exits. The proposed changes have been audited by Sigma Prime and Hexens, and are consistent with the proposal to introduce 100% LTV Vaults on both Ethereum and Gnosis Chain.

Motivation

The rising adoption of osETH in DeFi applications means one thing: StakeWise can start offering intricate strategies that deliver tangible benefits while minimizing their difficulty and risks.

One such strategy is called the StakeWise Boost - it is a feature to increase one’s APY by borrowing extra ETH on Aave, staking it, and earning the difference between the staking APY and the borrow rate.

Without going into the specific details of how it works (more on this later in a separate announcement), enabling this feature requires certain changes to the Vault Factory contract. This proposal is about rolling out these changes on Ethereum, with the Gnosis Chain upgrade coming later.

In addition to the new modules that support the Boost, the Vaults Factory v3 upgrade includes roll-back to the v1 exit queue mechanics, which smoothen out the staking APY for the exitors, improving their experience when using the Boost feature.

Finally, the upgrade will also enable us to allow the migrators from StakeWise v2 into the Genesis Vault to automatically receive osETH upon migration. This feature will improve the migration experience for the 7K ETH that is yet to move their assets to StakeWise V3.

The proposed additions to the contracts have been audited by Sigma Prime and Hexens.

Specification

Batch 1

[
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x256b5a0200000000000000000000000009e84205df7c68907e619d07afd90143c5763605”,
“method”: “addVault(address)”,
“params”: [
“0x09e84205DF7c68907e619D07aFD90143c5763605”
]
},
{
“to”: “0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xe0dba60f000000000000000000000000ebe12d858e55ddc5fc5a8153dc3e117824fbf5d20000000000000000000000000000000000000000000000000000000000000001”,
“method”: “setController(address,bool)”,
“params”: [
“0xeBe12d858E55DDc5FC5A8153dC3e117824fbf5d2”,
true
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x4b37c73f000000000000000000000000faa05900019f6e465086bce16bb3f06992715d53”,
“method”: “removeFactory(address)”,
“params”: [
“0xfaa05900019f6E465086bcE16Bb3F06992715D53”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x29ce1ec5000000000000000000000000df82e5d27e175618e5bc4581ee336f59adabfbb2”,
“method”: “addFactory(address)”,
“params”: [
“0xDF82E5D27E175618e5bC4581ee336F59AdabfBB2”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xaff7947d0000000000000000000000009747e1ff73f1759217afd212dd36d21360d0880a”,
“method”: “addVaultImpl(address)”,
“params”: [
“0x9747e1fF73f1759217AFD212Dd36d21360D0880A”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x4b37c73f000000000000000000000000b7832c9e93e54661354c8b88f3ce7c0915f4c896”,
“method”: “removeFactory(address)”,
“params”: [
“0xb7832C9e93e54661354C8B88F3Ce7c0915f4C896”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x29ce1ec500000000000000000000000080fc05f62c35c1b1361bc8908ea0af06c510d390”,
“method”: “addFactory(address)”,
“params”: [
“0x80fC05f62C35C1b1361bc8908ea0aF06C510D390”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xaff7947d000000000000000000000000fe076029b7d46fbe2ad4b9cbf377aa10b309e560”,
“method”: “addVaultImpl(address)”,
“params”: [
“0xfe076029B7D46fbe2ad4B9CBf377aA10B309e560”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x4b37c73f0000000000000000000000004e3d8197c2cb9bcd29e3dceae3670d3d5e774017”,
“method”: “removeFactory(address)”,
“params”: [
“0x4E3D8197c2cb9bCd29e3DCeAE3670d3d5e774017”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x29ce1ec50000000000000000000000008b6c2c9e09c6022780d164f3cfd882808b8bdbf0”,
“method”: “addFactory(address)”,
“params”: [
“0x8b6c2C9E09c6022780D164F3cFd882808b8bDBF0”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xaff7947d000000000000000000000000f2f5a23f849e02001da0dfdec0f4cd3c3a79337e”,
“method”: “addVaultImpl(address)”,
“params”: [
“0xF2f5A23f849e02001da0DfdeC0F4CD3c3a79337e”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x4b37c73f0000000000000000000000007a4f9912a812d932da57d73cb5e5784b2c1cba4a”,
“method”: “removeFactory(address)”,
“params”: [
“0x7a4F9912a812d932da57d73Cb5E5784B2c1cBA4A”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x29ce1ec5000000000000000000000000978302cacadede5d503390e176e86f3889df6ce6”,
“method”: “addFactory(address)”,
“params”: [
“0x978302cAcAdEDE5d503390E176e86F3889Df6Ce6”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xaff7947d000000000000000000000000c68ffbf358d6ba32ac86c7be6cd037fbd15d0d46”,
“method”: “addVaultImpl(address)”,
“params”: [
“0xC68FFbF358D6Ba32Ac86C7bE6cd037fbD15D0D46”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x4b37c73f00000000000000000000000058fdd303ab66722130c01533e7a1177f2b3a2949”,
“method”: “removeFactory(address)”,
“params”: [
“0x58FDD303ab66722130C01533e7A1177f2b3a2949”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x29ce1ec5000000000000000000000000291fa5849215847081b475450cbe5de46cfd4fae”,
“method”: “addFactory(address)”,
“params”: [
“0x291Fa5849215847081B475450cBE5De46CfD4fAE”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xaff7947d0000000000000000000000008638068a8c0440595cb5a29d245c6ec79d54a09c”,
“method”: “addVaultImpl(address)”,
“params”: [
“0x8638068a8C0440595cb5a29D245c6ec79d54A09c”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x4b37c73f0000000000000000000000001be3ad178d85ce1b6a7fcf5baefe68f26541b07c”,
“method”: “removeFactory(address)”,
“params”: [
“0x1bE3Ad178d85CE1b6a7fCF5baEFe68F26541b07C”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0x29ce1ec5000000000000000000000000e487eddb7c5802e416385544f0a6a4426af4ae87”,
“method”: “addFactory(address)”,
“params”: [
“0xe487EDDB7C5802e416385544f0A6a4426AF4AE87”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xaff7947d0000000000000000000000009d2fb07c3d04f54b332b43daa9da982163ba0775”,
“method”: “addVaultImpl(address)”,
“params”: [
“0x9D2fb07c3D04f54b332b43dAa9dA982163Ba0775”
]
},
{
“to”: “0x3a0008a588772446f6e656133C2D5029CC4FC20E”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xaff7947d00000000000000000000000064375c9a7305edb7bba757319aa4c20e6000bb8c”,
“method”: “addVaultImpl(address)”,
“params”: [
“0x64375C9A7305edb7bbA757319AA4C20e6000bB8c”
]
}
]

Batch 2

[
{
“to”: “0x90b82E4b3aa385B4A02B7EBc1892a4BeD6B5c465”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xbaa82a34000000000000000000000000c57e59764f398831c1444c14d296af868d5331960000000000000000000000000000000000000000000000000000000000000000”,
“method”: “setStrategy(address,bool)”,
“params”: [
“0xc57E59764f398831C1444c14d296Af868d533196”,
“false”
]
},
{
“to”: “0x90b82E4b3aa385B4A02B7EBc1892a4BeD6B5c465”,
“operation”: “0”,
“value”: “0.0”,
“data”: “0xbaa82a3400000000000000000000000048cd14fdb8e72a03c8d952af081dbb127d6281fc0000000000000000000000000000000000000000000000000000000000000001”,
“method”: “setStrategy(address,bool)”,
“params”: [
“0x48cD14FDB8e72A03C8D952af081DBB127D6281fc”,
“true”
]
}
]

Considerations

This upgrade carries no changes to the Vaults that don’t seek to upgrade their Vault versions and receive new capabilities. Hence, there are no trade-offs to consider when introducing this upgrade - let’s just make it happen :slight_smile: !

Discussion

If anything in the proposal remains unclear, or you have questions or comments, please leave them below - let’s discuss.

Vote

The Snapshot link to vote for this upgrade is now live: https://vote.stakewise.io/#/proposal/0xfa5872bb8640d268040a858261da77a9e6b62ebfe06407018265c0e6fb1e4239