<?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[Why Your Node Got Banned - and Why It Probably Didn't]]></title><description><![CDATA[<p dir="auto">Running a node and seeing peers disappear? Before you go hunting for a firewall problem: most of what looks like a ban isn't one. This post lists exactly what earns a ban score in the AntiQua network, what only gets dropped, and how to tell the two apart. <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="🛡" /></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/1f522.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--1234" style="height:1.4em;width:auto;vertical-align:middle" title=":1234:" alt="🔢" /> <strong>Every peer has a misbehaviour score.</strong> At <strong>100</strong> it gets banned. Below 100 is <strong>not</strong> a ban – the peer stays connected.</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>24 hours</strong> for full nodes, <strong>1 hour</strong> for light and inbound peers.</li>
<li><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--x" style="height:1.4em;width:auto;vertical-align:middle" title=":x:" alt="❌" /> <strong>Rate limits don't ban.</strong> Too many messages? The message is dropped and that's the end of it.</li>
<li><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f50d.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--mag" style="height:1.4em;width:auto;vertical-align:middle" title=":mag:" alt="🔍" /> <strong>Two things ban you on the spot:</strong> failing the header checkpoint gate (+150) and parking more than 500 unconfirmed headers on a peer (+100).</li>
<li><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f504.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--arrows_counterclockwise" style="height:1.4em;width:auto;vertical-align:middle" title=":arrows_counterclockwise:" alt="🔄" /> <strong>Behaving well earns credit back</strong>, but it never lifts a ban that has already started.</li>
</ul>
<hr />
<h2><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="📏" /> The threshold</h2>
<pre><code>Ban score &gt;= 100  -&gt;  banned
Ban score &lt;  100  -&gt;  nothing happens
</code></pre>
<p dir="auto">That second line matters more than it looks. A score of 95 is not "almost banned" in any operational sense – your peer is connected, syncing and relaying exactly as before. Scores accumulate, they don't degrade your connection on the way up.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th></th>
<th>Duration</th>
</tr>
</thead>
<tbody>
<tr>
<td>Full node</td>
<td>24 hours</td>
</tr>
<tr>
<td>Light / SPV / inbound</td>
<td>1 hour</td>
</tr>
</tbody>
</table>
<p dir="auto">Light peers get the short ban on purpose: they sit behind mobile networks where the IP changes anyway, so a long ban would mostly punish whoever inherits the address next.</p>
<p dir="auto">Bans are written to disk, so they survive a restart.</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>There is no manual ban.</strong> The node has no admin path that bans an address on the spot – reaching 100 through the scores below is the only way anyone gets banned. No operator, no plugin, no config file.</p>
<hr />
<h2><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="⚠" /> The two that ban you outright</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Score</th>
<th>Reason</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>+150</strong></td>
<td>During initial sync, the header checkpoint gate failed – the PoS anchor is missing or doesn't match</td>
</tr>
<tr>
<td><strong>+100</strong></td>
<td>More than <strong>500</strong> unconfirmed headers pending from one peer</td>
</tr>
</tbody>
</table>
<p dir="auto">Both are above the threshold on their own, deliberately.</p>
<p dir="auto">The first: a peer that can't produce a valid checkpoint anchor is either running something that isn't this chain, or feeding you a fabricated history. There is no charitable reading of that.</p>
<p dir="auto">The second is about memory. Headers you can't confirm sit in a cache. A peer that keeps stuffing that cache without ever delivering anything that checks out is filling your RAM, whether by malice or by being thoroughly broken. Either way you want it gone.</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="🛰" /> Two layers, two outcomes</h2>
<p dir="auto">Penalties come from two different places, and they don't behave the same way:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Layer</th>
<th>What it sees</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Socket</strong></td>
<td>The raw frame: length, encryption, message identifier</td>
<td>Scores <strong>and disconnects immediately</strong></td>
</tr>
<tr>
<td><strong>Dispatch</strong></td>
<td>The parsed message: contents, sizes, counts</td>
<td>Scores and drops the message</td>
</tr>
</tbody>
</table>
<p dir="auto">So a malformed frame ends the connection then and there, while an oversized inventory list only costs the message. Both add to the same score.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4c3.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--page_with_curl" style="height:1.4em;width:auto;vertical-align:middle" title=":page_with_curl:" alt="📃" /> Protocol and handshake violations</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Score</th>
<th>Reason</th>
<th>Disconnects?</th>
</tr>
</thead>
<tbody>
<tr>
<td>+50</td>
<td>Frame length of zero, or larger than the 4 MiB limit</td>
<td>yes, at the socket</td>
</tr>
<tr>
<td>+40</td>
<td>Message wrapper failed verification</td>
<td>yes, at the socket</td>
</tr>
<tr>
<td>+40</td>
<td>Header chain link broken</td>
<td>no</td>
</tr>
<tr>
<td>+35</td>
<td>Announce commitment claims an absurd transaction count</td>
<td>no</td>
</tr>
<tr>
<td>+30</td>
<td>Encryption failed to decrypt</td>
<td>yes, at the socket</td>
</tr>
<tr>
<td>+30</td>
<td>Message identifier doesn't match what the frame claims</td>
<td>yes, at the socket</td>
</tr>
<tr>
<td>+30</td>
<td>Handshake response failed verification</td>
<td>no</td>
</tr>
<tr>
<td>+30</td>
<td>Headers arrive out of order</td>
<td>no</td>
</tr>
<tr>
<td>+30</td>
<td>Far too many blocks in one message</td>
<td>no</td>
</tr>
<tr>
<td>+25</td>
<td>Payload empty after a successful verify</td>
<td>socket layer: yes</td>
</tr>
<tr>
<td>+25</td>
<td>Oversized headers, GetData or peer list</td>
<td>no</td>
</tr>
<tr>
<td>+20</td>
<td>Oversized inventory batch, invalid block inside a blocks message, transaction queue overflow</td>
<td>no</td>
</tr>
<tr>
<td>+15</td>
<td>A second hello after the handshake already finished, inventory flooding</td>
<td>no</td>
</tr>
<tr>
<td>+10</td>
<td>Replayed handshake response, invalid transaction payload, duplicate difficulty update</td>
<td>no</td>
</tr>
<tr>
<td>+5</td>
<td>Handshake seen-set capacity, empty rekey payload</td>
<td>no</td>
</tr>
</tbody>
</table>
<p dir="auto">None of these happen by accident on a healthy peer. They're the shapes a malformed or hostile client produces.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f504.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--arrows_counterclockwise" style="height:1.4em;width:auto;vertical-align:middle" title=":arrows_counterclockwise:" alt="🔄" /> Sync, proofs and key rotation</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Score</th>
<th>Reason</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>+30 per block</strong></td>
<td>Pure GetData substitution – see below</td>
</tr>
<tr>
<td>+60</td>
<td>Headers you requested went largely unconfirmed within a 10-minute window</td>
</tr>
<tr>
<td>+25</td>
<td>Light client proof: merkle root doesn't match your header, or the proof is invalid</td>
</tr>
<tr>
<td>+20</td>
<td>Key rotation request out of sequence</td>
</tr>
<tr>
<td>+15</td>
<td>Light client proof: amount or recipient doesn't match</td>
</tr>
<tr>
<td>+15</td>
<td>Key rotation replay (sequence number too low)</td>
</tr>
<tr>
<td>+10</td>
<td>Announced a block height more than 500,000 above your tip</td>
</tr>
<tr>
<td>+10</td>
<td>Ping flooding, empty rekey ciphertext</td>
</tr>
<tr>
<td>+10</td>
<td>Pong nonce mismatch – <strong>not</strong> for inbound or SPV peers</td>
</tr>
<tr>
<td>+5</td>
<td>Key rotation rate limit, rekey response with nothing pending, malformed relay announcement</td>
</tr>
</tbody>
</table>
<p dir="auto">The +60 only triggers under real conditions: at least <strong>8</strong> headers sent, and fewer than <strong>20 %</strong> of them confirmed inside the window. A handful of misses costs nothing.</p>
<p dir="auto">The +10 for an implausible height catches a specific lie – a peer claiming the chain is half a million blocks further along than it is, hoping you'll chase it.</p>
<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="💬" /> Encrypted messaging and multisig</h2>
<p dir="auto">The topic messaging layer – the one carrying encrypted messages and multisig confirmations – has its own penalties. They follow one pattern: <strong>rate limits are cheap, forged signatures are not.</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Score</th>
<th>Reason</th>
</tr>
</thead>
<tbody>
<tr>
<td>+5</td>
<td>Rate limit on subscribe, publish, fetch or forward</td>
</tr>
<tr>
<td>+10</td>
<td>Topic name oversized</td>
</tr>
<tr>
<td>+15</td>
<td>Payload oversized, missing message id, missing publisher key</td>
</tr>
<tr>
<td>+20</td>
<td>Missing or malformed public key</td>
</tr>
<tr>
<td>+25</td>
<td>Bad key length, binding mismatch, invalid signature length</td>
</tr>
<tr>
<td><strong>+30</strong></td>
<td><strong>Bad signature</strong> on a publish, a forward or a multisig confirmation</td>
</tr>
</tbody>
</table>
<p dir="auto">A bad signature is the expensive one because there's no innocent explanation. An oversized topic name is a broken client; a message signed with a key that doesn't verify is someone trying something.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f50d.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--mag" style="height:1.4em;width:auto;vertical-align:middle" title=":mag:" alt="🔍" /> Substitution vs. honest extras</h2>
<p dir="auto">This is the distinction worth understanding, because it separates an attack from an ordinary sync hiccup.</p>
<p dir="auto">When your node sends a GetData request, it remembers which block hashes it asked for. Any block that comes back with a different hash counts as a mismatch. What happens next depends on the whole response, not on the mismatch alone:</p>
<p dir="auto"><strong>Attack — score +30 per block:</strong><br />
the response contained mismatches, <strong>and not a single</strong> block you asked for, <strong>and no</strong> compact stubs either. Somebody answered a specific request with entirely different blocks. That's a substitution attempt.</p>
<p dir="auto"><strong>Ordinary — no score at all:</strong><br />
the response contained at least one block you actually requested, plus extras. The extras are simply discarded. This happens constantly and legitimately: tip gossip, a retried announcement, a compact block's parent.</p>
<p dir="auto"><strong>Also no score:</strong><br />
a compact stub instead of a full body; an empty headers response; a request that came back holding only headers you already had; headers that fall outside the checkpoint horizon. All of these are re-requested or quietly closed.</p>
<p dir="auto"><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f449.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--point_right" style="height:1.4em;width:auto;vertical-align:middle" title=":point_right:" alt="👉" /> That last group is deliberate, and the reasoning in the code is worth repeating: a node catching up from genesis will legitimately produce batches full of headers you already know. Counting those toward the unconfirmed cache limit would ban honest peers for the crime of being helpful. So they don't count.</p>
<p dir="auto"><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f449.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--point_right" style="height:1.4em;width:auto;vertical-align:middle" title=":point_right:" alt="👉" /> <strong>In one line:</strong> the right block plus noise is a normal peer. Only noise, when you asked for something specific, is an attack.</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--x" style="height:1.4em;width:auto;vertical-align:middle" title=":x:" alt="❌" /> What is NOT banned</h2>
<p dir="auto">Worth stating explicitly, because these are exactly the situations operators come asking about:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Situation</th>
<th>What happens</th>
</tr>
</thead>
<tbody>
<tr>
<td>Too many messages per second</td>
<td>Message dropped. <strong>No ban.</strong> 60/s normally, 400/s while syncing</td>
</tr>
<tr>
<td>Handshake queue full</td>
<td>Dropped and logged, no penalty</td>
</tr>
<tr>
<td>An unknown message type from an older peer</td>
<td>Warning in the log, no penalty</td>
</tr>
<tr>
<td>Compact stub instead of a full body</td>
<td>Re-requested, no penalty</td>
</tr>
<tr>
<td>Extra hashes alongside a correct block</td>
<td>Extras discarded, no penalty</td>
</tr>
<tr>
<td>A GetData job with no hash list at all</td>
<td>Blocks discarded, no penalty</td>
</tr>
<tr>
<td>Empty headers response, or one with only headers you had</td>
<td>Re-asked, no penalty</td>
</tr>
<tr>
<td>Headers outside the checkpoint horizon</td>
<td>Node waits for a block to connect, no penalty</td>
</tr>
<tr>
<td>A second hello in the same session</td>
<td>Ignored</td>
</tr>
<tr>
<td>Late pong from a mobile or SPV peer</td>
<td>No penalty – late pongs are normal on mobile</td>
</tr>
<tr>
<td>Reconnect from a phone that changed network</td>
<td>No penalty, that's the expected pattern</td>
</tr>
<tr>
<td>An error while serving GetData</td>
<td>Connection closed, no penalty</td>
</tr>
<tr>
<td>Key rotation when the key material is missing locally</td>
<td>Connection closed, no penalty</td>
</tr>
<tr>
<td>Checkpoint, challenge, attestation, receipt and mempool-status messages</td>
<td>Logged or dropped, never scored</td>
</tr>
<tr>
<td>Any score below 100</td>
<td>Nothing at all</td>
</tr>
</tbody>
</table>
<p dir="auto">If your node is losing peers and none of the scored events above appear in your log, you're looking at the wrong cause. Check your own connectivity, your port forwarding, and whether you're behind a NAT that drops idle connections.</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="⚙" /> Arriving with the next node release</h2>
<p dir="auto">One group of penalties is written but not yet in the build the network is running: malformed <strong>compact block</strong> traffic (a compact block with no header, a prefill entry carrying no transaction, transaction-index lists that are empty or out of range) and <strong>light client requests</strong> whose block query is neither a height nor a hash.</p>
<p dir="auto">Today those messages are dropped without a score. After the next release build they cost between +10 and +35. Nothing an ordinary node or wallet sends is affected – these are shapes that only a broken or hostile client produces. Watch the <a href="/topic/12">Core Changelog</a> for the release.</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="ℹ" /> What stays unscored either way: a compact block that needs a follow-up request, a reconstruction that falls back to a normal GetData, a block that simply isn't held locally, and a peer that never answers the capability handshake (it's treated as a full node and life goes on).</p>
<hr />
<h2><img src="https://forum.antiqua-blockchain.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f504.png?v=78063b0341f" class="not-responsive emoji emoji-android emoji--arrows_counterclockwise" style="height:1.4em;width:auto;vertical-align:middle" title=":arrows_counterclockwise:" alt="🔄" /> Earning credit back</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Credit</th>
<th>For</th>
</tr>
</thead>
<tbody>
<tr>
<td>−5</td>
<td>A valid pong</td>
</tr>
<tr>
<td>−25</td>
<td>Confirmed headers during initial sync</td>
</tr>
</tbody>
</table>
<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>Credit never lifts an active ban.</strong> Once a ban is running, good behaviour reduces nothing – the clock has to expire. The credits exist so that a peer which occasionally trips a small penalty doesn't slowly accumulate its way to 100 over days of honest operation.</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="🛰" /> Eclipse protection: slots per subnet</h2>
<p dir="auto">An eclipse attack means surrounding your node with peers that all belong to the attacker, so you only see the chain they want you to see. The cheapest way to do that is to bring many addresses from one network block. So the number of peers from a single IPv4 /16 is capped:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th></th>
<th>Full nodes</th>
<th>Light clients</th>
</tr>
</thead>
<tbody>
<tr>
<td>Inbound per /16</td>
<td><strong>3</strong></td>
<td><strong>16</strong></td>
</tr>
<tr>
<td>Outbound per /16</td>
<td>2</td>
<td>2</td>
</tr>
</tbody>
</table>
<p dir="auto">Light clients get 16 for a practical reason: mobile carriers put huge numbers of customers behind shared address space, so a whole city can share one /16. Three slots would be full before breakfast, and gossip is skipped for light peers anyway, so they can't be used to feed you a false view of the chain the way a full peer could.</p>
<p dir="auto">Slot budgets overall: <strong>150</strong> full peers by default, 32 light, 256 for archive nodes, a hard ceiling of 512 – and at most <strong>75</strong> unauthenticated inbound connections, a number that deliberately does not grow when you scale the others up.</p>
<p dir="auto">Separately, your node watches its own peer diversity: fewer than <strong>5</strong> distinct subnets across at least <strong>8</strong> peers flags a possible eclipse. That's a <strong>warning</strong>, not a ban of anyone – it tells you to add peers from elsewhere.</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="⚖" /> The second score – and what it actually does</h2>
<p dir="auto">Everything above is the <strong>P2P layer</strong>: protocol violations, score 100, 24 hours, real disconnects.</p>
<p dir="auto">The <strong>consensus module</strong> keeps a second, much tighter score for chain-level misbehaviour – a double-spend attempt costs 8, a replay 6, the threshold is 10, it decays by a point a minute and entries expire after 30 minutes.</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>What it does not do, today, is disconnect anyone.</strong> That score is written into the consensus module's own table and logged. Nothing in the networking code reads it back to drop a peer. So if you're looking for the reason a connection went away, this isn't it – check the P2P scores above.</p>
<p dir="auto">It is useful for a different purpose: those log lines tell you a peer has been sending you double-spends, which is worth knowing even when the node keeps talking to it. If you see them repeatedly from the same address, that's a case for looking at the peer yourself.</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="✅" /> If you think you've been banned unfairly</h2>
<ol>
<li>Look for the actual scored reason in the log. Every penalty above writes one.</li>
<li>If the reason is a rate limit, a dropped message or a closed connection without a score: that isn't a ban, keep looking.</li>
<li>If it's <strong>+150</strong>: your node and the peer disagree about history. Check you're on the right network, and that your build has the checkpoint flag compiled in – a build without it is <strong>not</strong> consensus-compatible with release nodes. (<a href="/topic/23">What the checkpoints do</a>)</li>
<li>If it's <strong>+100</strong>: that peer buried you in headers it never backed up. Usually a broken or badly out-of-date node rather than an attacker.</li>
<li>Consensus log lines about double-spends are not the reason your peer disappeared.</li>
</ol>
<p dir="auto">Questions about a specific log line? <strong>Post it below</strong> – with the surrounding lines, the reason string is what matters. <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/22/why-your-node-got-banned-and-why-it-probably-didn-t</link><generator>RSS for Node</generator><lastBuildDate>Sat, 26 Sep 2026 11:33:06 GMT</lastBuildDate><atom:link href="https://forum.antiqua-blockchain.com/topic/22.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Sep 2026 14:27:31 GMT</pubDate><ttl>60</ttl></channel></rss>