Updated: 7/28/2026

Toccata Hard Fork

Notes on the Toccata hard fork - Kaspa's L1 programmability upgrade.

Overview

Toccata is Kaspa’s second named hard fork, after Crescendo, continuing the musical naming tradition. It activated on mainnet June 30, 2026 at DAA score 474,165,565 (rusty-kaspa v2.0.x).

Where Crescendo was about throughput (1 → 10 BPS), Toccata is about programmability: native L1 covenant programming and infrastructure for “based” ZK applications. It is the upgrade that takes Covenants++ live on mainnet.

KIPs activated

  • KIP-17 - Covenants and Improved Scripting Capabilities. The backbone of the upgrade: a large batch of new script opcodes building on KIP-10’s limited introspection. Transaction introspection (OpTxInputSpk, OpTxOutputSpk, OpTxInputAmount, OpTxOutputAmount, and more), crypto ops (OpCheckSigFromStack, OpBlake3), byte manipulation (OpCat, OpSubstr), arithmetic (OpMul, OpDiv, OpMod), and conversions. Scripts can now inspect the spending transaction and constrain its outputs - stateful applications encoded directly in UTXO spending conditions.
  • KIP-20 - Covenant IDs. An optional 32-byte covenant_id on transaction outputs, tracked by consensus in the UTXO set. Gives every covenant instance a stable lineage, moving forgery prevention from script logic into consensus. See the Covenants++ page for the mechanics.
  • KIP-16 - New Transaction Opcodes for Verifiable Computation. The ZK precompile: OpZkPrecompile lets scripts verify zero-knowledge proofs on L1. Ships with two proof systems selected by tag byte - Groth16 on BN254 (compact, pairing-based) and RISC0-Succinct (STARK-based, post-quantum). Enables trustless bridges and L2 state verification instead of multisig bridges.
  • KIP-21 - Partitioned Sequencing Commitment with O(activity) Proving. Restructures how blocks commit to accepted-transaction ordering: transactions are partitioned into “lanes” (by subnetwork ID), each with its own recursive hash anchor. A ZK prover for an app only processes its own lane’s activity, not the whole network’s 10 BPS throughput - the piece that makes based ZK applications practical. Builds on KIP-15’s sequencing commitment design.

Operational changes

  • Transient mass limit raised 500,000 → 1,000,000 (block bodies up to ~250KB), primarily to fit ZK-STARK proofs.
  • Max script element size raised 520 bytes → 1,000,000 bytes (also for large proofs).
  • Minimum relay fee floor raised from 1 to 100 sompi/gram. Node policy, not consensus - zero-fee transactions remain consensus-valid but are not relayed.
  • New transaction version 1: input compute_budget field, output covenant bindings, covenant_id on UTXOs.
  • New RPCs: GetBlockRewardInfo and GetSeqCommitLaneProof (KIP-21 lane proofs).
  • Recommended node hardware bumped (min 8 cores / 16 GB RAM / 640 GB SSD).

What developers can do now

  • Write L1 covenants - UTXOs carrying application state, where spending requires creating a valid successor output. Authored with raw introspection opcodes or via SilverScript.
  • Verify Groth16 / RISC Zero proofs in script.
  • Track covenant lineages via consensus-level covenant IDs.
  • Build based applications that run state machines off-chain and settle via proofs against per-app lane commitments.

Still UTXO-native - not an account/EVM model.

Not in Toccata

  • DAGKnight (KIP-2) - still proposed, planned for a future fork.
  • VProgs (synchronous composition of on-chain programs) - explicitly deferred; Toccata targets standalone based ZK applications communicating via L1 proof-based bridging.
  • Production ZK rollups themselves - Toccata ships the infrastructure; rollups, SDKs, and runtimes are ongoing post-fork work.

Resources