Atlas73 retweeted
This is awesome!!! $kaspa is doing 2,400 transaction per sec 🤯
Can $bitcoin do the same ? Absolutely not 😅
Hey guys, Kaspadrome.xyz high throughput just gave us another “world record” situation… Wallets/Exchanges are running into temporary issues under load.
#Kaspa
1) Simple Explanation:
kaspa-explorer-info.web.app
2) Technical Explanation:
kaspas-data-infrastructure.w…
Atlas73 retweeted
#Kaspa volume is at 40m today.
Which is the daily volume of the entire lightning network.
Just saying.
Atlas73 retweeted
DONE.
Just completed an initial working implementation of a based zk covenant/rollup with KAS canonical bridging (over TN12 capabilities).
This work is part of the covenants++ hardfork milestone roadmap(gist.github.com/michaelsutto…)
The work is scoped as PoC however all significant challenges related to canonical bridging have been thoroughly addressed and the implementation is already mature. The vm itself is a simplified account model supporting only 3 actions: entry/transfer/exit.
Notable changes and improvements over the described research spec:
- Uses the new covenant ids scheme for unforgeability
- Uses an additional covenant script for succinct claim-based outbox/exit ops
- Implements a clever shortcut between entry and exit ops without going through the state transition singleton UTXO for streamlined UTXO management
Branch: github.com/biryukovmaxim/rus…
Demo: github.com/biryukovmaxim/rus…
Book: biryukovmaxim.github.io/rust…
So here's another—rather technical—component of the L1<>L2 design puzzle: The canonical bridge (entry/exit mechanism); see link down the thread.
Context
We are designing the bridge to support based zk rollup systems over Kaspa. We focus on the “based” setup as a first-class citizen, though other non-based approaches will presumably be possible. Being based in our context means that all transactions are directly submitted by users to L1, with some of them carrying payload data containing L2 smart-contract calls. This means L1 serves sequencing, settlement, and data-availability roles, while leaving only the execution (and proving) roles to L2.
Today there is a bigger update because there are 3 new PRs that are ready for review.
The first one (github.com/kaspanet/vprogs/p…) fixes some bugs and introduces the SchedulerState which unifies the way we expose shared state in our framework.
The second one (github.com/kaspanet/vprogs/p…) introduces the node-framework which builds on top of the first PR and introduces a generic platform for building L2 nodes that ingest data from the Kaspa L1 to produce state changes (and eventually proofs) of the L2-execution.
The third one (github.com/kaspanet/vprogs/p…) introduces the node-vprogs-cli - an actual binary that can be executed and that follows the L1 to execute transactions in a concrete VM.
The binary is designed to support compile-time modularity, which means that by updating a single line in the backend.rs we can swap out both, the storage and the VM.
A VM is defined by three functions:
1. A pre_process_block function which extracts the relevant L2 transactions from the L1 chainblock.
2. A process_transaction function which executes a single transaction (within its scope) and produces execution-results.
3. A post_process_block function which takes the execution results of the individual transactions and stitches them together into an aggegrated proof structure which can be settled on the L1.
All steps are parallelized as much as the underlying causal structure permits.
I still have a few chores on my todo-list and there are still a few missing parts (like syncing from state that we didn't actively witness) but this is pretty much as far as we get without re-integrating with the covenants on L1, so the next steps will be to actually design the concrete framework for settling state transitions on the L1 (and consequently syncing from it).
I suspect that this will require a little bit of back and forth between the two development efforts but we are getting to the point where things start to get interesting.
Atlas73 retweeted
Anyone wanna buy this domain? I'll accept $KAS only. When DK launches, so will the value of this url. I know I'll regret it, but need more KASSSSSSSSSSS! DM.
Atlas73 retweeted
What vProgs are?
vProgs stands for Verifiable Programs on the #Kaspa network. They are designed to let developers run complex application logic without slowing down the base chain. Instead of forcing every node to execute every computation, the heavy work is handled separately, allowing the core network to stay efficient and focused on consensus.
Rather than repeating all calculations across the network, a vProg performs its execution off chain and then generates a zero knowledge proof that mathematically proves the result is correct. This proof acts as a compact certificate of validity, meaning the network does not need to trust the computation itself, only the proof that verifies it.
Kaspa Layer 1 simply verifies the proof and accepts the update. This approach drastically reduces computational load while keeping the chain fast, lightweight, and secure. By verifying proofs instead of re running programs, the network preserves high throughput while maintaining strong security guarantees and decentralized consensus.
Each vProg maintains its own state and rules and can interact with other vProgs in a coordinated way, enabling multiple programs to operate together in one unified environment instead of isolated silos. This architecture brings native programmability to Kaspa without the overhead of traditional smart contracts, supporting scalability, composability, and more complex decentralized applications directly on the base layer.
Atlas73 retweeted
. Picked up some new hardware today. Upgrade to 12 core cpu, 32gb of ram and a terabyte of storage. Another public node added to the network. Shout out to the devs of Kaspa NG!
Atlas73 retweeted
not sure if it was clear, but all of this is already implemented and running on Kaspa’s testnet 12 (TN12), for the record <3
Kaspa’s evolution: from local scripts to stateful systems, without losing locality
I want to try to explain, in simple words, the vision and the gradual implementation path for smart contracts and complex financial systems on Kaspa.
Instead of trying to cover everything, I am going to weave one continuous line of thought: from the most basic primitives, through the key additions we are making, toward the system-level picture.
A meta note: even in parts where the destination feels intuitively clear, conceptual clarity only emerges while building. This is not just engineering, and not pure theory either. It is system research: making the model itself clear as we walk.
A simple ladder to keep in mind:
• UTXO scripts constrain spend authorization
• Covenants constrain next outputs
• Lineage authenticates which instance is “the real one”
• ZK verifies transitions by succinct proofs, without on-chain execution
One guiding principle throughout: we want these capabilities as first-class consensus and script-engine primitives that compose cleanly, not as clever edge-case constructions.
---
UTXO as the base model: a constitution that governs a resource
The UTXO model is, at its core, a script (a “constitution”) that controls a resource.
That constitution is local in two senses:
• Local in space: the spending script sees only the inputs it spends, plus whatever data the spender provides.
• Local in time: the script is a one-shot gate. Once a spend happens, the old constitution does not persist into the future. The future is governed by whatever new scripts the coins are sent to--but there is no inherent linkage between old rules and new rules.
In the common case, the constitution is minimal: “only someone who can prove possession of a private key may spend”.
In pseudo-form it is basically: SigVerify(pk). The spender provides a signature proving they control the private key behind pk, and that they authorized this specific transaction.
---
The one thing that is enforced over time: conservation of value
There is one strong temporal law baked into the base model: conservation of value.
Consensus enforces that the total KAS value created by a transaction is less than or equal to the total KAS value it consumes. This is why “Kaspa the asset” is not just data in a UTXO. It is a native resource with a conservation law enforced by the protocol.
So Kaspa already has one temporal invariant “for free”.
---
But what if we want richer rules than “who can spend”?
Now imagine we want more complex logic. Examples:
• Coins can only be sent to a whitelist of addresses.
• Only 5% of the balance can be spent per day.
• This resource must evolve under a fixed policy over time.
This is where the right mental model becomes a state machine.
A state machine has a state and a transition function. The transition function must be able to enforce what the next state is allowed to be. In UTXO terms, “writing state” happens by creating the outputs of the spending transaction--so a real transition function must be able to constrain the outputs.
The problem is the locality constraint: in the classic btc-style scripting model, without introspection, the spending script cannot constrain what it is creating. It gates the spend, but it cannot reason about outputs. Without seeing outputs, implementing a genuine state machine is impossible.
(Notwithstanding btc’s indirect workarounds via sighash tricks, which can approximate limited introspection in specific patterns.)
---
Introspection: enabling state machines in a local-compute model
This is why transaction introspection opcodes are a foundational step. (This is what KIP-10 introduced, starting with Crescendo.)
Once the script engine can read transaction fields, and crucially inspect output scripts, the transition function can finally say: “you may spend this input only if you create outputs that satisfy these constraints”.
Conceptually, that is the birth of what we call a covenant: a spend is no longer pure ownership transfer. Spending becomes conditional on preserving a policy across time.
It lets a resource enter a covenant: the owner’s freedom becomes constrained by an on-chain policy that must remain true after the spend, not only at the moment of spending.
Note how this enables persistence without losing locality. The script only enforces a one-step look-ahead, by constraining the next outputs. But if it requires those outputs to carry the same policy forward, it becomes an inductive rule: one-step enforcement is enough to preserve the covenant across arbitrarily many future transitions.
---
Completing the state machine model: primitives and lineage
At this point we can describe covenants in principle, but to make general state machines possible we need two things: better building blocks, and a notion of authority for non-KAS state.
(1) Byte and hash primitives: even if you can see outputs, you still need the low-level tools to express robust constraints. That means byte-string construction and parsing (e.g., OpCat, OpSubstr) and strong hashing with domain separation (e.g., OpBlake2bWithKey). Without these, you can’t reliably build commitments, slice out exact fields, or enforce consistent state encodings that make transition validation composable. (This is what KIP-17 added on TN12.)
(2) Lineage (provenance): “who says this state is real?”
Once a covenant represents non-KAS state (a token, an asset, or the compressed state commitment of an off-chain application), the state is no longer self-authenticating the way KAS value is.
A short concrete story:
• I can create a UTXO whose script claims “I am TokenX with supply 1,000,000”.
• Nothing in consensus prevents me from writing that claim into a script and funding it with real KAS.
• So the real question becomes: how do wallets know which instance is the real TokenX state machine?
This problem only appears once “state” is no longer the native KAS resource, so it helps to separate the KAS case from the non-KAS case:
• If the covenant is “about KAS”, the value already has native, consensus-backed provenance via conservation. You do not need lineage to prove the KAS value was not created from thin air.
• For non-KAS state, there is no conservation law. Without lineage, you cannot prevent “fake instances” of the same-looking scheme.
So for non-KAS covenants, lineage must be part of the design: the instance has to be anchored to a recognized genesis, meaning an agreed initial state and rules for a specific state machine instance, and then continued through valid transitions. KIP-20 addresses this by introducing consensus-tracked covenant IDs for instance identity and lineage.
---
The next layer: ZK
With covenants able to enforce transitions and lineage, we can move beyond “everything must be revealed and executed in-script on-chain”. This is already the direction on TN12 with ZK verification opcodes (KIP-16).
Without ZK, each state transition must be validated on-chain by revealing what the base layer needs to check. In practice, every step tends to carry three costs: revealing the state preimage, revealing the rules preimage, and executing the transition checks in-script.
ZK verification opcodes let us keep only commitments on-chain and prepare the public transition inputs, then a proof attests that there exists a valid hidden witness and execution trace that takes the old commitment to the new commitment under the intended rules.
That gives scalability, and sometimes privacy. L1 enforces correctness without re-executing the full computation in-script, and without forcing state and rules to be re-published on every transition.
The bigger consequence is expressiveness: ZK is machinery above covenants that lifts the “on-chain execution” ceiling. The base layer verifies validity, while the full transition function can be arbitrarily complex off-chain, including loops and large computations. In that sense, covenants plus ZK give a path to general-purpose computation anchored and enforced by L1.
---
Outlook: Part 2
Part 2 will go deeper into the ZK layer and the shared-state story:
• How a zk app can be based, meaning L1 sequencing fully determines the transition history.
• How these primitives support canonical bridging of KAS.
• How we further modify the base layer so multiple zk apps or vprogs can synchronously compose without waiting for base-layer messaging roundtrips.
Here is the next one: github.com/kaspanet/vprogs/p…
This PR mirrors the Checkpoint related changes, we previously introduced in the Scheduler in the L1 bridge, so both components can speak the same "language" before connecting them in the node framework.
It also introduces a ChainBlockMetadata type that contains relevant metadata about each ChainBlock that gets passed through to the L2 execution.
It currently only contains the hash as an additional identifier and the blue score for rollback depth detection but we will add more data as it becomes necessary.
Atlas73 retweeted
Kaspa dev Michael Sutton broke down the smart contracts roadmap in a thread.
Kaspa right now is basically cash. You send it, someone receives it, done. No logic sticks around after a transaction.
Covenants change that. New opcodes let coins carry rules forward. "You can spend me but only like this." Those rules persist across every future spend. Already running on testnet.
Custom tokens have an identity problem though. KAS itself can't be counterfeited, but anyone can spin up a fake token that looks real. Lineage tracking solves this by giving each token a verifiable history back to its origin.
For the heavy stuff there are ZK proofs. Run complex logic off-chain, post a small proof on-chain. The network verifies it without re-executing anything.
None of this breaks Kaspa parallel processing. That was the constraint from the start and they kept it
Kaspa’s evolution: from local scripts to stateful systems, without losing locality
I want to try to explain, in simple words, the vision and the gradual implementation path for smart contracts and complex financial systems on Kaspa.
Instead of trying to cover everything, I am going to weave one continuous line of thought: from the most basic primitives, through the key additions we are making, toward the system-level picture.
A meta note: even in parts where the destination feels intuitively clear, conceptual clarity only emerges while building. This is not just engineering, and not pure theory either. It is system research: making the model itself clear as we walk.
A simple ladder to keep in mind:
• UTXO scripts constrain spend authorization
• Covenants constrain next outputs
• Lineage authenticates which instance is “the real one”
• ZK verifies transitions by succinct proofs, without on-chain execution
One guiding principle throughout: we want these capabilities as first-class consensus and script-engine primitives that compose cleanly, not as clever edge-case constructions.
---
UTXO as the base model: a constitution that governs a resource
The UTXO model is, at its core, a script (a “constitution”) that controls a resource.
That constitution is local in two senses:
• Local in space: the spending script sees only the inputs it spends, plus whatever data the spender provides.
• Local in time: the script is a one-shot gate. Once a spend happens, the old constitution does not persist into the future. The future is governed by whatever new scripts the coins are sent to--but there is no inherent linkage between old rules and new rules.
In the common case, the constitution is minimal: “only someone who can prove possession of a private key may spend”.
In pseudo-form it is basically: SigVerify(pk). The spender provides a signature proving they control the private key behind pk, and that they authorized this specific transaction.
---
The one thing that is enforced over time: conservation of value
There is one strong temporal law baked into the base model: conservation of value.
Consensus enforces that the total KAS value created by a transaction is less than or equal to the total KAS value it consumes. This is why “Kaspa the asset” is not just data in a UTXO. It is a native resource with a conservation law enforced by the protocol.
So Kaspa already has one temporal invariant “for free”.
---
But what if we want richer rules than “who can spend”?
Now imagine we want more complex logic. Examples:
• Coins can only be sent to a whitelist of addresses.
• Only 5% of the balance can be spent per day.
• This resource must evolve under a fixed policy over time.
This is where the right mental model becomes a state machine.
A state machine has a state and a transition function. The transition function must be able to enforce what the next state is allowed to be. In UTXO terms, “writing state” happens by creating the outputs of the spending transaction--so a real transition function must be able to constrain the outputs.
The problem is the locality constraint: in the classic btc-style scripting model, without introspection, the spending script cannot constrain what it is creating. It gates the spend, but it cannot reason about outputs. Without seeing outputs, implementing a genuine state machine is impossible.
(Notwithstanding btc’s indirect workarounds via sighash tricks, which can approximate limited introspection in specific patterns.)
---
Introspection: enabling state machines in a local-compute model
This is why transaction introspection opcodes are a foundational step. (This is what KIP-10 introduced, starting with Crescendo.)
Once the script engine can read transaction fields, and crucially inspect output scripts, the transition function can finally say: “you may spend this input only if you create outputs that satisfy these constraints”.
Conceptually, that is the birth of what we call a covenant: a spend is no longer pure ownership transfer. Spending becomes conditional on preserving a policy across time.
It lets a resource enter a covenant: the owner’s freedom becomes constrained by an on-chain policy that must remain true after the spend, not only at the moment of spending.
Note how this enables persistence without losing locality. The script only enforces a one-step look-ahead, by constraining the next outputs. But if it requires those outputs to carry the same policy forward, it becomes an inductive rule: one-step enforcement is enough to preserve the covenant across arbitrarily many future transitions.
---
Completing the state machine model: primitives and lineage
At this point we can describe covenants in principle, but to make general state machines possible we need two things: better building blocks, and a notion of authority for non-KAS state.
(1) Byte and hash primitives: even if you can see outputs, you still need the low-level tools to express robust constraints. That means byte-string construction and parsing (e.g., OpCat, OpSubstr) and strong hashing with domain separation (e.g., OpBlake2bWithKey). Without these, you can’t reliably build commitments, slice out exact fields, or enforce consistent state encodings that make transition validation composable. (This is what KIP-17 added on TN12.)
(2) Lineage (provenance): “who says this state is real?”
Once a covenant represents non-KAS state (a token, an asset, or the compressed state commitment of an off-chain application), the state is no longer self-authenticating the way KAS value is.
A short concrete story:
• I can create a UTXO whose script claims “I am TokenX with supply 1,000,000”.
• Nothing in consensus prevents me from writing that claim into a script and funding it with real KAS.
• So the real question becomes: how do wallets know which instance is the real TokenX state machine?
This problem only appears once “state” is no longer the native KAS resource, so it helps to separate the KAS case from the non-KAS case:
• If the covenant is “about KAS”, the value already has native, consensus-backed provenance via conservation. You do not need lineage to prove the KAS value was not created from thin air.
• For non-KAS state, there is no conservation law. Without lineage, you cannot prevent “fake instances” of the same-looking scheme.
So for non-KAS covenants, lineage must be part of the design: the instance has to be anchored to a recognized genesis, meaning an agreed initial state and rules for a specific state machine instance, and then continued through valid transitions. KIP-20 addresses this by introducing consensus-tracked covenant IDs for instance identity and lineage.
---
The next layer: ZK
With covenants able to enforce transitions and lineage, we can move beyond “everything must be revealed and executed in-script on-chain”. This is already the direction on TN12 with ZK verification opcodes (KIP-16).
Without ZK, each state transition must be validated on-chain by revealing what the base layer needs to check. In practice, every step tends to carry three costs: revealing the state preimage, revealing the rules preimage, and executing the transition checks in-script.
ZK verification opcodes let us keep only commitments on-chain and prepare the public transition inputs, then a proof attests that there exists a valid hidden witness and execution trace that takes the old commitment to the new commitment under the intended rules.
That gives scalability, and sometimes privacy. L1 enforces correctness without re-executing the full computation in-script, and without forcing state and rules to be re-published on every transition.
The bigger consequence is expressiveness: ZK is machinery above covenants that lifts the “on-chain execution” ceiling. The base layer verifies validity, while the full transition function can be arbitrarily complex off-chain, including loops and large computations. In that sense, covenants plus ZK give a path to general-purpose computation anchored and enforced by L1.
---
Outlook: Part 2
Part 2 will go deeper into the ZK layer and the shared-state story:
• How a zk app can be based, meaning L1 sequencing fully determines the transition history.
• How these primitives support canonical bridging of KAS.
• How we further modify the base layer so multiple zk apps or vprogs can synchronously compose without waiting for base-layer messaging roundtrips.
Atlas73 retweeted
instead-of-summary of new blogpost:
a few months ago I became conscious that I've been double-speaking about kaspa for a long time now: when I talk with regular people I show off kas' speed, but when I meet crypto informed folks I instinctively shift to its unique security, to dagknight's resilience under netsplits come 2026. I am talking out of both sides of my mouth and I'm barely aware of it.
if forced to choose one north star, what would that be?
then later it occurred to me that this doublespeak actually represents two sides of the same coin- partial synchrony, a consensus category describing just that- protocols that are parameterless hence fast in peace times hence slow-yet-secure when the network/internet breaks. so now I think I can go back to speaking out of both sides of my mouth, as this represents two prongs of real-timeness.
hardcore crypto recognizes defensive values- security, censorship resistance, privacy. I argue we need a new category or metric for how long it takes a chain to achieve these defensive traits. eg bitcoin achieves censorship resistance in about an hour, kaspa achieves the same level in 1-3 seconds. doesn't make sense to flatten the two traits under the same umbrella term "censorship resistance".
the limit of this metric is real-time decentralization- the ability to sample the consensus network in real time with very high granularity, and achieve all the good properties that proof-of-work gives us just in real-time. started diving into this in the post.
kaspa's north star is real-time decentralization, but did you know the north star is actually a triple? now you do
Atlas73 retweeted
Kaspa’s evolution: from local scripts to stateful systems, without losing locality
I want to try to explain, in simple words, the vision and the gradual implementation path for smart contracts and complex financial systems on Kaspa.
Instead of trying to cover everything, I am going to weave one continuous line of thought: from the most basic primitives, through the key additions we are making, toward the system-level picture.
A meta note: even in parts where the destination feels intuitively clear, conceptual clarity only emerges while building. This is not just engineering, and not pure theory either. It is system research: making the model itself clear as we walk.
A simple ladder to keep in mind:
• UTXO scripts constrain spend authorization
• Covenants constrain next outputs
• Lineage authenticates which instance is “the real one”
• ZK verifies transitions by succinct proofs, without on-chain execution
One guiding principle throughout: we want these capabilities as first-class consensus and script-engine primitives that compose cleanly, not as clever edge-case constructions.
---
UTXO as the base model: a constitution that governs a resource
The UTXO model is, at its core, a script (a “constitution”) that controls a resource.
That constitution is local in two senses:
• Local in space: the spending script sees only the inputs it spends, plus whatever data the spender provides.
• Local in time: the script is a one-shot gate. Once a spend happens, the old constitution does not persist into the future. The future is governed by whatever new scripts the coins are sent to--but there is no inherent linkage between old rules and new rules.
In the common case, the constitution is minimal: “only someone who can prove possession of a private key may spend”.
In pseudo-form it is basically: SigVerify(pk). The spender provides a signature proving they control the private key behind pk, and that they authorized this specific transaction.
---
The one thing that is enforced over time: conservation of value
There is one strong temporal law baked into the base model: conservation of value.
Consensus enforces that the total KAS value created by a transaction is less than or equal to the total KAS value it consumes. This is why “Kaspa the asset” is not just data in a UTXO. It is a native resource with a conservation law enforced by the protocol.
So Kaspa already has one temporal invariant “for free”.
---
But what if we want richer rules than “who can spend”?
Now imagine we want more complex logic. Examples:
• Coins can only be sent to a whitelist of addresses.
• Only 5% of the balance can be spent per day.
• This resource must evolve under a fixed policy over time.
This is where the right mental model becomes a state machine.
A state machine has a state and a transition function. The transition function must be able to enforce what the next state is allowed to be. In UTXO terms, “writing state” happens by creating the outputs of the spending transaction--so a real transition function must be able to constrain the outputs.
The problem is the locality constraint: in the classic btc-style scripting model, without introspection, the spending script cannot constrain what it is creating. It gates the spend, but it cannot reason about outputs. Without seeing outputs, implementing a genuine state machine is impossible.
(Notwithstanding btc’s indirect workarounds via sighash tricks, which can approximate limited introspection in specific patterns.)
---
Introspection: enabling state machines in a local-compute model
This is why transaction introspection opcodes are a foundational step. (This is what KIP-10 introduced, starting with Crescendo.)
Once the script engine can read transaction fields, and crucially inspect output scripts, the transition function can finally say: “you may spend this input only if you create outputs that satisfy these constraints”.
Conceptually, that is the birth of what we call a covenant: a spend is no longer pure ownership transfer. Spending becomes conditional on preserving a policy across time.
It lets a resource enter a covenant: the owner’s freedom becomes constrained by an on-chain policy that must remain true after the spend, not only at the moment of spending.
Note how this enables persistence without losing locality. The script only enforces a one-step look-ahead, by constraining the next outputs. But if it requires those outputs to carry the same policy forward, it becomes an inductive rule: one-step enforcement is enough to preserve the covenant across arbitrarily many future transitions.
---
Completing the state machine model: primitives and lineage
At this point we can describe covenants in principle, but to make general state machines possible we need two things: better building blocks, and a notion of authority for non-KAS state.
(1) Byte and hash primitives: even if you can see outputs, you still need the low-level tools to express robust constraints. That means byte-string construction and parsing (e.g., OpCat, OpSubstr) and strong hashing with domain separation (e.g., OpBlake2bWithKey). Without these, you can’t reliably build commitments, slice out exact fields, or enforce consistent state encodings that make transition validation composable. (This is what KIP-17 added on TN12.)
(2) Lineage (provenance): “who says this state is real?”
Once a covenant represents non-KAS state (a token, an asset, or the compressed state commitment of an off-chain application), the state is no longer self-authenticating the way KAS value is.
A short concrete story:
• I can create a UTXO whose script claims “I am TokenX with supply 1,000,000”.
• Nothing in consensus prevents me from writing that claim into a script and funding it with real KAS.
• So the real question becomes: how do wallets know which instance is the real TokenX state machine?
This problem only appears once “state” is no longer the native KAS resource, so it helps to separate the KAS case from the non-KAS case:
• If the covenant is “about KAS”, the value already has native, consensus-backed provenance via conservation. You do not need lineage to prove the KAS value was not created from thin air.
• For non-KAS state, there is no conservation law. Without lineage, you cannot prevent “fake instances” of the same-looking scheme.
So for non-KAS covenants, lineage must be part of the design: the instance has to be anchored to a recognized genesis, meaning an agreed initial state and rules for a specific state machine instance, and then continued through valid transitions. KIP-20 addresses this by introducing consensus-tracked covenant IDs for instance identity and lineage.
---
The next layer: ZK
With covenants able to enforce transitions and lineage, we can move beyond “everything must be revealed and executed in-script on-chain”. This is already the direction on TN12 with ZK verification opcodes (KIP-16).
Without ZK, each state transition must be validated on-chain by revealing what the base layer needs to check. In practice, every step tends to carry three costs: revealing the state preimage, revealing the rules preimage, and executing the transition checks in-script.
ZK verification opcodes let us keep only commitments on-chain and prepare the public transition inputs, then a proof attests that there exists a valid hidden witness and execution trace that takes the old commitment to the new commitment under the intended rules.
That gives scalability, and sometimes privacy. L1 enforces correctness without re-executing the full computation in-script, and without forcing state and rules to be re-published on every transition.
The bigger consequence is expressiveness: ZK is machinery above covenants that lifts the “on-chain execution” ceiling. The base layer verifies validity, while the full transition function can be arbitrarily complex off-chain, including loops and large computations. In that sense, covenants plus ZK give a path to general-purpose computation anchored and enforced by L1.
---
Outlook: Part 2
Part 2 will go deeper into the ZK layer and the shared-state story:
• How a zk app can be based, meaning L1 sequencing fully determines the transition history.
• How these primitives support canonical bridging of KAS.
• How we further modify the base layer so multiple zk apps or vprogs can synchronously compose without waiting for base-layer messaging roundtrips.
Atlas73 retweeted
Tons of you are on your computers all day, playing games and watching TV, yet refuse to run a Kaspa node or a super low-wattage miner.
If you love and support Kaspa, basically as your day-to-day hobby, why not actually support the network?
You can stare at coins all day, but those coins mean nothing without your contribution.
Run a node, start mining $KAS.
If you support Kaspa but don’t run a node or mine, you’re leaving real impact on the table.
Running a node is FREE.
If you have a working computer (you do), there’s no excuse.
And let’s be honest, if you can drop hundreds or thousands on KAS, you can afford $129 for a 100W, 400 GH/s miner. That’s less power than a light bulb.
No, you won’t mine like someone running a KS7 or KS7 Lite. That’s not the point. Decentralization doesn’t come from whales. It comes from numbers.
Kaspa solo mining is not Bitcoin-style lottery mining.
Even 400 GH/s matters, especially when thousands of individuals do it together. A little hashrate goes a long way when it’s spread across real people.
Buy a $129 IceRiver KS0 Ultra. Run a node, mine solo. Strengthen the network.
If you believe in Kaspa’s future, participate in it, don’t just speculate on it. Only you can make this work.
Research $KAS
Link to miner: iceriver.io/product-category…






























