What's Kaspa's TPS? It depends what you're sending.

Kaspa doesn't charge by byte count alone. Every transaction is measured on three limits, compute, storage, and transient (proof data), and charged by whichever is largest, never the sum. Build one below and see which limit binds.

Build the transaction

Script per input

Mass, per block limit

Compute mass 0 / 500,000
Storage mass 0 / 500,000
Transient mass 0 / 1,000,000
0 TPS at 10 blocks/second
0 transactions of this shape fit per block, on the dimension that binds.
Show the mass formulas

Transaction size

size = 94 (fixed header: version, in/out counts, locktime, subnetwork id, gas, payload hash, payload length) + payload_bytes + inputs × (118 fixed bytes: outpoint 36, sig-script length field 8, signature script ~66, sequence 8; +2 if covenant/v1) + outputs × (52 fixed bytes (value 8, version 2, script-length field 8, P2PK-style script 34) + 34 per output, if that output carries a covenant id)

Compute mass

compute_mass = size × mass_per_tx_byte (1) + Σ(2 + output_script_len) × mass_per_script_pub_key_byte (10) + script_mass script_mass = inputs × 1 sigop × GRAMS_PER_SIGOP_COUNT_UNIT (1000) [simple] = inputs × compute_budget_units × GRAMS_PER_COMPUTE_BUDGET_UNIT (100) [covenant]

Transient mass

transient_mass = size × TRANSIENT_BYTE_TO_MASS_FACTOR (4)

Storage mass (KIP-0009)

C = STORAGE_MASS_PARAMETER (1,000,000,000,000) utxo_plurality(output) = ceil((63 + script_bytes + 32 if covenant else 0) / 100) A P2PK-style output (script 34) has plurality 1. A covenant-carrying output (63 + 34 + 32 = 129 bytes) crosses the 100-byte unit and has plurality 2, which squares its weight below. storage_mass = max(0, outputs × plurality² × C / out_amount_sompi − inputs × C / in_amount_sompi) in_amount_sompi assumes no fee: total out value split evenly across inputs.

Which dimension binds

Compute and storage share a 500,000 block-mass limit; transient's limit is 1,000,000, so it is normalized to the same scale before comparison: transient_norm = transient_mass × 500,000/1,000,000. tx_mass = max(compute_mass, storage_mass, transient_norm) tx_per_block = floor(500,000 / tx_mass) TPS = tx_per_block × 10 blocks/second

This models a standard Schnorr P2PK-style input/output shape and assumes value is conserved with no fee. Real network TPS is lower once relay policy, fee markets, and mempool behavior are added on top of this pure mass ceiling.

Formulas verified against rusty-kaspa mass code, consensus params, and core constants. Offline calculator, no network requests.