-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkaspa-covenants-explained.html
More file actions
184 lines (177 loc) · 10.2 KB
/
Copy pathkaspa-covenants-explained.html
File metadata and controls
184 lines (177 loc) · 10.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Kaspa Covenants Explained: Spend Rules for UTXO Apps | Kaspa Explained</title>
<meta name="description" content="Kaspa covenants explained through constrained spends, UTXO state, vaults, escrow, assets, assurance contracts, and Toccata status boundaries.">
<meta name="robots" content="index,follow,max-snippet:-1,max-image-preview:large">
<link rel="canonical" href="https://kaspaexplained.com/kaspa-covenants-explained">
<link rel="icon" href="kaspa-favicon.svg?v=20260512-real-k" type="image/svg+xml">
<link rel="icon" href="favicon.svg?v=20260512-k4" type="image/svg+xml">
<link rel="icon" href="favicon.ico" sizes="any">
<link rel="icon" href="favicon.png" type="image/png">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="manifest" href="site.webmanifest">
<meta name="application-name" content="Kaspa Explained">
<meta name="apple-mobile-web-app-title" content="Kaspa Explained">
<meta name="theme-color" content="#09090b">
<meta property="og:title" content="Kaspa Covenants Explained: Spend Rules for UTXO Apps">
<meta property="og:description" content="Kaspa covenants explained through constrained spends, UTXO state, vaults, escrow, assets, assurance contracts, and Toccata status boundaries.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://kaspaexplained.com/kaspa-covenants-explained">
<meta property="og:image" content="https://kaspaexplained.com/og-kaspa-explained-20260514.png?v=20260514-logo-clearance">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Kaspa Explained - proof-of-work blockDAG guide">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Kaspa Covenants Explained: Spend Rules for UTXO Apps">
<meta name="twitter:description" content="Kaspa covenants explained through constrained spends, UTXO state, vaults, escrow, assets, assurance contracts, and Toccata status boundaries.">
<meta name="twitter:image" content="https://kaspaexplained.com/og-kaspa-explained-20260514.png?v=20260514-logo-clearance">
<meta name="dateModified" content="2026-06-25">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "Kaspa Covenants Explained: Spend Rules for UTXO Apps",
"url": "https://kaspaexplained.com/kaspa-covenants-explained",
"dateModified": "2026-06-25",
"description": "Kaspa covenants explained through constrained spends, UTXO state, vaults, escrow, assets, assurance contracts, and Toccata status boundaries.",
"about": ["Kaspa", "Proof of Work", "blockDAG", "GHOSTDAG", "Toccata"]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What are Kaspa covenants?",
"acceptedAnswer": {"@type": "Answer", "text": "Kaspa covenants are targeted spending rules that can restrict how a UTXO is spent next. Product examples include vaults, budgets, escrow, controlled assets, and threshold funding rules."}
},
{
"@type": "Question",
"name": "Are Kaspa covenants live on mainnet?",
"acceptedAnswer": {"@type": "Answer", "text": "Toccata covenants are released and scheduled. Use status labels for covenant demos, testnet artifacts, and future app ideas."}
}
]
}
</script>
<link rel="stylesheet" href="styles.css?v=20260624-card-hover">
<script defer src="nav.js?v=20260606-anchor-clearance"></script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<nav class="nav" aria-label="Primary">
<a class="brand" href="/" aria-label="Kaspa Explained home">
<span class="brand-mark" aria-hidden="true"></span>
Kaspa Explained
</a>
<button class="nav-menu-button" type="button" aria-expanded="false" aria-controls="primary-links">Menu</button>
<div id="primary-links" class="nav-links">
<a href="/what-is-kaspa">What is Kaspa</a>
<a href="/status">Live now</a>
<a href="/kaspa-claims-checker">Check claims</a>
<a href="/skeptical-case">Risks</a>
<a href="/build-on-kaspa">Build</a>
<a href="/sources">Sources</a>
</div>
<button class="theme-toggle" type="button" aria-label="Switch theme">Light</button>
<a class="nav-cta" href="/toccata-status">Toccata status</a>
</nav>
</header>
<main id="top" tabindex="-1" class="status-page app-page">
<section class="sources-hero section">
<p class="eyebrow">Builder intake</p>
<h1>Kaspa covenants explained</h1>
<p class="lead">Kaspa covenants are spending rules that can restrict how a coin or UTXO is spent next. In product terms, they can make a budget, vault, asset, escrow, or commitment follow visible rules.</p>
<p class="fit-note"><strong>Status:</strong> payments are live today. New app-layer rules require Toccata activation and wallet or tooling support.</p>
</section>
<section class="section">
<h2>How covenants work</h2>
<p>A normal wallet signature says who is allowed to spend. A covenant-style rule can also inspect the spending transaction and require the next output to preserve a rule, route funds, limit value, or carry state forward.</p>
<p>That turns some app logic into a money rule users can inspect. It does not remove wallet UX, audits, liquidity, legal risk, or oracle design.</p>
</section>
<section class="section">
<h2>Why covenant IDs matter</h2>
<p>A covenant can enforce how one protected UTXO moves next. A covenant ID adds lineage: consensus can mark that a UTXO belongs to the authorized covenant family rather than a fake state with similar-looking rules.</p>
<div class="table-wrap">
<table class="reality-table">
<thead><tr><th>Piece</th><th>Plain job</th><th>Why it matters</th></tr></thead>
<tbody>
<tr><td>Normal script</td><td>Checks whether this spend is allowed.</td><td>Good for ownership and ordinary payment rules.</td></tr>
<tr><td>Covenant</td><td>Checks whether the next output preserves a rule.</td><td>Applies to vaults, escrow paths, controlled assets, and state transitions.</td></tr>
<tr><td>Covenant ID</td><td>Tracks a covenant family across valid continuations.</td><td>Makes covenant membership harder to fake and easier to index.</td></tr>
</tbody>
</table>
</div>
<p class="source-inline">For the broader upgrade frame, read <a href="/toccata-explained">Toccata Explained</a>. Primary reference: <a href="https://github.com/kaspanet/kips/blob/master/kip-0020.md">KIP-20 covenant IDs</a>.</p>
</section>
<section class="section">
<h2>Examples</h2>
<div class="reference-grid">
<article><h3>Budget that cannot drain at once</h3><p>A treasury output can require each next spend to leave enough value or respect a cap.</p></article>
<article><h3>Withdrawal with recovery</h3><p>A vault can route normal withdrawal and emergency recovery through different paths.</p></article>
<article><h3>Asset with controller</h3><p>A ticket or pass can require an issuer or controller input before transfer or redemption.</p></article>
<article><h3>Commitment with refund</h3><p>A funding rule can release only after a threshold, then refund if the threshold is missed.</p></article>
</div>
</section>
<section class="section">
<h2>Covenant evidence checklist</h2>
<ol class="learning-steps">
<li><strong>User need.</strong> <span>Say what the user does before naming the opcode or compiler.</span></li>
<li><strong>Accepted path.</strong> <span>Show the accepted transaction or test artifact.</span></li>
<li><strong>Rejected path.</strong> <span>Show what fails when the rule is violated.</span></li>
<li><strong>Status label.</strong> <span>Say live, testnet, targeted, roadmap, or research.</span></li>
<li><strong>Missing product work.</strong> <span>Name wallet signing, audits, indexing, support, liquidity, and custody gaps.</span></li>
</ol>
</section>
<section class="next-step section">
<h2>Use covenants for bounded rules</h2>
<div class="actions">
<a class="button primary" href="/kaspa-toccata-use-cases">Toccata use cases</a>
<a class="button" href="/builder-guide">Builder guide</a>
<a class="button" href="/toccata-explained">Toccata explained</a>
<a class="button" href="/reality-check">Reality check</a>
</div>
</section>
</main>
<footer class="footer">
<div class="footer-grid">
<p><strong>Independent Kaspa explainer.</strong> Claims are labeled live, targeted, roadmap, research, unsupported, or wrong. Not investment advice.</p>
<nav class="footer-nav-groups" aria-label="Footer">
<div class="footer-link-group" aria-label="Learn">
<span>Learn</span>
<a href="/start-here">Start here</a>
<a href="/what-is-kaspa">Kaspa 101</a>
<a href="/overview">90-second overview</a>
<a href="/glossary">Glossary</a>
</div>
<div class="footer-link-group" aria-label="Verify">
<span>Verify</span>
<a href="/status">Status</a>
<a href="/kaspa-claims-checker">Claims checker</a>
<a href="/toccata-status">Toccata status</a>
<a href="/skeptical-case">Skeptical case</a>
<a href="/sources">Sources</a>
</div>
<div class="footer-link-group" aria-label="Build">
<span>Build</span>
<a href="/build-on-kaspa">Build on Kaspa</a>
<a href="/builder-guide">Builder guide</a>
<a href="/kaspa-app-ideas">App ideas</a>
</div>
<div class="footer-link-group" aria-label="Site">
<span>Site</span>
<a href="/search">Search</a>
<a href="/about">About</a>
<a href="/about#corrections">Corrections</a>
</div>
</nav>
</div>
</footer>
</body>
</html>