Voting Cycles and Types of Changes

Votes on foundational changes, such as block version, span 32 epochs and demand a 90% miner consensus. Everyday changes, like block size adjustments, require only a simple majority. Each block allows miners to cast votes for up to two everyday changes and one foundational change. These votes are included in the block's header.

Back

Voting Mechanics

Affirmative Votes

To vote "Yes" for a change at the beginning of an epoch, a miner places the change's identifier directly into the block header.

Negative or Neutral Votes

To vote "No" or abstain, a miner enters a zero value in place of the identifier byte in the block header.

System Constants

  • Epoch length for voting: 1024 blocks
  • Epochs needed for foundational change: 32
  • Epochs before activating approved foundational change: 128

Current Network Settings

  • Maximum block size: 1271009 bytes
  • Maximum box size: 4096 bytes
  • Maximum transaction size: 96kb

Parameters Table

The following table describes vote identifiers, default values (during launch), possible steps, and minimum and maximum values.

  • If the step is not defined in the table, its value is defined as max(floor(current_value / 100), 1).
  • If the minimum value for a parameter is not defined, it equals zero.
  • If the maximum value is not defined, it equals 1,073,741,823.

A miner includes a parameter identifier (id) into the block header to propose or vote for increasing a parameter. If the miner supports decreasing the parameter, they would include (-id) into the block header.

Try out these parameters on deadit.github.io/paizo/

IDDescriptionDefaultStepMinMax
1Storage fee factor (per byte storage period)12500002500002500000
2Minimum monetary value of a box36010010000
3Maximum block size52428816384
4Maximum cummulative computational cost of a block100000016384
5Token access cost100
6Cost per one transaction input2000
7Cost per one data input100
8Cost per one transaction output100
120Soft-fork (increasing version of a block)

Parameter values are to be written into the extension section on the first block of a voting epoch, that is, in the extension of a block when its height mod 1024 = 0. Parameters for the initial moment of time (height = 1) are hardcoded.

How to Propose and Vote for Changes

To propose a change, a miner includes the vote identifier in the first block's header of a voting epoch. The header has three slots: two for everyday changes and one for soft forks. A zero should be set in any unoccupied slot. Votes can be arranged in any sequence.

For example, if a miner proposes to increase the storage fee factor and also initiate a soft-fork, they would input (0, 1, 120) in the header slots.