Mining NuPoW Crystal tokens

Not long ago I released the NuPoW Crystal tokens, an implementation of ERC-20 tokens utilizing the new Proof-of-Work algorithm called NuPoW for token minting. The contract has no admin, and there’s no premine on these tokens.

The core thing about NuPoW is that it limits the amount of energy used for mining NuPoW tokens through a collective mechanism of reward reduction managed by a chain length run measurement.

It might all sound a bit complicated, but its really not, all described in more detail in the NuPoW whitepaper.

So what’s the point then? Well, it’s a bit of a mix of many things. Firstly, I think blockchain applications should be more accessible, they should be less energy intensive, and while I support the move to PoS we shouldn’t completely ignore PoW.

If we want to efficiently distribute resources, in a decentralized network of nodes, without centrally controlled allocation, how do we do that? How do we randomly pick someone without needing any coordination? This is where PoW is good. In traditional PoW blockchains, it randomizes who gets to propose the next block. And through that process, you also randomize the distribution of reward tokens.

But, PoW allows for economies of scale. And this then will incentivize large scale mining operations, with an unbounded upper energy demand as long as the reward supports the efforts. This in turn makes it less likely for the “everyday miner” to be able to participate, as the difficulty is pushed up and unless you have access to extremely cheap energy, your efforts are not very economical.

NuPoW, through the reward reduction when too much energy is put in to the collective mining efforts, breaks the economies of scale attribute of PoW. This then disincentivize significant investments in mining efforts, hence improving the accessibility of NuPoW mining, and help decentralizing these efforts.

My NuPoW “mining rig”, a simple Raspberry Pi

How to mine NuPoW tokens

I’ll probably write more on these things in another blog post, as I wanted this post to focus on how you can get started.

Getting started is not difficult, but you’ll need to pick one of several NuPoW Crystal tokens. There’s three mainnet tokens, one on Ethereum itself, the other two on L2s. Then there’s a bunch of testnet tokens, which is probably where you want to start.

There is a NuPoW miner available on GitHub, and assuming you have Java and git installed, it shouldn’t take you more than a few minutes to get started.

Firstly, clone the repo with

git clone

This should give you the nupow-miner folder. From within this folder, you want to build the miner source code. This is where you need to ensure you have Java installed. Any modern version should work just fine, I’m using Java 11:

nupow-miner$ java -version
openjdk version "11.0.15" 2022-04-19 LTS
OpenJDK Runtime Environment Corretto- (build 11.0.15+9-LTS)
OpenJDK 64-Bit Server VM Corretto- (build 11.0.15+9-LTS, mixed mode)

This allows me to then run the build script with ./, giving you output similar to this:

nupow-miner$ ./

> Task :compileKotlin

12 actionable tasks: 11 executed, 1 up-to-date

You’ll now have a bin folder, so change directory into this. You now have a couple of options. You can edit the config.yml file directly. This is good if you know what to put in there. But maybe you don’t have a private key for your miner and what to generate a new key, or don’t want to find/copy the contract address?

Included with the miner is a configuration builder tool. You can simply run the below command and have it guide you through the process. It will then output the suggested config content, for you to copy into your config file.

java -cp nupow-miner.jar fi.nupow.utils.ConfigBuilder

With the config ready, send some Ether to your miner account, and kick it all off with this one-liner:

java -cp nupow-miner.jar -Dlogback.configurationFile=logback.xml fi.nupow.Miner config.yml