rocket-pool / smartnode

The CLI package for Rocket Pool smart nodes.
GNU General Public License v3.0
146 stars 114 forks source link

Provide manual control or information for RPL claims vs gas fees #107

Closed moles1 closed 3 years ago

moles1 commented 3 years ago

Currently, gas to claim RPL rewards sits around 500k, which can result in a higher USD transaction cost to claim rewards than is made back in RPL. One of the following approaches should be taken to address this:

PengFei-Ethereum commented 3 years ago

Adding to this, I actually believe it should just be a manual operation or automated based on timeframe + fees < rewards.

Timeframe example being, auto harvest every month, 3 months, half year and year and only if the rewards are greater than the fee. I believe this would reduce gas spending overall while giving more control to the node operators.

Edit: Adding data to show that weekly auto harvest is most likely not going to work out in the best interest of Ethereum or Node Operators. The harvesting function currently uses > 500k in gas. This currently amounts at 185 gwei to more than $200. So, in practice it will cost users about $800 per month, to harvest funds. You can use the gasnow tool to calculate this in realtime: https://www.gasnow.org/

decibels42 commented 3 years ago

I second @PengFei-Ethereum's comment and also believe that RPL rewards should be paid out over longer time frames, with more options/flexibility for operators to choose when the payouts occur (the longer the time frames and the more options the better). 2 or 4 week forced payouts is too short of a time period.

Overall, something like 1/3/6/9/12/18 month claiming intervals are better, as it gives the operator more flexibility on when they will claim rewards. This increased flexibility will increase the amount of RPL staked and perhaps the number of node operators on the network. Conversely, if rewards must be claimed within 2 or 4 weeks, I believe the amount of RPL staked and the number of node operators will be negatively effected. An inability to choose when RPL rewards are claimed can also create tax issues in some jurisdictions, for some operators.

tomjw commented 3 years ago

If it is decided it is not possible to have node operators claim RPL rewards when they would like it would be advantageous if the transactions were programmed to take place at at times of historically low gas prices, e.g. around Sundays 6am GMT as shown on gas prices. Chart below is GMT +11. Bear in mind the chart below only looks at the last two weeks of data but seems like that would be a time of regular low demand.

feedmeether commented 3 years ago

I agree that this needs to seriously be looked at, as for those running 1 minipool at 10% collateralisation they'll very likely lose money over time.

I haven't seen the idea about some kind of automatic restaking function, where an option is for your withdrawal to be sent to the collateral pool straight away, meaning that the 2 transactions ordinarily needed (to wallet then collateral) can be just 1 transaction.

kmhagan commented 3 years ago

An automatic restaking option would be great! An idea to consider in order to help level the playing field for people running 1 minipool at 10% collateral would be to have a baseline reward that covers the fees and then start rewarding based on percent of RPL staked.

so something like:

TOTAL_REWARD = (RPL_STAKED) * (X %) + RPL_TO_COVER_GAS_FEE
hanniabu commented 3 years ago

I definitely see this as something best approached from multiple angles.

The base reward sounds like a pretty good idea assuming the original distribution amount would remain the same and have the stake-weighted distribution come from the remainder after the base reward distribution. Although this can still take away from larger stakers, so it's probably better to do this in combination with 4 week claim period (I believe 2 weeks is currently "planned"?).

Within the client the automated withdrawal also sounds great for further efficiency. NOs would be able to see their base reward, staked reward, and set their fee tolerance. As soon as the tx fees drop within that tolerance then the withdraw triggers.

Thinking more into the future and how L1 will be used as settlement and the likeliness for high demand to remain, I have some thoughts for an L2 solution, although I don't know how feasible it is. Once L2 matures, we can have a contract where NOs initiate a withdraw. They deposit ETH (to cover gas) to the contract which signals your withdrawal, then maybe once a day or something the contract will aggregate withdrawal requests, make the withdraw from L1 to L2 sharing the gas fees among everyone withdrawing in that batch, and then you can withdraw your portion from the L2 contract.

hanniabu commented 3 years ago

Wanted to run some calculations based on withdrawal every 2 weeks. For 2 minipools the RPL ratio needed to "break even" on withdrawal gas fees would need to be 0.0145.

Assumptions:
Network minipools: 6250 (5% of nodes on network w/ 3.5M staked)
User minipools: 2
Network average collateral: 20%
User collateral: 20%
Collateral determined at current 0.0081 rate
Gas for RPL withdrawal claim: 500k
Gas price: 185 gwei
Inflation: 5%
Inflation distributed as staking rewards: 65%
Circulation: 16M

Calculation:
Network staking rewards: 16M*5%*65% = 520k
Network collateral: 6250*16*20%/0.0081 = 2469136
User collateral: 2*16*20%/0.0081 = 790
User stake weight: 790/2469136 = 0.0319949974%
User yearly rewards = 520k*0.0319949974% = 166.373986
User biweekly rewards = 166.373986/26 = 6.4
ETH for RPL withdrawal claim: 500000*0.000000185 = 0.0925

Break-even ratio: 0.0925/6.4 = 0.01445

I believe this further displays the argument for extending the withdrawal period to one month, in addition to the base RPL reward. Let alone that this only gets worse with a greater disparity between the average collateral and individual's collateral.

htimsk commented 3 years ago

Possible solutions discussed here: https://discord.com/channels/405159462932971535/704196071881965589/829869218953822278

1) Set a minimum network gas price (or reward to spend ratio) for the claim function so that it will NOT run unless the current gas price is at that value or less. (e.g., Claim my RPL only when gas costs are x% of the reward. or Claim my RPL only when gas costs less than y Gwei ) 2) Remove the every 5-minute claim command from the node daemon and instead have the node operator manually execute it each claim period to claim RPL with the --gasPrice value value specified by the node operator (e.g., rocketpool node RPLclaim --gasPrice 102) - This could be toggled on or off.

Abaddonzzz commented 3 years ago

I would look at this from a new entrant perspective:

The minimal entry requirements for a rocketpool node operator at at launch: 16eth + 1.6eth given 10% collateral. Notice how i'm not trying to make RPL price assumptions here. Given the example above a claim transaction cost would be 0.0925eth. The 28 day window would require 13 claim withdrawals a per annum -> that would require 1.2 eth in cumulative transaction cost. This would imply that given constant RPL price the reward for a 10% collateral holder should be at least 75% per annum to cover the claim transaction cost.

Now given the above we have a part of the node operators that should from a economic perspective opt to "not claim". What I understand is that their unclaimed rewards are voided and redistributed in next round's reward pool. This skews rewards towards large RPL holders as they can claim the RPL rewards of holders that cannot economically feasible claim. The only solution to this unfair wealth redistribution problem i can see is to burn any unclaimed RPL rewards (instead of redistributing) as that will benefit ALL users instead of only the ones which can practically claim.

jclapis commented 3 years ago

This has been implemented in RC2.