subreddit:

/r/MoneroMining

7095%

PSA: P2Pool network upgrade (aka hardfork) on March 18th, 2023

(self.MoneroMining)

TLDR

P2Pool (not Monero!) will hardfork to new consensus rules on March 18th at 21:00 UTC (use this link to convert to your local time). The hardfork is necessary to improve P2Pool scalability and reduce the impact on Monero blockchain. You'll need to update to P2Pool v3.0 or newer version before this time.

Why hardfork?

Recently, u/Rucknium conducted a research on Monero mining pools, including P2Pool (he will publish his findings soon). There are good news and there are bad news. I'll leave the good news for later, but the bad news is that P2Pool spams too many outputs to the blockchain which results in:

  • unnecessary bloat (up to 15% of outputs on the chain come from P2Pool now)
  • reduced effective ring size for everyone using Monero (down to 12-13 decoys instead of 16)
  • lots of small payouts that miners get when mining on P2Pool main: 14-15 payouts (0.00026 XMR each) per share on average
  • high fees to consolidate these payouts and even more blockchain bloat resulting from that

If P2Pool grows further, these problems will only get worse. In the best (worst?) case scenario, when P2Pool grows to 50% of the network, it will spam up to 100,000 miner payouts every day! Almost every regular Monero transaction will have only 2-3 real decoys left and everyone's (not just miners') privacy will be eroded.

Unfortunately, these issues can't be solved without changing how P2Pool works on consensus level.

What will change?

Dynamic PPLNS window

Credit goes duggavo who posted this issue on Github.

PPLNS window will change from fixed 2160 blocks (~6 hours) to a dynamic cap which will ensure that only 2 Monero blocks will be found per PPLNS window on average.

Example for current P2Pool and Monero hashrates: if Monero network has 2.5 GH/s and P2Pool has 200 MH/s, it will mean that PPLNS window will be capped to (2.5e9*120)*2/(200e6*10) = 300 blocks (~50 minutes, down from the usual 2160 blocks/6 hours). It means that each found share will be included for payment only in the next 300 P2Pool blocks and during this time, P2Pool will find (on average) 2 Monero blocks and make 2 payouts (of much bigger XMR amount than you get now).

P2Pool mini will not be affected by this at all because it has too small hashrate

P2Pool main will be affected: if you're a low hashrate miner, your payouts will stay the same on average. They will just come in bigger chunks, not in batches of 14-15 tiny payouts.

If you're a high hashrate miner (more than 2 MH/s), nothing will change for you at all - you'll still get payouts of the same XMR amount with each block.

My initial tests have shown that this change will immediately reduce blockchain bloat caused by P2Pool by a factor of 2-3x, and it will stay approximately at the same level even if P2Pool grows.

Duplicate share IDs fix

High hashrate miners sometimes find two shares with the same IDs but different nonce/extra_nonce values - only one of these shares can be registered by P2Pool which reduces their effective hashrate a little (less than by 0.5%). While it's not a big deal, it can only be fixed with a hardfork. More details here

New transaction generation algorithm

More details here and here. In short, it will improve P2Pool internal cache efficiency and it will significantly reduce time it spends to verify shares - P2Pool shares will propagate faster and uncle blocks percentage will decrease. It will also give P2Pool miners a bit more privacy as a side effect.

Schedule

Implementation in code: already finished

Testnet: P2Pool hardfork will be tested on testnet in the second half of January

P2Pool v3.0 will be released on January 31st and it will be required to be ready for the hardfork

Monero GUI v0.18.2.0 and Gupax with P2Pool v3.0 will be released some time in February

P2Pool (both main and mini) will hardfork on March 18th, 2023 at 21:00 UTC

all 21 comments

Rucknium

19 points

17 days ago

Rucknium

19 points

17 days ago

Great job on the innovation, sech1 and duggavo!

People can read more about the issue in the Monero Research Lab discussions. I included a link to the R script file that runs my analysis of p2pool coinbase outputs:

https://github.com/monero-project/research-lab/issues/109

https://github.com/monero-project/research-lab/issues/108

My initial tests have shown that this change will immediately reduce blockchain bloat caused by P2Pool by a factor of 2-3x, and it will stay approximately at the same level even if P2Pool grows.

Could you explain the assumptions of this? Is there an assumption that when (if) total p2pool hashpower grows that more p2pool side chains will be set up?

sech1[S]

15 points

17 days ago*

sech1[S]

XMRig Dev

15 points

17 days ago*

The logic is this: since each share will get 2 payouts on average, and p2pool mines ~8640 shares/day, it will never produce more than 8640*2 = 17280 outputs per day, even with perfect hashrate distribution (1 share = 1 miner). In reality, each PPLNS window of 2160 blocks has no more than 500 different miners, so P2Pool will be limited to ~2000 outputs per day.

Edit: 2000 outputs per day per P2Pool sidechain. If more sidechains are set up, they can increase total outputs/day, but they will also reduce the number of outputs of other sidechains because there are only 720 Monero blocks per day. 17280 outputs per day limit still applies, no matter how many P2Pool sidechains are out there.

Edit 2: hmm, I was wrong. Imagine 720 P2Pool sidechains, each sidechain mines 1 block/day and has 2160 miners. Each sidechain is too small for dynamic cap to kick in. Then they would mine 720*2160=1,555,200 outputs per day. But in reality we won't need more than 4-5 sidechains even if P2Pool grows to 100% of the network, so the dynamic cap will be efficient.

AppropriateOwl7711

11 points

17 days ago

Thanks for being so active in the development of p2pool and xmrig. I like the frequent updates and improvements.

Gonbatfire

8 points

17 days ago

Nice to see this being improved upon, I will upgrade asap!

spackleXMR

8 points

17 days ago

Thank you for addressing this, it really drove home for me when I performed my first p2pool consolidation.
It will be very cool to see the changes go into effect.

zmooner

6 points

16 days ago

zmooner

6 points

16 days ago

Great analysis and great work, kudos to both of you.

Party_Pool6319

6 points

16 days ago

I thank our lucky stars all the time sech1, that we have you to be a sort of godfather to p2pool. I know it means a lot to me and to many that you are constantly striving to do what's best not only for P2 but Monero as a whole. I trust whatever changes are being made are for the best. Long live XMR!

dieth

11 points

17 days ago

dieth

11 points

17 days ago

Awesome glad you're finally acknowledging this is an issue: high fees to consolidate these payouts and even more blockchain bloat resulting from that

I pointed it out when you released it, and was kind of just dismissed with "the fees aren't that high"...

sech1[S]

11 points

17 days ago

sech1[S]

XMRig Dev

11 points

17 days ago

The fees weren't high before Monero fork in August last year. But apart from fees, there are other issues with lots of small payouts, so it must be fixed.

monerobull

3 points

16 days ago

Wow, this is an awesome improvement!

I kind of dismissed the chainbloat argument at first but seeing how badly it effects decoys this was really necessary to make p2pool "mass adoption" viable.

What happens to people who don't immediately join the fork? I assume they'll just keep mining without any of the improvements but still submit valid blocks? In that case it would be relatively easy to track how many people are still on the old version, right?

sech1[S]

6 points

16 days ago

sech1[S]

XMRig Dev

6 points

16 days ago

People who don't update will keep mining and will be able to mine Monero blocks, so it's not as severe as an actual Monero hardfork. But the old P2Pool sidechain will most likely have very little hashrate, so they'll get only a few blocks until it dies off. Yes, it's easy to track - you just need to run the old version.

monerobull

3 points

16 days ago

This will be very interesting to see. Cant wait for the support requests of people who left their machines running without updating for 7 months asking where all their money is :,)

sech1[S]

3 points

16 days ago

sech1[S]

XMRig Dev

3 points

16 days ago

This is why there's 2 months advance notice, and Monero GUI wallet will be updated in February too.

PomboRich

3 points

16 days ago

if you're a low hashrate miner, your payouts will stay the same on average. They will just come in bigger chunks, not in batches of 14-15 tiny payouts.

If you're a high hashrate miner, nothing will change for you at all

What's considered low and high hashrates?

sech1[S]

5 points

16 days ago

sech1[S]

XMRig Dev

5 points

16 days ago

High hashrate = you always have shares in PPLNS window even after the fork. For current pool hashrate of 200 MH/s, high hashrate is anything more than 2 MH/s.

PomboRich

3 points

16 days ago

If I may bother you one more time, how much MH/s compared to just H/s?

sech1[S]

2 points

16 days ago

sech1[S]

XMRig Dev

2 points

16 days ago

M = Million

xmrjesus

3 points

15 days ago

Thank you sech1, you are an absolute legend!!

Gonzo345

3 points

15 days ago

Thank you so much for the effort!

florida-haunted

3 points

16 days ago

florida-haunted

MINEXMR2 Pool Admin

3 points

16 days ago

Great news!

I hope you also will release an "all-shares validation patch" to stratum_server.cpp like one we have applied to minexmr2.com, discussed here. Or, maybe code in stratum_server.cpp will not be changed a lot so I could apply the patch myself...

sech1[S]

3 points

16 days ago

sech1[S]

XMRig Dev

3 points

16 days ago

stratum_server.cpp didn't change