Mining for PUFFScoin

“Mining” is the process by which participants use their computational resources to compete with other miners or pools to solve the cryptographic hash for each PUFFScoin block, securing its transactions and state changes to the network, and receiving a reward consisting of newly-minted PUFFScoins as consolation. This process secures the network by creating, verifying, publishing and propagating blocks onto the blockchain record. PUFFScoin, similar to other blockchain technologies, uses an incentive-driven model of security to ensure state unanimity across all participating nodes. Miners produce blocks which the others check for validity. Among other well-formedness criteria, a block is only valid if it contains proof of work (PoW) of a given difficulty.

This Proof of Work algorithm is called Ethash is a modified version of the Dagger-Hashimoto algorithm, and involves finding a nonce input to the algorithm so that the result is below a certain difficulty threshold. Since outputs have a uniform distribution, we can guarantee that, on average, the time needed to find such a nonce depends on the difficulty threshold of the cryptographic hash. This makes it possible to control the time of finding a new block simply by scaling the difficulty in an automatic process. As dictated by the protocol, the difficulty dynamically adjusts in such a way that on an average one block is produced by the entire network every 15 seconds. Any node participating in the network can be a miner and their expected revenue from mining will be directly proportional to their hardware’s mining power or hashrate (ie: the number of nonces tried per second).


The successful miner whose Proof of Work results in minting the new block of PUFFScoin will receive a static block reward for the ‘winning’ block, consisting of exactly 5.0 PUFFScoins. This produces, at a 15-second average blocktime, an annual minting of a little over 10million PUFFScoins.

The cost of the gas expended within the block by users to broadcast transactions or state changes to contracts is collected into a multi-sig wallet called the Veterans Endowment, which will be administered by a decentralized organization made up of representatives from every sphere of contact PUFFScoin enjoys from the cryptocurrency, veterans support and cannabis industry communities. Over time, it is hoped these gas fees will maintain an ongoing philanthropic fund to provide free access to veterans and first responders in need of cannabinoid therapy that they do not have coverage for.

Mining success depends on the set block difficulty. Block difficulty dynamically adjusts each block in order to regulate the network hashing power to produce an average 15-second blocktime.

Communication between external mining applications and the PUFFScoin daemon for work provision and submission happens through the [JSON-RPC API]. Two RPC functions are provided; eth_getWork and eth_submitWork. In order to mine users require a fully synced PUFFScoin client that is enabled for mining and at least one PUFFScoin account. This account is used to send the mining rewards to and is often referred to as the “coinbase“.


Mining pools are cooperatives that aim to smooth out expected revenue by pooling the mining power of participating miners. This is particularly helpful for smaller hardware owners who cannot compete against the network hashrate and will have little opportunity to mine a block on their own. Users generally receive a proportionate amount of PUFFS compared to the work they contributed to the pool to help find the cryptographic hash solution needed. In return, they usually charge users 0-5% of the mining rewards.

Most mining pools involve a third party, central components which means they are not trustless. In other words, pool operators can run away with your earnings. Act with caution. There are a number of trustless, decentralized pools with open source codebase. PUFFScoin Core will release and maintain a decentralized mining pool with low fees to help encourage small miner participation with the PUFFScoin consensus engine.


The Ethash algorithm used by PUFFScoin is considered memory hard, and in order to fit the DAG into memory, it needs 1-2GB of RAM on each GPU. The GPU miner is implemented in OpenCL, so AMD GPUs will have faster hashrates than same-category NVIDIA GPUs. ASICs and FPGAs remain comparatively inefficient thus far, although serialization of GPU chipsets are built into “mining rigs” to allow users to achieve very competitive hashrates for mining. AMD SDK and NVIDIA CUDA have openCL packages that users may need to install before mining for PUFFScoin with greatest efficiency.

Using ethminer with gpuffs

>gpuffs account new // Set-up ethereum account if you do not have one

>gpuffs –rpc –rpccorsdomain localhost 2>> gpuffs.log &

>ethminer -G // -G for GPU, -M for benchmark

Ethminer communicates with gpuffs on port 31313 (the default RPC port in gpuffs). Note that you need to set the CORS header with –rpccorsdomain localhost. You can also set port on ethminer with -F

Mining on a single GPU

In order to mine on a single GPU all that needs to be done is to run ethminer with the following arguments:

>eth -v 1 -a YOURWALLETADDRESS –client-name “OPTIONALNAMEHERE” -x 50 -m on -G

 -v 1 Sets verbosity to 1.

a YOURWALLETADDRESS Sets where the mining rewards will go to.

–client-name “OPTIONALNAMEHERE” Set an optional client name to identify you on the network

x 50 Requests a high amount of peers.

m on Launch with mining on.

G set GPU mining on.

While the client is running you can interact with it using either [gpuffs console].

Mining on a multiple GPUs

Ensure that a PUFFScoin node is running with your coinbase address properly set:

>eth -v 1 -a YOURWALLETADDRESS –client-name “OPTIONALNAMEHERE” -x 50 -j

The added -j argument permits the client to have the JSON-RPC server enabled to communicate with the ethminer instances. For each of your GPUs execute a different ethminer instance:

>ethminer –no-precompute -G –opencl-device X

Where X is the index number corresponding to the openCL device you want the ethminer to use {0, 1, 2,…}. In order to easily get a list of OpenCLdevices, you can execute

>ethminer –list-devices

which will provide a list of all devices OpenCL can detect, with also some additional information per device.

Users can use their computer’s central processing unit (CPU) to mine for PUFFScoin. This process is not considered generally profitable since GPU miners are roughly two orders of magnitude more efficient. However, you can use CPU mining through gpuffs, in cooperation with GPU mining with an external mining application. Considering that the global hashrate expected for PUFFScoin will be of several orders of magnitude smaller than Ethereum’s network participation, CPU mining may remain slightly profitable in the early going of the PUFFScoin lifecycle.

When a user initiates their PUFFScoin client node with gpuffs it is not mining by default. To start it in CPU mining mode, you use the –mine command line option. The –minerthreads parameter can be used to set the number parallel mining threads (defaulting to the total number of processor cores).

>gpuffs –mine –minerthreads=4

You can also start and stop CPU mining during runtime using the console. (gpuffs must be launched with the –console flag) The command ‘miner.start(#)’ takes an optional parameter for the number of miner threads.

> miner.start()

> miner.stop()

PUFFScoins mined will be deposited in the users coinbase PUFFS account. This defaults to the user’s primary account if the etherbase is not set to another user account. This can be set on the command line:

>gpuffs –coinbase 1 –mine 2>> gpuffs.log


>gpuffs –coinbase ‘0xa4d8e9cae4d04b093aac82e6cd355b6b963fb7ff’ –mine 2>> gpuffs.log

or via the console:


[Note: There is an option to add an extra 32byte Unicode string of data to blocks mined by a user to set up a short vanity tag.]


Other Commands

Users can check their hashrate with ‘miner.hashrate’, the result is returned denominated in H/s (Hash operations per second).

> miner.hashrate

Users can check the ether balance of their account by entering the following into the console:

> eth.getBalance(eth.coinbase).toNumber();

Users can alternately enter in a PUFFScoin wallet address in place of ‘eth.coinbase’ to get the balance of that account.

In order to make transactions from the console, users will need to unlock their account, using their password, by calling:

> personal.unlockAccount(eth.coinbase)