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 \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 \LogicSigVersion {\LogicSig_{V}} \newcommand \MaxProposedExpiredOnlineAccounts {B_{N_\mathrm{e},\max}} \newcommand \PayoutMaxMarkAbsent {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 \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 \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 and the last update version, to facilitate the match of the specifications and the implementation.

Block

ParameterCurrent ValueUnitDescriptionReference Implementation NameLast Update Version
\( \MaxTxnBytesPerBlock \)\( 5{,}242{,}880 \)bytesMaximum number of transaction bytes in a blockMaxTxnBytesPerBlockv33
\( \MaxTimestampIncrement \)\( 25 \)secondsMaximum difference between successive timestampsMaxTimestampIncrementv7
\( \MaxVersionStringLen \)\( 128 \)bytesMaximum length of protocol version stringsMaxVersionStringLenv12
\( \MaxProposedExpiredOnlineAccounts \)\( 32 \)Maximum number of expired participation accounts in block headerMaxProposedExpiredOnlineAccountsv31
\( \PayoutMaxMarkAbsent \)\( 32 \)Maximum number of suspended participation accounts in block headerPayout.MaxMarkAbsentv40

Block Rewards

ParameterCurrent ValueUnitDescriptionReference Implementation NameLast Update Version
\( \BonusBaseAmount \)\( 10{,}000{,}000 \)μALGOBonus to be paid when block rewards first appliesBonus.BaseAmountv40
\( \BonusBaseRound \)roundEarliest round block rewards can applyBonus.BaseRoundv40
\( \BonusDecayInterval \)\( 1{,}000{,}000 \)roundsTime in rounds between 1% decays of the block rewards bonus componentBonus.DecayIntervalv40
\( \PayoutsChallengeBits \)\( 5 \)bitsFrequency of online account challenges, about \( \PayoutsChallengeInterval \times 2^{\PayoutsChallengeBits} \) roundsPayouts.ChallengeBitsv40
\( \PayoutsChallengeGracePeriod \)\( 200 \)roundsActive challenge round lookback for the response interval \( [r-2\PayoutsChallengeGracePeriod, r-\PayoutsChallengeGracePeriod] \)Payouts.ChallengeGracePeriodv40
\( \PayoutsChallengeInterval \)\( 1{,}000 \)roundsOnline account challenges interval, it defines the challenges frequencyPayouts.ChallengeIntervalv40
\( \PayoutsGoOnlineFee \)\( 2{,}000{,}000 \)μALGOMinimum keyreg transaction fee to be eligible for block rewardsPayouts.GoOnlineFeev40
\( \PayoutsMaxBalance \)\( 70{,}000{,}000{,}000{,}000 \)μALGOMaximum balance an account can have to be eligible for block rewardsPayouts.MaxBalancev40
\( \PayoutsMinBalance \)\( 30{,}000{,}000{,}000 \)μALGOMinimum balance an account must have to be eligible for block rewardsPayouts.MinBalancev40
\( \PayoutsPercent \)\( 50 \)%Percent of fees paid in a block that go to the proposer instead of the FeeSinkPayouts.Percentv40
\( \RewardUnit \)\( 1{,}000{,}000 \)μALGOSize of an earning unitRewardUnitv7
\( \RewardsRateRefreshInterval \)\( 500{,}000 \)roundsRate at which the reward rate is refreshedRewardsRateRefreshIntervalv7

Protocol Upgrade

ParameterCurrent ValueUnitDescriptionReference Implementation NameLast Update Version
\( \DefaultUpgradeWaitRounds \)\( 140{,}000 \)roundsDefault number of rounds needed to prepare for an upgradeDefaultUpgradeWaitRoundsv20
\( \MaxUpgradeWaitRounds \)\( 250{,}000 \)roundsMaximum number of rounds needed to prepare for an upgradeMaxUpgradeWaitRoundsv39
\( \MinUpgradeWaitRounds \)\( 10{,}000 \)roundsMinimum number of rounds needed to prepare for an upgradeMinUpgradeWaitRoundsv22
\( \UpgradeThreshold \)\( 9{,}000 \)Number of votes needed to execute an upgradeUpgradeThresholdv7
\( \UpgradeVoteRounds \)\( 10{,}000 \)roundsNumber of rounds over which an upgrade proposal is openUpgradeVoteRoundsv7

State Proof

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

Transaction

ParameterCurrent ValueUnitDescriptionReference Implementation NameLast Update Version
\( \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 \)MaxKeyregValidPeriodv31
\( \MaxTxGroupSize \)\( 16 \)txnMaximum number of transactions allowed in a groupMaxTxGroupSizev18
\( \MaxTxnLife \)\( 1,000 \)roundsMaximum difference between last valid and first valid round, defines transaction lifespan in the poolMaxTxnLifev7
\( \MinTxnFee \)\( 1{,}000 \)μALGOMinimum processing fee for any transactionMinTxnFeev7
\( \MaxTxnNoteBytes \)\( 1{,}024 \)bytesMaximum length of a transaction note fieldMaxTxnNoteBytesv7

Account

ParameterCurrent ValueUnitDescriptionReference Implementation NameLast Update Version
\( \DefaultKeyDilution \)\( 10{,}000 \)roundsGranularity of top-level ephemeral keys, equal to the number of second-level keys in each batchDefaultKeyDilutionv7
\( \MinBalance \)\( 100{,}000 \)μALGOMinimum balance requirement (MBR) for an accountMinBalancev9
\( \MaxAssetsPerAccount \)\( 0 \) (unlimited)Maximum number of assets per accountMaxAssetsPerAccountv32
\( \MaxAppsCreated \)\( 0 \) (unlimited)Maximum number of application created per accountMaxAppsCreatedv32
\( \MaxAppsOptedIn \)\( 0 \) (unlimited)Maximum number of application opted-in per accountMaxAppsOptedInv32
\( \MaximumMinimumBalance \)\( 0 \) (unlimited)μALGOMaximum MBR of an accountMaximumMinimumBalancev32

Asset

ParameterCurrent ValueUnitDescriptionReference Implementation NameLast Update Version
\( \MaxAssetDecimals \)\( 19 \)Maximum decimal precision of the asset supplyMaxAssetDecimalsv20
\( \MaxAssetNameBytes \)\( 32 \)bytesMaximum length of asset nameMaxAssetNameBytesv18
\( \MaxAssetUnitNameBytes \)\( 8 \)bytesMaximum length of asset unit (symbol)MaxAssetUnitNameBytesv18
\( \MaxAssetURLBytes \)\( 96 \)bytesMaximum length of asset URLMaxAssetURLBytesv28

LogicSig

ParameterCurrent ValueUnitDescriptionReference Implementation NameLast Update Version
\( \LogicSigMaxCost \)\( 20{,}000 \)opcodesMaximum opcode cost for LSigLogicSigMaxCostv18
\( \LogicSigMaxSize \)\( 1{,}000 \)bytesMaximum combined length of LSig program and LSig argumentsLogicSigMaxSizev18

Application

ParameterCurrent ValueUnitDescriptionReference Implementation NameLast Update Version
\( \AppFlatOptInMinBalance \)\( 100{,}000 \)μALGOMBR for opting in to a single applicationAppFlatOptInMinBalancev24
\( \AppFlatParamsMinBalance \)\( 100{,}000 \)μALGOMBR for creating a single applicationAppFlatParamsMinBalancev24
\( \BoxByteMinBalance \)\( 400 \)μALGO / byteMBR per byte of box storageBoxByteMinBalancev36
\( \BoxFlatMinBalance \)\( 2{,}500 \)μALGOMBR per box createdBoxFlatMinBalancev36
\( \BytesPerBoxReference \)\( 2{,}048\)bytesBox read and write payload per referenceBytesPerBoxReferencev41
\( \MaxBoxSize \)\( 32{,}768 \)bytesMaximum size of a boxMaxBoxSizev36
\( \MaxAppArgs \)\( 16 \)Maximum number of arguments for an appl transactionMaxAppArgsv24
\( \MaxAppBoxReferences \)\( 8 \)Maximum number of box references for an appl transactionMaxAppBoxReferencesv36
\( \MaxAppBytesValueLen \)\( 128 \)bytesMaximum length of a bytes value used in an application’s stateMaxAppBytesValueLenv28
\( \MaxAppKeyLen \)\( 64 \)bytesMaximum length of a key used in an application’s stateMaxAppKeyLenv24
\( \MaxAppProgramCost \)\( 700 \)opcodesMaximum cost of application Approval or ClearState application programMaxAppProgramCostv24
\( \MaxAppProgramLen \)\( 2{,}048 \)bytesMaximum length of application Approval or ClearState program pageMaxAppProgramLenv28
\( \MaxAppSumKeyValueLens \)\( 128 \)bytesMaximum sum of the lengths of the key and value of one app state entryMaxAppSumKeyValueLensv28
\( \MaxAppTotalArgLen \)\( 2{,}048 \)bytesMaximum sum of the lengths of argument for an appl transactionMaxAppTotalArgLenv24
\( \MaxAppTotalProgramLen \)\( 2{,}048 \)bytesMaximum combined length of application Approval and ClearState programsMaxAppTotalProgramLenv24
\( \MaxAppTotalTxnReferences \)\( 8 \)Maximum number of references for an appl transactionMaxAppTotalTxnReferencesv24
\( \MaxAppTxnAccounts \)\( 8 \)Maximum number of account references for an appl transactionMaxAppTxnAccountsv41
\( \MaxAppTxnForeignApps \)\( 8 \)Maximum number of application references for an appl transactionMaxAppTxnForeignAppsv28
\( \MaxAppTxnForeignAssets \)\( 8 \)Maximum number of asset references for an appl transactionMaxAppTxnForeignAssetsv28
\( \MaxAppAccess \)\( 16 \)Maximum number of resources access list for an appl transactionMaxAppAccessv41
\( \MaxExtraAppProgramPages \)\( 3 \)Maximum extra length for application program in pagesMaxExtraAppProgramPagesv28
\( \MaxGlobalSchemaEntries \)\( 64 \)Maximum number of key/value pairs of application global stateMaxGlobalSchemaEntriesv24
\( \MaxLocalSchemaEntries \)\( 16 \)Maximum number of key/value pairs of application local stateMaxLocalSchemaEntriesv24
\( \MaxInnerTransactions \)\( 16 \)txnMaximum number of inner transactions for an appl transactionMaxInnerTransactionsv30
\( \SchemaBytesMinBalance \)\( 25{,}000 \)μALGOAdditional MBR for []bytes values in application stateSchemaBytesMinBalancev24
\( \SchemaMinBalancePerEntry \)\( 25{,}000 \)μALGOMBR for key-value pair in application stateSchemaMinBalancePerEntryv24
\( \SchemaUintMinBalance \)\( 35{,}00 \)μALGOAdditional MBR for uint64 values in application stateSchemaUintMinBalancev24


  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.