[mDAO proposal] Introduce Delay unstake fee 0.1%

Hello governooors, after some observations I propose update Marinade fee structure.

What do you propose?

I propose to introduce parameter that determines the fee for Delayed unstake and set its initial value to 0.1%.

What is the rationale behind the proposal?

Most of other stakepools have 0.1% Delay unstake fee, but Marinade currently has 0% Deposit fee and 0% Delay unstake fee. This can be abused by some SOL depositors with impact depending on staked amount of SOL.

The attack works the way, that if user deposits large stake, the SOL is not earning rewards on that epoch, but mSOL received is getting the rewards in ratio for the other activated stake. If this stake is for example 1% of the Marinade TVL, the attacker earns 1% of all stake rewards on the beginning of the next epoch without the need of his stake being activated. The attacker then sells the mSOL with slight premium to an arbitrager and repeats the process this epoch with fresh SOL or even delay unstakes mSOL himself.

Introducing Delay unstake fee to 0.1% will mitigate the repeatability of this attack causing less rebalancing of such stake and higher mSOL APY. Introduced % is equivalent of staking rewards for ± 2 epochs and makes long term holding of mSOL more beneficial than short term.

What is the expected positive impact of this change?

With this change, long-term mSOL holders staking rewards won’t be diluted by this kind of attack and this leads to higher mSOL APY.

Any other considerations?

To introduce Delay unstake fee, there is a need of liquid staking program upgrade to add manageable parameter for this.

If you have any points to discuss, please, be heard. Thanks

who gets the fee, since it’s to mitigate from reducing apr attack presumably msol holders should get the fee, paid to cover the missing interest?

how would this compare to instead a .1 deposit fee (also paid to the other msol depositors).

Doesn’t the price of mSOL when swapping from SOL via Marinade, already reflect the projected staking rewards of the ongoing epoch? In other words, if the theoretical attacker deposits a 1 million SOL stake in exchange for mSOL and immediate delayed unstake that, it would get back slightly less than 1 million SOL after the ticket is ready. If the theoretical attacker gets anything more than 1 million SOL then it can set the validator’s commission to 100% after the deposit, which is something that should’ve been fixed ages ago, if such attack was possible.

If stake account deposits is a concern, maybe you should work from there instead of rugging all mSOL holders, I’m fairly sure that SF won’t be amused that their 1.2M SOL stake with Marinade is going to be 1.2k SOL less overnight.

The reason that SPL stake pools charges a withdrawal fee, if I’m right, is that you can deposit liquid SOL and effectively have it immediately staked, causing the pool to miss out the staking rewards on that SOL on the current epoch.

Update: from transaction simulation I have verified that my assumption is true, depositing stake accounts and immediately delayed unstaking will cause you to lose the stake account’s rewards this epoch as well as the rent-exempt reserve because the mSOL you get from delayed unstaking is equal to the stake account’s active stake.

TL;DR: Wrong approach to the problem

I think this points at the right topic but from a wrong angle.

  • Fees are barriers of composability: the easier is to get in or out, the more used mSOL inside other products could be. Imposing a new fee should be supported by evidence that this attack is real and frequent.
  • This attack could also be cheaply mitigated by 1/n by increasing the number of delayed unstake epochs to n. This will reduce the effectivity of the mSOL market by increasing the unstake arbitrage, but perhaps that 2nd order effect that Marinade can ignore when dealing with the potential theft vector. Notably, delayed unstake used to take 2 epochs at launch.

great proposal to shield the Marinade from this possible attack. btw, interesting point about the epoch without any earning, so this proposal might help not only Marinade, but whole Solana blockchain as well. gj