1import{p as Q,i as V,l as me,s as ge}from"../chunks/nSm94fJ8.js";import"../chunks/Ml5Nij3X.js";import{p as be,aB as ye,f as $,d as c,s as d,t as v,g as i,aj as x,b as u,c as ve,q as k,r as l,n as se,h as S,aH as ae,a as re}from"../chunks/BCIWmdPb.js";import{M as xe}from"../chunks/Cgcgaten.js";import{e as ee}from"../chunks/Dbuocrbz.js";import{s,b as ke,d as we}from"../chunks/CeL4OWiD.js";import{b as te}from"../chunks/dXxvMdwd.js";var _e=$('<div class="border-b border-border bg-secondary/50 px-3 py-2 font-heading text-sm font-semibold"> </div>'),Ae=ae('<line class="stroke-border" stroke-width="1"></line><text text-anchor="end" dominant-baseline="middle" class="fill-muted-foreground font-mono text-[10px]"> </text>',1),Me=ae('<text text-anchor="middle" class="fill-muted-foreground font-mono text-[10px]"> </text>'),Se=$('<figcaption class="mt-2 text-sm text-muted-foreground"> </figcaption>'),$e=$('<figure class="not-prose my-6"><div class="overflow-hidden rounded-lg border border-border bg-card"><!> <div class="scroll-shadow p-3" style="--scroll-cover: var(--card)"><svg role="img"><!><!><text text-anchor="end" class="fill-muted-foreground font-heading text-[9px] tracking-wide uppercase">KAS/s</text><path fill="none" class="cliff stroke-muted-foreground svelte-1udw3fc" stroke-width="1.5" stroke-dasharray="4 3" opacity="0.75"></path><path fill="none" class="curve stroke-section svelte-1udw3fc" stroke-width="2.5"></path></svg></div> <div class="flex flex-wrap items-center gap-x-4 gap-y-1.5 border-t border-border bg-secondary/40 px-3 py-2 text-xs"><span class="flex items-center gap-1.5"><span class="h-0.5 w-5 shrink-0 rounded bg-section"></span> <span class="text-muted-foreground">Kaspa â a semitone every month</span></span> <span class="flex items-center gap-1.5"><span class="h-0 w-5 shrink-0 border-t-2 border-dashed border-muted-foreground/80"></span> <span class="text-muted-foreground">the same halving, once a year</span></span></div></div> <!></figure>');function Te(T,m){be(m,!0);let g=Q(m,"caption",3,""),b=Q(m,"title",3,"Block subsidy, 440 KAS/s to zero");const K=426,f=440,w=K/12,H=620,z=300,r={top:16,right:24,bottom:34,left:46},j=H-r.left-r.right,N=z-r.top-r.bottom,D=Math.log10(f),R=-2,y=e=>r.left+e/w*j,p=e=>{const t=Math.max(Math.log10(e),R);return r.top+(D-t)/(D-R)*N},ne=Array.from({length:K},(e,t)=>({years:t/12,kas:f*Math.pow(2,-t/12)})),W=Array.from({length:Math.ceil(w)+1},(e,t)=>({years:t,kas:f*Math.pow(2,-t)})),ie=ne.map((e,t)=>`${t?"L":"M"} ${y(e.years)} ${p(e.kas)}`).join(" "),ce=W.flatMap((e,t)=>t===0?[`M ${y(e.years)} ${p(e.kas)}`]:[`L ${y(e.years)} ${p(W[t-1].kas)}`,`L ${y(e.years)} ${p(e.kas)}`]).join(" "),le=[440,100,10,1,.1,.01],de=[0,5,10,15,20,25,30,35];let q=x(!1),F=x(!1),_=x(void 0),I=x(void 0),B=x(0);ye(()=>{var a,n,o,M;if(typeof IntersectionObserver>"u"||(a=window.matchMedia)!=null&&a.call(window,"(prefers-reduced-motion: reduce)").matches)return;const e=(n=i(_))==null?void 0:n.getBoundingClientRect();if(!e||e.top<window.innerHeight*.9||(k(B,((M=(o=i(I))==null?void 0:o.getTotalLength)==null?void 0:M.call(o))??0,!0),!i(B)))return;k(q,!0);const t=new IntersectionObserver(C=>{C.some(E=>E.isIntersecting)&&(k(F,!0),t.disconnect())},{rootMargin:"0px 0px -10% 0px"});return t.observe(i(_)),()=>t.disconnect()});var A=$e(),P=c(A),G=c(P);{var pe=e=>{var t=_e(),a=c(t,!0);l(t),v(()=>S(a,b())),u(e,t)};V(G,e=>{b()&&e(pe)})}var J=d(G,2),h=c(J);s(h,"viewBox","0 0 620 300"),s(h,"width",H),s(h,"height",z);let U;var X=c(h);ee(X,16,()=>le,e=>e,(e,t)=>{var a=Ae(),n=re(a),o=d(n),M=c(o,!0);l(o),v((C,E,ue)=>{s(n,"x1",r.left),s(n,"x2",r.left+j),s(n,"y1",C),s(n,"y2",E),s(o,"x",r.left-7),s(o,"y",ue),S(M,t)},[()=>p(t),()=>p(t),()=>p(t)]),u(e,a)});var Y=d(X);ee(Y,16,()=>de,e=>e,(e,t)=>{var a=Me(),n=c(a,!0);l(a),v(o=>{s(a,"x",o),s(a,"y",r.top+N+15),S(n,t===0?"0":`${t}y`)},[()=>y(t)]),u(e,a)});var L=d(Y),Z=d(L),O=d(Z);te(O,e=>k(I,e),()=>i(I)),l(h),l(J),se(2),l(P);var he=d(P,2);{var fe=e=>{var t=Se(),a=c(t,!0);l(t),v(()=>S(a,g())),u(e,t)};V(he,e=>{g()&&e(fe)})}l(A),te(A,e=>k(_,e),()=>i(_)),v(e=>{U=ke(h,0,"mx-auto block max-w-none svelte-1udw3fc",null,U,e),s(h,"aria-label",g()||b()),s(L,"x",r.left-7),s(L,"y",r.top-5),s(Z,"d",ce),s(O,"d",ie),we(O,`--len: ${i(B)??""}`)},[()=>({armed:i(q),shown:i(F)})]),u(T,A),ve()}const oe={title:"Emission & Supply",description:"KAS issuance - the fair launch, the chromatic emission schedule, and max supply.",updated:"2026-08-14T00:00:00.000Z"},{title:He,description:ze,updated:je}=oe;var Ke=$('<h2 id="fair-launch"><a href="#fair-launch">Fair launch</a></h2> <p>Mainnet launched <strong>November 2021</strong>
1 with no premine, no ICO, and no insider or dev allocation - every KAS in existence was mined as a block reward. The network went down for three days shortly after launch; the current genesis block in <a href="https://github.com/kaspanet/rusty-kaspa" rel="noopener noreferrer" target="_blank">rusty-kaspa</a> is a November 22, 2021 checkpoint that carries the pre-halt UTXO set forward (<code>consensus/core/src/config/genesis.rs</code>).</p> <h2 id="two-phases"><a href="#two-phases">Two phases</a></h2> <p><strong>Pre-deflationary phase</strong> (launch â May 2022): a constant <strong>500 KAS per block</strong> at 1 BPS, for roughly the first half year (the schedule credits the 3-day outage).</p> <p><strong>Deflationary phase</strong> (May 2022 â ~2057): the reward starts at <strong>440 KAS per second</strong> and decreases by a factor of (1/2)^(1/12) (~5.6%) every month - so it <strong>halves every year, smoothly</strong>, rather than dropping 50% every four years as Bitcoin does. Implemented as a 426-entry month-by-month subsidy table in the coinbase logic (<code>consensus/src/processes/coinbase.rs</code>); the final entry is 0, ending emission ~35.5 years after the phase began.</p> <p>The community calls this the <strong>chromatic schedule</strong>: 440 is the frequency of concert-pitch A (A4 = 440 Hz), a monthly step is a semitone, and a yearly halving is an octave down. The code calls it the deflationary phase.</p> <!> <h2 id="per-second-not-per-block"><a href="#per-second-not-per-block">Per second, not per block</a></h2> <p>Since <a href="/learn/upgrades/crescendo">Crescendo</a>, the table value is explicitly a <strong>per-second</strong> reward (<a href="https://github.com/kaspanet/kips/blob/master/kip-0014.md" rel="noopener noreferrer" target="_blank">KIP-14</a>): at 10 BPS each block pays the per-second subsidy divided by 10. Emission is therefore independent of block rate - Crescendo multiplied blocks by 10 and divided the per-block reward by 10.</p> <p>As of July 2026 the subsidy is ~24.5 KAS/second, i.e. <strong>~2.45 KAS per block</strong>.</p> <h2 id="max-supply"><a href="#max-supply">Max supply</a></h2> <p><strong>~28.7 billion KAS</strong>, fully emitted by ~2057. The number is empirical rather than a code constant: summing the schedule naively (500 KAS à the pre-deflationary seconds + the monthly table) gives ~28.4B, but during the pre-deflationary phase every parallel DAG block carried the full 500 KAS subsidy, so actual emission ran slightly ahead of the per-second math.</p> <p>There is no tail emission. After the table ends, miner revenue is fees only. Emission to date can be tracked on the live <a href="/app/utxo/circulating-supply">circulating supply chart</a>, and current fee revenue on <a href="/app/transactions/accepted/fees/total">total fees paid</a>.</p> <h2 id="who-receives-it"><a href="#who-receives-it">Who receives it</a></h2> <p>Block rewards are paid through mergeset coinbase mechanics - a blockâs coinbase pays the blocks it merges, not its own miner. See <a href="/learn/mining#rewards-in-a-blockdag">Mining</a>. Coinbase outputs mature after 1,000 blocks.</p> <p>Reference: <a href="https://github.com/kaspanet/rusty-kaspa/blob/master/consensus/src/processes/coinbase.rs" rel="noopener noreferrer" target="_blank"><code>coinbase.rs</code> subsidy table</a>, <a href="https://github.com/kaspanet/kips/blob/master/kip-0014.md" rel="noopener noreferrer" target="_blank">KIP-14</a></p> <p>See Also: <a href="/learn/mining">Mining</a>, <a href="/learn/mining/difficulty">Difficulty Adjustment</a></p>',1);function Ne(T,m){const g=me(m,["children","$$slots","$$events","$$legacy"]);xe(T,ge(()=>g,()=>oe,{children:(b,K)=>{var f=Ke(),w=d(re(f),12);Te(w,{caption:"Log scale, so a constant halving rate is a straight line. The dashed staircase is the same yearly halving delivered as one annual 50% cut. The plotted line is 440 · 2^(âmonth/12), which reproduces rusty-kaspa's 426-entry subsidy table to the sompi. It is clipped at 0.01 KAS/s; the table's last non-zero entries are single sompi, and entry 425 is zero."}),se(20),u(b,f)},$$slots:{default:!0}}
1))}export{Ne as component};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.