<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[How a Block Becomes Valid: AntiQua Consensus in Plain Words]]></title><description><![CDATA[<p dir="auto">What does it actually take for a block to be accepted? Why do mining rewards sit locked for 100 blocks? And why doesn't AntiQua retarget difficulty every 2,016 blocks like Bitcoin? <img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f914.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--thinking_face" style="height:1.4em;width:auto;vertical-align:middle" title=":thinking_face:" alt="🤔" /></p>
<p dir="auto">This post walks through the consensus rules as the node enforces them today. Every number was read out of the NodeCore source in September 2026 – nothing here comes from a whitepaper that might have drifted from the code.</p>
<p dir="auto"><strong>TL;DR</strong></p>
<ul>
<li><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/26cf.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--pick" style="height:1.4em;width:auto;vertical-align:middle" title=":pick:" alt="⛏" /> <strong>Proof-of-Work, two stages:</strong> a fast hash against the target, plus <strong>RandomX</strong> keyed to the previous block.</li>
<li><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f6b4.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--bicyclist" style="height:1.4em;width:auto;vertical-align:middle" title=":bicyclist:" alt="🚴" /> <strong>Difficulty adjusts every single block</strong> (ASERT), not every two weeks.</li>
<li><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4b0.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--moneybag" style="height:1.4em;width:auto;vertical-align:middle" title=":moneybag:" alt="💰" /> <strong>50 AQA per block</strong>, halving every <strong>420,000</strong> blocks. Hard cap <strong>56 million AQA</strong>, ever.</li>
<li><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/23f3.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--hourglass_flowing_sand" style="height:1.4em;width:auto;vertical-align:middle" title=":hourglass_flowing_sand:" alt="⏳" /> <strong>Mining rewards are locked for 100 blocks</strong> – roughly 17 hours on mainnet.</li>
<li><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f6e1.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--shield" style="height:1.4em;width:auto;vertical-align:middle" title=":shield:" alt="🛡" /> <strong>A reorg deeper than 30 blocks is refused outright</strong>, whatever work it claims to carry.</li>
<li><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4cf.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--straight_ruler" style="height:1.4em;width:auto;vertical-align:middle" title=":straight_ruler:" alt="📏" /> <strong>1 confirmation</strong> is enough to spend. <strong>6</strong> is what wallets and exchanges treat as settled.</li>
</ul>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/26cf.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--pick" style="height:1.4em;width:auto;vertical-align:middle" title=":pick:" alt="⛏" /> Proof-of-Work, in two stages</h2>
<p dir="auto">A valid block has to clear two different hashes, and they do different jobs.</p>
<p dir="auto"><strong>Stage one – the fast hash.</strong> The block header is hashed with <strong>double SHAKE256</strong> to 32 bytes, and that has to come out below the target encoded in the block's <code>nBits</code>. This is the familiar part: lower target, more attempts needed.</p>
<p dir="auto"><strong>Stage two – RandomX.</strong> The same block must also produce a valid <strong>RandomX</strong> digest. RandomX is <em>memory-hard</em>: it runs a small randomly generated program through a couple of gigabytes of working memory, which is something general-purpose CPUs do well and purpose-built ASICs do badly. The key for that program is the <strong>hash of the previous block</strong>, so it changes with every block and nobody can precompute anything.</p>
<p dir="auto">There's an asymmetry built in that matters for anyone running a node:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th></th>
<th>Memory</th>
<th>Used for</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Mining</strong></td>
<td>Full dataset (~2 GiB)</td>
<td>Producing blocks, fast</td>
</tr>
<tr>
<td><strong>Verifying</strong></td>
<td>Light mode</td>
<td>Checking other people's blocks</td>
</tr>
</tbody>
</table>
<p dir="auto">Both arrive at the <strong>same digest</strong>. That's the whole point: mining is expensive, checking is cheap. A node validating the chain doesn't rebuild a 2 GiB dataset for every block it sees. When your node loads its existing chain from disk it's cheaper still – it replays the stored digest rather than recomputing it.</p>
<p dir="auto"><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/2139.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--information_source" style="height:1.4em;width:auto;vertical-align:middle" title=":information_source:" alt="ℹ" /> <strong>On phones:</strong> the Android build compiles <strong>without</strong> RandomX entirely. It's a light client – it verifies headers and its own transactions, and it cannot mine. That isn't a restriction someone added, it simply doesn't contain the machinery.</p>
<p dir="auto">Every non-genesis block also carries an <strong>ML-DSA-87 signature</strong> from the miner – the same post-quantum signature scheme used for transactions.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f6b4.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--bicyclist" style="height:1.4em;width:auto;vertical-align:middle" title=":bicyclist:" alt="🚴" /> Difficulty: ASERT, every block</h2>
<p dir="auto">Bitcoin recalculates difficulty every 2,016 blocks, which is roughly two weeks. If hash power drops sharply the day after an adjustment, the chain crawls until the next one.</p>
<p dir="auto">AntiQua uses <strong>ASERT</strong> instead, and it recalculates for <strong>every single block</strong>:</p>
<pre><code>target = anchor_target × 2^((elapsed − ideal_elapsed) / half_life)
</code></pre>
<p dir="auto">In words: measure how far ahead or behind schedule the chain is, and adjust exponentially. Blocks coming too fast tighten the target smoothly; blocks coming too slowly loosen it. There is no cliff to fall off and no fortnight to wait.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th></th>
<th>Mainnet</th>
<th>Testnet</th>
</tr>
</thead>
<tbody>
<tr>
<td>Target block time</td>
<td><strong>600 s</strong> (10 min)</td>
<td><strong>120 s</strong> (2 min)</td>
</tr>
<tr>
<td>Half-life</td>
<td>6 hours</td>
<td>72 minutes</td>
</tr>
<tr>
<td>Median-time window</td>
<td>10 blocks</td>
<td>10 blocks</td>
</tr>
</tbody>
</table>
<p dir="auto">The half-life sets how aggressive the correction is: a chain running one half-life behind schedule gets its target doubled.</p>
<p dir="auto"><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--warning" style="height:1.4em;width:auto;vertical-align:middle" title=":warning:" alt="⚠" /> <strong>One thing that trips people up when reading the code:</strong> there's a legacy field named <code>difficulty_adjustment_interval</code> sitting at 10,000. It is <strong>not</strong> a Bitcoin-style retarget interval and it has no say in consensus. ASERT is the only thing that sets <code>nBits</code>. Likewise, the "difficulty" number you see in explorers is a display value derived from the target – readable for humans, meaningless to the protocol.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/2699.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--gear" style="height:1.4em;width:auto;vertical-align:middle" title=":gear:" alt="⚙" /> Timestamps: you can't lie much</h2>
<p dir="auto">Two rules bound a block's timestamp, and they pull in opposite directions:</p>
<ul>
<li>It must be <strong>strictly greater than the median</strong> of the last 10 blocks' timestamps. That stops a miner dragging time backwards to make difficulty look easier.</li>
<li>It must be <strong>no more than one hour in the future</strong>. That stops the opposite trick.</li>
</ul>
<p dir="auto">Together they leave a narrow, self-correcting window. A block outside it is rejected at validation, not merely frowned upon.</p>
<p dir="auto"><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/2139.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--information_source" style="height:1.4em;width:auto;vertical-align:middle" title=":information_source:" alt="ℹ" /> Transactions have a separate, looser rule – up to <strong>two hours</strong> ahead is accepted into the mempool. Don't confuse the two; they're different checks in different places.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4b0.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--moneybag" style="height:1.4em;width:auto;vertical-align:middle" title=":moneybag:" alt="💰" /> The block reward, and where 56 million comes from</h2>
<p dir="auto">The first five blocks are special. After that, it's regular mining forever:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Height</th>
<th>Reward</th>
<th>What it is</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>50 AQA</td>
<td>Genesis</td>
</tr>
<tr>
<td>1</td>
<td>3,000,000 AQA</td>
<td>Bug bounty fund</td>
</tr>
<tr>
<td>2</td>
<td>4,000,000 AQA</td>
<td>Charity fund</td>
</tr>
<tr>
<td>3</td>
<td>1,500,000 AQA</td>
<td>Development fund</td>
</tr>
<tr>
<td>4</td>
<td>1,500,000 AQA</td>
<td>Server and infrastructure fund</td>
</tr>
<tr>
<td>5 and up</td>
<td><strong>50 AQA</strong></td>
<td>Mining, halving from here</td>
</tr>
</tbody>
</table>
<p dir="auto">The four fund blocks are the whole reason the supply chart has a step at the start – <strong>10 million AQA</strong> was issued in four blocks, publicly, at known heights, into known addresses. There is no hidden issuance anywhere else, and the node enforces that: if a coinbase ever tried to mint more than the schedule allows, the block is rejected.</p>
<p dir="auto"><strong>Halving</strong> happens every <strong>420,000</strong> mining blocks, counted from height 5. So the first halving lands at height <strong>420,005</strong>, not 420,000 – a small detail that matters if you're writing a supply calculator. The reward halves by integer division until it reaches a floor of <strong>0.1 AQA</strong>.</p>
<p dir="auto">The total is capped in code:</p>
<pre><code>56,000,000 AQA  =  42 M mining  +  10 M funds  +  4 M relay lottery
</code></pre>
<p dir="auto">That cap isn't decorative. If a block's reward would push total issuance past it, the node sets the reward to <strong>zero</strong> and the block still has to be valid without it.</p>
<p dir="auto"><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f3b2.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--game_die" style="height:1.4em;width:auto;vertical-align:middle" title=":game_die:" alt="🎲" /> On top of the mining reward, a block may carry an extra coinbase output of up to <strong>1.5 AQA</strong> for the <a href="/topic/18">Relay Reward Lottery</a> – paid from its own 4 million budget, not out of the mining share.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/23f3.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--hourglass_flowing_sand" style="height:1.4em;width:auto;vertical-align:middle" title=":hourglass_flowing_sand:" alt="⏳" /> Confirmations: 1, 6, and 100</h2>
<p dir="auto">Three different numbers, three different jobs:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Depth</th>
<th>Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>1</strong></td>
<td>Enough to spend an output again. The tip block counts as one confirmation.</td>
</tr>
<tr>
<td><strong>6</strong></td>
<td>What wallets and exchange integrations treat as settled.</td>
</tr>
<tr>
<td><strong>100</strong></td>
<td><strong>Coinbase maturity</strong> – how long a mining reward stays locked.</td>
</tr>
</tbody>
</table>
<p dir="auto">The 100-block lock on mining rewards exists because the tip of a chain is the part that can still be replaced. If a miner could spend a reward immediately and the block were then orphaned, those coins would have come from a block that no longer exists. A hundred blocks is far beyond any realistic reorg.</p>
<p dir="auto">At target block times that's about <strong>16.7 hours</strong> on mainnet and <strong>3.3 hours</strong> on testnet – assuming the chain holds its pace, which is an assumption and not a promise.</p>
<p dir="auto"><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/2139.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--information_source" style="height:1.4em;width:auto;vertical-align:middle" title=":information_source:" alt="ℹ" /> One more rule people hit in practice: you can't chain a transaction onto another transaction that is still sitting in the mempool. An input needs <strong>at least one confirmation</strong>. Spend, wait for a block, then spend the change.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f6e1.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--shield" style="height:1.4em;width:auto;vertical-align:middle" title=":shield:" alt="🛡" /> Reorgs: a hard ceiling, not a preference</h2>
<p dir="auto">Most chains accept whatever branch carries the most work, however deep the switch. AntiQua refuses past a point:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Depth</th>
<th>What happens</th>
</tr>
</thead>
<tbody>
<tr>
<td>20 blocks</td>
<td>Warning in the log – possible network partition</td>
</tr>
<tr>
<td><strong>30 blocks</strong></td>
<td><strong>Refused.</strong> The node will not reorganise this deep, whatever work is offered</td>
</tr>
<tr>
<td>288 blocks</td>
<td>Considered final; undo data gets pruned below this</td>
</tr>
</tbody>
</table>
<p dir="auto">A reorg 30 blocks deep is not a normal event on a healthy network – it's either a serious partition or someone with enough hash power to rewrite half a day. In both cases stopping and alerting is better than silently rewriting history. The node stops.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/2696.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--scales" style="height:1.4em;width:auto;vertical-align:middle" title=":scales:" alt="⚖" /> PoS checkpoints: a bolt, not a second consensus</h2>
<p dir="auto">Every <strong>100 blocks</strong>, the network forms a checkpoint. This is the part most easily misread, so plainly:</p>
<p dir="auto"><strong>Proof-of-Work alone decides which blocks are valid.</strong> Checkpoints don't mint, don't vote on blocks, and carry no stake weight. They are a <strong>bolt against deep reorgs</strong>, and what they measure is mining activity: how many blocks each miner produced in the window of the last 100 heights. A checkpoint is confirmed when miners representing more than <strong>51 %</strong> of that window agree on it.</p>
<p dir="auto">A second phase requires a minimum number of <em>distinct</em> miners – <strong>3</strong> on mainnet, <strong>2</strong> on testnet – so a single miner can't confirm checkpoints alone during quiet periods.</p>
<p dir="auto"><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--warning" style="height:1.4em;width:auto;vertical-align:middle" title=":warning:" alt="⚠" /> <strong>For anyone building from source:</strong> the checkpoint system sits behind a compile flag. A build without it logs a loud warning at startup and is <strong>not consensus-compatible</strong> with release nodes – it's missing the reorg bolt entirely. If you compile your own node, leave the flag on.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f6f0.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--satellite" style="height:1.4em;width:auto;vertical-align:middle" title=":satellite:" alt="🛰" /> How a node catches up</h2>
<p dir="auto">Sync is <strong>header-first</strong>: headers come down before bodies, so a node can check the chain of work before downloading anything heavy. Caps keep that from being abused: at most 2,000 headers per response, no more than 4,096 unconfirmed headers pending, and from 100 blocks in, the checkpoint gate has to be satisfied before the sync goes on. Failing that gate is the single most expensive thing a peer can do – see <a href="/topic/22">the ban system post</a>.</p>
<p dir="auto">One distinction that shows up in logs: a <strong>compact stub is not a full block</strong>. A block counts as a complete body only when it actually carries its transactions, merkle root and signature. Stubs get re-requested rather than accepted – and a peer sending one is <strong>not</strong> penalised for it.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4aa.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--muscle" style="height:1.4em;width:auto;vertical-align:middle" title=":muscle:" alt="💪" /> Spam protection at the node level</h2>
<p dir="auto">Separate from fees, and separate from block PoW: a sender's first <strong>5</strong> pending transactions pass normally. From the sixth, each one has to carry a tiny <strong>proof-of-work</strong> – 14 leading zero bits on its hash. Unnoticeable once, expensive ten thousand times.</p>
<p dir="auto">This is node policy about what enters a mempool, not a consensus rule about what may go in a block. (<a href="/topic/16">More in the fee post</a>)</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title=":white_check_mark:" alt="✅" /> The rules in one place</h2>
<ol>
<li><strong>Two-stage PoW</strong> – double SHAKE256 against the target, plus RandomX keyed to the previous block</li>
<li><strong>ASERT</strong> adjusts difficulty every block; 600 s target on mainnet, 120 s on testnet</li>
<li>Timestamp above the 10-block median, at most 1 hour ahead</li>
<li><strong>50 AQA</strong> per block from height 5, halving every 420,000 (first at <strong>420,005</strong>), floor 0.1 AQA</li>
<li><strong>56 M AQA</strong> hard cap: 42 M mining, 10 M funds in blocks 1–4, 4 M relay lottery</li>
<li><strong>1</strong> confirmation to spend, <strong>6</strong> for settled, <strong>100</strong> for mining rewards</li>
<li><strong>30 blocks</strong> is the hard reorg ceiling; checkpoints every 100 blocks bolt it down</li>
<li>Header-first sync; a compact stub is never a full body</li>
</ol>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4ac.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--speech_balloon" style="height:1.4em;width:auto;vertical-align:middle" title=":speech_balloon:" alt="💬" /> Questions?</h2>
<p dir="auto">Miner wondering about ASERT behaviour after a hash-rate swing? Exchange operator asking why 6 and not 60? <strong>Ask below.</strong> <img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f447.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--point_down" style="height:1.4em;width:auto;vertical-align:middle" title=":point_down:" alt="👇" /></p>
<p dir="auto"><em>— Blythex</em></p>
]]></description><link>https://forum.antiqua-blockchain.com/topic/23/how-a-block-becomes-valid-antiqua-consensus-in-plain-words</link><generator>RSS for Node</generator><lastBuildDate>Sat, 26 Sep 2026 11:33:11 GMT</lastBuildDate><atom:link href="https://forum.antiqua-blockchain.com/topic/23.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Sep 2026 14:27:31 GMT</pubDate><ttl>60</ttl></channel></rss>