Distributed Proof of Work System

What is the Distributed Proof of Work (DPoW) System?
The DPoW system is the The Nano Center solution to helping the Nano community-supported services, such as faucets, tipping bots, and wallets. It allows any user to support the nano network by computing the required work for transactions.

How can I see statistics on the DPoW network?
The DPoW Network has a dashboard that is located here. You can see how many clients are connected, a list of services utilizing the network, and detailed statistics on PoW generation.

How can I use it?
The work is distributed by a centralized server, and you should use one of the available clients (links at the bottom):

Python client - more performance and configurable, harder to setup, intended for continuous use

Web-based client​ - easy to setup, intended for intermittent use

Why is this needed?
Every Nano transaction requires a small PoW to be calculated. It can take around 15 seconds on a modern computer (less than 3 if using a graphics card). This is not a problem for users running a node and only sending occasional transactions. However, for services that manage hundreds of accounts, which may want to transact at the same time, their server might not be able to keep up with the demand. This problem is usually handled by having a work server. The issue is that can be expensive, and is sometimes doing nothing, when transactions are not happening. For non-profit community services, this has become a problem.

How does DPoW solve the problem?
With DPoW any user can help run the aforementioned services, simply by leaving their computer on and calculating the occasional PoW. Much easier and often more helpful than running your own node.

But I thought running your node helps the Nano network?
Not necessarily, especially if you have a slow node. A representative, however, helps decentralize the network, making it more secure. DPoW was created because many users wanted to help the network in some other way.

Why would someone want to offer his computer for DPoW?
It runs on the same principle of running a node - we believe users will want to help the Nano network and services simply because they want them to exist. Moreover, there are plans of doing small payouts to users in the future, proportionally to the amount of work done.

Is this why I need to give my address as a work peer?
Exactly.

Do services pay for all of this?
We are currently implementing a subscription model where services pre-purchases a bundle of credits, such that each work requested costs them one credit. These funds will be then distributed to the workers regularly. This is still in testing and in the future we plan to explore a free community model. The cost to use the dPoW system is significantly cheaper then a service running its own work server.

We have already paid, collectively, more than 30 Nano to our clients, for tens of thousands of work requests.

Who distributes the work requests?
A server run by James Coxon, a member of The Nano Center.

Can't this be used to spam the network?
If anyone could request work for free, in theory it could be work that will be used to spam the network, which would go against the purpose of this system. However, all services have their own API Key and they will be banned if this happens.

I'm a service and I would like to use this
Great! Please contact @jayycox#5013​ in http://discord.nanocenter.org/ or by e-mail: james@joltwallet.com. In the future, a form will be available.

How do I know you're not using my PC maliciously?
You can use the open-source client and verify the source code (or ask someone you trust in the community). We will never do such a thing.

I've heard that Nano nodes precache the work for the next transaction, is this true?
Yes. It is perfect for sending occasional transactions since they will be sent immediately without waiting for work. The DPoW system does the same for its services. After a work is requested, the corresponding source account is kept in a database, and we check for changes in its ledger. Once they send a transaction, we request work to a work peer in the background and keep it in cache. Once the service requests work for that same account, it will already be available! Neat, right?

What if the server goes down or there are no work peers available?
We recommend that services keep a fallback method to get their PoW.

Where can I find the source code?

 * Server
 * Python Client
 * Web Client (under maintenance, currently not working)
 * Dedicated Work Server

Ok, count me in!
Welcome, and thank you for helping to support community projects.