Skip to content

Master Plan

Hüseyin Uslu edited this page Jul 23, 2014 · 20 revisions

Master Plan

In this document we'll be addressing the motivation behind CoiniumServ and present a basic road-map of the development process.

The motivation

So you'll be most likely asking the reasoning behind yet another pool-server when there exists lovely ones like python-stratum, python-stratum-continued, nomp and side-projects like mpos. First of all we already love those projects (especially Open Source ones that contributed the community) and using them.

Though for us today Bitcoin is just like the Internet in 1996, so we expect a huge evolution if in upcoming years. Said so, Bitcoins and alternative crypto currencies deserves a better pool-software that has a proper development model and plan.

Internet vs Bitcoin

The language choice

Although python and javascript (node.js) are great choices, we feel they are a bit hacky and instead decided to go for a more conservative and dictative language - C#. With the Rosyln and .net native on the horizon, we think C# has great potential that we can use within the project.

The framework - Mono & .Net

CoiniumServ is built from ground up with the idea of supporting both .Net and Mono frameworks. Basically you can run CoiniumServ over any platform that has .Net or Mono support; Windows, Linux, MacOS and so on.

Wide platform coverage

We want CoiniumServ to support as many possible platform as possible and supports these frameworks;

  • Mono 3.x - covered by travis with MacOS builds
  • .Net 4.5.x - covered by appveyor with Windows 2012 builds
Test Driven Development

The project follows Test Driven Development in which we have implemented extensive tests for all important functionality and never merge in code that breaks tests and stuff. Yet again, when a new functionality is introduced we also expect proper tests to be implemented within the PR.

Layered Architecture

CoiniumServ uses a layered architecture with multiple layers of functionality that you can replace / use.

Modularity

Modularity is one of the important concepts we follow within the code - which basically allows us to write coded that is independent of each other. This will allow you to write new modules of functionality or extend existing ones.

Protocols

We want CoiniumServ support every available mining protocol that exists on the planet and once we achieve this target, we have plans to develop new protocols with extended functionality.

Persistance & Storage

CoiniumServ uses a layered architecture for persistance & storage systems and you'll be able to use your choise of database engine.

Multipool & Automatic Trading Support

We build the CoiniumServ from the start with the idea of supporting multipools and automatic trading support. We'll have a basic trading engine module that you can extend for your needs.

Unified Mining Port

We eventually want to implement support for unified ports which the code will just identify the user supplied wallet address to determine the coin he wants to mine. This will allow easier configuration of the server.

Unified Protocols Port

We want to implement such functionality that CoiniumServ will identify if the miner is using getwork, stratum or some other protocol and able to operate them over a single network port.

MPOS Mode

CoiniumServ by default will have it's own payment processor and web-frontend module but additionally, we'll support MPOS mode to let you handle payments using it.

Upstream Proxy & Proxy Mode

You'll be route the worker hashes to another pool just to get started your pool or build a service like betarigs.

Merged Mining

We want to implement merged-mining support once we are all done with the base work.