$$ \newcommand \VRF {\mathrm{VRF}} \newcommand \RewardsRate {\mathrm{RewardsRate}} \newcommand \RewardUnits {\mathrm{RewardUnits}} $$
Block Header
An Algorand Ledger can be minimally defined by a sequence of block headers linked
by the prevHash
field, as the header contains a cryptographic commitment to
the contents of the block body (the payset
).
The following diagram illustrates the minimal Ledger definition:
Genesis Identifier and Genesis Hash
A string and a 32-byte array, respectively.
They ensure the block belongs to the correct blockchain. These match the genesis information about the chain’s state.
📎 EXAMPLE
For the MainNet:
- Genesis ID:
mainnet-v1.0
- Genesis Hash:
wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=
(base64
encoding of the 32-byte array).For the TestNet:
- Genesis ID:
testnet-v1.0
- Genesis Hash:
SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=
(base64
encoding of the 32-byte array).
Previous Hash
Cryptographic commitment (hash) of the previous block header, linking blocks into a chain. The genesis block has this field set to \( 0 \).
Round
A 64-bit unsigned integer value that identifies the block’s round. The genesis block has round \( 0 \). For all other cases, it must be equal to the round of the previous block plus one (that is, they must be sequential and monotonically increasing).
Seed
A 32-byte array holding a random value used as a seed for cryptographic processes (e.g., block proposer selection).
The seed calculation algorithm (see ABFT normative specification) defines implicitly a sequence of seeds, whose values alternate according to:
-
The seed lookup constant \( \delta_s \),
-
Some round-specific computation that depends, amongst other things, on the seed refresh interval \( \delta_r \), the period \( p \) during which the block was assembled, and on the \( \VRF \) value obtained by the block proposer.
📎 EXAMPLE
Example a valid seed chain computation.
Timestamp
A 64-bit unsigned integer.
The timestamp is purely informational and states when a block was proposed, expressed in seconds since UNIX Epoch (00:00:00 Thursday, 1 January 1970, at UTC).
The difference between consecutive timestamps cannot be greater than \( t_{\delta} = 25 \) seconds
See the formal definition in the Ledger normative specification.
📎 EXAMPLE
In the reference implementation, checks on the timestamp are performed during block assembly. See the
MakeBlock
function.
Consensus protocol does not guarantee the accuracy of the timestamp!
Transaction Commitment
Cryptographic commitments (hash) to the block’s transaction sequence. Internally, it uses a Merkle Tree and commits to the tree’s root.
Two different hashes are provided:
⚙️ IMPLEMENTATION
Transactions (
payset
) commit reference implementation.
Proposer Payout
The amount in μALGO paid to the proposer is the sum of a fee component and a bonus component. The payout is subject to eligibility criteria and protocol limits.
For further details, refer to the rewards non-normative specification.
-
FeeCollected
Total transaction fees collected in the block expressed in μALGO. -
Bonus
A potential extra reward component of the block proposer payout, in addition to the fee component, expressed in μALGO. Subject to change during upgrades and to decrease every millionth round, according to an exponential decay curve.
Proposer
Address of the account that proposed this block.
Rewards
A structure representing the reward state. It contains the following fields:
FeeSink
A 32-byte array holding a constant address. This address collects transaction fees and pays block rewards.
📎 EXAMPLE
MainNet
FeeSink
address:Y76M3MSY6DKBRHBL7C3NNDXGS5IIMQVQVUAB6MP4XEMMGVF2QWNPL226CA
.
This legacy rewards distribution mechanism is currently inactive. See the non-normative section for further details on the active reward mechanism.
RewardsPool
(legacy)
A 32-byte array holding a constant address. This address pays distribution rewards (legacy system, currently inactive).
📎 EXAMPLE
MainNet
RewardsPool
address:737777777777777777777777777777777777777777777777777UFEJ2CI
.
-
RewardsLevel
(legacy)
A 64-bit unsigned integer holding the amount of μALGO distributed to each participant account since the genesis block. -
RewardsRate
(legacy)
A 64-bit unsigned integer indicating the amount of μALGO added to the participation stake from theRewardsPool
in the next round (legacy system, currently set to \( 0 \) for every block). -
RewardsResidue
(legacy)
A 64-bit unsigned integer holding the leftover amount of μALGO after the distribution of \( \frac{\RewardsRate}{\RewardUnits} \) for every reward unit in the next round. -
RewardsRecalculationRound
(legacy)
A 64-bit unsigned integer holding the round at which the \( \RewardsRate \) will be recalculated.
Transaction Counter
A 64-bit unsigned integer counting transactions committed before this block. It
is initialized at \( 0 \) or \( 1000 \) in the genesis block, depending on
the AppForbidLowResources
consensus parameter.
Upgrade State
This field tracks the protocol upgrade state machine. It contains a link to the currently active version of this specification.
-
CurrentProtocol
A link to the commit in the Algorand Formal Specification repository of the currently active protocol version. -
NextProtocol
A link to the commit in the Algorand Formal Specification repository of a new protocol version being voted on. -
NextProtocolApprovals
Anuint64
integer that represents the vote count for a next protocol upgrade. Set to 0 unless a vote is ongoing. -
NextProtocolSwitchOn
Round number at which the next protocol would be adopted. Set to 0 unless a vote is ongoing. -
NextProtocolVoteBefore
Round number before which a vote for the next protocol version should be issued and computed. Set to 0 unless a vote is ongoing.
Upgrade Vote
This field represents the vote of the block proposer on the new protocol version.
It contains two fields:
-
UpgradeApprove
A boolean flag that indicates an affirmative vote for the new protocol version. Usually set tofalse
unless a protocol upgrade vote is ongoing. -
UpgradeDelay
The delay in rounds between the approval of a new protocol version and its execution. Usually set to \( 0 \) unless an upgrade vote is ongoing.
Participation Updates
A structure with two optional fields:
-
Expired Participation Accounts
An optional list of account addresses to be removed from consensus participation, due to expired participation keys (from the end of this round). Limited to \( 32 \) accounts. -
Absent Participation Accounts
An optional list of online account addresses to be removed from consensus participation, due to long-lasting absenteeism in the expected block proposals. Limited to \( 32 \) accounts.
Block Header Examples
With Protocol Upgrade Proposal, Without Payout
{
"genesis-hash":"wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=",
"genesis-id":"mainnet-v1.0",
"previous-block-hash":"owhv6q/adgf0AvSNw9cC6Va7blSQUeCRaNaVKb0bqY0=",
"round":46000000,
"seed":"6Sv0nt/y7Wltt+nbwMpPZwLADmNURXmFHkrihTpqKYE=",
"timestamp":1736228624,
"transactions-root":"4V2mkvL+vDuQcN2Vq8x4HJzZCtNd/+pChJfFW9YVxNU=",
"transactions-root-sha256":"/nZs/lsL98Lw9NaqdT+3rdlKsFJyLqM8u4AKm42yIzg=",
"rewards":{
"fee-sink":"Y76M3MSY6DKBRHBL7C3NNDXGS5IIMQVQVUAB6MP4XEMMGVF2QWNPL226CA",
"rewards-calculation-round":46500000,
"rewards-level":218288,
"rewards-pool":"737777777777777777777777777777777777777777777777777UFEJ2CI",
"rewards-rate":0,
"rewards-residue":6886250026
},
"state-proof-tracking":[
{
"next-round":45999872,
"online-total-weight":0,
"type":0
}
],
"txn-counter":2667677491,
"upgrade-state":{
"current-protocol":"https://github.com/algorandfoundation/specs/tree/925a46433742afb0b51bb939354bd907fa88bf95",
"next-protocol":"https://github.com/algorandfoundation/specs/tree/236dcc18c9c507d794813ab768e467ea42d1b4d9",
"next-protocol-approvals":2,
"next-protocol-switch-on":46210138,
"next-protocol-vote-before":46002138
},
"upgrade-vote":{
"upgrade-approve":false,
"upgrade-delay":0
}
}
Without Protocol Upgrade Proposal, With Payout
{
"genesis-hash":"wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=",
"genesis-id":"mainnet-v1.0",
"previous-block-hash":"kl2qk0j7kUVQIfB53HeQMXr0aVjSQpUfLqlD0o9s/rE=",
"round":49920000,
"seed":"dwdIvSTHCglZ17+C/ukJMgj6zRMsh50H+4SlLaa9mO0=",
"timestamp":1747224224,
"transactions-root":"kgdfSAlEK8escojfUfgsiINgrVZcjghYLGBfyfDVL6Y=",
"transactions-root-sha256":"bpefFXuYuJ2SdzUIHk8zZ9WhVd+qNMwriFjIUMNpz2Q=",
"bonus":9702990,
"fees-collected":673000,
"proposer":"2R5FTTVDIAQ55I5SPW5BE6R2SVYY45O5W64XGIVBLHQYWMZARRXTO4VIHQ",
"proposer-payout":10039490,
"rewards":{
"fee-sink":"Y76M3MSY6DKBRHBL7C3NNDXGS5IIMQVQVUAB6MP4XEMMGVF2QWNPL226CA",
"rewards-calculation-round":50000000,
"rewards-level":218288,
"rewards-pool":"737777777777777777777777777777777777777777777777777UFEJ2CI",
"rewards-rate":0,
"rewards-residue":6886250026
},
"state-proof-tracking":[
{
"next-round":49920000,
"online-total-weight":1950063504685967,
"type":0,
"voters-commitment":"Zw1ruItyLxO/Y8L8iFaOZhW6yUOMO1KeCVDOPyK9kPvGxFRF5c/kCxihruqVsiO9ptYcqq6FnRx9X6sZpS1PBw=="
}
],
"txn-counter":2993570351,
"upgrade-state":{
"current-protocol":"https://github.com/algorandfoundation/specs/tree/236dcc18c9c507d794813ab768e467ea42d1b4d9",
"next-protocol-approvals":0,
"next-protocol-switch-on":0,
"next-protocol-vote-before":0
},
"upgrade-vote":{
"upgrade-approve":false,
"upgrade-delay":0
}
}