In this post, we describe another type of PoW (dual PoW) to produce a block, which reveals similar properties to classical PoW (namely, primal PoW) - a probability of producing a block is proportional to the miner’s hash power, but the resulting statistics of block time and hash value are somewhat **dual**. A similar property can be found for linear programming (LP) and so we name the algorithms as primal/dual PoW.

**Primal PoW**: A list of miners (0, …, n - 1) concurrently solves a hash-based puzzle so that a miner has the right to produce next time if the hash value of the block satisfies:

h_j \leq d

where j is the index of the miner, h_j is the hash value of the block mined, and d is the difficulty.

Assuming there is no network latency, the miner who finds the block hash earliest will win, i.e.,

i = \arg \min_j (t_j),

where t_j is the time that a miner solves the puzzle, and i is the index of the miner that is chosen as the block producer in this round.

**Dual PoW**: A list of miners (0, …, n - 1) concurrently solves a hash-based puzzle in time t. At t, each miner reveals the block with the smallest hash value h_j during mining, and the miner with the smallest hash value has the right to produce the block, i.e.,

i = \arg \min_j(h_j), and

t_j = t, \forall j \in {0, ..., n - 1}.

With the definitions of the primal and dual PoW, we first have the following result:

**Result 1: Linear Probability**: Assuming the hash powers of the miners are [H_0, H_1, ..., H_{n - 1}], the probability of a miner producing a block for both **primal/dual** PoW is p_i = \frac{H_i}{\sum_j{H_j}}.

**Result 2: Dual Statistics**: Another interesting result is that the statistics of the block mined may exhibit dual property, which is summarized below:

Algorithm | Block Time | Block Hash |
---|---|---|

Primal PoW | Exponential(1/expected_block_time) | Uniformly distributed in [0, d] |

Dual PoW | t | Exponential * |

(*) Approximate from Beta distribution (link)

**Application to Blockchain**: Directly applying dual PoW to the blockchain may be vulnerable to self-fish attack - if a miner finds a hash value that is small enough, it may start to mine the next block before t expires. A further solution to alleviate the issue is under investigation. One direction may be that a block with a specific height is unknown until t expires by incorporating the smallest hash values of other miners that are broadcasted after t into the block.