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_idon 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:
OpZkPrecompilelets 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_budgetfield, output covenant bindings,covenant_idon UTXOs. - New RPCs:
GetBlockRewardInfoandGetSeqCommitLaneProof(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
- Toccata guide in rusty-kaspa (node operator focused).
- Toccata developer guide on docs.kaspa.org.
- Kaspa Covenants++ “Toccata” Hard-Fork Outlook by Michael Sutton.
- v2.0.0 release notes.