Hi team,

We are blockchain researchers from the National University of Singapore.

Our current research analyzed the fairness of NXT incentive algorithm. Several issues are found, so we try to report here and wish to hear some feedback from the team.

We found that the current NXT forging algorithm does not ensure that the block winning probability is proportional to the stake deposited by players.

Specifically, the players with more stakes will receive a higher ROI comparing with poor ones.

In a long-term staking competition, this mechanism will encourage players to join the mining pools and making incentives centralized.

Let me show you some intuitions that the issue caused.

Currently, to propose a new block, NXT forgers must calculate a 'hit' number and a 'target' number, where,

`Target = BaseTarget * EffectiveBalance * TimeSinceLastBlock`

and,

`hit = gethit(publicKey, lastBlock)`

.

The `gethit`

function can be regarded as a hash function or verifiable random function. The `hit`

number is fixed for every block and the `target`

number increases every second (because of the variable `TimeSinceLastBlock`

). Once a new block is found, every forger will update his `hit`

in the current block and continuously check if `hit < Target`

for the current timestamp. The player who is assigned the shortest waiting time becomes the proposer of the next block.

We can simplify the waiting time formulation in this form

`Waiting_Time = constant * Hash(pk,...)/balance`

.

Suppose there are two forgers A and B, who control `S_A`

and `S_B`

stakes, respectively ( assuming `S_A < S_B`

). By some probability calculation, we can show that the probability forger A generates a smaller `Waiting_Time`

with probability `S_A/2S_B`

, which is less than `S_A/(S_A+S_B)`

. Consequently, the rich forger will have a higher probability to propose the next block, making himself becomes even richer.

To address this problem, we also proposed a practical solution that can be deployed easily on current NXT client. The solution is just modifying the current `target`

and 'hit' formulas so that the proposer selection algorithm can be fair. Since we can not put any latex formula here, please check our paper for more details. We are very happy to help the team solving this bug.

Here is the paper link.