<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Developers Forum for XinFin XDC Network</title>
    <description>The most recent home feed on Developers Forum for XinFin XDC Network.</description>
    <link>https://www.xdc.dev</link>
    <atom:link rel="self" type="application/rss+xml" href="https://www.xdc.dev/feed"/>
    <language>en</language>
    <item>
      <title>Local desktop tool for XDC (transaction signing, keystore + BIP39 support) — feedback welcome</title>
      <dc:creator>David McDougall</dc:creator>
      <pubDate>Fri, 03 Apr 2026 18:52:19 +0000</pubDate>
      <link>https://www.xdc.dev/dites01/local-desktop-tool-for-xdc-transaction-signing-keystore-bip39-support-feedback-welcome-6g7</link>
      <guid>https://www.xdc.dev/dites01/local-desktop-tool-for-xdc-transaction-signing-keystore-bip39-support-feedback-welcome-6g7</guid>
      <description>&lt;p&gt;Hello everyone,&lt;/p&gt;

&lt;p&gt;I’ve built a desktop tool for interacting with the XDC network and wanted to share it here for feedback/testing.&lt;/p&gt;

&lt;p&gt;It focuses on handling everything locally rather than relying on browser wallets or third-party sites.&lt;/p&gt;

&lt;p&gt;Current features:&lt;/p&gt;

&lt;p&gt;Local transaction signing&lt;br&gt;
Keystore (JSON) generation&lt;br&gt;
BIP39 seed phrase recovery with derivation path support&lt;br&gt;
Address scanning + balance checking&lt;br&gt;
No accounts, no telemetry&lt;/p&gt;

&lt;p&gt;The goal is to provide a simple, transparent way to work with XDC directly from a local environment, while reducing reliance on browser wallets.&lt;/p&gt;

&lt;p&gt;It’s open source, and releases include SHA256 + PGP verification so everything can be validated before use.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/DITES01/xdc-local-desktop-access-tool"&gt;https://github.com/DITES01/xdc-local-desktop-access-tool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Any feedback, testing, or suggestions would be appreciated.&lt;/p&gt;

&lt;p&gt;Thanks&lt;br&gt;
David&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cannot access wallet</title>
      <dc:creator>Retired Farmer</dc:creator>
      <pubDate>Wed, 01 Apr 2026 20:18:58 +0000</pubDate>
      <link>https://www.xdc.dev/myxdcusername/cannot-access-wallet-4ek2</link>
      <guid>https://www.xdc.dev/myxdcusername/cannot-access-wallet-4ek2</guid>
      <description>&lt;p&gt;For years I've been using &lt;a href="http://ewallet.xinfin.org"&gt;http://ewallet.xinfin.org&lt;/a&gt; to view wallet. Today it throws JSON errors and I can't access wallet. I have a 12 word mnemonic phrase and password. Any help would be much appreciated. Thanks!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>XDCValidator Contract Upgrade: Modernizing Staking for the Next Era of XDC</title>
      <dc:creator>Arturo</dc:creator>
      <pubDate>Tue, 31 Mar 2026 10:03:27 +0000</pubDate>
      <link>https://www.xdc.dev/xcantera/xdcvalidator-contract-upgrade-modernizing-staking-for-the-next-era-of-xdc-20kp</link>
      <guid>https://www.xdc.dev/xcantera/xdcvalidator-contract-upgrade-modernizing-staking-for-the-next-era-of-xdc-20kp</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: The XDCValidator contract (&lt;code&gt;0x88&lt;/code&gt;) was deployed with Solidity 0.4.21 and has never received a major upgrade. The ecosystem has matured significantly since then. Liquid staking protocols, institutional staking services, and DeFi composability all demand a more flexible validator lifecycle. I'm proposing we use a contract upgrade as an opportunity to modernize the staking/unstaking mechanism, fix accumulated state inefficiencies, and unlock new use cases. Below are three concrete scenarios for community discussion.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Now?
&lt;/h2&gt;

&lt;p&gt;The current XDCValidator contract has served the network well, but several realities make an upgrade worth discussing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compiler vintage.&lt;/strong&gt; Solidity 0.4.21 predates significant compiler improvements (SafeMath built-ins, custom errors, overflow checks, ABI encoder v2). Newer Solidity versions offer better gas efficiency, security defaults, and developer ergonomics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;State hygiene.&lt;/strong&gt; Over the network's lifetime the contract has accumulated storage artifacts (zeroed-out array entries, stale mappings) that waste gas and complicate on-chain queries. A migration is an opportunity for a clean slate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The "30-day" wall that's actually 35-42 days.&lt;/strong&gt; The contract uses &lt;strong&gt;block-number-based delays&lt;/strong&gt; set at genesis: &lt;code&gt;candidateWithdrawDelay = 1,296,000 blocks&lt;/code&gt; for masternode owners resigning, and &lt;code&gt;voterWithdrawDelay = 432,000 blocks&lt;/code&gt; for voters unvoting. These are hardcoded constructor parameters with no governance mechanism to adjust them.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The 2-second block time is a &lt;strong&gt;theoretical target&lt;/strong&gt;, not a guarantee. Real-world data from &lt;a href="https://xdcscan.com/chart/blocktime"&gt;xdcscan&lt;/a&gt; tells a different story:&lt;/p&gt;

&lt;p&gt;| Period | Avg block time | Effective owner withdrawal delay |&lt;br&gt;
   |---|---|---|&lt;br&gt;
   | Theoretical | 2.00s | 30.0 days |&lt;br&gt;
   | Last 30 days (Mar 2026) | 2.33s | &lt;strong&gt;~35 days&lt;/strong&gt; |&lt;br&gt;
   | Last 365 days | 2.33s | &lt;strong&gt;~35 days&lt;/strong&gt; |&lt;br&gt;
   | Last 90 days (includes Jan 2026 spikes) | 2.83s | &lt;strong&gt;~42 days&lt;/strong&gt; |&lt;br&gt;
   | Worst days (Jan 11-12, 2026) | 13.6s | Would imply ~204 days if sustained |&lt;/p&gt;

&lt;p&gt;In practice, masternode owners resigning today should expect to wait &lt;strong&gt;~35 days&lt;/strong&gt; under normal conditions, and potentially longer during network congestion events. The block time has never consistently held at 2.00s. The network regularly averages 2.2-2.8s, and periodic spikes (Dec 26: 8.4s, Dec 28-30: 4-5s, Jan 10-12: 5-14s) push the effective delay even further.&lt;/p&gt;

&lt;p&gt;For liquid staking protocols, this unpredictability on top of an already long delay is the binding constraint. Protocols must either (a) keep a large idle reserve buffer sized for worst-case timing, (b) force users to wait 35+ days, or (c) route through DEX secondary markets at a discount. All three options erode capital efficiency and hurt adoption.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important detail:&lt;/strong&gt; &lt;code&gt;resign()&lt;/code&gt; only unlocks the &lt;strong&gt;owner's own voter stake&lt;/strong&gt;, not the full candidacy cap. Other voters who staked on that candidate must separately call &lt;code&gt;unvote()&lt;/code&gt; (with a ~12-day effective delay at current block times) to retrieve their funds. &lt;code&gt;withdraw()&lt;/code&gt; must be called individually per withdrawal entry (specific &lt;code&gt;blockNumber&lt;/code&gt; + &lt;code&gt;index&lt;/code&gt;), there is no batch withdrawal.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ecosystem competitiveness.&lt;/strong&gt; Other networks have already moved to dynamic or queue-based unstaking:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ethereum&lt;/strong&gt;: epoch-based churn limit (~8 validators/epoch), exit times range from hours to weeks depending on demand&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polkadot&lt;/strong&gt;: RFC-0097 introduces dynamic unbonding from &lt;strong&gt;2 days&lt;/strong&gt; (empty queue) to &lt;strong&gt;28 days&lt;/strong&gt; (high demand)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cosmos&lt;/strong&gt;: 21-day unbonding with per-block queue maturation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avalanche&lt;/strong&gt;: ACP-273 proposes reducing minimum staking from 14 days to &lt;strong&gt;48 hours&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;XDC's flat 30 days with zero flexibility is an outlier.&lt;/p&gt;


&lt;h2&gt;
  
  
  Current Mechanism (Deployed at 0x88)
&lt;/h2&gt;

&lt;p&gt;For context, here's the &lt;strong&gt;live on-chain state&lt;/strong&gt; of the contract, queried via &lt;code&gt;eth_getStorageAt&lt;/code&gt; against mainnet RPC and cross-referenced with the verified source on &lt;a href="https://xdcscan.com/contractdiffchecker?a1=0x0000000000000000000000000000000000000088"&gt;xdcscan&lt;/a&gt;:&lt;/p&gt;
&lt;h3&gt;
  
  
  Contract Parameters (immutable since genesis)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Storage slot&lt;/th&gt;
&lt;th&gt;On-chain value&lt;/th&gt;
&lt;th&gt;Real-world effect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;candidateWithdrawDelay&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x0e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1,296,000 blocks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~35 days&lt;/strong&gt; at current avg 2.33s/block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;voterWithdrawDelay&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x0f&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;432,000 blocks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~12 days&lt;/strong&gt; at current avg 2.33s/block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;minCandidateCap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x0b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10,000,000 XDC&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stake required to propose a masternode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;minVoterCap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x0c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;25,000 XDC&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minimum vote amount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxValidatorNumber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x0d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;18&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Genesis relic, consensus layer overrides to &lt;strong&gt;108&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compiler&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Solidity 0.4.21&lt;/td&gt;
&lt;td&gt;No overflow protection, known compiler bugs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Live Network State (queried March 2026)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contract balance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;2,580,878,498 XDC&lt;/strong&gt; (~$80M)&lt;/td&gt;
&lt;td&gt;All staked funds held here&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;candidateCount&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;253&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Active candidates registered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ownerCount&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;219&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Includes resigned owners who are still counted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;candidates[]&lt;/code&gt; array length&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;529&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Entries ever created (never shrinks)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active (non-zero) entries&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;253&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;47.8% of the array&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ghost (zeroed-out) entries&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;276&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;52.2% waste&lt;/strong&gt;, gas overhead on every enumeration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consensus active set&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;108&lt;/strong&gt; masternodes&lt;/td&gt;
&lt;td&gt;Set by XDPoS v2, not the contract's &lt;code&gt;maxValidatorNumber&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current block&lt;/td&gt;
&lt;td&gt;~100,783,000&lt;/td&gt;
&lt;td&gt;~7.4 years of blocks at avg 2.33s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Withdrawal Flow Today
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Owner calls &lt;code&gt;resign(candidateAddress)&lt;/code&gt; → &lt;code&gt;isCandidate&lt;/code&gt; set to false, owner's own stake scheduled for release at &lt;code&gt;block.number + 1,296,000&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Owner waits &lt;strong&gt;~35 days in practice&lt;/strong&gt; (1.296M blocks at real-world avg of 2.33s/block, can stretch to &lt;strong&gt;40+ days&lt;/strong&gt; during congestion spikes).&lt;/li&gt;
&lt;li&gt;Owner calls &lt;code&gt;withdraw(blockNumber, index)&lt;/code&gt;. Must specify the exact block number and array index. No batch withdrawal.&lt;/li&gt;
&lt;li&gt;Voters on the same candidate must independently call &lt;code&gt;unvote()&lt;/code&gt; → their stake is released after &lt;code&gt;block.number + 432,000&lt;/code&gt; (~12 days actual).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Key Limitations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Block-count based delays&lt;/strong&gt;, not timestamp-based. The effective wait drifts with block time fluctuations. At the recent 90-day average of 2.83s/block, the owner delay stretches to &lt;strong&gt;~42 days&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No parameter governance.&lt;/strong&gt; &lt;code&gt;candidateWithdrawDelay&lt;/code&gt; and &lt;code&gt;voterWithdrawDelay&lt;/code&gt; are constructor-set with no admin function to adjust them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;maxValidatorNumber&lt;/code&gt; is stale.&lt;/strong&gt; Contract says 18, consensus layer uses 108. The parameter serves no active purpose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ownerCount&lt;/code&gt; only increments.&lt;/strong&gt; &lt;code&gt;resign()&lt;/code&gt; does not decrement &lt;code&gt;ownerCount&lt;/code&gt;, meaning it includes all historical owners. This inflates the denominator in any governance calculation that uses it.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  The Three Scenarios
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Scenario A: Three-Tier Exit Queue (Simple &amp;amp; Predictable)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt; The withdrawal lock duration depends on how many masternodes are &lt;strong&gt;currently pending withdrawal&lt;/strong&gt; at the time you resign. Three tiers create a clear incentive structure: exits are fast when the queue is light, moderate at normal load, and fall back to the full 30 days only under heavy exit pressure.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Queue depth (pending withdrawals)&lt;/th&gt;
&lt;th&gt;Lock duration&lt;/th&gt;
&lt;th&gt;Rationale&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;lt; 5 nodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low pressure, network is healthy, fast exits are safe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5 - 10 nodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;14 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moderate pressure, allow exits but with a buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;gt; 10 nodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High pressure, full lock to protect network stability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Queue model&lt;/td&gt;
&lt;td&gt;Real-time count of pending withdrawals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tier boundaries&lt;/td&gt;
&lt;td&gt;5 and 10 (tunable via governance)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lock assignment&lt;/td&gt;
&lt;td&gt;Snapshot at time of &lt;code&gt;resign()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Validator calls &lt;code&gt;resign()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Contract reads &lt;code&gt;pendingWithdrawalCount&lt;/code&gt; (number of validators currently in the withdrawal pipeline).&lt;/li&gt;
&lt;li&gt;If &amp;lt; 5 → assign &lt;strong&gt;3-day&lt;/strong&gt; lock.&lt;/li&gt;
&lt;li&gt;If 5-10 → assign &lt;strong&gt;14-day&lt;/strong&gt; lock.&lt;/li&gt;
&lt;li&gt;If &amp;gt; 10 → assign &lt;strong&gt;30-day&lt;/strong&gt; lock.&lt;/li&gt;
&lt;li&gt;Withdraw after lock expires (unchanged).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why liquid staking loves this:&lt;/strong&gt; Under normal network conditions, the exit queue rarely has more than a handful of nodes pending at once. A liquid staking protocol operating 20 masternodes could rotate nodes with just a 3-day turnaround, small enough to serve redemptions from a thin buffer without sacrificing yield. When the queue gets crowded, the longer delays kick in automatically, giving the protocol a clear signal to pause redemptions or route to secondary markets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trade-offs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple to implement and reason about, just two &lt;code&gt;if&lt;/code&gt; checks.&lt;/li&gt;
&lt;li&gt;Tier boundaries (5 / 10) need tuning based on network size; could be made governance-adjustable.&lt;/li&gt;
&lt;li&gt;Lock is fixed at resign time, so a validator who resigns at queue depth 4 gets 3 days even if 20 more resign in the next block.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Scenario B: Continuous Dynamic Duration Based on Queue Depth (Polkadot-Inspired)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt; Instead of hard tiers, the lock duration scales &lt;strong&gt;smoothly&lt;/strong&gt; between a floor and ceiling based on the number of masternodes currently pending withdrawal. Below 5 nodes the lock approaches its minimum; above 10 it ramps toward the maximum; and it caps at 30 days.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Minimum lock (0 nodes pending)&lt;/td&gt;
&lt;td&gt;2 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maximum lock (≥ 10 nodes pending)&lt;/td&gt;
&lt;td&gt;30 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast zone&lt;/td&gt;
&lt;td&gt;&amp;lt; 5 nodes pending → 2-7 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transition zone&lt;/td&gt;
&lt;td&gt;5-10 nodes pending → 7-30 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaling curve&lt;/td&gt;
&lt;td&gt;Linear between breakpoints (or sigmoid for smoother UX)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Formula:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if pendingNodes &amp;lt; 5:
    lockDays = 2 + (pendingNodes * 1)            // 2d → 6d
else if pendingNodes &amp;lt;= 10:
    lockDays = 7 + (pendingNodes - 5) * 4.6      // 7d → 30d
else:
    lockDays = 30                                  // hard cap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Validator calls &lt;code&gt;resign()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Contract reads &lt;code&gt;pendingWithdrawalCount&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Lock duration is computed from the formula above.&lt;/li&gt;
&lt;li&gt;Assign &lt;code&gt;lockDuration&lt;/code&gt; to this withdrawal entry.&lt;/li&gt;
&lt;li&gt;Withdraw after lock expires (unchanged).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Example at current network size (~108 active masternodes):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nodes currently pending withdrawal&lt;/th&gt;
&lt;th&gt;Lock duration&lt;/th&gt;
&lt;th&gt;Zone&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;6 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Transition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Transition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cap&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why liquid staking loves this:&lt;/strong&gt; In the common case (1-3 nodes cycling out), the lock is &lt;strong&gt;2-5 days&lt;/strong&gt;. A liquid staking protocol can keep a minimal reserve buffer and serve redemptions almost in real-time. The smooth curve also means there's no "cliff" at a tier boundary. Protocols can forecast lock times with a simple view function call before deciding whether to initiate a withdrawal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trade-offs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slightly more complex than tiered (requires on-chain math), but still a single storage read + arithmetic.&lt;/li&gt;
&lt;li&gt;Lock duration isn't known until the moment of resignation (though a &lt;code&gt;previewLockDuration()&lt;/code&gt; view function makes this transparent).&lt;/li&gt;
&lt;li&gt;Elegant security guarantee: if many nodes rush to exit, the lock automatically stretches to 30 days, protecting the network without any governance intervention.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Scenario C: Adaptive Churn Limit with FIFO Queue (Ethereum-Inspired)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt; Validators enter a FIFO exit queue on &lt;code&gt;resign()&lt;/code&gt;. The network processes exits at each epoch boundary, but the &lt;strong&gt;processing speed adapts&lt;/strong&gt; based on queue depth: fast when the queue is short, throttled when it's deep.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Queue depth&lt;/th&gt;
&lt;th&gt;Exits processed per epoch&lt;/th&gt;
&lt;th&gt;Post-queue lock&lt;/th&gt;
&lt;th&gt;Effective behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;lt; 5 nodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;5 per epoch&lt;/strong&gt; (drain immediately)&lt;/td&gt;
&lt;td&gt;48 hours&lt;/td&gt;
&lt;td&gt;Near-instant: queue clears in one epoch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5 - 10 nodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2 per epoch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;48 hours&lt;/td&gt;
&lt;td&gt;Moderate: queue drains over several epochs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;gt; 10 nodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1 per epoch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7 days&lt;/td&gt;
&lt;td&gt;Slow: deliberate pacing + extended lock&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Queue model&lt;/td&gt;
&lt;td&gt;FIFO, processed at epoch boundary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Epoch duration&lt;/td&gt;
&lt;td&gt;900 blocks (~30 min at 2s blocks)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Churn rate adapts every&lt;/td&gt;
&lt;td&gt;Epoch (re-evaluated based on current queue depth)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Validator calls &lt;code&gt;resign()&lt;/code&gt; → enters the exit queue with a sequence number. Post-lock duration is assigned at this point based on current queue depth.&lt;/li&gt;
&lt;li&gt;At each epoch boundary, the contract reads the current queue depth and processes exits accordingly.&lt;/li&gt;
&lt;li&gt;If queue &amp;lt; 5 → process up to 5 exits this epoch. Post-lock for new resignations: &lt;strong&gt;48 hours&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If queue 5-10 → process up to 2 exits this epoch. Post-lock for new resignations: &lt;strong&gt;48 hours&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If queue &amp;gt; 10 → process only 1 exit this epoch. Post-lock for new resignations: &lt;strong&gt;7 days&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Withdraw after post-lock expires.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note: the churn rate adapts as the queue drains. A queue of 25 doesn't process at 1/epoch the whole time. Once it drops below 10, it speeds up to 2/epoch, then 5/epoch below 5.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example queue scenarios (traced through adaptive processing):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Queue depth at resign&lt;/th&gt;
&lt;th&gt;Post-lock (fixed at resign)&lt;/th&gt;
&lt;th&gt;Queue drain breakdown&lt;/th&gt;
&lt;th&gt;Total estimated time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0 (you're the only one)&lt;/td&gt;
&lt;td&gt;48h&lt;/td&gt;
&lt;td&gt;1 epoch (~30min)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~2 days&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 (light traffic)&lt;/td&gt;
&lt;td&gt;48h&lt;/td&gt;
&lt;td&gt;1 epoch, all 4 clear at 5/epoch&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~2 days&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7 (moderate)&lt;/td&gt;
&lt;td&gt;48h&lt;/td&gt;
&lt;td&gt;3 epochs at 2/epoch, then 1 at 5/epoch = 4 epochs (~2h)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~2 days&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12 (heavy)&lt;/td&gt;
&lt;td&gt;7 days&lt;/td&gt;
&lt;td&gt;3 at 1/epoch → 3 at 2/epoch → 1 at 5/epoch = 7 epochs (~3.5h)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~7 days&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25 (extreme)&lt;/td&gt;
&lt;td&gt;7 days&lt;/td&gt;
&lt;td&gt;16 at 1/epoch → 3 at 2/epoch → 1 at 5/epoch = 20 epochs (~10h)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~7.5 days&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why liquid staking loves this:&lt;/strong&gt; Under normal conditions (1-4 nodes exiting), the entire queue flushes in a single epoch and exit time is just &lt;strong&gt;2 days&lt;/strong&gt;. The protocol can predict its exact queue position and calculate withdrawal timing deterministically. When exit pressure rises, the system automatically shifts to a more conservative pace, giving protocols a clear signal to adjust their redemption flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trade-offs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Most complex to implement (requires epoch hooks or a keeper-based trigger + adaptive rate logic).&lt;/li&gt;
&lt;li&gt;The dual lever (churn rate + post-lock duration) gives fine-grained control but adds cognitive overhead.&lt;/li&gt;
&lt;li&gt;When the queue is deep (&amp;gt; 10), exit times are still dramatically better than the current 30 days, but the 7-day post-lock provides a meaningful security buffer.&lt;/li&gt;
&lt;li&gt;Churn rate boundaries (5 / 10) should be governance-adjustable as the network grows.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Additional Upgrade Opportunities
&lt;/h2&gt;

&lt;p&gt;Since we'd be touching the contract anyway, it would be worth bundling other improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compiler upgrade&lt;/strong&gt; to Solidity ≥0.8.x (built-in overflow protection, custom errors, gas optimizations)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Array compaction&lt;/strong&gt; for the candidates list (eliminate zeroed entries, reduce gas for enumeration)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event coverage&lt;/strong&gt; for all state-changing operations (currently some paths emit no events)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ownerCount bookkeeping&lt;/strong&gt; to accurately reflect the active validator set&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Withdrawal batching.&lt;/strong&gt; Currently &lt;code&gt;withdraw(blockNumber, index)&lt;/code&gt; requires one call per entry; a &lt;code&gt;withdrawAll()&lt;/code&gt; that claims all mature entries in a single transaction would drastically improve UX&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View functions&lt;/strong&gt; for queue position, estimated lock duration, pending withdrawal count, and total exiting stake&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timestamp-based delays&lt;/strong&gt; instead of block-count, decoupling the lock period from block time fluctuations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KYC flow improvements&lt;/strong&gt; with proper access control and state management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SafeMath / overflow protection&lt;/strong&gt; for all arithmetic (native with 0.8.x)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Comparison Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Current XDC&lt;/th&gt;
&lt;th&gt;Scenario A (3-Tier)&lt;/th&gt;
&lt;th&gt;Scenario B (Dynamic Curve)&lt;/th&gt;
&lt;th&gt;Scenario C (Adaptive Churn)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Min unlock (&amp;lt; 5 pending)&lt;/td&gt;
&lt;td&gt;~35d actual (1.296M blocks)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~2 days&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Moderate unlock (5-10 pending)&lt;/td&gt;
&lt;td&gt;~35d actual (1.296M blocks)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;14 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7-30 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~2 days&lt;/strong&gt; (queue wait + 48h)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max unlock (&amp;gt; 10 pending)&lt;/td&gt;
&lt;td&gt;~35d actual (1.296M blocks)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~7-7.5 days&lt;/strong&gt; (queue wait + 7d)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delay type&lt;/td&gt;
&lt;td&gt;Block-count (drifts with block time)&lt;/td&gt;
&lt;td&gt;Timestamp-based&lt;/td&gt;
&lt;td&gt;Timestamp-based&lt;/td&gt;
&lt;td&gt;Epoch + timestamp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voter delay&lt;/td&gt;
&lt;td&gt;~12d actual (432K blocks)&lt;/td&gt;
&lt;td&gt;Unified with owner&lt;/td&gt;
&lt;td&gt;Unified with owner&lt;/td&gt;
&lt;td&gt;Unified with owner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch withdrawal&lt;/td&gt;
&lt;td&gt;No (per-entry)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Predictability&lt;/td&gt;
&lt;td&gt;Fixed&lt;/td&gt;
&lt;td&gt;Very high (3 tiers)&lt;/td&gt;
&lt;td&gt;Medium (continuous)&lt;/td&gt;
&lt;td&gt;High (position-based)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Liquid staking friendly&lt;/td&gt;
&lt;td&gt;Poor&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Very good&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementation complexity&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security under mass exit&lt;/td&gt;
&lt;td&gt;Same 30d always&lt;/td&gt;
&lt;td&gt;Full 30d fallback&lt;/td&gt;
&lt;td&gt;Scales to 30d automatically&lt;/td&gt;
&lt;td&gt;Throttled churn + 7d post-lock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consensus layer changes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Possibly (epoch hooks)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What I'd Like to Hear From the Community
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Which scenario resonates most&lt;/strong&gt; with how you think XDC should evolve?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Are there hybrid approaches?&lt;/strong&gt; For example, Scenario B (dynamic duration) + Scenario C (churn limit) combined.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What's the right security floor?&lt;/strong&gt; Is 48 hours too aggressive for the minimum lock? Should it be 7 days?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade mechanism.&lt;/strong&gt; Should this be a full contract migration with state transfer, or an upgradeable proxy pattern going forward?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backwards compatibility.&lt;/strong&gt; How do we handle existing stakers and pending withdrawals during migration?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The 30-day fixed lock was a reasonable default at launch, but the XDC ecosystem has outgrown it. Liquid staking, institutional staking services, and DeFi protocols all need a more dynamic validator lifecycle. Let's design it together.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;References:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/XinFinOrg/XDPoSChain/blob/master/contracts/validator/contract/XDCValidator.sol"&gt;XDCValidator.sol (current)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.xdc.dev/mrblockchain22/unstaking-withdrawal-process-xdc-20-25"&gt;XDC 2.0 Unstaking &amp;amp; Withdrawal Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://eips.ethereum.org/EIPS/eip-7922"&gt;Ethereum EIP-7922: Dynamic exit queue rate limit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://polkadot-fellows.github.io/RFCs/approved/0097-unbonding_queue.html"&gt;Polkadot RFC-0097: Unbonding Queue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.avax.network/docs/acps/273-reduce-minimum-staking-duration"&gt;Avalanche ACP-273: Reduce Minimum Staking Duration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Nexus OrderBook DEX Apothem Testnet Launch</title>
      <dc:creator>NEXUS</dc:creator>
      <pubDate>Mon, 30 Mar 2026 22:09:44 +0000</pubDate>
      <link>https://www.xdc.dev/nexus/nexus-orderbook-dex-apothem-testnet-launch-2ob9</link>
      <guid>https://www.xdc.dev/nexus/nexus-orderbook-dex-apothem-testnet-launch-2ob9</guid>
      <description>&lt;p&gt;🚀 We're excited to launch the first fully on-chain orderbook DEX built on XDC Apothem Test Network — and we need your help to test it!&lt;/p&gt;

&lt;p&gt;What makes Nexus Orderbook DEX different?&lt;br&gt;
Most "DEXs" use AMM liquidity pools (like Uniswap). Nexus runs a real limit orderbook entirely on-chain — every order, match, and trade is executed by smart contracts, with no off-chain components other than a data indexer for chart/candlestick data. This is only possible on XDC thanks to its 500M gas block limit, speed, and efficiency — orders of magnitude beyond typical Ethereum limits — which makes complex on-chain matching economically viable.&lt;/p&gt;

&lt;p&gt;What you can do:&lt;br&gt;
-Place limit &amp;amp; market orders&lt;br&gt;
-Create your own trading pairs&lt;br&gt;
-Earn maker rebates &amp;amp; pay tight taker fees&lt;br&gt;
-View real-time charts, depth, and trade history&lt;br&gt;
-We need testers!&lt;br&gt;
-We're currently live on XDC Apothem Testnet (free test tokens via the Faucet tab). Your feedback helps us find bugs and fine-tune the experience before we launch on XDC Mainnet at some point in the future.&lt;/p&gt;

&lt;p&gt;👉 Try it now at this url: &lt;a href="https://trade.thenexusportal.io/"&gt;https://trade.thenexusportal.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Connect your wallet, grab some TXDC and test tokens from the faucet steps, and start trading. Drop any bugs or feedback, every test helps get us closer to a mainnet launch.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Host an XDC Masternode Using Fireblocks via WalletConnect (Step-by-Step Guide)</title>
      <dc:creator>XinFin XDC Network</dc:creator>
      <pubDate>Tue, 24 Mar 2026 09:13:40 +0000</pubDate>
      <link>https://www.xdc.dev/xinfin_xdc_network/how-to-host-an-xdc-masternode-using-fireblocks-via-walletconnect-step-by-step-guide-4gpf</link>
      <guid>https://www.xdc.dev/xinfin_xdc_network/how-to-host-an-xdc-masternode-using-fireblocks-via-walletconnect-step-by-step-guide-4gpf</guid>
      <description>&lt;p&gt;Running a Masternode on the XDC Network requires staking 10,000,000 XDC, completing KYC, and securely managing validator funds.&lt;/p&gt;

&lt;p&gt;For institutions and enterprises, using &lt;strong&gt;Fireblocks&lt;/strong&gt; via &lt;strong&gt;WalletConnect v2&lt;/strong&gt; provides institutional-grade custody, governance automation, and transaction policy control.&lt;/p&gt;

&lt;p&gt;This guide walks through the complete process using your referenced application flow and screenshots.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use Fireblocks for XDC Masternode Hosting?
&lt;/h2&gt;

&lt;p&gt;Fireblocks is an institutional digital asset custody and operations platform used by exchanges, fintechs, funds, and enterprises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-Layer Security&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;MPC-CMP Wallet Technology&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private keys are split into encrypted shares.&lt;/li&gt;
&lt;li&gt;No single entity ever holds the full private key.&lt;/li&gt;
&lt;li&gt;Eliminates single-point key compromise risk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Secure Hardware (Intel SGX)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Signing operations occur inside secure enclaves.&lt;/li&gt;
&lt;li&gt;Protects against malware and insider threats.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;Policy Engine – Automated Governance Controls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Policy Engine automates governance policies for transaction rules and admin approvals.&lt;/strong&gt;&lt;br&gt;
It allows you to configure rules that dictate how transactions are handled and approved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can define rules to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatically approve transactions&lt;/li&gt;
&lt;li&gt;Block transactions&lt;/li&gt;
&lt;li&gt;Require additional signers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Rules can be applied using filters such as:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transaction amount thresholds&lt;/li&gt;
&lt;li&gt;Smart contract interaction&lt;/li&gt;
&lt;li&gt;Specific destination addresses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Policy Engine rules can be configured for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal wallets&lt;/li&gt;
&lt;li&gt;Network connections&lt;/li&gt;
&lt;li&gt;Exchanges&lt;/li&gt;
&lt;li&gt;Fiat providers&lt;/li&gt;
&lt;li&gt;Whitelisted addresses&lt;/li&gt;
&lt;li&gt;Smart contract wallets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This is extremely valuable for Masternode staking because:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large 10M XDC deposits can require multi-admin approval&lt;/li&gt;
&lt;li&gt;Only approved validator contracts can be interacted with&lt;/li&gt;
&lt;li&gt;Unstaking can require additional governance checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4️⃣ &lt;strong&gt;Admin Quorum &amp;amp; MFA&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-admin approval workflows&lt;/li&gt;
&lt;li&gt;Role-based access control&lt;/li&gt;
&lt;li&gt;Multi-factor authentication enforcement&lt;/li&gt;
&lt;li&gt;This makes Fireblocks ideal for institutional masternode operators.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prerequisites Before Starting
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before beginning:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fireblocks workspace with Web3 Wallet enabled&lt;/li&gt;
&lt;li&gt;Minimum 10,000,000 XDC in your Fireblocks vault&lt;/li&gt;
&lt;li&gt;Masternode server deployed and coinbase address generated&lt;/li&gt;
&lt;li&gt;KYC document in PDF format&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Masternode Application URLs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mainnet: &lt;a href="https://mn.xinfin.network"&gt;https://mn.xinfin.network&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Testnet: &lt;a href="https://mn.apothem.network"&gt;https://mn.apothem.network&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step-by-Step: Host XDC Masternode via Fireblocks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  STEP 1: Open Masternode Application &amp;amp; Select WalletConnect v2
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Visit the Masternode App.&lt;/li&gt;
&lt;li&gt;Click Login (top right corner).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/Mo5Lw94OHNGYQ83_y0cEBBwAy-aANWAefDFTKV9Waec/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L2J1b3YwaDgwYWk2/bzJuMThlaWdiLmpw/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/Mo5Lw94OHNGYQ83_y0cEBBwAy-aANWAefDFTKV9Waec/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L2J1b3YwaDgwYWk2/bzJuMThlaWdiLmpw/Zw" alt="Image description" width="880" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On the login page:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under Network Provider, select: WalletConnect v2&lt;/li&gt;
&lt;li&gt;Click Save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This initiates a WalletConnect session.&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 2: Scan QR Code with Fireblocks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;After selecting WalletConnect:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A QR code window appears labeled Fireblocks&lt;/li&gt;
&lt;li&gt;You will see:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Mobile / WebApp toggle&lt;/li&gt;
&lt;li&gt;QR Code&lt;/li&gt;
&lt;li&gt;“Scan this QR Code with your phone”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/tRWva00L5z7rxVNz2b1JVuOfCjO5cK3M_r-k-Tzzlus/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/Lzhqa2FwanFsaThx/cjgyeXhleGtzLnBu/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/tRWva00L5z7rxVNz2b1JVuOfCjO5cK3M_r-k-Tzzlus/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/Lzhqa2FwanFsaThx/cjgyeXhleGtzLnBu/Zw" alt="Image description" width="743" height="796"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Fireblocks Web3 Wallet (Mobile App or Web UI)&lt;/li&gt;
&lt;li&gt;Scan the QR code&lt;/li&gt;
&lt;li&gt;Approve session request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This connects your Fireblocks vault to the XDC Masternode dApp.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/d7CmrbkeDSjjIzTvzUlfMN_LXC__w_3kXC2DNrKa4cs/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L3NoNTE2M2Z6NGF3/OG9nd3Z4dnp2Lmpw/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/d7CmrbkeDSjjIzTvzUlfMN_LXC__w_3kXC2DNrKa4cs/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L3NoNTE2M2Z6NGF3/OG9nd3Z4dnp2Lmpw/Zw" alt="Image description" width="759" height="690"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 3: Connect Vault to dApp
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;After scanning:&lt;/strong&gt;&lt;br&gt;
A popup appears: &lt;strong&gt;Connect vault to dApp&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/5z7556K6fbdZv3s968vqYxKbwCprkBxNB1YEsqbHe2s/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzZlNHZoamtoYW1u/M2dqY3B1ZDdnLnBu/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/5z7556K6fbdZv3s968vqYxKbwCprkBxNB1YEsqbHe2s/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzZlNHZoamtoYW1u/M2dqY3B1ZDdnLnBu/Zw" alt="Image description" width="743" height="796"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You will see:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vault Account dropdown&lt;/li&gt;
&lt;li&gt;Blockchain selection&lt;/li&gt;
&lt;li&gt;Default fee rate (Medium / Fast)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the correct Vault account containing 10M+ XDC&lt;/li&gt;
&lt;li&gt;Confirm Blockchain (XDC Network)&lt;/li&gt;
&lt;li&gt;Click Connect Vault&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now your Fireblocks wallet is connected to the Masternode app securely via WalletConnect v2.&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 4: Click “Become a Candidate” &amp;amp; Stake 10,000,000 XDC
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;After successful login:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Become a candidate (top right)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will now see the Masternode staking interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inside the “Become a MasterNode” panel, You will see:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimum requirement: 10,000,000 XDC&lt;/li&gt;
&lt;li&gt;Deposit will be locked&lt;/li&gt;
&lt;li&gt;Stake field (pre-filled 10,000,000)&lt;/li&gt;
&lt;li&gt;TX fee displayed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ &lt;strong&gt;The deposit will be locked as part of validator staking.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/P-B4TbQPJWLX4TtEnDqMxKdKlgSHk80JR1B7xC7_x1w/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L2kyc2p0MmprbHBh/Yjl4Z2pxd2w1LnBu/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/P-B4TbQPJWLX4TtEnDqMxKdKlgSHk80JR1B7xC7_x1w/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L2kyc2p0MmprbHBh/Yjl4Z2pxd2w1LnBu/Zw" alt="Image description" width="880" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, In the highlighted section, You must enter:&lt;br&gt;
&lt;strong&gt;Coinbase Address&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is your &lt;strong&gt;node’s validator address&lt;/strong&gt;, generated when setting up your masternode server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example format:&lt;br&gt;
xdc……………………………………b&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Important:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is NOT your Fireblocks wallet address&lt;/li&gt;
&lt;li&gt;It is your masternode server’s coinbase address&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once Stake amount confirmed &amp;amp; Coinbase address entered, Click on the &lt;strong&gt;Apply button&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 5: Approve Transaction in Fireblocks
&lt;/h3&gt;

&lt;p&gt;Once Apply is clicked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fireblocks will prompt a transaction approval&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/FIeJlDljzx1-eTRof7aUzaaX8I3M9rgqljEC3Z-gKCY/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzV4ZXZqeWt6cnc5/bnQ3N3N3bzF4LnBu/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/FIeJlDljzx1-eTRof7aUzaaX8I3M9rgqljEC3Z-gKCY/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzV4ZXZqeWt6cnc5/bnQ3N3N3bzF4LnBu/Zw" alt="Image description" width="743" height="796"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/65WSaMWbqGkvxfuz58DWEANlH98FpRSkdfnM5npPgr4/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzhuYzNiM3J3cnd0/aDFsaW9tc3JsLmpw/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/65WSaMWbqGkvxfuz58DWEANlH98FpRSkdfnM5npPgr4/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzhuYzNiM3J3cnd0/aDFsaW9tc3JsLmpw/Zw" alt="Image description" width="743" height="796"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/LpSg5LeDg_qmiPZAcNJn_96Qbf-w8X2P1PPSjSLhvjo/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L2N1ZGY0bzZvdmJs/NmtoaWJic3c0LnBu/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/LpSg5LeDg_qmiPZAcNJn_96Qbf-w8X2P1PPSjSLhvjo/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L2N1ZGY0bzZvdmJs/NmtoaWJic3c0LnBu/Zw" alt="Image description" width="743" height="796"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depending on Policy Engine rules:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It may auto approve&lt;/li&gt;
&lt;li&gt;It may require multiple signers&lt;/li&gt;
&lt;li&gt;It may require admin quorum&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Approve transaction securely.&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 6: Transaction Confirmation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;After approval:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transaction is broadcast to XDC Network&lt;/li&gt;
&lt;li&gt;You will receive a transaction hash&lt;/li&gt;
&lt;li&gt;Stake becomes locked&lt;/li&gt;
&lt;li&gt;Node enters validator candidate pool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can verify transaction on:&lt;br&gt;
&lt;a href="https://xdcscan.com"&gt;https://xdcscan.com&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What Happens Next?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;After staking:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your masternode enters validator selection cycle&lt;/li&gt;
&lt;li&gt;Once approved in an epoch&lt;/li&gt;
&lt;li&gt;It becomes active validator&lt;/li&gt;
&lt;li&gt;Begins earning rewards&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Fireblocks is Ideal for Institutional Masternodes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Using Fireblocks provides:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Institutional custody of 10M+ XDC stake&lt;/li&gt;
&lt;li&gt;Governance enforcement through Policy Engine&lt;/li&gt;
&lt;li&gt;Multi-signature style MPC security&lt;/li&gt;
&lt;li&gt;Hardware-enclave signing&lt;/li&gt;
&lt;li&gt;Vault-level segregation of validator funds&lt;/li&gt;
&lt;li&gt;Controlled unstaking workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces operational and governance risk significantly compared to browser wallets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Useful Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mn.xinfin.network"&gt;XDC Masternode App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://xinfin.org/setup-masternode?utm_source=chatgpt.com"&gt;XDC Masternode Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.xdc.network/xdcchain/developers/node_operators/masternode/"&gt;XDC Masternode Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://xdcscan.com/"&gt;XDCscan Explorer&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://xdc.dev"&gt;XDC Forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;p&gt;This article is intended strictly for educational and informational purposes only. It does not constitute financial, investment, or legal advice.&lt;/p&gt;

&lt;p&gt;Running a masternode on the &lt;a href="https://xinfin.org/"&gt;XDC Network&lt;/a&gt;, including staking requirements and infrastructure setup, involves technical, operational, and financial considerations. Readers are encouraged to conduct their own research (DYOR) and consult with qualified professionals before making any decisions related to digital assets or blockchain participation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The mention of platforms such as Fireblocks or technologies like WalletConnect is for informational purposes only and does not imply endorsement.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By following this guide, you acknowledge that any actions taken are at your own risk.&lt;/p&gt;

</description>
      <category>xdc</category>
      <category>masternode</category>
      <category>walletconnect</category>
      <category>xdcstaking</category>
    </item>
    <item>
      <title>Can't Access XDC Wallet</title>
      <dc:creator>Ram</dc:creator>
      <pubDate>Sat, 14 Mar 2026 04:33:36 +0000</pubDate>
      <link>https://www.xdc.dev/ram4u/cant-access-xdc-wallet-2if4</link>
      <guid>https://www.xdc.dev/ram4u/cant-access-xdc-wallet-2if4</guid>
      <description>&lt;p&gt;I've been trying to access my XDC wallet through myetherwallet but I noticed that my address is not listed. It use to be the first one. It's the same when trying to open up in XDC Wallet Connect. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Master Node Structure</title>
      <dc:creator>Kenneth Cowan</dc:creator>
      <pubDate>Thu, 12 Mar 2026 16:17:07 +0000</pubDate>
      <link>https://www.xdc.dev/kenneth_cowan_51379b3cfb2/master-node-structure-4ao7</link>
      <guid>https://www.xdc.dev/kenneth_cowan_51379b3cfb2/master-node-structure-4ao7</guid>
      <description>&lt;p&gt;Hi current plans support the change of our node structure to a Validator, Protector and Observer with yields of 10%, 8% and 4% respectively.  There will be 108 total Validators, 216 total Protectors and 1000 Observers.  At a 4% yield the observer is a fairly unappealing prospect.  Would the community consider potentially swapping a large proportion of the Observers for Protectors.  Say 450 Validators and 100 Observers instead of 1000 Observers.  The mint demand remains constant but the yield of the Protector is far more appealing to the institutional and retail investor and will help to encourage reputable and regulated institutions to support our infrastructure&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Informative] February Insights: Key Highlights from Plugin’s Journey</title>
      <dc:creator>Manuni Mistry</dc:creator>
      <pubDate>Wed, 04 Mar 2026 16:31:37 +0000</pubDate>
      <link>https://www.xdc.dev/manunimistry/informative-february-insights-key-highlights-from-plugins-journey-2n00</link>
      <guid>https://www.xdc.dev/manunimistry/informative-february-insights-key-highlights-from-plugins-journey-2n00</guid>
      <description>&lt;p&gt;As we move further into 2026, Plugin continues to build steadily across its infrastructure, ecosystem, and developer tooling. From live product launches to meaningful backend milestones, this month brings exciting progress worth sharing.&lt;/p&gt;

&lt;p&gt;📰 &lt;strong&gt;News&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔔 &lt;strong&gt;Plugin RPC — Now Live on XDC Mainnet &amp;amp; Apothem Testnet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Plugin RPC is officially live on both XDC Mainnet and Apothem Testnet. The service delivers fast, low-latency transactions with a smooth experience for users. To celebrate the launch, a limited-time freemium tier is available. &lt;/p&gt;

&lt;p&gt;Work on the WSS (WebSocket) version is actively underway, with pipeline development in progress.&lt;/p&gt;

&lt;p&gt;Explore Now: &lt;a href="https://rpc.plugin.global/home"&gt;rpc.plugin.global&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🏠 &lt;strong&gt;EquitEdge&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Significant backend progress has been made on the FMS (Facility Management System). The following core modules are now fully operational:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication Module&lt;/strong&gt; — core user access and account management flows.&lt;br&gt;
&lt;strong&gt;FMS KYC Workflow&lt;/strong&gt; — KYC submission flow for FMS users, with approval handled via the EquitEdge Platform.&lt;br&gt;
&lt;strong&gt;Membership Module&lt;/strong&gt; — FMS users can now purchase membership plans directly through the system.&lt;/p&gt;

&lt;p&gt;The foundational user onboarding, verification, and access control system is now fully operational on the backend, setting the stage for broader rollout. &lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Plugin Core Development Update&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upcoming focus areas include Off-chain Reporting (OCR) designed to aggregate data off-chain and reduce gas fees while preserving decentralization as well as CCIP integration to further strengthen understanding of the Plugin core. Technical discussions with key contributors are planned to finalize the OCR design and implementation approach.&lt;/p&gt;

&lt;p&gt;🍽️ &lt;strong&gt;Food for Thought&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Decentralization is often discussed in terms of ownership and governance, but its true backbone is the network of operators who keep systems running. Node operators are the unsung architects of distributed infrastructure contributing compute, maintaining uptime, and ensuring that no single point of failure can compromise the whole. As blockchain networks scale, the relationship between protocol developers and node operators becomes increasingly important. Operators provide the geographic distribution and redundancy that makes a network truly resilient. The more thoughtfully this relationship is built, the stronger and more sustainable the ecosystem becomes.&lt;/p&gt;

&lt;p&gt;🧠 &lt;strong&gt;Plugin Quiz&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What does "low-latency" mean in the context of blockchain?&lt;/p&gt;

&lt;p&gt;👉 Reply with your answer in the comments!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hardened XDC Full Node 2026</title>
      <dc:creator>s4njk4n</dc:creator>
      <pubDate>Sat, 28 Feb 2026 07:22:51 +0000</pubDate>
      <link>https://www.xdc.dev/s4njk4n/hardened-xdc-full-node-2026-notes-to-self-3g2d</link>
      <guid>https://www.xdc.dev/s4njk4n/hardened-xdc-full-node-2026-notes-to-self-3g2d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is just a note to myself. Posting here in case the thought bubbles and code snippets are useful for anyone else. I removed the article about the updated bootstrap script as I believe the version I created may no longer be current and don't want anyone to get stuck. If anyone really wants it, its still in the XDC Library on &lt;a href="https://xdcoutpost.xyz/"&gt;https://xdcoutpost.xyz/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Lay and Secure the Server Foundations
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Update the OS
&lt;/h4&gt;

&lt;p&gt;To Install a New Node we first update and secure the OS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
sudo apt upgrade
sudo apt autoremove
sudo apt clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  Prerequisites
&lt;/h4&gt;

&lt;p&gt;Then to install prerequisites, there is an appendix at the bottom of this article but if thinking of using anything in there, please read the appendix first as I have not rechecked it since having slow peer pickup on another node installed using the instructions in the Appendix. For the moment, if unsure, they just check the XinFin Github repo for official prerequisites installation.&lt;/p&gt;




&lt;h4&gt;
  
  
  Create the Client's User
&lt;/h4&gt;

&lt;p&gt;After updating the OS, we'll add a specific user to install the node under.&lt;/p&gt;

&lt;p&gt;For the specific user's username, use up to 32 characters. Mix of numbers and lower case letters. First character must be a lower case letter.&lt;/p&gt;

&lt;p&gt;For the specific users password, use up to 40 characters. Mix of numbers, upper and lower case letters, and symbols. Be careful with using $ as a character in the password in the useradd command below as it can be interpreted as a string variable even if its in the middle of the password.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo groupadd my_new_user
sudo useradd -p $(openssl passwd -6 my_new_password) my_new_user -m -s /bin/bash -g my_new_user  -G sudo

sudo reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  SSH-Key Authentication
&lt;/h4&gt;

&lt;p&gt;The benefit of using SSH key authentication as a sole means of access is that the VAST majority of port-scan to brute-force attempts are no longer even possible as the bots just move on if there's not even an ability to enter a password.&lt;/p&gt;

&lt;p&gt;If you've not already done so and plan on using SSH key authentication to login to the server, remember to do these from your local terminal you'll be connecting to the VPS from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh-keygen
AND THEN
ssh-copy-id -p&amp;lt;yourcustomSSHport&amp;gt; login@serverip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  Lock Down SSH Access
&lt;/h4&gt;

&lt;p&gt;Then secure the ssh access to the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll want to uncomment the line "#Port 22", and change the port number to something custom.&lt;br&gt;
Also set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PermitRootLogin no
PasswordAuthentication yes
PubkeyAuthentication yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The "root" user is a weakness on the server as it is an easy username for hackers to "guess". If they have the username, they only need to guess the password. However if we take away the easy "root" username as an option, we create another whole level of pain for hackers. That's why the "PermitRootLogin no" is set.&lt;/p&gt;

&lt;p&gt;You also need to determine whether password logins are even required for any user (or if you'll just manage with SSH key authentication). If using SSH key authentication only (MUCH MUCH MUCH safer, then set "PasswordAuthentication no" instead and just use the SSH keys to connect. If your local machine is ever damaged or you lose the keys, you can just access your VPS provider's hypervisor console in their dashboard and login to your node via that to either add a new key directly/manually, or temporarily open up SSH to copy a new key in, before locking it down to ssh key authentication only again.&lt;/p&gt;

&lt;p&gt;Then restart the SSH service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo service ssh restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If SSH changes are failing, you can check if your VPS provider has additional override setings and where they are. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo grep -rE '^\s*PermitRootLogin' /etc/ssh/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then modify what you need to.&lt;/p&gt;




&lt;h4&gt;
  
  
  Firewall
&lt;/h4&gt;

&lt;p&gt;Then we establish the firewall:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 30303
sudo ufw allow &amp;lt;yourSSHport&amp;gt;
sudo ufw enable
sudo reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure you allow your SSH port before you reboot, otherwise you won't be able to connect to your VPS by SSH after rebooting. You may still be able to get in through a virtual terminal in your VPS provider's dashboard in that case and can then hopefully allow the port that way so you can get back in via SSH.&lt;/p&gt;




&lt;h4&gt;
  
  
  Fail2Ban Intrusion Protection System
&lt;/h4&gt;

&lt;p&gt;Then to protect against repetitive automated brute-force intrusion attempts we set up fail2ban:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install fail2ban
sudo cp -p /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then put these lines in the sshd section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;enabled = true
filter = sshd
port = ssh
banaction = iptables-multiport
findtime = 86400
# 86400 seconds = 1 day
bantime = -1
# -1 = ban forever
maxretry = 3
# 3 attempts in 1 day = ban
logpath = %(sshd_log)s
backend = %(sshd_backend)s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then complete the fail2ban process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check who is banned:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo fail2ban-client status sshd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To unban an IP address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo fail2ban-client set sshd unban &amp;lt;ip address&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  Download the Chain Tarball
&lt;/h4&gt;

&lt;p&gt;Now we download the chain tarball to avoid the slow sync from genesis. Make sure you're SSH'd in as the specific user, not root. We'll use a "screen" session to avoid broken pipes and will use "aria2c" to optimise a multiconnection download and ensure we can "resume" the download if it is broken for whatever reason.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install screen
sudo apt install aria2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run a screen session with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;screen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To detach a screen session but keep it running in the background, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ctrl+A
and then press
D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To see a list of available screen sessions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;screen -ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To reattach a screen session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;screen -r &amp;lt;sessionname&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To permanently close/exit a screen session just use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So.. Now that we're in our screen session, lets download the XDC chain tarball:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir ~/chaindl
cd ~/chaindl
aria2c -x 8 -s 8 -k 1M https://download.xinfin.network/xdcchain.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If for whatever reason it is interrupted and needs to resume, we can add the --continue flag to the aria2c command.&lt;/p&gt;

&lt;p&gt;Detach the screen session and come back later. You can peek in on it every now and then with the commands above. When it is finished, we need to decompress it. Once again, we can do this via a screen session and then detach it to protect the whole process from interruption.&lt;/p&gt;

&lt;p&gt;To decompress it in the screen session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo tar -xvf xdcchain.tar  # Creates XDC directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then clean it up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd XDC
sudo rm -rf nodekey  # Remove old node key
sudo rm -rf transactions.rlp  # Clean up pending transactions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  Install the XDC Node Client
&lt;/h4&gt;

&lt;p&gt;Now to install the node using method 3 (from here &lt;a href="https://github.com/XinFinOrg/XinFin-Node"&gt;https://github.com/XinFinOrg/XinFin-Node&lt;/a&gt;) and customise it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~
git clone https://github.com/XinFinOrg/XinFin-Node.git
cd XinFin-Node/mainnet
sudo nano .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the .env file, set your node name, email and set gcmode to "full" instead of "archive".&lt;br&gt;
Then save and exit.&lt;br&gt;
Note: there is also a gcmode setting in start_node.sh but this is a backup/default if the environment variable isn't already set. It defaults to "archive" if not set.&lt;/p&gt;

&lt;p&gt;Then start the node briefly for 10 seconds or so and then shut it down again.. This creates some of the directories we need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo bash docker-up.sh
sudo bash docker-down.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now clean up the new directories by removing the chain files we dont need etc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~/XinFin-Node/mainnet/xdcchain
sudo rm -rf XDC
sudo rm -rf *.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we move the earlier decompressed chain files into the new node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mv ~/chaindl/XDC .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we restart the node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~/XinFin-Node/mainnet
sudo bash docker-up.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  Troubleshoot Peer Issues
&lt;/h4&gt;

&lt;p&gt;Let the node sync.&lt;br&gt;
If you're not picking up peers, then you can run the peer.sh script (while the node is running):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~/XinFin-Node/mainnet
sudo bash peer.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you get an error, then check the container name. I have noted that the docker containers have had different names at different stages or perhaps with different methods I'm not sure. To check the container name use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then edit the peer.sh script and update the hard-coded container name in there:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano peer.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you had to do the container-name update in the script then run the peer.sh script again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo bash peer.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The node should now pick up peers relatively quickly (ie it should be up to perhaps 15-20 peers within 10-15 minutes).&lt;/p&gt;




&lt;h4&gt;
  
  
  Residual "Open" Ports
&lt;/h4&gt;

&lt;p&gt;The Docker port bindings will not be affected by ufw. This means that you will still see ports 8888 and 8989 showing as open if you scan the VPS ports with nmap from a terminal external to the VPS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nmap -Pn -p 8888 Your.VPS.IP.ADDRESS
nmap -Pn -p 8989 Your.VPS.IP.ADDRESS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, by default in the .env file, the environment variable "ENABLE_RPC=false" is set and this makes the start_node.sh script not expose the RPC/WS in the docker container. The ports 8888 and 8989 still show as open however as the docker proxy answers the handshake. So, even if someone tries to access those "open" ports, sorry nobody is home.&lt;/p&gt;

&lt;p&gt;To actually decrease the attack surface even further we can simply disable to docker port bindings by editing the docker-compose.yml file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~/XinFin-Node/mainnet
sudo nano docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you've opened the file, just use # to comment out the 2 port lines that handle the container port bindings for 8888 and 8989 as show here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ports:
      - "30303:30303"
      # - "8989:8545"
      # - "8888:8546"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now just stop and restart the node. Then try the nmap scans again and those ports will now show as closed.&lt;/p&gt;




&lt;h4&gt;
  
  
  Node Migrations
&lt;/h4&gt;

&lt;p&gt;If this is a node migration, once syncing has completed, remember to docker-down.sh the old and new nodes. Then delete the keystore file on the new node. Then scp the keystore file across from the old node to put it in the keystore directory on the new node.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo scp -P &amp;lt;OldNodePortNumber&amp;gt; username@IPaddress:~/XinFin-Node/xdcchain/keystore/UTC* xdcchain/keystore/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then just docker-up.sh the new node.&lt;/p&gt;

&lt;p&gt;Voila. New node!&lt;/p&gt;




&lt;h4&gt;
  
  
  Android/iOs Push Notifications
&lt;/h4&gt;

&lt;p&gt;To receive Android/iOs push-notifications if your client/node goes offline, set up the free open-source &lt;a href="https://xdcoutpost.xyz/"&gt;XDC Sentinel&lt;/a&gt; tool.&lt;/p&gt;

&lt;p&gt;To receive Android/iOs push-notifications of changes in Governance status of staked nodes + arrival alerts for Masternode Educational Rewards, set up the free open-source &lt;a href="https://xdcoutpost.xyz/"&gt;XDC Tycoon&lt;/a&gt; tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  Appendix details just for me
&lt;/h2&gt;

&lt;p&gt;Installing the XDC client on machines that have Intel CPUs, there are some considerations with one of the new Docker packages (docker-ce-rootless-extras) that must be removed.&lt;/p&gt;

&lt;p&gt;The following code is not to be used. Something in the new customised bootstrap script I wrote (not the official XinFin version) resulted in a node I just installed not picking up peers so all the below steps when installing prerequisites etc need to be double checked to see if they may have been related. This section is a mental note to me just until I've finished playing next time I install a new node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    sudo apt-get update
    sudo apt-get install \
            apt-transport-https ca-certificates curl git jq \
            software-properties-common -y

    echo "Setting up Docker repository and installing Docker"

    # Remove any old Docker installations
    sudo apt remove docker docker-engine docker.io containerd runc docker-compose -y
    sudo rm -f /usr/local/bin/docker-compose

    # Add Docker's official GPG key and repository
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null

    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

    # Handle Intel compatibility issue by removing and holding the problematic package
    sudo apt remove docker-ce-rootless-extras -y
    sudo apt-mark hold docker-ce-rootless-extras
    sudo systemctl restart docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>EIP-7702 is available on devnet now</title>
      <dc:creator>Daniel Liu</dc:creator>
      <pubDate>Tue, 24 Feb 2026 03:36:49 +0000</pubDate>
      <link>https://www.xdc.dev/gzliudan/eip-7702-is-available-on-devnet-now-38hp</link>
      <guid>https://www.xdc.dev/gzliudan/eip-7702-is-available-on-devnet-now-38hp</guid>
      <description>&lt;p&gt;EIP-7702 is available on XDC devnet now. It was activated together with EIP-2935 and EIP-7623 at block number 3000600. We sincerely invite you to test it on devnet.&lt;/p&gt;

</description>
      <category>xdc</category>
      <category>eip7702</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Mnemonic seed phrase brings up wrong derivation path and different wallet</title>
      <dc:creator>Richard Daley</dc:creator>
      <pubDate>Wed, 18 Feb 2026 16:59:48 +0000</pubDate>
      <link>https://www.xdc.dev/richard_daley_e7fc2373f51/mnemonic-seed-phrase-brings-up-wrong-derivation-path-and-different-wallet-4557</link>
      <guid>https://www.xdc.dev/richard_daley_e7fc2373f51/mnemonic-seed-phrase-brings-up-wrong-derivation-path-and-different-wallet-4557</guid>
      <description>&lt;p&gt;I have been using the XinFin Web Wallet with a 12 word mnemonic seed phrase and my password to access by XDC tokens, but now the same entries bring up an incorrect wallet number. &lt;br&gt;
I have used Google and ChatGPT for answers, and so far I have tried accessing my wallet via DXC Pay (but get the wrong wallet), CAN'T use MyEtherWallet because I'm in the UK, tried Infinity Wallet by UltraNote but it crashed, Tried Rabby Wallet but it also has the same derivation path issues and can't find my old wallet. I tried MyCrypto Desktop, but again it showed me an incorrect wallet address.&lt;br&gt;
I also scrolled down 500+ address options whilst in the XinFin Web Wallet to see if my own wallet was further down the list but with no luck. &lt;br&gt;
Can anyone suggest a way to successfully access my correct address using my mnemonic phrase without it constantly bringing up a different empty address?&lt;br&gt;
How can i get my seed phrase to bring up the address where my XDC tokens are stored?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Node Status APY</title>
      <dc:creator>NileshPathak01</dc:creator>
      <pubDate>Mon, 16 Feb 2026 15:07:39 +0000</pubDate>
      <link>https://www.xdc.dev/nileshpathak/node-status-apy-ek8</link>
      <guid>https://www.xdc.dev/nileshpathak/node-status-apy-ek8</guid>
      <description>&lt;p&gt;Hi, &lt;/p&gt;

&lt;p&gt;Is there any API wherein I as a node owner can pass Coinbase address and get the node status in return (CORE/ Standby/ Slashed). &lt;/p&gt;

&lt;p&gt;If so, would like to use the APY to get the status on the fly and display on our Dapp Screen, rather than looking on the Xin Fin Dapp and applying the changes on our side manually (when the node status changes) &lt;/p&gt;

&lt;p&gt;Thanks&lt;br&gt;
Nilesh &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
