Mining

PacketCrypt is a bandwidth hard proof of work, this means it requires lots of bandwidth to mine. Miners collaborate with one another by sending small messages (called Announcements) and the sending of these messages requires a large amount of bandwidth.

Miners who are working in collaboration with one another are members of a mining pool, therefore all mining of PacketCrypt is done in pools.

PacketCrypt mining is split into two distinct stages:

Block mining is typically done at the mining pool's datacenter, however Announcement mining can be done from anywhere.


How to Announcement mine

There are a number of options available when it comes to installing the PacketCrpyt announcement miner. Choose whichever best suits your technical ability:

1. Install a Pre-built Binary

Pre-built packetcrypt binaries (for linux) or installation packages (for macos) and archives (for windows) can be downloaded from packetcrypt releases page.

2. Deploy a Docker Image

There is a PacketCrypt Docker image available, which can be used for announcement mining.

To install:

  1. Download and install Docker for your operating system.

  2. Download the PacketCrypt Docker image:

$ docker pull thomasjp0x42/packetcrypt

There are also PacketCrypt Docker images built without the portable flag (--no-portable) which may increase the performance of the announcement mining while reducing CPU compatibility. One such image (compiled on AMD 5950x) is available at thomasjp0x42/packetcrypt-amd64. Additionally, for ARM devices such as Raspberry Pi, there is an image available at thomasjp0x42/packetcrypt-arm64. The arm64 image will also work on Apple silicon such as the M1 and M2 chips.

  1. Run the container similar to the commands described in the Begin Announcement Mining section, except replace this part of the command:
$ packetcrypt

with this command to run PacketCrypt from Docker:

$ docker run thomasjp0x42/packetcrypt

The final command will be formatted like this:

$ docker run thomasjp0x42/packetcrypt ann -p <your_wallet_address> <pool_1>

More information can be found at the PacketCrypt DockerHub page

3. Build From Source

Building from source will generally offer the best mining performance but requires more technical knowledge than the previous two options.

First install rust if you haven't, see: rustup

git clone https://github.com/cjdelisle/packetcrypt_rs
cd packetcrypt_rs
cargo build --release

See the PacketCrypt GitHub repository for more detailed instructions.


Begin Announcement Mining

Important

You cannot mine into the electrum wallet, You can only mine into the Command Line Wallet, the Pkt.World Wallet or the Mac GUI Wallet .

To begin mining, you will need the address of your wallet and you will need to choose a pool.

There are two ways to configure the announcement miner; by using CLI parameters or by using a configuration file:

Using the CLI

packetcrypt ann -p <your_wallet_address> pool_1 [pool_2 pool_3 pool_4]

[or for windows]

packetcrypt.exe ann -p <your_wallet_address> pool_1 [pool_2 pool_3 pool_4]

Using a Configuration File

A configuration file must be in JSON format. The file can be loaded from the local filesystem or from a web-accessible location.

Any CLI parameters used will overide the corresponding settings in the configuration file.

Example config.json:

{
  "payment_addr": "<your_wallet_address>",
  "pools": [
    "pool_1",
    "pool_2",
    "pool_3",
    "pool_4"
  ]
}
packetcrypt ann -c "./config.json"

[or]

packetcrypt ann -c "https://example.com/config.json"

[or for windows]

packetcrypt.exe ann -c "./config.json"

[or]

packetcrypt.exe ann -c "https://example.com/config.json"

Announcement mining can be done into a single pool or multiple pools. When you announcement mine into multiple pools, you will be paid by each pool that you submit announcements to.

pool_1 is the pool running the highest difficulty. If you notice problems, you can test listing the pools in a different order. The number of pools you mine into is at your discretion. If a pool is down or malfunctioning you will notice the pool is not mining at [100%] in your mining feed and you can choose to remove the under-performing or malfunctioning pool.

How to install a PKT miner on Mac

  1. Install the Zulu or CLI PKT Wallet from https://docs.pkt.cash
  2. Download the PacketCrypt.pkg for mac
  3. Open your Terminal
  4. Install Rust by entering in the command: $ curl --proto '=https' --tlsv1.2 -sSf * https://sh.rustup.rs | sh
  5. Press 1 to confirm
  6. Enter the command: $ sudo install make
  7. Enter the command: $ git clone https://github.com/cjdelisle/packetcrypt_rs
  8. Enter the command: $ cd packetcrypt_rs
  9. Enter the command: $ ~/.cargo/bin/cargo build --release
  10. Enter the command: $ ./target/release/packetcrypt ann -p [your PKT Wallet Address] [pool 1] [pool 2] [pool 3] [pool 4]

Choosing Pools to mine in

You can mine in as many pools as you have the bandwidth to supply. The same data will be uploaded so your CPU is only used once. Currently the pools which are regularly winning blocks include:

In general the recommendation is to list the pool with highest difficulty in the first position to ensure your announcements will be accepted, as the standardized policy is to accept announcements of a higher difficulty for pools with a lower base difficulty. In some cases the rewards might vary depending on the pool order regardless of difficulty, subject to custom policies implemented by the respective pools.

(Check the relevant channels on Discord for current pool statuses)

You should test your daily earnings on each pool to see which one is best. Your mining revenue depends on how much each pool allocates towards announcement miners as well as how much hardware they are using in-house. The pools are winning different blocks and if you mine to just one pool, you're not getting any payment from the others when they win a block. It's the same with mining to a pool that is not winning any blocks.


Limiting System Resource Usage

Limiting the system resources available to Packetcrypt may negatively effect your mining power but can be useful to conserve resources for other processess.

Limit CPU Usage

Announcement mining is a resource intensive process. By default, Packetcrypt will use 100% of the available CPU resources. CPU usage can be limited by assigning a limited number of threads to packetcrypt using the -t CLI parameter or "threads" key if using a configuration file.

Example of assigning four (4) threads to Packetcrypt:

packetcrypt ann -p <your_wallet_address> pool_1 [pool_2 pool_3 pool_4] -t 4

or

{
  "threads" 4
}

Limit Bandwidth Usage

Bandwidth usage is directly related to two main factors:

1 - Mining difficulty of the primary pool (the first pool listed in Packetcrypt pool configuration)

2 - The number of pools mined

Bandwidth usage can therefore be limited by selecting a higher difficulty pool as the primary pool and/or by mining to fewer pools.


Block Mining & Running a Pool

Because each block miner must use as much bandwidth as all of the announcement miners combined, block mining is typically done at the location of the pool. Even a pool operator who wanted to support external block mining would find that the pool itself would need enough upload bandwidth to match all of the block miners - which would be completely untenable. If you are interested in block mining, contact the pool operator and discuss sending hardware to their location.

Starting your own pool requires setting up a number of services:

PacketCrypt Data Flow

packetcrypt_data_flow

More Information and PacketCrypt Pool Code

The code and documentation for running a pool is available on the C / nodejs version of the PacketCrypt project, the new Rust version only contains Announcement Miner and Announcement Handlers.

Announcement Difficulty

PacketCrypt is designed in such a way that a mining pool can double its effective power by:

The way that a pool operator limits the amount of bandwidth flowing into the pool, to prevent overloading of the network, is by setting what is known as the announcement difficulty. The announcement difficulty for a pool specifies how much work must be done on an announcement in order for the announcement to be accepted and paid out by the pool. Announcement difficulty serves to slow down the announcement miners to protect the pool's network.

In general, doubling the announcement difficulty will halve the amount of bandwidth used by the pool and will also halve the pool's overall mining power, with a limit that setting the announcement difficulty lower than 2 does not bring any additional value. To explain why it works like this, we need to examine the PacketCrypt algorithm rules and the in particular how the block mining software decides which announcements to use when attempting to mine a block.

Announcement Set Selection

PacketCrypt algorithm allows block miners to perform less work if they are able to prove that they had a certain number of "high value" announcements in memory at the time of mining, the exact ratio of actual work a block miner must do to the amount of work the PKT blockchain requires is called the power multipler.

For a block miner seeking to optimize their power multiplier, every announcement has a particular level of utility value which is based on the amount of work that was done by the announcement miner (announcement difficulty) and how old the announcement is. We call this the effective difficulty.

The effective difficulty of an announcement starts off as the actual difficulty of the work done to mine it and then decreases by half every block-period until it is less than 1 and the announcement is no longer usable for mining.

The block mining software selects a subset of announcements which which will give it the best power multiplier based on the PacketCrypt algorithm:

power_multiplier = min(effective_difficulty) * ann_count ** 2

The min(effective_difficulty) is the effective difficulty of the "least valuable" announcement that is being mined with.

Lets assume that announcement miners are providing a steady supply of 1000 announcements per block-period and all announcements have an initial announcement difficulty of 128. The block mining software can choose to mine with 1000 announcements at 128 effective difficulty, or with 2000 announcements at 64 effective difficulty, or with 3000 announcements at 32 effective difficulty and so on.

ann_selection.png

The best choice is to use the previous three block periods which provides a power multiplier that is 225% higher than that of using just the most recent 1 period worth of announcements. This curve is the same no matter what difficulty we are starting with.

Optimal Difficulty Curve

Knowing that the optimal announcement set is all of those announcements mined over the past 3 block periods, we can compute the overall power of a pool as the announcement difficulty is raised.

At announcement difficulty 1, announcements cannot be used for more than 1 block, but if we imagine that the announcement mining community can produce 1000 announcements per block at difficulty 1 then we can reason that the power multiplier will be 1000 ** 2 or 1 million.

At difficulty 2 we can expect the announcement miners will produce 500 announcements per block period but since 2 block periods can be used, the power multiplier is the same.

At difficulty 4, the announcement miners will produce 250 announcements per block period and they will be valid for 3 block periods making the power multiplier 750 ** 2 or 562,500.

ann_diff_power.png

From here, the power output of the power multiplier of the optimal announcement set halves for each doubling of the announcement difficulty, making the optimal difficulty 2.


FAQ for ANN Miners

What does overflow mean?

When the ann handler receives an announcement, it puts it into a queue, when the queue fills up it responds overflow immediately. The queue can become long, so you may receive "operation timed out" you're still being paid, when you receive "overflow" you are not being paid.

Unfortunately, you may also receive "operation timed out" because the handler is unresponsive, it's not obvious which is the reason from looking at the logs.

For example, what you will see in the AnnMiner Logs:

1618394538 INFO annmine.rs:519 467 Ke/s   28.56Mb/s   overflow: [0, 0, 3072, 0]      uploading: [0, 0, 17632, 0]                 accept/reject: [26932/0, 0/0, 4856/0, 796/0]                    - goodrate: [100%, 100%, 61%, 100%]