Consensus

The consensus algorithm is the dynamic method through which nodes in a blockchain system reach an agreement and make decisions.

Symbol utilizes an innovative mechanism called the Proof-of-Stake Plus (PoS+), a modified version of the popular Proof-of-Stake (PoS) consensus.

In a basic PoS consensus algorithm, the formation of a new block in the blockchain is stochastically assigned to a node based on a combination of factors related exclusively to the node owner’s wealth.

The PoS+ mechanism considers the account’s stakes too, but it also promotes the ecosystem’s health by rewarding participants based on their activity.

Factors

The algorithm considers the following factors when calculating an account’s importance, the measure that will ultimately be used to choose the next harvesting node:

  • Stake: The total amount of harvesting mosaic held, since owners with larger balances have the incentive to see the ecosystem flourish. Only accounts holding more than 10’000 harvesting mosaics (high-value accounts) are eligible for harvesting.

  • Transactions: The total amount of fees paid by an account. This encourages being an active account in the network.

  • Nodes: The number of times an account has been the beneficiary of the fees collected by a node. Thus the network incentivizes accounts which run nodes.

Periodically, an importance score based on these three factors is calculated for all high-value accounts. The importance score determines an account’s probability to harvest the next block.

Partial scores

The network calculates first the following partial scores for all high-value accounts at the end of each importance period (720 blocks, roughly 6 hours. See importanceGrouping in Network configuration):

  • Stake Score (\(S\)): Account’s balance divided by the balance of all high value accounts, at the end of the period.

  • Transaction Score (\(T\)): Total amount of fees paid by the account divided by the total amount of fees paid by all high value accounts during the period.

  • Node Score (\(N\)): Number of times the account has been the beneficiary of a node fee divided by the number of times all high value accounts have been the beneficiary of a node fee, during the period.

  • Activity Score (\(A\)): Average of the \(T\) and \(N\) scores weighted 80% and 20% respectively, divided by the account’s balance. Dividing by the account’s balance gives some boost to small accounts, because their importance score will depend more on their activity and less on their stake.

    An absolute activity score (\(A'\)) is calculated first:

    \[A' = \frac{10000}{Balance}(0.8T+0.2N)\]

    And the actual activity score (\(A\)) is calculated by dividing \(A'\) by the sum of the absolute activity scores of all high value accounts.

The importance score is then calculated based on the above partial scores.

Importance score

The importance score \(I\) is calculated as the average of the \(S\) and \(A\) scores, weighted by an activity factor \(\gamma\):

\[I = \gamma A + (1-\gamma)S\]

In the Symbol network \(\gamma\) is 0.05 (5%)

Finally, among all accounts eligible for harvesting, the probability that a particular one is chosen is proportional to its effective importance score, which is defined as the smaller of the previous two importance scores \(I\).

Note

Since scores are calculated every 720 blocks (roughly 6 hours) and the smaller of the previous two scores is used when calculating harvesting probabilities, when you first fund an account it will require 12 hours to have a probability greater than zero.

Customization

Private networks can customize the consensus algorithm by changing the following configuration properties. See Network configuration.

Property

Default

Description

importanceGrouping

720 blocks

How often importance is calculated.

minHarvesterBalance

10000

Minimum balance required to be eligible for harvesting.

importanceActivityPercentage

0.05

Contribution of the activity score (\(\gamma\)). When it is 0, PoS+ consensus behaves like conventional PoS.