Smart Contract Costs & Constraints | Algorand Developer Portal

Smart Contract Costs & Constraints

This page covers the costs and constraints specific to smart contract development on Algorand. For a complete list of all protocol parameters including transaction fees, minimum balances, and other network-wide settings, see the main protocol parameters page.

Program Constraints

Program Size Limits

Type Constraint
Logic Signatures Max size: 1000 bytes for logic signatures (consensus parameter LogicSigMaxSize). Components: The bytecode plus the length of all arguments
Smart Contracts Max size: 2048*(1+ExtraProgramPages) bytes Components: ApprovalProgram + ClearStateProgram

Application Call Arguments

Parameter Constraint
Number of Arguments Maximum 16 arguments can be passed to an application call. This limit is defined by the consensus parameter MaxAppArgs
Combined Size of Arguments The maximum combined size of arguments is 2048 bytes. This limit is defined by the consensus parameter MaxAppTotalArgLen
Max Size of Compiled TEAL Code The maximum size of compiled TEAL code combined with arguments is 1000 bytes. This limit is defined by the consensus parameter LogicSigMaxSize
Max Cost of TEAL Code The maximum cost of TEAL code is 20000 for logic signatures and 700 for smart contracts. These limits are defined by the consensus parameters LogicSigMaxCost and MaxAppProgramCost respectively
Argument Types The arguments to pass to the ABI call can be one of the following types: boolean, number, bigint, string, Uint8Array, an array of one of the above types, algosdk.TransactionWithSigner, TransactionToSign, algosdk.Transaction, Promise<SendTransactionResult>. These types are used when specifying the ABIAppCallArgs for an application call

Opcode Constraints

In Algorand, the opcode budget measures the computational cost of executing a smart contract or logic signature. Each opcode (operation code) in the Algorand Virtual Machine (AVM) has an associated cost deducted from the opcode budget during execution.

Parameter Constraint
Cost of Opcodes Most opcodes have a computational cost of 1. Some operations (e.g., SHA256, keccak256, sha512_256, ed25519verify) have larger costs.
Budget Constraints Max opcode budget: Smart signatures: 20,000 units Smart contracts invoked by a single application transaction: 700 units. If invoked via a group: 700 * number of application transactions.
Clear State Programs Initial pooled budget must be >= 700 units or higher. Execution limit: 700 units.

Note: Algorand Python provides a helper method for increasing the available opcode budget, see algopy.ensure_budget.

Stack

In Algorand’s Algorand Virtual Machine (AVM), the stack is a key component of the execution environment.

Parameter Constraint
Maximum Stack Depth 1000. If the stack depth is exceeded, the program fails.
Item Size Limits The stack can contain values of either uint64 or byte-arrays. Byte-arrays may not exceed 4096 bytes in length.
Type Limitation Every element of the stack is restricted to the types uint64 and bytes.
Item Size Limit Maximum size for byte arrays is 4096 bytes. Maximum value uint64 is 18446744073709551615.
Operation Failure Fails if an opcode accesses a position in the stack that does not exist.

Resources

In Algorand, the access and usage of resources such as account balance/state, application state, etc., by applications are subject to certain constraints and costs:

Resource Access Limit

Aspect Constraint
Access Restrictions Limited access to resources like account balance and application state to ensure efficient block evaluation.
Specification Requirement Resources must be specified within the transaction for nodes to pre-fetch data.

Access Constraints

Access Type Constraint
Block Information Programs cannot access information from previous blocks.
Transaction Information Cannot access other transactions in the current block unless part of the same atomic transaction group.

Logic Signatures

Parameter Constraint
Transaction Commitment Cannot determine the exact round or time of transaction commitment.
Stateless Programs Cannot query account balances or asset holdings. Transactions must comply with standard accounting rules and may fail if rules are violated.

AVM Environment

Parameter Constraint
Indirect Jumps Not supported; all jumps must reference specific addresses.

Storage Constraints

Storage Structure Key Length Value Length Unique Key Requirement Additional Details Safety from Unexpected Deletion
Local State Storage Up to 64 bytes Key + value ≤ 128 bytes Yes Larger datasets require partitioning Not Safe — Can be cleared by users at any time using ClearState transactions
Box Storage 1 to 64 bytes Up to 32KB (32,768 bytes) Yes Key does not contribute to box size and values > 1,024 bytes need additional references Boxes persist after app deletion but lock the minimum balance if not deleted beforehand
Global State Storage Up to 64 bytes Key + value ≤ 128 bytes Yes Larger datasets require partitioning Safe — Deleted only with the application; otherwise, data is safe from unexpected deletion