I started kaww.io not too long ago, and I was just thinking about the wild journey its been to get it going, and some of the challenges – So I thought I’d post about it.

Why did I start a mining pool?

As everyone should be aware by now, kaww.io is a Ravencoin native pool. I saw a problem where a couple large pools control most of the hashrate, which is not great for the decentralization of Ravencoin. I have always focused mostly on C# development through most of my life, and most resources available for running something like this were NodeJS, and creating my own Web UI is all html/JavaScript – something I wasn’t really experienced with. I thought it would be awesome to help the network, and also expand my skills learning Node/JavaScript in the process.

Understanding the blockchain

I often see a lot of posts from people wanting to start their own mining pool. I’m not sure what level of each person’s experience is, but understanding how the blockchain and things like network difficulty vs share difficulty, block effort, general networking/troubleshooting, and straight up math skills are pretty damn necessary.

I think a lot of folks that want to start something like this think it’s “set it and forget it” and just watch money come in. If you plan on having a competitive pool, it’s doubtful you’re going to make it very far just by cloning a variant of NOMP on a server somewhere. You need to build competitive features.

If you are interested in learning more about the blockchain, I suggest you read my article about setting up a node to accept RPC connections, and learning more about the “getblocktemplate”, “getkawpowhash”, “getmininginfo, and “submitblock” methods. This is what the stratum server will use to get the current block to work on and how to submit a block if a miner finds one.

Profitability

As much as its noble to help the network, there are costs incurred by doing so. Kaww.io operates on 0.5% (half of one percent) fees, which is half of what the bigger pools fees are. The obvious reason is to attract new users.

0.5% works out to 12.5 RVN after the first halving (2500 total reward per block). If the price of RVN is 10cents US, that is $1.25 every time someone finds a block. Starting out, the pool ranges anywhere from 100MH/s (or less) to 600MH/s. We’ve been lucky to have a couple people with 1GH rigs hop on from time to time, but realistically that’s 1 block every 10-20 days if our luck is good.

So until we’re finding multiple blocks a day, profitability takes a back seat. If you’re lucky and find 3 blocks a month starting out, that’s about $4 in working capital per month.

Even one server at linode etc is going to run you $40/month, and that provides no redundancy and only a single location for your pool.

Until you grow, don’t expect to be profitable. To break even with a single $40/mo server, you’d need to make 32 blocks per month at the current price point.

Also, if you think you’re addicted to watching the price of crypto, I have some bad news for you. I’ve often found myself obsessing over Effort percentages, shared submitted, how long its taking to solve a block. It’s stressful. I’ve had to force myself to be a little less obsessive about it.

Experience Needed

As I said above, knowledge of the blockchain is important, but so is understanding all the aspects of running the day to day of the pool. Here is a list of all the things you’ll need to have some grasp of:

  1. Linux OS / Deployments
  2. Ravencoin (or whatever coin your pool supports) RPC knowledge
  3. Likely NodeJS, though other programming languages are possible
  4. Networking (Routing / Firewalling / switching / load balancing)
  5. Security / Intrusion Detection / DDOS mitigaton
  6. Databases management
  7. Monitoring
  8. Backup / Disaster Recovery
  9. Scaling (if you plan to run a global pool)
  10. Web front end development

All these things in the professional world equates to about 3-4 (or more) jobs. As I said in the previous section, profitability will likely be low to start, so hiring help is unlikely. You need to be able to know or learn these areas yourself.

A little story on troubleshooting – when developing a new feature, after deployment my monitoring system picked up that my number of connections to the database were ever increasing:

Image

After it hit about 20,000 connections, my database refused to accept any more, and forced the pool applications to restart and then repeat that cycle until it hit 20,000 connections again. This means every 18 hours or so, my stratum servers would restart, and since stratum is TCP based it means the connection would be severed momentarily and my clients would reconnect – meaning they would also see the issue and likely not be happy.

My point to this is, you need to be able to troubleshoot these kind of things as your applications evolve. My issue here was a fairly simple one, where I wasn’t closing the connection to the database properly in one of my functions, though my new feature had many functions that interacted with the database, so hunting down where the issue was took some work.

But you have to ask yourself:

  1. Do I have the skills to fix this type of problem?
  2. Do I have proper monitoring in place to catch this issue?
  3. Could I have caught this issue before it went to my production servers?
    1. In my case, I could have because I have a separate testnet environment – but due to very low traffic there, the number of connections only went up about 2 connections per hour – so a bit harder to see there. Looking at average connection counts would have caught it though.

But other hypothetical scenarios play out the same way:

  1. What if my pool finds a block, but no one got paid? Do I understand my payment processor code well enough to troubleshoot it? Do I know how to manually pay them since it failed the first time?
  2. My database failed/corrupted, was I backing it up properly and do I understand how to restore it so my users will not lose the work they’ll get paid for when we find a block?
  3. etc…

Marketing/Competition

So you got this far, you’re comfortable with your code/operations/infrastructure and lets say you launched your pool. How do you get people to use it?

As with most technical people, this may be the most challenging part of the process. I for one am NOT good at getting the word out about what I built, but people aren’t magically going to show up.

It’s a pretty tough ask to miners to start on a pool where they wont be paid regularly like the bigger pools. Most inexperienced users will likely not flock to a smaller pool.

Paying for advertising on some pool listing websites may work (I haven’t tried this yet), but considering what I said about profitability above, your marketing budget may not be very big. Not to mention, users that come to you from said marketing may be turned off by a pool that is inconsistent and just starting out.

You could rent hashpower, but that gets expensive quick and really defeats the point.

I’m still figuring this part out, but I think these things are absolutely necessary:

  1. A friendly/easy to use website for your pool. I started from scratch with kaww.io because anything that was already made is just not a good experience in my opinion
    • This should also translate on mobile viewing
  2. Make it as easy as possible for miners to connect to you. I wrote a how-to for pretty much all the popular miners out there
    • I also did a pull request for HiveOS, so you can just select “kaww” from the pool menu when you mine ravencoin.
  3. Write an extensive FAQ

In short, make your product as easy to use with as little learning curve as possible. It’s not guaranteed to work, but hey look at Apple.

Final words

Hopefully this gave you a bit of insight into the day to day of operating a pool. Thanks for reading if you got this far 🙂

Did I help? If you’re feeling generous, buy me a coffee by sending RVN to RHEH92NguBjaxXQPsM1bedkqqTXKr9EZcM

Follow me on social media: