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

$$ \newcommand \BonusBaseAmount {B_{b,\mathrm{base}}} \newcommand \BonusBaseRound {B_{b,\mathrm{start}}} \newcommand \BonusDecayInterval {B_{b,\mathrm{decay}}} \newcommand \MaxTimestampIncrement {\Delta t_{\max}} \newcommand \MaxTxnBytesPerBlock {B_{\max}} \newcommand \MaxVersionStringLen {V_{\max}} \newcommand \Heartbeat {\mathrm{hb}} \newcommand \Fee {\mathrm{fee}} \newcommand \PayoutsChallengeBits {\Heartbeat_\mathrm{bits}} \newcommand \PayoutsChallengeGracePeriod {\Heartbeat_\mathrm{grace}} \newcommand \PayoutsChallengeInterval {\Heartbeat_r} \newcommand \PayoutsGoOnlineFee {B_{p,\Fee}} \newcommand \AccountMinBalance {A_{b,\min}} \newcommand \DefaultUpgradeWaitRounds {\delta_x} \newcommand \MaxUpgradeWaitRounds {\delta_{x_{\max}}} \newcommand \MinUpgradeWaitRounds {\delta_{x_{\min}}} \newcommand \UpgradeThreshold {\tau} \newcommand \UpgradeVoteRounds {\delta_d} \newcommand \RewardUnit {U_r} \newcommand \RewardsRateRefreshInterval {\omega_r} \newcommand \StateProof {\mathrm{SP}} \newcommand \StateProofInterval {\delta_\StateProof} \newcommand \StateProofVotersLookback {\delta_{\StateProof,b}} \newcommand \StateProofTopVoters {N_\StateProof} \newcommand \StateProofStrengthTarget {KQ_\StateProof} \newcommand \StateProofMaxRecoveryIntervals {I_\StateProof} \newcommand \StateProofWeightThreshold {f_\StateProof} \newcommand \MinTxnFee {T_{\Fee,\min}} \newcommand \MaxTxnLife {T_{\Delta r,\max}} \newcommand \MaxTxnNoteBytes {T_{m,\max}} \newcommand \MaxAbsoluteTxnNoteBytes {T_{m,\mathrm{abs}}} \newcommand \PerByteTxnSurcharge {T_{\Fee,b}} \newcommand \MaxTxGroupSize {GT_{\max}} \newcommand \MaxKeyregValidPeriod {K_{\Delta r,\max}} \newcommand \MaxTxTail {\mathrm{TxTail}_{\max}} $$

$$ \newcommand \MinBalance {b_{\min}} \newcommand \Asset {\mathrm{Asa}} \newcommand \MaxAssetDecimals {\Asset_{d,\max}} \newcommand \MaxAssetNameBytes {\Asset_{n,\max}} \newcommand \MaxAssetUnitNameBytes {\Asset_{u,\max}} \newcommand \MaxAssetURLBytes {\Asset_{r,\max}} \newcommand \LogicSig {\mathrm{LSig}} \newcommand \LogicSigMaxCost {\LogicSig_{c,\max}} \newcommand \LogicSigMaxSize {\LogicSig_{\max}} \newcommand \MaxAbsoluteLogicSigProgramSize {\LogicSig_{\mathrm{abs}}} \newcommand \LogicSigVersion {\LogicSig_{V}} \newcommand \MaxProposedExpiredOnlineAccounts {B_{N_\mathrm{e},\max}} \newcommand \PayoutsMaxMarkAbsent {B_{N_\mathrm{a},\max}} \newcommand \PayoutsMaxBalance {A_{r,\max}} \newcommand \PayoutsMinBalance {A_{r,\min}} \newcommand \PayoutsPercent {B_{p,\%}} \newcommand \App {\mathrm{App}} \newcommand \AppFlatOptInMinBalance {\App_{\mathrm{optin},\MinBalance}} \newcommand \AppFlatParamsMinBalance {\App_{\mathrm{create},\MinBalance}} \newcommand \Box {\mathrm{Box}} \newcommand \BoxByteMinBalance {\Box_{\mathrm{byte},\MinBalance}} \newcommand \BoxFlatMinBalance {\Box_{\mathrm{flat},\MinBalance}} \newcommand \BytesPerBoxReference {\Box_{\mathrm{IO}}} \newcommand \MaxBoxSize {\Box_{\max}} \newcommand \MaxAppArgs {\App_{\mathrm{arg},\max}} \newcommand \MaxAppBoxReferences {\App_{\Box,\max}} \newcommand \MaxAppBytesValueLen {\App_{\mathrm{v},\max}} \newcommand \MaxAppKeyLen {\App_{\mathrm{k},\max}} \newcommand \MaxAppProgramCost {\App_{c,\max}} \newcommand \MaxAppProgramLen {\App_{\mathrm{prog},\max}} \newcommand \MaxAppSumKeyValueLens {\App_{\mathrm{kv},\max}} \newcommand \MaxAppTotalArgLen {\App_{\mathrm{ay},\max}} \newcommand \MaxAbsoluteTotalArgLen {\App_{\mathrm{ay},\mathrm{abs}}} \newcommand \MaxAppTotalProgramLen {\App_{\mathrm{prog},t,\max}} \newcommand \MaxAppTotalTxnReferences {\App_{r,\max}} \newcommand \MaxAppTxnAccounts {\App_{\mathrm{acc},\max}} \newcommand \MaxAppTxnForeignApps {\App_{\mathrm{app},\max}} \newcommand \MaxAppTxnForeignAssets {\App_{\mathrm{asa},\max}} \newcommand \MaxAppAccess {\App_{\mathrm{access},\max}} \newcommand \MaxExtraAppProgramPages {\App_{\mathrm{page},\max}} \newcommand \MaxAbsoluteExtraProgramPages {\App_{\mathrm{page},\mathrm{abs}}} \newcommand \MaxGlobalSchemaEntries {\App_{\mathrm{GS},\max}} \newcommand \MaxLocalSchemaEntries {\App_{\mathrm{LS},\max}} \newcommand \MaxInnerTransactions {\App_\mathrm{itxn}} \newcommand \SchemaBytesMinBalance {\App_{\mathrm{b},\MinBalance}} \newcommand \SchemaMinBalancePerEntry {\App_{\mathrm{s},\MinBalance}} \newcommand \SchemaUintMinBalance {\App_{\mathrm{u},\MinBalance}} $$

$$ \newcommand \Account {\mathrm{Acc}} \newcommand \MaxAssetsPerAccount {\Account_{\Asset,\max}} \newcommand \MaxAppsCreated {\Account_{\App,\max}} \newcommand \MaxAppsOptedIn {\Account_{\App,optin,\max}} \newcommand \MaximumMinimumBalance {\mathrm{MBR}_{\max}} \newcommand \DefaultKeyDilution {\mathrm{KeyDilution}} $$

Parameters

The Algorand Ledger is parameterized by the values in the following tables.

For each parameter, the tables provide the reference implementation name, to facilitate the match of the specifications and the implementation.

Block

ParameterCurrent ValueUnitDescriptionReference Implementation Name
\( \MaxTxnBytesPerBlock \)\( 5{,}242{,}880 \)bytesMaximum number of transaction bytes in a blockMaxTxnBytesPerBlock
\( \MaxTimestampIncrement \)\( 25 \)secondsMaximum difference between successive timestampsMaxTimestampIncrement
\( \MaxVersionStringLen \)\( 128 \)bytesMaximum length of protocol version stringsMaxVersionStringLen
\( \MaxProposedExpiredOnlineAccounts \)\( 32 \)Maximum number of expired participation accounts in block headerMaxProposedExpiredOnlineAccounts
\( \PayoutsMaxMarkAbsent \)\( 32 \)Maximum number of suspended participation accounts in block headerPayouts.MaxMarkAbsent

Block Rewards

ParameterCurrent ValueUnitDescriptionReference Implementation Name
\( \BonusBaseAmount \)\( 10{,}000{,}000 \)μALGOBonus to be paid when block rewards first appliesBonus.BaseAmount
\( \BonusBaseRound \)roundEarliest round block rewards can applyBonus.BaseRound
\( \BonusDecayInterval \)\( 1{,}000{,}000 \)roundsTime in rounds between 1% decays of the block rewards bonus componentBonus.DecayInterval
\( \PayoutsChallengeBits \)\( 5 \)bitsFrequency of online account challenges, about \( \PayoutsChallengeInterval \times 2^{\PayoutsChallengeBits} \) roundsPayouts.ChallengeBits
\( \PayoutsChallengeGracePeriod \)\( 200 \)roundsActive challenge round lookback for the response interval \( [r-2\PayoutsChallengeGracePeriod, r-\PayoutsChallengeGracePeriod] \)Payouts.ChallengeGracePeriod
\( \PayoutsChallengeInterval \)\( 1{,}000 \)roundsOnline account challenges interval, it defines the challenges frequencyPayouts.ChallengeInterval
\( \PayoutsGoOnlineFee \)\( 2{,}000{,}000 \)μALGOMinimum keyreg transaction fee to be eligible for block rewardsPayouts.GoOnlineFee
\( \PayoutsMaxBalance \)\( 70{,}000{,}000{,}000{,}000 \)μALGOMaximum balance an account can have to be eligible for block rewardsPayouts.MaxBalance
\( \PayoutsMinBalance \)\( 30{,}000{,}000{,}000 \)μALGOMinimum balance an account must have to be eligible for block rewardsPayouts.MinBalance
\( \PayoutsPercent \)\( 50 \)%Percent of fees paid in a block that go to the proposer instead of the FeeSinkPayouts.Percent
\( \RewardUnit \)\( 1{,}000{,}000 \)μALGOSize of an earning unitRewardUnit
\( \RewardsRateRefreshInterval \)\( 500{,}000 \)roundsRate at which the reward rate is refreshedRewardsRateRefreshInterval

Protocol Upgrade

ParameterCurrent ValueUnitDescriptionReference Implementation Name
\( \DefaultUpgradeWaitRounds \)\( 140{,}000 \)roundsDefault number of rounds needed to prepare for an upgradeDefaultUpgradeWaitRounds
\( \MaxUpgradeWaitRounds \)\( 250{,}000 \)roundsMaximum number of rounds needed to prepare for an upgradeMaxUpgradeWaitRounds
\( \MinUpgradeWaitRounds \)\( 10{,}000 \)roundsMinimum number of rounds needed to prepare for an upgradeMinUpgradeWaitRounds
\( \UpgradeThreshold \)\( 9{,}000 \)Number of votes needed to execute an upgradeUpgradeThreshold
\( \UpgradeVoteRounds \)\( 10{,}000 \)roundsNumber of rounds over which an upgrade proposal is openUpgradeVoteRounds

State Proof

ParameterCurrent ValueUnitDescriptionReference Implementation Name
\( \StateProofInterval \)\( 256 \)roundsNumber of rounds between state proofsStateProofInterval
\( \StateProofMaxRecoveryIntervals \)\( 10 \)Number of state proof intervals that the network will try to catch-up withStateProofMaxRecoveryIntervals
\( \StateProofStrengthTarget \)\( 256 \)bitsSecurity parameter for State Proof1StateProofStrengthTarget
\( \StateProofTopVoters \)\( 1{,}024 \)Maximum number of online accounts included in the vector commitment of state proofs participantsStateProofTopVoters
\( \StateProofVotersLookback \)\( 16 \)roundsDelay in rounds for online participant information committed to in the block header for State ProofStateProofVotersLookback
\( \StateProofWeightThreshold \)\( 2^{32} \times \frac{30}{100} \)Fraction of participants proven to have signed by a State ProofStateProofWeightThreshold

Transaction

ParameterCurrent ValueUnitDescriptionReference Implementation Name
\( \MaxTxTail \)\( 1{,}000 \)Length of the Transaction Tail
\( \MaxKeyregValidPeriod \)\( 16{,}777{,}215 \)roundsMaximum voting range in a keyreg transaction, defined as \( (256 \times 2^{16})-1 \)MaxKeyregValidPeriod
\( \MaxTxGroupSize \)\( 16 \)txnMaximum number of transactions allowed in a groupMaxTxGroupSize
\( \MaxTxnLife \)\( 1,000 \)roundsMaximum difference between last valid and first valid round, defines transaction lifespan in the poolMaxTxnLife
\( \MinTxnFee \)\( 1{,}000 \)μALGOMinimum processing fee for any transactionMinTxnFee
\( \MaxTxnNoteBytes \)\( 1{,}024 \)bytesMaximum length of a transaction note field without a fee surchargeMaxTxnNoteBytes
\( \MaxAbsoluteTxnNoteBytes \)\( 4{,}096 \)bytesAbsolute maximum length of a transaction note field; bytes beyond \( \MaxTxnNoteBytes \) incur a fee surchargeMaxAbsoluteTxnNoteBytes
\( \PerByteTxnSurcharge \)\( 100 \)millionths of \( \MinTxnFee \) / byteFee surcharge per byte by which a transaction field exceeds its basic size limitPerByteTxnSurcharge

Account

ParameterCurrent ValueUnitDescriptionReference Implementation Name
\( \DefaultKeyDilution \)\( 10{,}000 \)roundsGranularity of top-level ephemeral keys, equal to the number of second-level keys in each batchDefaultKeyDilution
\( \MinBalance \)\( 100{,}000 \)μALGOMinimum balance requirement (MBR) for an accountMinBalance
\( \MaxAssetsPerAccount \)\( 0 \) (unlimited)Maximum number of assets per accountMaxAssetsPerAccount
\( \MaxAppsCreated \)\( 0 \) (unlimited)Maximum number of application created per accountMaxAppsCreated
\( \MaxAppsOptedIn \)\( 0 \) (unlimited)Maximum number of application opted-in per accountMaxAppsOptedIn
\( \MaximumMinimumBalance \)\( 0 \) (unlimited)μALGOMaximum MBR of an accountMaximumMinimumBalance

Asset

ParameterCurrent ValueUnitDescriptionReference Implementation Name
\( \MaxAssetDecimals \)\( 19 \)Maximum decimal precision of the asset supplyMaxAssetDecimals
\( \MaxAssetNameBytes \)\( 32 \)bytesMaximum length of asset nameMaxAssetNameBytes
\( \MaxAssetUnitNameBytes \)\( 8 \)bytesMaximum length of asset unit (symbol)MaxAssetUnitNameBytes
\( \MaxAssetURLBytes \)\( 96 \)bytesMaximum length of asset URLMaxAssetURLBytes

LogicSig

ParameterCurrent ValueUnitDescriptionReference Implementation Name
\( \LogicSigMaxCost \)\( 20{,}000 \)opcodesMaximum opcode cost for LSigLogicSigMaxCost
\( \LogicSigMaxSize \)\( 1{,}000 \)bytesUnit used to compute two independent group-wide allowances: the pooled LSig argument allowance and the free program-byte allowanceLogicSigMaxSize
\( \MaxAbsoluteLogicSigProgramSize \)\( 16{,}000 \)bytesAbsolute maximum length of a single LSig program; program bytes beyond \( \LogicSigMaxSize \) per transaction (pooled across the group) incur a fee surchargeMaxAbsoluteLogicSigProgramSize

Application

ParameterCurrent ValueUnitDescriptionReference Implementation Name
\( \AppFlatOptInMinBalance \)\( 100{,}000 \)μALGOMBR for opting in to a single applicationAppFlatOptInMinBalance
\( \AppFlatParamsMinBalance \)\( 100{,}000 \)μALGOMBR for creating a single applicationAppFlatParamsMinBalance
\( \BoxByteMinBalance \)\( 400 \)μALGO / byteMBR per byte of box storageBoxByteMinBalance
\( \BoxFlatMinBalance \)\( 2{,}500 \)μALGOMBR per box createdBoxFlatMinBalance
\( \BytesPerBoxReference \)\( 2{,}048\)bytesBox read and write payload per referenceBytesPerBoxReference
\( \MaxBoxSize \)\( 32{,}768 \)bytesMaximum size of a boxMaxBoxSize
\( \MaxAppArgs \)\( 16 \)Maximum number of arguments for an appl transactionMaxAppArgs
\( \MaxAppBoxReferences \)\( 8 \)Maximum number of box references for an appl transactionMaxAppBoxReferences
\( \MaxAppBytesValueLen \)\( 128 \)bytesMaximum length of a bytes value used in an application’s stateMaxAppBytesValueLen
\( \MaxAppKeyLen \)\( 64 \)bytesMaximum length of a key used in an application’s stateMaxAppKeyLen
\( \MaxAppProgramCost \)\( 700 \)opcodesMaximum cost of application Approval or ClearState application programMaxAppProgramCost
\( \MaxAppProgramLen \)\( 2{,}048 \)bytesMaximum length of application Approval or ClearState program pageMaxAppProgramLen
\( \MaxAppSumKeyValueLens \)\( 128 \)bytesMaximum sum of the lengths of the key and value of one app state entryMaxAppSumKeyValueLens
\( \MaxAppTotalArgLen \)\( 2{,}048 \)bytesMaximum sum of the lengths of argument for an appl transactionMaxAppTotalArgLen
\( \MaxAbsoluteTotalArgLen \)\( 16{,}384 \)bytesAbsolute maximum sum of argument lengths for an appl transaction; bytes beyond \( \MaxAppTotalArgLen \) incur a fee surchargeMaxAbsoluteTotalArgLen
\( \MaxAppTotalProgramLen \)\( 2{,}048 \)bytesMaximum combined length of application Approval and ClearState programsMaxAppTotalProgramLen
\( \MaxAppTotalTxnReferences \)\( 8 \)Maximum number of references for an appl transactionMaxAppTotalTxnReferences
\( \MaxAppTxnAccounts \)\( 8 \)Maximum number of account references for an appl transactionMaxAppTxnAccounts
\( \MaxAppTxnForeignApps \)\( 8 \)Maximum number of application references for an appl transactionMaxAppTxnForeignApps
\( \MaxAppTxnForeignAssets \)\( 8 \)Maximum number of asset references for an appl transactionMaxAppTxnForeignAssets
\( \MaxAppAccess \)\( 16 \)Maximum number of resources access list for an appl transactionMaxAppAccess
\( \MaxExtraAppProgramPages \)\( 3 \)Maximum extra length for application program in pages without a fee surchargeMaxExtraAppProgramPages
\( \MaxAbsoluteExtraProgramPages \)\( 7 \)Absolute maximum extra length for application program in pages; program bytes beyond the basic size incur a fee surchargeMaxAbsoluteExtraProgramPages
\( \MaxGlobalSchemaEntries \)\( 64 \)Maximum number of key/value pairs of application global stateMaxGlobalSchemaEntries
\( \MaxLocalSchemaEntries \)\( 16 \)Maximum number of key/value pairs of application local stateMaxLocalSchemaEntries
\( \MaxInnerTransactions \)\( 16 \)txnMaximum number of inner transactions for an appl transactionMaxInnerTransactions
\( \SchemaBytesMinBalance \)\( 25{,}000 \)μALGOAdditional MBR for []bytes values in application stateSchemaBytesMinBalance
\( \SchemaMinBalancePerEntry \)\( 25{,}000 \)μALGOMBR for key-value pair in application stateSchemaMinBalancePerEntry
\( \SchemaUintMinBalance \)\( 3{,}500 \)μALGOAdditional MBR for uint64 values in application stateSchemaUintMinBalance


  1. \( \StateProofStrengthTarget = 256 \) is the value set for State Proofs of type \(0 \). Other types of State Proofs might be added in the future. \( \StateProofStrengthTarget = \mathrm{target_{PQ}} \) is set to achieve post-quantum security for State Proof. For further details, refer to the State Proofs normative specification.