Skip to content

Commit

Permalink
Empty commit to bump protocol version to fix bug in proposal selection.
Browse files Browse the repository at this point in the history
A bug in Credential.lowestOutput causes large accounts to be block proposers
disproportionately more often than small accounts.

When there are multiple proposals, nodes vote for the proposal with the "lowest
credential" -- essentially, the VRF output is hashed and the proposal with the
lowest hash wins. More precisely, if via binomial sampling an account has been
selected to be on the proposal committee k times, their VRF output is hashed
with an incrementing counter k times, and the lowest of those k hashes is used.
(This is supposed to simulate k independent proposals from the account.)

Due to a bug in the implementation, the first of these k hash values (used for
determining the "lowest credential") is the same hash value that was used as
input to binomial sampling (for determining whether the account was selected to
propose in the first place). So conditioned on an an account being selected to
propose, this first tie-breaking hash value is nonuniform. In particular, it
will tend to be much higher (and thus much worse as a "lowest credential") than
a uniform value.

This means an account selected to serve on the proposal committee more than
once has a significant advantage over an account selected to serve on the
proposal committee only once. As a consequence, high-stake accounts propose the
winning block dramatically more often than would be expected given their stake.

The fix (adding proper domain separation) requires a protocol upgrade to ensure
all nodes have the same behavior when computing lowest credential. Strictly
speaking it would not permanently stall the network to deploy the fix without a
protocol upgrade, but doing so would degrade network performance.

This repo does not currently specify how to compare two credentials (i.e., the
area with the bug). This empty commit will bump the protocol version for the
sake of deploying the fix without further delay. After the fix is deployed
we'll take the time to fully specify correct behavior.
  • Loading branch information
algoradam committed Jan 13, 2020
1 parent 4a9db6a commit a907fb2
Showing 0 changed files with 0 additions and 0 deletions.

0 comments on commit a907fb2

Please sign in to comment.