Every protocol is broken. For some we just have not found the cracks yet.
I don’t know… The BitTorrent protocol has been around a long time but as long as I have a well-implemented client I can trust with 100% certainty that it will accurately download the correct files from peers, even if there is a malicious peer on the tracker trying to send me bad data.
They aren’t going to throw together something that isn’t 100% provable, it’s just not how Bram and co do things.
Disclaimer: I have not looked at the code at all, but this is how I assume it would work.
- You can already check your plots with
chia plots check -n. From what I understand, this works because the checker is issuing challenges to those plots that it knows that they should statistically be able to answer.
- This same concept could be used by the pools. The pool could issue challenges to a farmer based on the plot id’s that the farmer claims to possess.
- The other concept is that it isn’t important exactly how many plots the farmer has. I would assign points based on the difficulty of the challenges passed by the farmer. I would send a farmer challenges of increasing levels of difficulty until the farmer could no longer respond in a timely manner - at this point I can make an assumption of how many plots the farmer has. I can continue issuing these challenges as the farmer adds more plots, just like the difficulty of the challenges go up as the netspace total goes up.
It may not be exactly like this, but my guess is that concentrating on the number of plots the farmer has is probably wrong. Points are more likely based on statistical analysis of the answered challenges.
Agreed. This would be a better way of assigning rewards. My biggest concern with pools is people joining with PBs of plots that can’t pass any challenges. It comes down to pools having a way of actively auditing and even rejecting any plots in the pool.
Skimming the init portion of that gives a hint IMO:
# TODO(pool): potentially tweak these numbers for security and performance self.pool_url = "https://myreferencepool.com" self.min_difficulty = uint64(10) # 10 difficulty is about 1 proof a day per plot self.default_difficulty: uint64 = uint64(10)
I’m not a Python programmer, so, totally speculating, I’d say assuming the pool needs to be trusted makes the most sense, at least initially. If you treat the pool challenges and reward allocation as transient data that can be thrown away, it keeps things simple.
On a non-technical level, I think trusting pools to the point where users don’t need to host a full node opens up a lot of potential use cases that won’t be possible otherwise. For example, I would really like to see a custom client and file protocol where I could point my farmer to a pool by clicking a button on a website.
Imagine a SaaS that provides pools where website operators could put a “Pledge Plots” button on their website and users could click it to allocate their farm to that pool. As a casual farmer I can create value with $0 incremental cost and no taxable events if I don’t receive any rewards.
Casual farmers allocating plots to their favorite creator, website, etc. could be a very big deal and have a large influence on the future of the web if the value of Chia holds up.
I’ve watched a part of the Zoom call and I think I understand the proposed solution now> Please correct me if I’m wrong (trying to distill it to layman’s understandable terms).
The Pool can assign a (much reduced compared to the actual mainnet) difficulty per pool participant. The pool’s objective is to adjust the difficulty so that the participant can provide challenge solutions at to the seeds coming of the official chain at that reduced challenge difficulty at a predicted (high) rate (default 300 per day).
The Pool does not actually know the plotspace of the farmer, it just knows that this farmer A can maintain my rate at difficulty X, whereas farmer B can only do it at rate Y<X.
It then can distribute the pool rewards based on the relative difficulties each farmer could maintain. Like mainnet, it doesn’t know you actually have the plots, it just knows you win the (reduced) challenges which should be directly correlated with the number of real plots you have. (this will put more load on your harvester and disks you are farming from, but not enough to be a real hindrance)
Uniqueness is enforced not per plot but per farmer key, through a unique contract on the blockchain that signs the pool portion of the reward to the pool. While you can move pools, every unique farmer key (which is embedded in the farmer’s plots) can only be in one of these contracts at a time, and there is enough of an enforced switching delay so you can’t quickly swap pools whenever you win a block and back.
Is this about right?
Nice! Sounds like my assumptions are kinda correct. Thanks for saving me from watching a Zoom call
Yes, the pool assigns an adjusted difficulty to each farmer so they can prove they can beat that difficulty regularly and thus earn shares at a certain diff (“points”), that’s how they prove they have a certain farming capacity. This aspect is analogous to how PoW pools have always worked. Rewards are distributed according to each miner’s contribution to the pool, as measured by the shares (low diff blocks) they have submitted.
And yes, farmers are identified by their smart contract, and plots depend on the contract (you need the contract first to plot, these plots farm to the contract). The contract is unique in the blockchain (to change it the farmer destroys and recreates it). And block rewards can only be extracted towards the pool address specified in the contract.
Easy, by dropping the difficulty way down and counting the number of valid proofs found, aka “shares”, same as gpu mining. As soon as one of those submitted share difficulty’s exceed the actual block difficulty, voila proof found. FYI a gpu mining pool doesn’t know how many gpus you have either. It’s entirely based on the number of shares you submit proportional to everyone else.
We believe the proposed system will work. Nothing is flawless and there were several exploits with initial eth pools. Some still have them
In the end it will be up to every pool operator to do their best.
Yes, see my last post in this thread. The thing I missed was difficulty could be used to lower the boundary for statistical fraud detection, so pools don’t need to know the size of your plot space, and can use the plenitude of positive responses as a difficult to fudge proxy.
No solution that “validates plots at the client side” is secure. It’s too easy to build your own client that simply lies about the validation. The pool will have to perform independent validation such as the proposed reduced difficulty challenges mentioned in other responses.
So pools will be sending out low difficulty challenges in addition to the mainnet challenges to assign rewards based on how many an account can complete a day. I’m definitely curious to hear what the performance difference of farming to pools vs solo will be. If it’s sending two or five times the number of challenges solo farming does that might be significant over years of drive use. I doubt that will matter to most farmers that are just looking to use pools to average out their short-term daily rewards. For me, the extremely low farming cost is the entire point of chia. Will pool plots be able to be solo farmed if someone wants to switch back to solo? It seems obvious that once pools do release there will be a very real plotting race until Netspace levels out.
It will make no difference to drive load as the relative farming load for low or high difficulty is slight. It only makes a difference if you have LOTS of SMALL drives and imagine you can spin them down because the chance of hitting a given drive is small enough to risk it.
However, the wear on drive startup is already too high with solo challenges and 3TB drives so a pooled check will definitely preclude spinning down … so the additional wear is negligible as you need to keep them spinning
Spinning down and up even just a few times a day will be far more destructive for the drive than even a 100 times increase in random drive reads.
Most of the drives i use are SAS, have been spinning continuously for 6-8 years - SMART shows me some have only spun up a handful of times over those years - If they have been running continuously and COOL for that long they are about as likely to fail as a consumer USB drive that was designed for access a few times a day and is still in its “early fail” window
You raised a legitimate concern. Glad to see it.
Chia network is a creative and successful crypto coin. It wouldn’t be a surprise to encounter some challenges as always in a unchartered territory.
Saw people made an interesting comparison between validating a plot versus validating GPU/ASIC. I’d like to add my 2-cents.
I’d say YES and NO.
NO because GPUs are made by major corporations. Similarly, the ASIC mining box requires big investment, they are not motivated to fake ASIC in mass production. Plus, they aim to serve the open market.
In contrary, plots are made by individual Chia farmers. The entry of cheating is so much lower. Plus, there is no Big Brother watching.
However, I’d say YES in a sense from the pool’s operator point of view.
Actually in theory, GPU/ASIC could have been hacked to cheat out a pool if it’s economical to do so. For PoW based networks, the fake hardware could be made cheaper and consuming less electricity as long as a pool treated it as a real one and distributed payout.
A fake Plot serves a similar purpose in Chia pool has much lower barrier to enter. Their goal could be simple, fill a Chia pool with fake plots so that they could get a share of “time and storage” from the pool distribution. A plot could be faked in one of following ways:
(1) fake tables inside the Plot
(2) fake size of the Plot file
(3) fake the local farm environment
The (3) is possible given the size of 100+GB in each plot. The fake plot might contain a general purpose program to respond the challenges from the Chia pool.
Chia’s total capacity charts online seem indicating that fake plots are already in circulation. It’s attractive to some folks as long as such plots were quicker to create, or smaller in size.
Excellent post even if some of it went over my head, lol!
I do question one statement you made:
We have had a lot of discussion about those charts, the bumps and jumps, the saw tooth and more.
IMO the most important conclusion we came to was that the info for the graphs we see is gathered by different polling methods some of which are only done once a day. The graph keeps trying to fix itself. The numbers are not exact. The behaviors we see in the charts do not reflect reality except in a general fashion especially as you shorten the time frame.
With that said, do you have any other information to indicate that a significant number of fake plots are sneaking past the pools? I have read much speculation but have found no facts.
You the farmer cannot cheat pools on the protocol level
In theory the pool can implement the protocol wrong, or you can hack the pool server and give your self points etc. and you can cheat them that way.
Pools can cheat you the farmer out of rewards, that you by your points (participation) should get… by simply not paying you out… or recording less points than you should get for your participation.
How can a farmer not cheat a pool (official pool protocol)… because points are based on your plots passing the normal block-chain puzzle… but with a lower difficulty.
If your plots can solve this puzzle at lower difficulty then they can also solve it at higher difficulty (just less frequent) and win blocks… whos rewards go to the pool wallet via the pool NFT mechanism.
So the whole fake plots will cheat pools is nonsense. If that was possible then you’d cheat the block-chain difficulty puzzles with it and get straight up block rewards
Well, the question is that, what if, I mean what if, a lower difficulty “fake” plot could be created much faster?
Second, what if the puzzle in lower difficulty could be answered from a dataset in a group that could be generated in advance?
Third, what if the solution to the low difficulty took a much smaller size?
Just some speculations.