Skip to content

Limits

The network bounds what one transaction can ask of every validator that processes it. The limits on this page are the same on every network. A transaction over one of them is rejected, with an error that names the limit.

Limits are enforced at one or more of three points:

  • Ingress. A validator or indexer checks the transaction when it is submitted, before it is gossiped or executed. A transaction rejected here never reaches a block and pays no fee.
  • Block validation. Validators re-check the transactions in a proposed block. A leader that includes a transaction over one of these limits has its block rejected.
  • Execution. The engine checks the limit as the transaction runs. Exceeding it fails the transaction; see Fees for what is charged when it does.

All amounts are in microtari (µT), where 1 TARI = 1,000,000 µT. Sizes are in bytes, with 1 KiB = 1,024 bytes.


LimitValueEnforced
Encoded size1,310,720 (1.25 MiB)Ingress, block validation
Weight1,000,000Ingress, block validation
Declared inputs1,024Ingress, block validation
Signatures1,024Ingress, block validation
Template publishes1, main intent onlyIngress, block validation
Validity window2,160 epochsIngress

Encoded size is the transaction’s canonical CBOR encoding, including blobs. The gossip message limit is derived from it.

Weight estimates the work a transaction causes before it runs:

  • An instruction that invokes a template weighs at least 30. Literal arguments add to that.
  • Each declared input adds 15 if it is written, 5 if it is only read.
  • Each signature adds 5.
  • Each blob adds a third of its length plus 32, so a 1 MiB template binary weighs about 350,000.
  • A ClaimBurn weighs 1,100.

Declared inputs are the substates listed in the transaction’s inputs. Each one is resolved, locked and pledged by every validator that touches the transaction, so the count is capped directly. A stealth transfer declares each UTXO it spends as an input.

Validity window: a transaction’s max_epoch may be at most 2,160 epochs after the current epoch.

LimitValueScope
WASM metering points250,000,000Per call
WASM metering points250,000,000Per transaction
Native verification points2,400,000,000Per transaction
Points the fee intent may run before it pays32,000,000Per transaction
Call depth (nested cross-template calls)10Per transaction
Substates created or written1,000Per transaction
Size of one substate1 MiBPer substate
Arguments to a top-level call128 KiBPer call
Arguments to a cross-template call1 MiBPer call
Events256, at most 2 KiB eachPer transaction
Logs256, at most 32 KiB eachPer transaction
Debug messages256Per call
Panic message32 KiBPer call
Random bytes1 KiBPer request
CBOR nesting depth of untrusted input256Per value

A transaction gets one WASM compute budget, shared across every call it makes. Native verification, such as stealth and confidential proofs, burn claims and template compilation, draws on its own budget. The fee intent runs on credit until it calls pay_fee, so it is capped separately. Work that needs more belongs in the main intent. See Fees for how points are charged.

LimitValue
WASM binary size1 MiB
Template name64 bytes
Linear memory32 pages (2 MiB)
Functions8,192
Function arguments32
Function name256 bytes
Globals1,024
Tables4
Elements per table16,384

The binary size limit is set by what compiling the template costs every validator: a publish at the limit still leaves room in the native budget to source the fee in the same transaction. See Reducing Template Size.

LimitValue
Inputs per transfer statement1,000
Outputs per transfer statement16
Transfers per transaction64
Transfers in the fee intent1
Inputs per transaction, across all transfers1,024
Outputs per transaction, across all transfers256
Conditions per spend-condition conjunction16
Script-path witness data4,096 bytes
Script-path inclusion proof32 hashes

Every stealth input is also a declared input, so the transaction-wide input cap applies to the inputs a transfer spends together with the account, vault and resource substates around them.

LimitValue
Input commitments per withdraw proof1,000
Withdraws per transaction64
Input commitments per transaction1,024
LimitValue
Divisibility18
Token symbol10 bytes
LimitValue
Weight a leader proposes24,000
Weight a validator accepts36,000
Transactions1,000
Execution points a leader proposes4,500,000,000
Execution points a validator accepts7,250,000,000
Block time10 seconds

A leader stops adding transactions once a block reaches the proposal budget. Validators accept blocks up to the higher validation budget, since a leader learns a transaction’s execution cost only by running it and may overshoot by one transaction.