Skip to content

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.

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(\lfloor current\_value / 100 \rfloor, 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/

ID Description Default Step Min Max
1 Storage fee factor (per byte storage period) 1250000 25000 0 2500000
2 Minimum monetary value of a box 360 10 0 10000
3 Maximum block size 524288 16384
4 Maximum cummulative computational cost of a block 1000000 16384
5 Token access cost 100
6 Cost per one transaction input 2000
7 Cost per one data input 100
8 Cost per one transaction output 100
120 Soft-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.