Mining Pools?



  • @tomahawkeer said:

    Well crap I was hoping I could start mining in a pool. Solo mining seems to take a long LONG time to get lucky especially since I don't have a top end GPU (Radeon R7 360).

    Let it run for a while and note the hash rate you get. You can then calculate how long (on average) you should need to wait for a mined block with like so:

    Expected blocks per day = Difficulty / Your Hash / 60 / 60 / 24
    Expected days between blocks = 1 / Expected blocks per day

    Feel free to post back when you know your hash rate and we can advise you better.


  • admins

    Anyone planning on mining Sia for more than a month at this point should be able to expect to find blocks. A low-end GPU can find a block every 10 days or so on average, so over the course of 6-8 weeks it should balance out. On that timeline, a pool should not be necessary even for single-GPU miners.



  • Aren't pools pretty much something that can be implemented by third parties without core support, anyway? I thought that was how iti happened with Bitcoin.


  • Global Moderator

    @LjL said:

    Aren't pools pretty much something that can be implemented by third parties without core support, anyway? I thought that was how iti happened with Bitcoin.

    You would need:

    • a server (pool) running siad
    • a customized miner that (presumably over HTTP) retrieves headers for work and submits headers that have passed PoW.
    • a method to confirm each participant's hash rate
    • a payout mechanism (username, Sia address)

    Most here seems straight forward, but I'm not sure how to best confirm a participant's hash rate while preventing cheating, i.e. how to prove work was done even if no block was found? If anyone can suggest a way, I would be interested in setting up a SiaPulse pool, but I would need some pointers to get started.


  • admins

    It would be pretty easy.

    1. Have a server running 'siad', and then have a second daemon that wraps siad. It's this second daemon that your miners are going to be talking to. I'll call it 'siampd' for 'sia mining pool daemon'.
    2. server can get headers at any time by requesting them from 'siad'. Siad has a limited number of headers that it can support, though that number should be greater than 100 per second. Some manual testing of this is advised. Custom builds of siad could be created that can handle much more, but they will consume more system resources. If you are willing to dedicate an extra gig of ram and a decent amount of CPU then 5,000 per second is probably achievable.
    3. siampd gives these headers to miners. the miners do work on the headers and return headers that meet some target. You know that the payout is going to you, because the header is from your 'siad'. The miners need to be running a custom client that can talk to siampd. There will also need to be some sort of user account infrastructure.
    4. siampd pays out money per partially solved header, plus a bonus for a fully solved header. The bonus is important to stop block withholding attacks, where a miner will just not share blocks that they find - they will lose 1 header worth of reward, but the pool will lose 1 block worth of reward. I recommend something between 5% and 15% of the block reward go as a bonus, though I believe the standard for other coins is closer to 3%. A partially solved header meets an easier target, for example 100x easier. With a 15% block bonus, you would want to pay 1/100 * 85/100 * (pool fee percent) * (block orphan rate) per solved header. In the early life of the pool, you want a higher fee so you can build up a defense against unlucky streaks. Unlucky streaks will drain pool funds, you need to have enough to defend against that. Make sure you do testing to verify that the pool is profitable or at least is not losing lots of money.
    5. siampd must remember every header passed out that is still valid, and every partial header returned that has been collected. This is to make sure that each partially solved header is only collected once. When there is a new block, you can throw out the list of valid headers and solved partial headers b/c they are no longer relevant. This keeps the memory requirements relatively slim.

    I think that's most of the important stuff. There are fancier ways to build better and more decentralized pools, but I don't think anyone really has the time to commit to building a proper, peer reviewed, safe decentralized pool at the moment.


  • Global Moderator

    I had already been thinking about how I would design a Siacoin mining pool and been doing some research on stratum.

    If I really dedicate myself to it I might be able to pull it off, but I may need some help on confirming the block headers and other crypto stuff...

    Maybe I could work together with @allejuppa to make a working miner / pool pair with proper Stratum support.



  • it looks like I have 1 GPU that does about 50-55 MH/s and another that does 165-170MH/s.



  • Hi guys!

    A while back I started making a pool for Sia. I got a decent amount of the skeleton done and some of the implementation. The code is here:
    https://github.com/NebulousLabs/Sia/tree/mining-pool

    If you wanted to piggy back off my code, reach out to me on Slack and I can help walk you through the code that's already there.


  • admins

    (note: joash's mining pool is a decentralized mining pool, is fancier than the one I described above, but would also be much better for the ecosystem. Also, it's got a lot of the implementation finished already)


Log in to reply