(edited to add proposal)
I'd quite like to attack this problem. On the olympic network I was responsible for getting GPU mining compiled and working with ethash-cl algo, am familiar with all of the codebases, and familiar with the new stratum protocol used by miners. I also contributed to the building, testing and distribution of ethereum binaries for several platforms. Ethash commits: https://github.com/ethereum/webthree-umbrella/commits?author=subtly&page=3
As has been discussed in the blog post, and in a variety of other channels, centralization isn't ideal for mining because the reduction in network nodes reduces resilience and (hypothetically) reduces the effort required to compromise the network. However the benefit to mining pools is that they're easier to use, users don't have to run and maintain full nodes, pool operators are incentivized to compete in order to extract the most profit, and, for users which don't have a lot of hash rate, they can get paid based on the hash rate they contribute instead of the blocks they find.
Thus, the ideal solution will be easy to use, encourages running full nodes, allows partial payments, and is decentralized. Bonus: Competitive and fun :)
The challenge here is that without a centralized node there must be a protocol such that every pool contributor is working on a block which rewards every other contributor and doesn't censor or exclude rewards. This is difficult to address because mining is a concurrent process and the solution often involves a second BFT process. P2Pool is an example of this and addresses the problem by running a sidechain with a reduced blocktime and allows for altruistic donors to contribute to the reward. Napkin math tells me that a p2pool-like solution for Ethereum would need sub-second block times which, all things considered, isn't realistic.
Initial proposed solution
Create a mining pool which is easy to setup and deploy (single-click)
All mining rewards go to contract
mining contract allows contributors to withdraw early
mining contract such that it is fair w.r.t workers vs. winners
Fully decentralized via "Pulse" protocol (phase 2)
Competitive and Fun (phase 3)
The initial solution would be built in a centralized form for testing and to get out an MVP. Once stable, the decentralized version would be built and released. The decentralized mechanics are secondary because I think usability is more important and I'd like for the decentralized solution to be compatible with casper and go through academic review.
senior Meteor developer and fulltime React/Redux dev atm here.
I wanna work on this too. My take on this starts with grabbing already working solutions and merging them. So for example node-stratum-pool and EtherPool. To set baseline for working open source ETH pool with stratum support.
From there I am comfortable to focus on things like:
making really personalised and realtime web pages
browser realtime worker monitoring extensions
native apps for mobile + push notifications
Stuff regarding payments - fully customisable by setting worker arguments. Custom payout anytime - you can just call 1 little contract function which emits event. And server will catch it plus execute Tx with all given address credits. Or yes, it could be kind of fully managed by contract, updated after each block mined with info about every address shares status.
Authentication - there are so many possibilities. We may base it for example on creating account on server and than generating some string which would be used as argument for contract function call from miner's address. And user can call function on pools contract address to destroy all relations to accounts from given address.
Also I wanna emit some swag tokens as random mining bonus and create some gamification layer above this. We all can look for example on CS:GO skins and the market with such funny stuff.
And ofc some decentralisation stuff regarding mining pool would be nice, but that would really want some external $$ motivation. It feels like creating separate PoS blockchain just for that specific purpose, as any PoW solution I can think of would not be cost effective in that needed Tx count to move wheels for every share.
Or I had not been studying possibilities long enough :D
Having pools is actually a good thing for network security, since extra hash power makes a 51% attack harder, and without pools, small miners wouldn't contribute their hash power to the network.
It only becomes an issue when a single pool has a disproportionate share of the network hashrate.
Unfortunately, that is not something which a "permission less" system can enforce. There is not a way to prevent collusion in general. Mining pools as currently implemented do offer an easy way for individual computers to participate in the network and their behavior is observable. The lowering of effort increases the size of the hash power pool. This is a benefit.
The cringe question is whether pools will be developed which have less observability. E.g., a design which provides payouts based on your machine's provable hash-power contribution, but not tied to the generation of blocks under a single, consistent address scheme. Such a 'pool' couldn't cheat in a meaningful way. But, it might adopt strategies to launder it's sources of ETH (e.g., payment through addresses that were in turn fed from exchanges). They would be resistant to analysis, and it would be unclear how much hash power they controlled. Meanwhile, unsuspecting network participants might be fooled into thinking that decentralization had won the day.
If we see a market for hash power along these lines for any PoW currency, then I would become very worried for the future of PoW.
No, your stuff simlpy doesn't work. I've spent 3 days trying to make it work but failed. I just can't make 2 nodejs scripts run simultaneously. I mean run.js and updateBalances.js.
My proposal is to publish my go-ethereum-pool (already implemented):
Pool Mining Solution
Proxy, payouts, block unlocking (maturity) module
Configured payouts period and balance threshold - easy and simple
Paying all uncles indeed
Paying full block reward instead of scamming miners with up to 0.3 ETH per block
Detailed block stats with luck percentage and full reward
Failover geth instances: geth high availability built in
Strict policy module (banning strategies using ipset/iptables)
Designed for 100% distributed setup (this is not easy for setup, cuz requires some thinking)
Written in Go it's a rocket highly concurrent and low RAM consuming piece of code
Beautiful Emberjs frontend screenshot
Separate stats for workers: can highlight timed-out workers so miners can perform maintenance of rigs
JSON-API for stats, miners can use for rigs maintenance automation (rig rebooting for example ) Also it's compatible with my ether-proxy solo/pool proxy solution.
It was available live under Eurohash brand but I turned it off due to lack of funding.
Repo stub (empty) https://github.com/sammy007/go-ethereum-pool I need 1-2 days to iron out README and publish code
Good enough for a solution which is going to be wasted anyway, after ETH turns into PoS.
Auxiliary solo mining solution
My Ether-Proxy is long maintaining solution almost from ETH launch. It drives big farms to solo mine and keep network secure with efficiency monitoring, I know "in-person" that at least 50 GH of network using it (different people, but there is a a lot more for sure). It's available for everyone for long and maintained even if i didn't receive any reasonable donations for it from community.