Too many dissolved minipools

Problem: We went from a dissolved minipool every 3 months or so to a dissolved minipool every two days since Atlas (and would be more like 1 per day if community members had not been paying to bail out those they could). Many of these are avado/dappnode/allnodes, but many are folks using normal smart node.

The most likely (to me) culprit post-atlas is the long minipool queue. It seems likely that unless we adopt a universal variable commission or some other dynamic incentive structure, we will probably perpetually bounce between a long NO queue and a full deposit pool based on crypto macroeconomic forces. So dissolves will continue to be an issue, and should be a concern for anyone non-technical looking to run a minipool.

I don’t think there’s a game to play by spinning up a minipool and then allowing it to be dissolved. These NOs have paid >90% of the gas costs and did 99% of the effort and are like $5.75 away from staking. I don’t think there’s a likely scenario where a node operator is purposely not calling stake. So these dissolves are likely all inadvertent. And because there are way too many for it to be user error, this must be a systems problem.

Lastly, the punishment is much worse than the crime: If a node operator delays an extra week, rETH loses about 0.025 ETH (55$) in capital inefficiency. The price of a dissolved minipool (including lost capital efficiency, gas, borrowing fees) is probably 400$-2000$. The majority of node operators who have been dissolved have 1-3 minipools; these aren’t whales and it’s probably going to be very hard to come up with someone to loan them 24ETH, so those are the ones on the 2000$ end. I see this as another way that the scales are tipped against the little guy.

Some possible solutions:

  1. direct communication between RP team and avado/allnodes/dappnode to ensure stake is called automatically on those platforms. That should deal with a sizable chunk. Have a section in the docs targeted specifically for these users.

  2. prevent the smartnode user from setting stake maximum gas to a very low number: either have a separate value for just stake with a minimum of 50 or something, or have the stake transaction use an escalating maximum gas as you get closer to 14 days, with infinite gas right before dissolving.

  3. allow stake to be called remotely so we can potentially bail out any node operator. Not elegant, but at this level is probably sustainable with a little funding from GMC. Every dollar we spend would prevent 20-80x damage to a NO.

  4. redo the idea of dissolve for this infraction. An example: if stake isn’t called in 1 week, calling stake also involves reimbursing rETH for lost staking revenue (24ETH * [delta] rETH/ETH or something). Here there is no need to dissolve, and this ensures that the fees go to reimburse the protocol, rather than being effectively burned on gas/borrowing.

  5. create undissolve fuction: pay a fee in RPL or ETH (maybe 2-3x the capital efficiency cost to rETH?) to restart at the beginning of the queue (curtesy of Valdorff)

  6. other ideas?

1 Like


  1. Provide an undissolve() function. This would reset a couple-few variables and put you at the beginning of the RP queue again. There should be a penalty (burn/auction a smol amount of RPL) as there is damage to the protocol (ETH is held idle waiting for the user to call stake()).