State Proofs - Algorand Specifications

Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Algorand Specifications

A State Proof message for rounds (X⋅δSP,…,(X+1)⋅δSP](X⋅δSP,…,(X+1)⋅δSP]
for some number XX, contains the following components:

Each block header keeps track of the state needed to construct, validate, and record State Proofs.

This tracking data is stored in a map under the msgpack key spt in the block header. The type of the State Proof indexes the map; at the moment, only type 00 is supported. In the future, other types of state proofs might be added.

For type 00:

The value of the tracking data is a msgpack map with three elements:

The participants committed to by the vector commitment are chosen in a specific fashion:

The normalized balance is a hypothetical balance: consider an account II with current balance aIaI. If an account had a balance nInI in the genesis block, and did not perform any transactions since then, then its balance by the current round (when rewards are included) will be aIaI, except perhaps due to rounding effects.

In more detail, let r∗IrI∗ be the last round in which a transaction touched account II (and therefore all pending rewards were added to it). Consider the following quantities, as defined in the Account State:

Given these two quantities, the normalized balance of an online account II is aI(1+a′I)aI(1+aI′).

Important

EXAMPLE:

For example, if the total amount of rewards distributed up to round r∗IrI∗ is 20%20% of the total stake, then the normalized balance is aI1.2aI1.2.

To limit the required precision in this calculation, the system uses a parameter UrUr that specifies the rewards-earning unit, namely, accounts only earn rewards for a whole number of UrUr μALGO. (Currently Ur=1,000,000Ur=1,000,000, so the rewards-earning unit is 11 ALGO.)

The parameter a′IaI′ above is an integer such that a′IUraI′Ur is the desired fraction, rounded down to the precision of 1Ur1Ur.

The normalized balance is computed as:

nI=⌊aI⋅Ur(a′I+Ur)⌋.nI=⌊aI⋅Ur(aI′+Ur)⌋.