<?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>Tokenizing the Cacao Trade</title>
      <dc:creator>XDC Foundation</dc:creator>
      <pubDate>Thu, 07 May 2026 13:13:50 +0000</pubDate>
      <link>https://www.xdc.dev/xdc_foundation/tokenizing-the-cacao-trade-2fd3</link>
      <guid>https://www.xdc.dev/xdc_foundation/tokenizing-the-cacao-trade-2fd3</guid>
      <description>&lt;p&gt;&lt;a href="https://www.xdc.dev/images/62l1f7Ef3exTZfsWEME5nnrzjhcz_4T6C6NyCkZlraw/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzVqczdmYXlnY2Ez/dnp5bGV4MDV2LnBu/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/62l1f7Ef3exTZfsWEME5nnrzjhcz_4T6C6NyCkZlraw/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzVqczdmYXlnY2Ez/dnp5bGV4MDV2LnBu/Zw" alt="Image description" width="880" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Opportunity
&lt;/h2&gt;

&lt;p&gt;Tokenization has matured rapidly over the past several years, but the momentum has been concentrated in a familiar place—traditional financial instruments. Tokenized funds, treasuries, and credit products dominate the conversation because their underlying assets are already structured, verified, and widely trusted. The plumbing for moving such instruments on-chain has improved dramatically.&lt;/p&gt;

&lt;p&gt;What remains less developed is the foundation beneath tokenized assets, particularly when those assets originate in the physical economy. Commodities, shipments, and receivables are defined by documents, provenance, and multi-party verification. A bag of cacao does not become a tokenized receivable simply because someone says it does. It becomes one when the farm that grew it, the shipment that carries it, the contract that sells it, and the buyer that receives it can all be traced and trusted.&lt;/p&gt;

&lt;p&gt;Substantial progress has been made digitizing trade documents themselves. The unresolved gap, however, lies in connecting those documents to tokenized financial products in a way that is &lt;strong&gt;verifiable, trusted, and usable&lt;/strong&gt; in real trade finance workflows. This straightforward but consequential observation became the focus of the pilot described below. &lt;/p&gt;

&lt;h2&gt;
  
  
  Participants
&lt;/h2&gt;

&lt;p&gt;The pilot brought together four organizations, each contributing a distinct layer of the workflow. Together they form a stack in which physical provenance, commercial activity, financial structuring, and on-chain settlement are linked rather than siloed.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Process, Flows, and Outcomes
&lt;/h2&gt;

&lt;p&gt;The workflow began at the ground level. &lt;a href="https://blockticity.io/"&gt;Blockticity&lt;/a&gt; issued farm-level Certificates of Authenticity (COAs) for the licensed cacao farms supplying the crop. These COAs established an on-chain record of the upstream production sources behind the shipment — an auditable foothold tying the eventual financial instrument back to specific, verified producers.&lt;/p&gt;

&lt;p&gt;After &lt;a href="https://seedcore.ph/"&gt;Seedcore&lt;/a&gt; sourced and consolidated cacao from those verified farms, Blockticity issued a shipment-level COA for the export batch. That shipment COA referenced the underlying farm COAs and linked the cacao consignment to its origin, supplier, buyer, contract details, and related trade documentation. The result was a single on-chain record that resolved cleanly from farmer to export shipment.&lt;/p&gt;

&lt;p&gt;In parallel, &lt;a href="https://xdc.org"&gt;XDC Foundation&lt;/a&gt; worked with &lt;a href="https://www.brickken.com/"&gt;Brickken&lt;/a&gt; to establish the financial layer. The authenticated COA and supporting trade documents were uploaded to Brickken's platform as part of the offering setup, and the required onboarding and compliance steps were completed there so the offering could be created and tested. From there, a tokenized receivable was deployed on the XDC Network, supported by the authenticated documentation tied to the underlying cacao shipment. Investors onboard to the Brickken platform, which also manages the lifecycle of the tokenized asset.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Connection That Mattered
&lt;/h2&gt;

&lt;p&gt;The defining feature of the pilot was the relationship between the two layers. Rather than duplicating data or bridging assets directly, the tokenized asset on XDC &lt;strong&gt;referenced&lt;/strong&gt; authenticated records created by Blockticity. This allowed participants to review and verify the link between the financial instrument and the underlying cacao shipment before participating — a meaningful shift from the typical pattern, in which investors must take provenance largely on faith.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Workflow, Step by Step
&lt;/h2&gt;

&lt;p&gt;To make the orchestration easier to follow, the pilot can be viewed as a sequence of connected steps. Each participant played a specific role in moving the process from verified cacao provenance to a tokenized trade finance asset on XDC Network.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verifying cacao farms&lt;/strong&gt;. Blockticity issued farm-level COAs for the licensed cacao farms thatsupplied the crop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shipment formation&lt;/strong&gt;. Seedcore sourced cacao from those verified farms and consolidatedit into an export shipment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shipment-level COA&lt;/strong&gt;. Blockticity created a shipment-level COA that referenced the farmCOAs and connected the shipment to its origin, supplier, and supporting trade documents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issuer onboarding&lt;/strong&gt;. Seedcore onboarded to the Brickken platform as an asset issuer andcompleted the required compliance steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tokenized receivable on XDC&lt;/strong&gt;. Certificates of Authenticity and receivables documents wereused to deploy the tokenized asset on XDC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Investor verification&lt;/strong&gt;. Participants could review the authenticated records and verify theconnection between the financial instrument and the underlying cacao shipment.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/EcL8oNK8J9UlUoJt5lXGnmzrFJdH4Xds-bc38sdGxwY/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzVqbXp0ZGI0bGly/OHFmYmpydjdqLnBu/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/EcL8oNK8J9UlUoJt5lXGnmzrFJdH4Xds-bc38sdGxwY/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/LzVqbXp0ZGI0bGly/OHFmYmpydjdqLnBu/Zw" alt="Image description" width="465" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;For years, real-world asset tokenization has been held back by an unspoken assumption: that the gap between paper-based, multi-party trade processes and on-chain financial instruments is too messy to bridge in any reproducible way. This pilot demonstrates otherwise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three outcomes stand out&lt;/strong&gt;. First, provenance and finance were joined without being conflated. Blockticity's COAs did not become the receivable; they grounded it. The tokenized asset on XDC referenced authenticated records rather than re-creating them, preserving the integrity of each layer while making the link verifiable to anyone. Second, the workflow was navigable for every participant. A Philippine cacao exporter, an authenticity provider, a tokenization platform, and a Layer 1 network operated through their existing tools and obligations — including ASTM and EUDR-aligned authentication and platform-level compliance — rather than reorganizing around new ones. Third, the value proposition for the upstream economy is direct. When a smallholder farm's licensed status is anchored on-chain, and a shipment built from those farms backs a verifiable receivable, capital can move toward producers with materially less friction and materially more trust.&lt;/p&gt;

&lt;p&gt;What the pilot proves is that the missing layer in real-world asset tokenization is not better tokens or faster chains, but &lt;strong&gt;verifiable connective tissue&lt;/strong&gt; between physical commodities and the financial instruments that represent them. Brickken structures the offering, Seedcore anchors the commercial reality, and Blockticity certifies the underlying truth. XDC Network makes that connectivity load-bearing — a trade-finance-optimized Layer 1 where provenance records and financial instruments can reference each other natively, without translation.&lt;/p&gt;

&lt;p&gt;The blueprint extends well beyond cacao. Coffee, cocoa, coconut, timber, fisheries, agricultural receivables, and shipment-backed credit all share the same foundational requirement — and now share a working pattern for meeting it.&lt;/p&gt;

</description>
      <category>xdc</category>
      <category>tokenization</category>
      <category>tradefinance</category>
      <category>supplychain</category>
    </item>
    <item>
      <title>Problems running RPC nodes</title>
      <dc:creator>king aaron</dc:creator>
      <pubDate>Thu, 07 May 2026 07:56:26 +0000</pubDate>
      <link>https://www.xdc.dev/aaron/problems-running-rpc-nodes-132k</link>
      <guid>https://www.xdc.dev/aaron/problems-running-rpc-nodes-132k</guid>
      <description>&lt;p&gt;Is it normal to use snapshots to synchronize RPC nodes and generate normal logs?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Starting nodes with enode://2c19c70a9c4134936926bbf1 ..........................&lt;br&gt;
WARN [05-07|15:02:43.394] The flag XDCx-datadir or XDCx.datadir is deprecated, please remove this flag&lt;br&gt;
WARN [05-07|15:02:46.445] Head state missing, repairing chain      number=101,599,567 hash=9df8cf..c991b8&lt;br&gt;
WARN [05-07|15:02:47.694] [initial] initial v2 related parameters&lt;br&gt;
WARN [05-07|15:02:47.702] [initial] miner wait period              period=2&lt;br&gt;
WARN [05-07|15:02:47.703] [initial] finish initialisation&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;How long should this phase take? I haven't seen any new logs for an hour, and I'm starting to doubt if it's even working.&lt;/p&gt;

&lt;p&gt;I set it up using Docker, following this setup: &lt;a href="https://www.xdc.dev/ruslan_wing/setting-up-an-rpc-node-server-for-your-dapp-on-xdc-network-a-comprehensive-guide-3dm9"&gt;https://www.xdc.dev/ruslan_wing/setting-up-an-rpc-node-server-for-your-dapp-on-xdc-network-a-comprehensive-guide-3dm9&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Informative] April Insights: Key Highlights and Developments from Plugin’s Journey</title>
      <dc:creator>Pooja Balaji</dc:creator>
      <pubDate>Wed, 06 May 2026 19:29:24 +0000</pubDate>
      <link>https://www.xdc.dev/pooja_balaji/informative-april-insights-key-highlights-and-developments-from-plugins-journey-1f2e</link>
      <guid>https://www.xdc.dev/pooja_balaji/informative-april-insights-key-highlights-and-developments-from-plugins-journey-1f2e</guid>
      <description>&lt;p&gt;Another month, another wave of progress in 2026. Plugin continues to deliver on its promise of building robust, reliable blockchain infrastructure while pushing on-chain innovation to new heights. Here's what's new.&lt;/p&gt;

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

&lt;p&gt;⛓️&lt;strong&gt;Expanding On-Chain Data Coverage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PluginDON is setting a new benchmark for on-chain data integration, purpose-built for Real World Assets on the XDC Network. Price feeds were just the starting point, the vision has always been something far greater.&lt;/p&gt;

&lt;p&gt;We are proud to announce the successful completion of a Proof of Concept that validates how RWA data can be seamlessly brought from off-chain sources onto the blockchain, unlocking richer and more transparent on-chain intelligence than ever before.&lt;/p&gt;

&lt;p&gt;Building on this milestone, we are now broadening on-chain coverage to capture the complete picture around RWA tokens &lt;/p&gt;

&lt;p&gt;Here's what's now covered :&lt;br&gt;&lt;br&gt;
● Holder Distribution&lt;br&gt;
● Transfer Activity&lt;br&gt;
● Total Supply&lt;br&gt;
● Market Capitalization&lt;/p&gt;

&lt;p&gt;This expansion strengthens PluginDON’s role in bridging real-world financial data with decentralized infrastructure.&lt;/p&gt;

&lt;p&gt;⚙️&lt;strong&gt;PluginDON CCIP: Binance Integration Update&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Following the initial CCIP expansion phase, current work is focused on establishing secure RPC interoperability between XDCNetwork and Binance-linked infrastructure.&lt;/p&gt;

&lt;p&gt;Key focus areas this month include:&lt;br&gt;
● RPC routing and endpoint compatibility analysis&lt;br&gt;
● Cross-chain message verification design&lt;br&gt;
● Infrastructure-level security hardening&lt;br&gt;
● Node communication protocol alignment&lt;/p&gt;

&lt;p&gt;This phase represents a shift from conceptual expansion to technical implementation planning.&lt;/p&gt;

&lt;p&gt;🔄 &lt;strong&gt;Plugin VRF Update: Enhanced Timeout Mechanism&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As part of ongoing improvements to the Plugin VRF system, we are introducing an expanded timeout mechanism to improve request reliability and reduce pending states.&lt;/p&gt;

&lt;p&gt;With this update, the node response window will be extended, ensuring that VRF requests are not left stuck in a pending state due to temporary delays or network conditions.&lt;/p&gt;

&lt;p&gt;What’s improving:&lt;br&gt;
● Expanded timeout window for VRF requests&lt;br&gt;
● Reduced risk of requests remaining in pending state&lt;br&gt;
● Improved reliability of random number fulfillment&lt;br&gt;
● More resilient node response handling&lt;/p&gt;

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

&lt;p&gt;Real-world assets are only as trustworthy as the data that represents them. Bridging the physical and digital isn't just about tokenization, it's about ensuring every data point, from ownership to market movement, is verifiable and tamper-proof. In a world where trust is the scarcest resource, on-chain transparency isn't a feature. It's the foundation.&lt;/p&gt;

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

&lt;p&gt;What is the purpose of RPC in blockchain infrastructure?&lt;/p&gt;

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

</description>
    </item>
    <item>
      <title>Understanding the XDC Network Slashing Mechanism: Ensuring Network Stability</title>
      <dc:creator>Rushabh Parmar</dc:creator>
      <pubDate>Tue, 05 May 2026 06:23:02 +0000</pubDate>
      <link>https://www.xdc.dev/rushabh_parmar/understanding-the-xdc-network-slashing-mechanism-ensuring-network-stability-471o</link>
      <guid>https://www.xdc.dev/rushabh_parmar/understanding-the-xdc-network-slashing-mechanism-ensuring-network-stability-471o</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The XDC Network, powered by its XDC 2.0 consensus mechanism, employs a slashing mechanism to maintain network stability and ensure validator accountability. Unlike punitive slashing systems in other blockchains, XDC's approach focuses on corrective measures that balance network efficiency with fairness to node operators.&lt;/p&gt;

&lt;p&gt;This article explores how slashing works, its impact on network performance, and practical solutions for masternode operators to avoid slashing events.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Slashing is Critical for Network Performance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Timeout Problem
&lt;/h3&gt;

&lt;p&gt;In XDPoS, masternodes create blocks in a round-robin fashion. When a masternode fails to create a block during its designated turn, the entire network experiences a &lt;strong&gt;10-second timeout&lt;/strong&gt; before the next masternode proceeds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact Example:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If 27 masternodes (25% of the 108-node network) are underperforming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wasted time per epoch&lt;/strong&gt;: 27 nodes × 6 average turns × 10 seconds = 1,620 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normal epoch duration&lt;/strong&gt;: 1,800 seconds
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance degradation&lt;/strong&gt;: 47.4%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network throughput&lt;/strong&gt;: Reduced from 2,000+ TPS to ~1,050 TPS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without slashing, these underperforming masternodes would continue degrading network performance indefinitely. With slashing, the network automatically excludes them, restoring full operational efficiency.&lt;/p&gt;




&lt;h2&gt;
  
  
  How XDC Slashing Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Slashing Trigger
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Primary Condition&lt;/strong&gt;: A masternode that fails to sign &lt;strong&gt;any block&lt;/strong&gt; during an &lt;strong&gt;entire epoch&lt;/strong&gt; (900 blocks) will be slashed.&lt;/p&gt;

&lt;p&gt;The system evaluates complete inactivity over an epoch, not isolated missed blocks. This prevents false positives from temporary network hiccups while identifying genuinely unresponsive masternodes.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Slashing Cycle
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Phase 1: Performance Monitoring&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Each epoch consists of 900 blocks (approximately 30 minutes):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Epoch N (900 blocks, ~1800 seconds)
├── Masternodes take turns creating blocks
├── Block Signer smart contract records all signatures
└── Block 900 (Checkpoint): Performance evaluation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Phase 2: Detection and Slashing&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;At the checkpoint block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight solidity"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="n"&gt;masternode&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt; &lt;span class="kr"&gt;in&lt;/span&gt; &lt;span class="n"&gt;MasternodeSet&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;signatures&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BlockSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getSignatureCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;currentEpoch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signatures&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;slashMasternode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;addToSlashedList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;currentEpoch&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Point&lt;/strong&gt;: Zero signatures = automatic slashing. Partial participation = no slashing.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Phase 3: Exclusion Period (4 Epochs)&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Once slashed, a masternode enters a 4-epoch exclusion period (~2 hours):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Epoch N: Masternode slashed (0 signatures)
├── Epochs N+1 to N+4: Excluded from block creation
│   └── Can still verify/sign blocks created by others
└── Epoch N+5: Eligible for reinstatement
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;During Exclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cannot create blocks&lt;/li&gt;
&lt;li&gt;Can verify and sign blocks (demonstrates liveness)&lt;/li&gt;
&lt;li&gt;This activity is required for recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Phase 4: Automatic Reinstatement&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;After 4 epochs, the masternode automatically rejoins if:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It signed blocks during the exclusion period&lt;/li&gt;
&lt;li&gt;Stake remains locked in the smart contract&lt;/li&gt;
&lt;li&gt;No additional slashing events occurred&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Byzantine Fault Tolerance and Network Safety
&lt;/h2&gt;

&lt;p&gt;The XDC Network maintains Byzantine Fault Tolerance through its 75% finality requirement:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BFT Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Finality requires&lt;/strong&gt;: 81 validator signatures (75% of 108)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network tolerates&lt;/strong&gt;: Up to 27 faulty/offline masternodes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Critical threshold&lt;/strong&gt;: If 28+ masternodes are slashed, finality becomes impossible&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Slashed Nodes&lt;/th&gt;
&lt;th&gt;Active Nodes&lt;/th&gt;
&lt;th&gt;BFT Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0-10&lt;/td&gt;
&lt;td&gt;98-108&lt;/td&gt;
&lt;td&gt;✅ Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11-27&lt;/td&gt;
&lt;td&gt;81-97&lt;/td&gt;
&lt;td&gt;✅ Safe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;81&lt;/td&gt;
&lt;td&gt;⚠️ Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28+&lt;/td&gt;
&lt;td&gt;&amp;lt;81&lt;/td&gt;
&lt;td&gt;❌ Broken&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Double Validation Integration
&lt;/h2&gt;

&lt;p&gt;XDC's slashing mechanism integrates with its Double Validation system:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How It Works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Block Creator&lt;/strong&gt;: Creates block per round-robin schedule&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block Verifier&lt;/strong&gt;: Randomly selected to verify and co-sign&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finalization&lt;/strong&gt;: Requires both signatures&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Slashing Impact:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slashed masternodes are excluded from block creator rotation&lt;/li&gt;
&lt;li&gt;Can still participate as random block verifiers&lt;/li&gt;
&lt;li&gt;Allows demonstration of liveness for recovery&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Solutions to Avoid Slashing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Alternative: Third-Party Masternode Services
&lt;/h3&gt;

&lt;p&gt;If you do not have the technical resources, infrastructure, or time to maintain a masternode yourself, there are several third-party services and volunteers willing to provide professional masternode hosting and management services. These providers handle all technical aspects including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infrastructure setup and maintenance&lt;/li&gt;
&lt;li&gt;24/7 uptime management&lt;/li&gt;
&lt;li&gt;Security hardening and updates&lt;/li&gt;
&lt;li&gt;Failover and redundancy&lt;/li&gt;
&lt;li&gt;Technical support and troubleshooting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Available Third-Party Services:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IndSoft&lt;/strong&gt; - Professional masternode hosting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NODE FORGE&lt;/strong&gt; - Managed validator services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zeeve&lt;/strong&gt; - Enterprise blockchain infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BlockDaemon&lt;/strong&gt; - Institutional-grade node operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tatum&lt;/strong&gt; - Blockchain infrastructure platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NOWNodes&lt;/strong&gt; - Node hosting and API services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asternodes&lt;/strong&gt; - Validator management services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ankr&lt;/strong&gt; - Decentralized node infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;thirdweb&lt;/strong&gt; - Web3 infrastructure provider&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GOLDSKY&lt;/strong&gt; - Blockchain data infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Important Considerations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When selecting a third-party service provider:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Research their track record and uptime history&lt;/li&gt;
&lt;li&gt;Understand their fee structure&lt;/li&gt;
&lt;li&gt;Verify their security practices&lt;/li&gt;
&lt;li&gt;Check their support responsiveness&lt;/li&gt;
&lt;li&gt;Review client testimonials&lt;/li&gt;
&lt;li&gt;Ensure they have experience with XDC Network&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;DISCLAIMER:&lt;/strong&gt; &lt;em&gt;XDC Network does not officially endorse any third-party services. Please perform due diligence and research before proceeding with any service provider. You remain responsible for your staked XDC and masternode performance.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  For Self-Hosted Masternodes:Infrastructure Requirements
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Hardware Specifications
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Minimum Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CPU&lt;/strong&gt;: 12+ core&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAM&lt;/strong&gt;: 32 GB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: 2 TB NVMe SSD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network&lt;/strong&gt;: 100 Mbps (1 Gbps recommended)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Insufficient CPU → slow block processing&lt;/li&gt;
&lt;li&gt;Insufficient RAM → system swapping and delays&lt;/li&gt;
&lt;li&gt;HDD instead of SSD → missed signing windows&lt;/li&gt;
&lt;li&gt;Unstable network → failed peer communication&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Network Infrastructure
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Critical Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static Public IP (mandatory)&lt;/li&gt;
&lt;li&gt;99.99%+ uptime SLA (use tier-3+ data centers)&lt;/li&gt;
&lt;li&gt;DDoS protection&lt;/li&gt;
&lt;li&gt;Low latency (&amp;lt;100ms to network peers)&lt;/li&gt;
&lt;li&gt;Redundant connectivity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. Proper Node Setup
&lt;/h3&gt;

&lt;p&gt;Follow the official setup guide:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/XinFinOrg/XinFin-Node"&gt;https://github.com/XinFinOrg/XinFin-Node&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup Steps:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the official repository&lt;/span&gt;
git clone https://github.com/XinFinOrg/XinFin-Node
&lt;span class="nb"&gt;cd &lt;/span&gt;XinFin-Node

&lt;span class="c"&gt;# Run the setup script&lt;/span&gt;
./setup.sh

&lt;span class="c"&gt;# Key configuration parameters:&lt;/span&gt;
&lt;span class="c"&gt;# - Static IP address&lt;/span&gt;
&lt;span class="c"&gt;# - Port 30303 open for P2P&lt;/span&gt;
&lt;span class="c"&gt;# - Proper keystore and password&lt;/span&gt;
&lt;span class="c"&gt;# - Adequate system resources&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Essential Configuration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--syncmode "full"&lt;/code&gt;: Complete blockchain sync&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--mine&lt;/code&gt;: Enable block creation&lt;/li&gt;
&lt;li&gt;Firewall: Open port 30303, restrict RPC access&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Implement Hot Standby Architecture
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Setup:&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;┌─────────────────────┐         ┌─────────────────────┐
│  Primary Masternode │         │  Hot Standby Node   │
│  - Active mining    │◄───────►│  - Synced, ready    │
│  - Signing blocks   │         │  - Not mining       │
└─────────────────────┘         └─────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Critical Rules:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Never run both nodes with same key simultaneously&lt;/strong&gt; (causes double-signing → 100% rewards loss)&lt;/li&gt;
&lt;li&gt;Keep standby fully synced at all times&lt;/li&gt;
&lt;li&gt;Document failover procedure&lt;/li&gt;
&lt;li&gt;Practice failover monthly&lt;/li&gt;
&lt;li&gt;Target failover time: &amp;lt;5 minutes&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Regular Maintenance
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Update Schedule:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Critical patches&lt;/strong&gt;: Within 24 hours&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol upgrades&lt;/strong&gt;: Per XDC Team announcements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regular updates&lt;/strong&gt;: Monthly maintenance windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Planned Maintenance:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update procedure&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;XinFin-Node &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git pull origin master
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Restart (target: &amp;lt;10 minutes downtime)&lt;/span&gt;
docker-compose down
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Verify node is signing blocks within 5 minutes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Security Hardening
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Firewall Configuration:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Basic firewall setup&lt;/span&gt;
ufw default deny incoming
ufw default allow outgoing

&lt;span class="c"&gt;# Allow P2P (essential)&lt;/span&gt;
ufw allow 30303/tcp

&lt;span class="c"&gt;# Allow RPC only from localhost&lt;/span&gt;
ufw allow from 127.0.0.1 to any port 8545

&lt;span class="c"&gt;# Allow SSH from trusted IPs only&lt;/span&gt;
ufw allow from YOUR_ADMIN_IP to any port 22

ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Protection:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use strong passwords (25+ characters)&lt;/li&gt;
&lt;li&gt;Store keys in encrypted files with restricted permissions (&lt;code&gt;chmod 600&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Never store unencrypted private keys on servers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Verify Network Connectivity
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Check Peer Connections:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check peer count (should be &amp;gt;10)&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; xinfinnetwork_xdcnode_1 geth attach /work/xdcchain/XDC.ipc &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exec&lt;/span&gt; &lt;span class="s1"&gt;'admin.peers.length'&lt;/span&gt;

&lt;span class="c"&gt;# Add peers manually if needed&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; xinfinnetwork_xdcnode_1 geth attach /work/xdcchain/XDC.ipc &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exec&lt;/span&gt; &lt;span class="s1"&gt;'admin.addPeer("enode://PEER_ID@IP:PORT")'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Target&lt;/strong&gt;: Maintain 15-30 peer connections for optimal resilience.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Ensure Continuous Sync
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Verify Sync Status:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check current block number&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; xinfinnetwork_xdcnode_1 geth attach /work/xdcchain/XDC.ipc &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exec&lt;/span&gt; &lt;span class="s1"&gt;'eth.blockNumber'&lt;/span&gt;

&lt;span class="c"&gt;# Compare to network: https://xinfin.network&lt;/span&gt;

&lt;span class="c"&gt;# Check sync status&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; xinfinnetwork_xdcnode_1 geth attach /work/xdcchain/XDC.ipc &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exec&lt;/span&gt; &lt;span class="s1"&gt;'eth.syncing'&lt;/span&gt;
&lt;span class="c"&gt;# Should return "false" if fully synced&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;&amp;lt;10 blocks behind → Monitor&lt;/li&gt;
&lt;li&gt;10-100 blocks behind → Check peers and connectivity&lt;/li&gt;
&lt;li&gt;&amp;gt;100 blocks behind → Investigate immediately, may need restart&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Pre-Launch Checklist
&lt;/h3&gt;

&lt;p&gt;Before activating your masternode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Hardware meets recommended specifications&lt;/li&gt;
&lt;li&gt; Static IP configured and tested&lt;/li&gt;
&lt;li&gt; Node deployed from official repository&lt;/li&gt;
&lt;li&gt; Full blockchain sync completed&lt;/li&gt;
&lt;li&gt; Firewall configured correctly&lt;/li&gt;
&lt;li&gt; Hot standby node synced&lt;/li&gt;
&lt;li&gt; Failover procedure documented and tested&lt;/li&gt;
&lt;li&gt; Keys secured properly&lt;/li&gt;
&lt;li&gt; 10,000,000 XDC staked&lt;/li&gt;
&lt;li&gt; KYC completed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Daily Operational Checks
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Verify sync status (within 10 blocks)&lt;/li&gt;
&lt;li&gt;Check peer count (&amp;gt;10 peers)&lt;/li&gt;
&lt;li&gt;Review system logs for errors&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Verify standby node is synced&lt;/li&gt;
&lt;li&gt;Test failover readiness&lt;/li&gt;
&lt;li&gt;Check for software updates&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Update node software&lt;/li&gt;
&lt;li&gt;Test complete failover&lt;/li&gt;
&lt;li&gt;Security audit&lt;/li&gt;
&lt;li&gt;Backup configurations&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Recovery After Slashing
&lt;/h2&gt;

&lt;p&gt;If your masternode gets slashed, follow this recovery process:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Confirm Slashing (5 Minutes)
&lt;/h3&gt;

&lt;p&gt;Check your status:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;a href="https://xdcscan.com"&gt;https://xdcscan.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Enter your masternode address&lt;/li&gt;
&lt;li&gt;Verify epoch performance shows 0 signatures&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Diagnose Root Cause (30 Minutes)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Node offline&lt;/td&gt;
&lt;td&gt;Service status&lt;/td&gt;
&lt;td&gt;Restart service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Out of sync&lt;/td&gt;
&lt;td&gt;Sync progress&lt;/td&gt;
&lt;td&gt;Wait for completion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No peers&lt;/td&gt;
&lt;td&gt;Peer count&lt;/td&gt;
&lt;td&gt;Add peers manually&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk full&lt;/td&gt;
&lt;td&gt;Disk usage&lt;/td&gt;
&lt;td&gt;Clear space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory issues&lt;/td&gt;
&lt;td&gt;System resources&lt;/td&gt;
&lt;td&gt;Restart, upgrade RAM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 3: Fix the Issue (1 Hour)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Restart Node:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose restart
docker-compose logs &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;--tail&lt;/span&gt; 100

&lt;span class="c"&gt;# Verify sync resumption&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; xinfinnetwork_xdcnode_1 geth attach /work/xdcchain/XDC.ipc &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exec&lt;/span&gt; &lt;span class="s1"&gt;'eth.syncing'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Add Peers:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check firewall&lt;/span&gt;
ufw status

&lt;span class="c"&gt;# Verify P2P port&lt;/span&gt;
netstat &lt;span class="nt"&gt;-tuln&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;30303

&lt;span class="c"&gt;# Add peers&lt;/span&gt;
bash peer.sh

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Demonstrate Liveness (4 Epochs)
&lt;/h3&gt;

&lt;p&gt;During the 4-epoch exclusion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your node can verify and sign blocks (even though it can't create them)&lt;/li&gt;
&lt;li&gt;This demonstrates operational status&lt;/li&gt;
&lt;li&gt;Target: Sign &amp;gt;50% of blocks during exclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 5: Automatic Reinstatement (Epoch N+5)
&lt;/h3&gt;

&lt;p&gt;Your masternode automatically rejoins if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You signed blocks during exclusion&lt;/li&gt;
&lt;li&gt;Stake remains locked&lt;/li&gt;
&lt;li&gt;No additional slashing occurred&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Verify Recovery:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node creates blocks again within first few hundred blocks of epoch N+5&lt;/li&gt;
&lt;li&gt;Check your signatures in Block Signer contract&lt;/li&gt;
&lt;li&gt;Confirm address in active masternode list&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Best Practices Summary
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do's ✅
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Use tier-3+ data centers or reputable cloud providers&lt;/li&gt;
&lt;li&gt;Maintain a fully synced hot standby node&lt;/li&gt;
&lt;li&gt;Follow official setup guide: &lt;a href="https://github.com/XinFinOrg/XinFin-Node"&gt;https://github.com/XinFinOrg/XinFin-Node&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Keep software updated with security patches&lt;/li&gt;
&lt;li&gt;Use strong security practices (firewall, key protection)&lt;/li&gt;
&lt;li&gt;Verify sync status daily&lt;/li&gt;
&lt;li&gt;Document all procedures&lt;/li&gt;
&lt;li&gt;Test failover monthly&lt;/li&gt;
&lt;li&gt;Maintain adequate system resources&lt;/li&gt;
&lt;li&gt;Keep &amp;gt;10 peer connections&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Don'ts ❌
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Never run two nodes with same key simultaneously&lt;/li&gt;
&lt;li&gt;Don't use unreliable infrastructure&lt;/li&gt;
&lt;li&gt;Don't ignore software updates&lt;/li&gt;
&lt;li&gt;Don't skip regular maintenance&lt;/li&gt;
&lt;li&gt;Don't store unencrypted private keys&lt;/li&gt;
&lt;li&gt;Don't let node fall &amp;gt;100 blocks behind&lt;/li&gt;
&lt;li&gt;Don't operate without failover plan&lt;/li&gt;
&lt;li&gt;Don't use insufficient hardware&lt;/li&gt;
&lt;li&gt;Don't neglect firewall configuration&lt;/li&gt;
&lt;li&gt;Don't skip pre-launch checklist&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The XDC Network's slashing mechanism maintains network stability through:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Correction over punishment&lt;/strong&gt; - Technical issues allow recovery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent enforcement&lt;/strong&gt; - Automated via smart contracts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network efficiency&lt;/strong&gt; - Excludes underperforming nodes to maintain throughput&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Byzantine fault tolerance&lt;/strong&gt; - Ensures security up to 25% faulty nodes&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Key Takeaways
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;For Prevention:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Robust infrastructure eliminates slashing risk&lt;/li&gt;
&lt;li&gt;Proper configuration and maintenance are critical&lt;/li&gt;
&lt;li&gt;Hot standby provides failover capability&lt;/li&gt;
&lt;li&gt;Regular checks catch issues early&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For Recovery:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slashing is temporary, not permanent&lt;/li&gt;
&lt;li&gt;Demonstrate liveness during exclusion&lt;/li&gt;
&lt;li&gt;Automatic reinstatement after 4 epochs&lt;/li&gt;
&lt;li&gt;Fix root cause to prevent recurrence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By following these guidelines, masternode operators can avoid slashing while contributing to a stable, high-performance XDC Network.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Masternode Setup&lt;/strong&gt;: &lt;a href="https://github.com/XinFinOrg/XinFin-Node"&gt;https://github.com/XinFinOrg/XinFin-Node&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: &lt;a href="https://docs.xdc.network"&gt;https://docs.xdc.network&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Explorer&lt;/strong&gt;: &lt;a href="https://xdc.blocksscan.io/"&gt;https://xdc.blocksscan.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Whitepaper&lt;/strong&gt;: &lt;a href="https://xinfin.org/docs/whitepaper-tech.pdf"&gt;https://xinfin.org/docs/whitepaper-tech.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community&lt;/strong&gt;: &lt;a href="https://xdc.dev"&gt;https://xdc.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram&lt;/strong&gt;: &lt;a href="https://t.me/xinfintalk"&gt;https://t.me/xinfintalk&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>xdc</category>
      <category>masternode</category>
      <category>slashing</category>
      <category>network</category>
    </item>
    <item>
      <title>Integrating AI with Smart Contracts on XDC Network</title>
      <dc:creator>Rushabh Parmar</dc:creator>
      <pubDate>Sat, 02 May 2026 05:44:09 +0000</pubDate>
      <link>https://www.xdc.dev/rushabh_parmar/integrating-ai-with-smart-contracts-on-xdc-network-5e1n</link>
      <guid>https://www.xdc.dev/rushabh_parmar/integrating-ai-with-smart-contracts-on-xdc-network-5e1n</guid>
      <description>&lt;h2&gt;
  
  
  🎯 What You Will Build
&lt;/h2&gt;

&lt;p&gt;In this guide you will manually deploy a &lt;strong&gt;real, working AI-powered smart contract&lt;/strong&gt; on XDC Apothem Testnet step by step. Here is the contract we deployed live while writing this article:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contract Address&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://testnet.xdcscan.com/address/0xE031843227668f530DC0E59Bb093ED6763Dcd84D"&gt;&lt;code&gt;0xE031843227668f530DC0E59Bb093ED6763Dcd84D&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deploy TX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://testnet.xdcscan.com/tx/0x7fa75b52a379b20a1c3a4d8966a7c78f1ac29ba69eb25dded01185dcc66c7843"&gt;&lt;code&gt;0x7fa75b52...c7843&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Loan Application TX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://testnet.xdcscan.com/tx/0xe95ba3312aa0e710fb45cc6980c271a499570c65d89eb45cadda118719d64387"&gt;&lt;code&gt;0xe95ba331...4387&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Score Submission TX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://testnet.xdcscan.com/tx/0xcf230923452c8d054435b685ce67f7ad138e4b37e1688e2e8a6852b8af12edf9"&gt;&lt;code&gt;0xcf230923...edf9&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;XDC Apothem Testnet (Chain ID 51)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Score&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;711 / 1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risk Category&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MEDIUM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Decision&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ APPROVED&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You can verify every transaction right now on &lt;a href="https://testnet.xdcscan.com/address/0xE031843227668f530DC0E59Bb093ED6763Dcd84D"&gt;XDCScan Testnet&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Blockchain and Artificial Intelligence are two of the most transformative technologies of our time. Separately they are powerful. Together they unlock entirely new possibilities — smarter contracts, automated decision-making, and decentralized intelligence.&lt;/p&gt;

&lt;p&gt;XDC Network is a perfect platform for this combination:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;EVM compatible&lt;/strong&gt; — write contracts in Solidity, use standard tools like Hardhat&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Near-zero gas fees&lt;/strong&gt; (~$0.00001 per transaction)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2-second finality&lt;/strong&gt; — AI decisions confirmed almost instantly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2,000 TPS&lt;/strong&gt; — scales to high-frequency AI-triggered actions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What Are We Building?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;AI-Powered Loan Approval System&lt;/strong&gt; — a real-world pattern used in trade finance and credit scoring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ User calls applyForLoan() on-chain ]
              ↓
[ AI model analyzes applicant off-chain ]
              ↓
[ Oracle submits credit score on-chain ]
              ↓
[ Contract automatically APPROVES or REJECTS ]
              ↓
[ Decision is permanent and publicly verifiable ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is called the &lt;strong&gt;oracle pattern&lt;/strong&gt; — the standard way to connect AI (off-chain) with smart contracts (on-chain). The AI runs off-chain because it is too expensive to run ML models on-chain. A trusted "oracle" wallet then submits the result to the smart contract.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Install&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;v18+&lt;/td&gt;
&lt;td&gt;&lt;a href="https://nodejs.org"&gt;nodejs.org&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;v3.10+&lt;/td&gt;
&lt;td&gt;&lt;a href="https://python.org"&gt;python.org&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MetaMask&lt;/td&gt;
&lt;td&gt;Latest&lt;/td&gt;
&lt;td&gt;&lt;a href="https://metamask.io"&gt;metamask.io&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git&lt;/td&gt;
&lt;td&gt;Any&lt;/td&gt;
&lt;td&gt;&lt;a href="https://git-scm.com"&gt;git-scm.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Step 1 — Add XDC Apothem Testnet to MetaMask
&lt;/h2&gt;

&lt;p&gt;Open MetaMask → Settings → Networks → Add Network and fill in:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&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;Network Name&lt;/td&gt;
&lt;td&gt;XDC Apothem Testnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://erpc.apothem.network&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;51&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Currency Symbol&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TXDC&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block Explorer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://testnet.xdcscan.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Then get free test XDC from the faucet:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://faucet.apothem.network"&gt;https://faucet.apothem.network&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; You need &lt;strong&gt;two wallets&lt;/strong&gt; for this tutorial — one as the &lt;strong&gt;Deployer&lt;/strong&gt; (contract owner) and one as the &lt;strong&gt;Oracle&lt;/strong&gt; (the AI result submitter). Create both in MetaMask and fund both from the faucet.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 2 — Set Up the Project
&lt;/h2&gt;

&lt;p&gt;Open your terminal (Command Prompt on Windows) and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;xdc-ai-demo
&lt;span class="nb"&gt;cd &lt;/span&gt;xdc-ai-demo
npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; hardhat@2.22.19 @nomicfoundation/hardhat-ethers@3 ethers@6 dotenv &lt;span class="nt"&gt;--legacy-peer-deps&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once installed, initialise Hardhat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx hardhat init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When prompted, select &lt;strong&gt;"Create a JavaScript project"&lt;/strong&gt; and accept all defaults.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3 — Configure Hardhat for XDC Apothem
&lt;/h2&gt;

&lt;p&gt;Create a &lt;code&gt;.env&lt;/code&gt; file in the root of your project — &lt;strong&gt;never commit this to Git:&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;DEPLOYER_KEY=your_deployer_private_key_here
ORACLE_KEY=your_oracle_private_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;To export a private key from MetaMask: click your account → Account Details → Export Private Key. Use test-only wallets only.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Add &lt;code&gt;.env&lt;/code&gt; to &lt;code&gt;.gitignore&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;".env"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; .gitignore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now update &lt;code&gt;hardhat.config.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@nomicfoundation/hardhat-ethers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dotenv&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;solidity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0.8.20&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;apothem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://erpc.apothem.network&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;accounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DEPLOYER_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ORACLE_KEY&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="mi"&gt;51&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="c1"&gt;// ⚠️  XDC-specific settings — required for successful deployment&lt;/span&gt;
      &lt;span class="c1"&gt;// After the XDC 2.0 upgrade, Apothem minimum gas price is 12.5 gwei&lt;/span&gt;
      &lt;span class="c1"&gt;// XDC does NOT support EIP-1559 — always use gasPrice (not maxFeePerGas)&lt;/span&gt;
      &lt;span class="na"&gt;gasPrice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12500000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;// 12.5 gwei in wei&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4 — Write the Smart Contract
&lt;/h2&gt;

&lt;p&gt;Delete the default &lt;code&gt;contracts/Lock.sol&lt;/code&gt; and create &lt;code&gt;contracts/AIScoreOracle.sol&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight solidity"&gt;&lt;code&gt;&lt;span class="c1"&gt;// SPDX-License-Identifier: MIT
&lt;/span&gt;&lt;span class="k"&gt;pragma&lt;/span&gt; &lt;span class="n"&gt;solidity&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;/// @title AIScoreOracle
/// @notice AI-powered loan approval contract on XDC Network
/// @dev Live on Apothem: 0xE031843227668f530DC0E59Bb093ED6763Dcd84D
&lt;/span&gt;&lt;span class="k"&gt;contract&lt;/span&gt; &lt;span class="n"&gt;AIScoreOracle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;trustedOracle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// Wallet that submits AI scores
&lt;/span&gt;    &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;approvalThreshold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Minimum score to get approved (0–1000)
&lt;/span&gt;    &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;totalApplications&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Application&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;aiScore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;          &lt;span class="c1"&gt;// AI credit score (0–1000)
&lt;/span&gt;        &lt;span class="kt"&gt;string&lt;/span&gt;  &lt;span class="n"&gt;riskCategory&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// "LOW", "MEDIUM", "HIGH", "PENDING"
&lt;/span&gt;        &lt;span class="kt"&gt;bool&lt;/span&gt;    &lt;span class="n"&gt;approved&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;bool&lt;/span&gt;    &lt;span class="n"&gt;processed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;mapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;applications&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;address&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;applicantList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;event&lt;/span&gt; &lt;span class="n"&gt;LoanApplied&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="k"&gt;indexed&lt;/span&gt; &lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;event&lt;/span&gt; &lt;span class="n"&gt;AIScoreSubmitted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="k"&gt;indexed&lt;/span&gt; &lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt;  &lt;span class="n"&gt;risk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;bool&lt;/span&gt;    &lt;span class="n"&gt;approved&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;modifier&lt;/span&gt; &lt;span class="n"&gt;onlyOwner&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="s"&gt;"Only owner"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;modifier&lt;/span&gt; &lt;span class="n"&gt;onlyOracle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;trustedOracle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Only oracle"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="n"&gt;_oracle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;_threshold&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;owner&lt;/span&gt;             &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;trustedOracle&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_oracle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;approvalThreshold&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_threshold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// @notice Any user can apply for a loan (once per address)
&lt;/span&gt;    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;applyForLoan&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;external&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;applications&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Already applied"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;applications&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;aiScore&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;      &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;riskCategory&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"PENDING"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;approved&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;     &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;processed&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;    &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;timestamp&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;

        &lt;span class="n"&gt;applicantList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;totalApplications&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;emit&lt;/span&gt; &lt;span class="n"&gt;LoanApplied&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// @notice Oracle submits the AI credit score for an applicant
&lt;/span&gt;    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;submitAIScore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;external&lt;/span&gt; &lt;span class="n"&gt;onlyOracle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                          &lt;span class="s"&gt;"Score must be 0-1000"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;applications&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"No application found"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;applications&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;processed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="s"&gt;"Already processed"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;Application&lt;/span&gt; &lt;span class="k"&gt;storage&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;applications&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;aiScore&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;processed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;approved&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;approvalThreshold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt;      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;               &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;riskCategory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"LOW"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;approvalThreshold&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;riskCategory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"MEDIUM"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;                                 &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;riskCategory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"HIGH"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;emit&lt;/span&gt; &lt;span class="n"&gt;AIScoreSubmitted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;riskCategory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;approved&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// @notice Read the loan decision for any address
&lt;/span&gt;    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getDecision&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;external&lt;/span&gt; &lt;span class="k"&gt;view&lt;/span&gt; &lt;span class="k"&gt;returns&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="k"&gt;memory&lt;/span&gt; &lt;span class="n"&gt;risk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;bool&lt;/span&gt;    &lt;span class="n"&gt;approved&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;bool&lt;/span&gt;    &lt;span class="n"&gt;processed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;appliedAt&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Application&lt;/span&gt; &lt;span class="k"&gt;memory&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;applications&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;applicant&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;aiScore&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;riskCategory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;approved&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;processed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// @notice Total number of applicants ever
&lt;/span&gt;    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getApplicantCount&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;external&lt;/span&gt; &lt;span class="k"&gt;view&lt;/span&gt; &lt;span class="k"&gt;returns&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint256&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;applicantList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What each function does
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Who Calls It&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;applyForLoan()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Any user&lt;/td&gt;
&lt;td&gt;Registers a loan application on-chain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;submitAIScore(address, uint256)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Oracle only&lt;/td&gt;
&lt;td&gt;Submits AI score, triggers approve/reject&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;getDecision(address)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anyone&lt;/td&gt;
&lt;td&gt;Reads the stored decision for any address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;getApplicantCount()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anyone&lt;/td&gt;
&lt;td&gt;Returns total number of applicants&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Step 5 — Compile the Contract
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx hardhat compile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Compiled 1 Solidity file successfully (evm target: paris).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 6 — Write the Deploy Script
&lt;/h2&gt;

&lt;p&gt;Delete &lt;code&gt;scripts/deploy.js&lt;/code&gt; and recreate it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// scripts/deploy.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hardhat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;deployer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;oracle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getSigners&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Deploying AIScoreOracle to XDC Apothem...&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Deployer :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;deployer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oracle   :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;oracle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deployerBalance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getBalance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deployer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Balance  :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;formatEther&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deployerBalance&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TXDC&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Deploy: pass oracle address and approval threshold of 700 out of 1000&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AIScoreOracle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getContractFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AIScoreOracle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;AIScoreOracle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oracle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;700&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;gasLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;_000_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;// Set manually — XDC estimateGas is unreliable&lt;/span&gt;
    &lt;span class="na"&gt;gasPrice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parseUnits&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12.5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gwei&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// Apothem minimum after XDC 2.0&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitForDeployment&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;contractAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAddress&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deployTx&lt;/span&gt;        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deploymentTransaction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Contract deployed!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Address  :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;contractAddress&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TX Hash  :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;deployTx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Explorer :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`https://testnet.xdcscan.com/address/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;contractAddress&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TX Link  :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`https://testnet.xdcscan.com/tx/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;deployTx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 7 — Deploy to XDC Apothem
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx hardhat run scripts/deploy.js &lt;span class="nt"&gt;--network&lt;/span&gt; apothem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see output like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deploying AIScoreOracle to XDC Apothem...

Deployer : 0x2D9305d0c20106beDA3C19d9B8ac8f8AD061b0D5
Oracle   : 0xE65AbC44aa93B25320D9BB9eB6B5cEa3C0a21872
Balance  : 1000.0 TXDC

Contract deployed!
Address  : 0xE031843227668f530DC0E59Bb093ED6763Dcd84D
TX Hash  : 0x7fa75b52a379b20a1c3a4d8966a7c78f1ac29ba69eb25dded01185dcc66c7843
Explorer : https://testnet.xdcscan.com/address/0xE031843227668f530DC0E59Bb093ED6763Dcd84D
TX Link  : https://testnet.xdcscan.com/tx/0x7fa75b52a379b20a1c3a4d8966a7c78f1ac29ba69eb25dded01185dcc66c7843
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the Explorer link — your contract is live on XDC Apothem! 🎉&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8 — User Applies for a Loan
&lt;/h2&gt;

&lt;p&gt;Write an interaction script. Create &lt;code&gt;scripts/apply.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// scripts/apply.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hardhat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CONTRACT_ADDRESS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_DEPLOYED_CONTRACT_ADDRESS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;deployer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getSigners&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AIScoreOracle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getContractFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AIScoreOracle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;AIScoreOracle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;CONTRACT_ADDRESS&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Applying for a loan from:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;deployer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;applyForLoan&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;gasLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;gasPrice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parseUnits&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12.5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gwei&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Application submitted!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TX Hash  :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TX Link  :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`https://testnet.xdcscan.com/tx/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Check pending status&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;risk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;approved&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;processed&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDecision&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deployer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;On-chain status:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  Risk      :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;risk&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// PENDING&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  Processed :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;processed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// false&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  Score     :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Waiting for AI oracle to score this application...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx hardhat run scripts/apply.js &lt;span class="nt"&gt;--network&lt;/span&gt; apothem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output from our live deployment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Applying for a loan from: 0x2D9305d0c20106beDA3C19d9B8ac8f8AD061b0D5
Application submitted!
TX Hash  : 0xe95ba3312aa0e710fb45cc6980c271a499570c65d89eb45cadda118719d64387
TX Link  : https://testnet.xdcscan.com/tx/0xe95ba3312aa0e710fb45cc6980c271a499570c65d89eb45cadda118719d64387

On-chain status:
  Risk      : PENDING
  Processed : false
  Score     : 0

Waiting for AI oracle to score this application...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 9 — AI Oracle Submits the Score
&lt;/h2&gt;

&lt;p&gt;Now the oracle wallet submits the AI-generated score. Create &lt;code&gt;scripts/submit_score.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// scripts/submit_score.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hardhat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CONTRACT_ADDRESS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_DEPLOYED_CONTRACT_ADDRESS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;APPLICANT&lt;/span&gt;        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;THE_APPLICANT_WALLET_ADDRESS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AI_SCORE&lt;/span&gt;         &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;711&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// Replace with your AI model's output (0–1000)&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Use the second signer — the oracle wallet&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[,&lt;/span&gt; &lt;span class="nx"&gt;oracle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getSigners&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AIScoreOracle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getContractFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AIScoreOracle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;AIScoreOracle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;CONTRACT_ADDRESS&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oracle wallet     :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;oracle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Applicant         :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;APPLICANT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AI Credit Score   :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AI_SCORE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/ 1000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Approval Threshold: 700 / 1000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Decision          :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AI_SCORE&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;700&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APPROVE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;REJECT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Submitting AI score to blockchain...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oracle&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;submitAIScore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;APPLICANT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AI_SCORE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;gasLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;gasPrice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parseUnits&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12.5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gwei&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;AI score committed on-chain!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TX Hash  :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TX Link  :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`https://testnet.xdcscan.com/tx/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Read final decision&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;risk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;approved&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;processed&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDecision&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;APPLICANT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Final decision from contract:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  AI Score   :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/ 1000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  Risk Level :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;risk&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  Processed  :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;processed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  Decision   :&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;approved&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APPROVED ✅&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;REJECTED ❌&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx hardhat run scripts/submit_score.js &lt;span class="nt"&gt;--network&lt;/span&gt; apothem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output from our live deployment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Oracle wallet     : 0xE65AbC44aa93B25320D9BB9eB6B5cEa3C0a21872
Applicant         : 0x2D9305d0c20106beDA3C19d9B8ac8f8AD061b0D5
AI Credit Score   : 711 / 1000
Approval Threshold: 700 / 1000
Decision          : APPROVE

Submitting AI score to blockchain...

AI score committed on-chain!
TX Hash  : 0xcf230923452c8d054435b685ce67f7ad138e4b37e1688e2e8a6852b8af12edf9
TX Link  : https://testnet.xdcscan.com/tx/0xcf230923452c8d054435b685ce67f7ad138e4b37e1688e2e8a6852b8af12edf9

Final decision from contract:
  AI Score   : 711 / 1000
  Risk Level : MEDIUM
  Processed  : true
  Decision   : APPROVED ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 10 — Verify Everything On-Chain
&lt;/h2&gt;

&lt;p&gt;Open the live contract on XDCScan Testnet:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://testnet.xdcscan.com/address/0xE031843227668f530DC0E59Bb093ED6763Dcd84D"&gt;https://testnet.xdcscan.com/address/0xE031843227668f530DC0E59Bb093ED6763Dcd84D&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transactions tab&lt;/strong&gt; — all 3 transactions visible:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TX Hash&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Gas Used&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x7fa75b52...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contract deploy&lt;/td&gt;
&lt;td&gt;907,449&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0xe95ba331...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;applyForLoan()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;161,014&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0xcf230923...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;submitAIScore(711)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;83,122&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Events tab&lt;/strong&gt; — two on-chain events emitted:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LoanApplied(
  applicant = 0x2D9305d0c20106beDA3C19d9B8ac8f8AD061b0D5,
  timestamp = 1746...
)

AIScoreSubmitted(
  applicant = 0x2D9305d0c20106beDA3C19d9B8ac8f8AD061b0D5,
  score     = 711,
  risk      = "MEDIUM",
  approved  = true
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Read Contract tab&lt;/strong&gt; — call &lt;code&gt;getDecision(0x2D9305d0c20106beDA3C19d9B8ac8f8AD061b0D5)&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;score     → 711
risk      → MEDIUM
approved  → true
processed → true
appliedAt → 1746...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every decision is &lt;strong&gt;permanent, immutable, and publicly verifiable&lt;/strong&gt; — no central authority, no trust required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 11 — Replace Demo AI with a Real Model
&lt;/h2&gt;

&lt;p&gt;In &lt;code&gt;submit_score.js&lt;/code&gt; the score is hardcoded as &lt;code&gt;711&lt;/code&gt;. In production, replace that with a real ML model call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python scikit-learn example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ai_model.py
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;joblib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;joblib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"credit_model.pkl"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_ai_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;applicant_address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="s"&gt;"""
    Fetch applicant data, run the model, return a score 0–1000.
    """&lt;/span&gt;
    &lt;span class="n"&gt;features&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fetch_applicant_features&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;applicant_address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;probability&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;predict_proba&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="p"&gt;])[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;probability&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then expose it as an API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# oracle_api.py  (Flask)
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;ai_model&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;get_ai_score&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/score"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;score&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="s"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;get_ai_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And call it from your Hardhat script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// In submit_score.js — replace the hardcoded score:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://localhost:5000/score&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;APPLICANT&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;score&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AI_SCORE&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything else — the Solidity contract, the Hardhat scripts, the on-chain verification — stays exactly the same.&lt;/p&gt;




&lt;h2&gt;
  
  
  Important XDC Developer Notes
&lt;/h2&gt;

&lt;p&gt;These are lessons learned from our actual deployment:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Root Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;under min gas price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;XDC 2.0 upgrade raised Apothem minimum&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;12.5 gwei&lt;/code&gt; minimum&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;estimateGas&lt;/code&gt; returns null&lt;/td&gt;
&lt;td&gt;XDC Apothem doesn't support &lt;code&gt;eth_estimateGas&lt;/code&gt; reliably&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;gasLimit&lt;/code&gt; manually&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EIP-1559 tx rejected&lt;/td&gt;
&lt;td&gt;XDC does not support type-2 transactions&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;gasPrice&lt;/code&gt; not &lt;code&gt;maxFeePerGas&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Full Live Transaction Summary
&lt;/h2&gt;

&lt;p&gt;All transactions verified on &lt;a href="https://testnet.xdcscan.com"&gt;XDCScan Testnet&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;TX Hash&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deploy contract&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x7fa75b52...c7843&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://testnet.xdcscan.com/tx/0x7fa75b52a379b20a1c3a4d8966a7c78f1ac29ba69eb25dded01185dcc66c7843"&gt;View ↗&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apply for loan&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0xe95ba331...4387&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://testnet.xdcscan.com/tx/0xe95ba3312aa0e710fb45cc6980c271a499570c65d89eb45cadda118719d64387"&gt;View ↗&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI score (711) submitted&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0xcf230923...edf9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://testnet.xdcscan.com/tx/0xcf230923452c8d054435b685ce67f7ad138e4b37e1688e2e8a6852b8af12edf9"&gt;View ↗&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;XDC is fully EVM-compatible — Solidity and Hardhat work exactly as on Ethereum&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;oracle pattern&lt;/strong&gt; is the standard way to bridge AI (off-chain) and smart contracts (on-chain)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XDC Apothem gas settings:&lt;/strong&gt; minimum &lt;code&gt;12.5 gwei&lt;/code&gt;, always set &lt;code&gt;gasLimit&lt;/code&gt; manually, avoid EIP-1559&lt;/li&gt;
&lt;li&gt;XDC's near-zero fees make per-user AI-triggered actions economically viable at scale&lt;/li&gt;
&lt;li&gt;Every decision is permanent, immutable, and verifiable on XDCScan Testnet&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📖 &lt;a href="https://docs.xdc.network"&gt;XDC Network Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🧪 &lt;a href="https://faucet.apothem.network"&gt;Apothem Faucet&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔍 &lt;a href="https://testnet.xdcscan.com"&gt;XDCScan Testnet Explorer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://testnet.xdcscan.com/address/0xE031843227668f530DC0E59Bb093ED6763Dcd84D"&gt;Live Contract on XDCScan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 &lt;a href="https://xdc.dev"&gt;XDC Developer Forum&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🛠️ &lt;a href="https://github.com/XinFinOrg"&gt;XinFin GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>How Data-Driven UI UX Design Improves Usability, Engagement, and Conversion Rates</title>
      <dc:creator>Umar siddique </dc:creator>
      <pubDate>Wed, 29 Apr 2026 07:45:14 +0000</pubDate>
      <link>https://www.xdc.dev/zeeframes/how-data-driven-ui-ux-design-improves-usability-engagement-and-conversion-rates-1ope</link>
      <guid>https://www.xdc.dev/zeeframes/how-data-driven-ui-ux-design-improves-usability-engagement-and-conversion-rates-1ope</guid>
      <description>&lt;p&gt;Digital products are no longer judged only by how they look. Users expect websites, apps, platforms, and dashboards to be fast, simple, useful, and easy to navigate. If a product feels confusing or difficult to use, users can leave within seconds and choose another option.&lt;br&gt;
This is why data-driven UI UX Design has become so important. Instead of making design decisions based on personal opinions, assumptions, or trends, data-driven design uses real user behavior to improve the overall experience. It helps teams understand what users want, where they struggle, and what actions they are most likely to take.&lt;br&gt;
When used correctly, data-driven design can improve usability, increase engagement, and support better conversion rates. It allows businesses to create digital experiences that are not only visually appealing but also practical, measurable, and aligned with user needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Data-Driven UI UX Design?
&lt;/h2&gt;

&lt;p&gt;Data-driven UI UX design is the process of using research, analytics, testing, and feedback to guide design decisions. It helps designers understand how users interact with a digital product and what changes can make the experience better.&lt;br&gt;
&lt;strong&gt;This data can come from many sources, including:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website analytics&lt;/li&gt;
&lt;li&gt;Heatmaps&lt;/li&gt;
&lt;li&gt;Session recordings&lt;/li&gt;
&lt;li&gt;User surveys&lt;/li&gt;
&lt;li&gt;Usability testing&lt;/li&gt;
&lt;li&gt;A/B testing&lt;/li&gt;
&lt;li&gt;Customer feedback&lt;/li&gt;
&lt;li&gt;Conversion tracking&lt;/li&gt;
&lt;li&gt;Support tickets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, if analytics show that users are leaving a signup page before completing the form, designers can investigate why. The issue might be too many form fields, unclear instructions, poor mobile design, or a lack of trust signals.&lt;br&gt;
Without data, teams may only guess what the problem is. With data, they can identify the issue more accurately and improve the experience with purpose.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why Data Matters in Modern Product Design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Good design is not just about colors, fonts, icons, or layouts. It is about helping users complete their goals with less effort. A beautiful interface may attract attention, but if users cannot understand what to do next, the design is not effective.&lt;br&gt;
Data helps remove guesswork from the design process. It shows how users actually behave rather than how teams assume they behave. This is important because internal teams often view a product differently from first-time users.&lt;br&gt;
For example, a product team may believe that a navigation menu is simple, but user recordings may show that visitors are struggling to find important pages. Similarly, a call-to-action button may look visually attractive, but click data may show that users are ignoring it.&lt;br&gt;
A skilled &lt;a href="https://zeeframes.com/"&gt;UI UX Design Agency&lt;/a&gt; may use this type of data to create interfaces that balance business goals with user expectations. The result is a design that feels natural, supports user journeys, and encourages meaningful action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.xdc.dev/images/5fTuDQ62S4hDrxhv6XcK9TAw4N_q4wK6y4gEJiNtVqw/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L21reXY5NXpqa3cx/bG5sa2JsZW13LnBu/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://www.xdc.dev/images/5fTuDQ62S4hDrxhv6XcK9TAw4N_q4wK6y4gEJiNtVqw/w:880/mb:500000/ar:1/aHR0cHM6Ly93d3cu/eGRjLmRldi91cGxv/YWRzL2FydGljbGVz/L21reXY5NXpqa3cx/bG5sa2JsZW13LnBu/Zw" alt="ui ux design agency" width="880" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How Data-Driven Design Improves Usability&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Usability is one of the most important parts of any digital experience. It refers to how easily users can interact with a product and complete their tasks.&lt;br&gt;
Data-driven design improves usability by identifying friction points. These are moments where users feel confused, delayed, or frustrated. Common usability problems include unclear navigation, long forms, slow-loading pages, poor mobile layouts, weak content hierarchy, and confusing buttons.&lt;br&gt;
By analyzing user behavior, design teams can find and fix these problems. For example, heatmaps may show that users are clicking on an image because they think it is a button. This signals that the design needs clearer visual cues. Form analytics may show that users abandon a checkout process at a specific field. This could mean the field is unnecessary, confusing, or asking for sensitive information too early.&lt;br&gt;
&lt;strong&gt;Improving usability often involves small but powerful changes, such as:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Making buttons more visible&lt;/li&gt;
&lt;li&gt;Reducing unnecessary steps&lt;/li&gt;
&lt;li&gt;Simplifying navigation&lt;/li&gt;
&lt;li&gt;Improving page structure&lt;/li&gt;
&lt;li&gt;Using clearer labels&lt;/li&gt;
&lt;li&gt;Making content easier to scan&lt;/li&gt;
&lt;li&gt;Optimizing the mobile experience&lt;/li&gt;
&lt;li&gt;Improving accessibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When users can move through a product smoothly, they are more likely to stay, explore, and complete important actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Data-Driven Design Increases Engagement
&lt;/h3&gt;

&lt;p&gt;User engagement shows how actively people interact with a digital product. It can be measured through actions such as clicks, scroll depth, time on page, repeat visits, feature usage, video views, or completed tasks.&lt;br&gt;
Data-driven design improves engagement by helping teams understand what users find valuable. If users spend more time on certain sections of a page, that content may be highly relevant. If they ignore a feature, it may need better placement, clearer explanation, or improved onboarding.&lt;br&gt;
Engagement also depends on how well the design matches user intent. A visitor who lands on a pricing page likely wants clarity, comparison, and confidence. A user opening a dashboard likely wants quick access to key information. A first-time app user needs guidance and reassurance.&lt;br&gt;
When designers study user behavior, they can create experiences that feel more relevant and useful. This may include personalized recommendations, better onboarding screens, interactive elements, improved content flow, or clearer product education.&lt;br&gt;
The more relevant the experience feels, the more likely users are to interact with it.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Data-Driven UI UX Design Improves Conversion Rates
&lt;/h3&gt;

&lt;p&gt;Conversion rate is one of the clearest ways to measure design performance. A conversion can mean different things depending on the product or business. It may include signing up for a newsletter, booking a demo, creating an account, purchasing a product, downloading a resource, or submitting a contact form.&lt;br&gt;
Data-driven design improves conversions by reducing friction and making the next step easier to understand. Many users do not convert because the design fails to answer their questions or build enough confidence.&lt;br&gt;
For example, if users visit a landing page but do not click the main CTA, the problem may be unclear messaging, weak visual hierarchy, missing social proof, or poor button placement. If users add products to a cart but do not complete checkout, the issue may be unexpected costs, a complicated checkout process, or limited payment options.&lt;br&gt;
Design teams can use data to test and improve these areas. They may experiment with different headlines, CTA text, page layouts, form lengths, trust badges, testimonials, or pricing displays.&lt;br&gt;
The goal is not to pressure users. The goal is to make decisions easier by giving users the right information at the right time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Role of A/B Testing in Design Decisions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A/B testing is a useful method for comparing two versions of a design. It helps teams understand which version performs better based on actual user behavior.&lt;br&gt;
For example, a team may test two different signup page layouts. Version A may have a short form with minimal text, while Version B may include more explanation and trust signals. After enough users interact with both versions, the data can show which one leads to more completed signups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A/B testing can be used for many design elements, including:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Headlines&lt;/li&gt;
&lt;li&gt;CTA buttons&lt;/li&gt;
&lt;li&gt;Page layouts&lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Form fields&lt;/li&gt;
&lt;li&gt;Pricing sections&lt;/li&gt;
&lt;li&gt;Navigation menus&lt;/li&gt;
&lt;li&gt;Onboarding flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach helps teams avoid making design decisions based only on personal preference. Instead, they can use measurable results to choose the version that works better for users and business goals.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;How No-Code Development Supports Faster Testing&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Speed is important in modern product design. Traditional development cycles can take time, especially when teams need to test multiple design ideas. This is where &lt;a href="https://zeeframes.com/"&gt;No code development&lt;/a&gt; can support data-driven design.&lt;br&gt;
No-code tools allow teams to create landing pages, prototypes, forms, dashboards, and MVPs without writing complex code. This makes it easier to launch design experiments, collect data, and make improvements quickly.&lt;br&gt;
For startups, agencies, and product teams, this can reduce the time between idea and validation. Instead of waiting weeks to test a new layout or feature concept, teams can create a working version, measure user behavior, and decide what to improve next.&lt;br&gt;
When no-code development is combined with data-driven UI UX design, businesses can move faster while still making informed decisions.&lt;br&gt;
&lt;strong&gt;Key Metrics to Track&lt;/strong&gt;&lt;br&gt;
To improve usability, engagement, and conversions, teams should focus on the right metrics. Some of the most useful include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bounce rate: Shows how many users leave after viewing one page.&lt;/li&gt;
&lt;li&gt;Click-through rate: Measures how often users click specific links or buttons.&lt;/li&gt;
&lt;li&gt;Conversion rate: Tracks how many users complete a desired action.&lt;/li&gt;
&lt;li&gt;Drop-off rate: Identifies where users leave a process.&lt;/li&gt;
&lt;li&gt;Time on page: Shows how long users spend with content.&lt;/li&gt;
&lt;li&gt;Task completion rate: Measures whether users can complete key actions.&lt;/li&gt;
&lt;li&gt;User feedback: Explains the reasons behind user behavior&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These metrics become more valuable when combined. Numbers can show what is happening, while feedback can explain why it is happening.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Data-driven UI UX design helps businesses create digital products that are easier to use, more engaging, and more effective at converting users. It replaces guesswork with evidence and allows teams to make smarter design decisions.&lt;br&gt;
By studying user behavior, testing ideas, and improving based on real insights, businesses can create experiences that serve both users and business goals. In a competitive digital environment, the products that perform best are not always the ones with the most complex designs. They are often the ones that understand their users the best.&lt;/p&gt;

&lt;h3&gt;
  
  
  FAQs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. What is data-driven UI UX design?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Data-driven UI UX design uses analytics, user feedback, testing, and behavior insights to guide design decisions and improve the user experience.&lt;br&gt;
&lt;strong&gt;2. How does data-driven design improve usability?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It helps identify where users struggle, such as confusing navigation, long forms, or unclear buttons, so teams can remove friction and simplify the experience.&lt;br&gt;
&lt;strong&gt;3. Can UI UX design increase conversion rates?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Better design can make user journeys clearer, reduce hesitation, and encourage users to complete actions such as signing up, purchasing, or booking a demo.&lt;br&gt;
&lt;strong&gt;4. Why should a business hire a UI UX Design Agency?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A UI UX Design Agency can bring research, strategy, testing, and design expertise together to create user-focused digital products that support business growth.&lt;br&gt;
&lt;strong&gt;5. How does no-code development help with design testing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No-code development allows teams to build and test pages, prototypes, and MVPs faster, making it easier to collect data and improve designs quickly.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Using the XDC Network RPC: A Practical Guide for Developers, Wallets, and Integrations</title>
      <dc:creator>Omkar Mestry</dc:creator>
      <pubDate>Tue, 28 Apr 2026 13:12:21 +0000</pubDate>
      <link>https://www.xdc.dev/omkar_mestry_737f5f43d6e1/using-the-xdc-network-rpc-a-practical-guide-for-developers-wallets-and-integrations-2jhm</link>
      <guid>https://www.xdc.dev/omkar_mestry_737f5f43d6e1/using-the-xdc-network-rpc-a-practical-guide-for-developers-wallets-and-integrations-2jhm</guid>
      <description>&lt;p&gt;If you are building on, integrating with, or transacting on the XDC Network, you will need an RPC endpoint. RPC (Remote Procedure Call) is the URL your wallet, dApp, or backend uses to read from and write to the blockchain. Without it, your software cannot talk to the network.&lt;/p&gt;

&lt;p&gt;The two canonical lists of XDC RPC providers are on Chainlist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mainnet (Chain ID 50, native asset XDC):&lt;/strong&gt; &lt;code&gt;https://chainlist.org/chain/50&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apothem Testnet (Chain ID 51, native asset TXDC):&lt;/strong&gt; &lt;code&gt;https://chainlist.org/chain/51&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyone developer, exchange, custodian, dApp team, or end user can pick any of the endpoints listed there. No permission needed; just a working URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  XDC Mainnet RPC providers (Chain ID 50)
&lt;/h2&gt;

&lt;p&gt;Widely used public HTTP endpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://rpc.xinfin.network&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://rpc1.xinfin.network&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://erpc.xinfin.network&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://earpc.xinfin.network&lt;/code&gt; (archive endpoint)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://rpc.xdc.org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://rpc.xdc.network&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://rpc.xdcrpc.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://erpc.xdcrpc.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WebSocket endpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wss://rpc.xdcrpc.com/ws&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wss://erpc.xdcrpc.com/ws&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wss://ews.xinfin.network/ws&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Established commercial RPC-as-a-service providers also expose XDC Mainnet endpoints, including &lt;strong&gt;Ankr&lt;/strong&gt;, &lt;strong&gt;Tatum&lt;/strong&gt;, and &lt;strong&gt;Dwellir&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  XDC Apothem Testnet RPC providers (Chain ID 51)
&lt;/h2&gt;

&lt;p&gt;Use Apothem for development and testing. Test TXDC is free from the faucets at &lt;code&gt;https://faucet.apothem.network&lt;/code&gt; and &lt;code&gt;https://faucet.blocksscan.io&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;HTTP endpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://rpc.apothem.network&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://erpc.apothem.network&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://apothem.xdcrpc.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WebSocket endpoint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wss://ws.apothem.network&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  "Free" public RPCs are not really free at scale
&lt;/h2&gt;

&lt;p&gt;Every RPC endpoint public or commercial has rate limits. Public/community URLs are fine for development, wallets, and light-traffic apps. Once your application starts generating real load, you will hit throttling, timeouts, or outright blocking.&lt;/p&gt;

&lt;p&gt;Commercial providers expose the same trade-off explicitly: a free tier with a hard request cap, then paid tiers above it. As a reference point, Ankr's freemium tier on XDC has historically been around 30 requests/sec, with paid premium going up to ~1,500 req/sec at roughly USD $0.02 per 1,000 requests — cheap on a unit-cost basis, but it scales with your call volume. Verify current pricing on the provider's site before committing.&lt;/p&gt;

&lt;p&gt;There is no genuinely free, unlimited, production-grade RPC  for XDC or any other major chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  How RPC is actually provided on a decentralised network
&lt;/h2&gt;

&lt;p&gt;XDC is decentralised, so there is no single "official" RPC. Anyone who can run a node can expose an endpoint, which is why the Chainlist directory grows over time. In practice, RPC reaches end users through four layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Public/community endpoints&lt;/strong&gt; — free, rate-limited, no SLA. Good for development and low-traffic use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commercial RPC-as-a-service&lt;/strong&gt; (Ankr, Tatum, Dwellir, etc.) — free tiers for moderate use, paid tiers for production volume, optional dedicated managed nodes (e.g. archive nodes) for institutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects building on XDC providing RPC to their own customers&lt;/strong&gt; as part of their product — either by running their own infrastructure or by routing customers to a commercial provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted nodes&lt;/strong&gt; — run by exchanges, custodians, indexers, and any team for whom XDC is core infrastructure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The reason the market is layered like this is simple: someone has to fund and maintain the servers. A single free, unlimited, ultra-reliable public RPC would attract everyone, saturate, and stop being reliable. The layered market is how that catch-22 gets resolved in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run your own RPC node, the right call for serious users
&lt;/h2&gt;

&lt;p&gt;For institutions and any project that depends on XDC for core operations, the right answer is to run your own node. The setup is well documented and the hardware needs are modest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No rate limits&lt;/strong&gt; — you control throughput.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy&lt;/strong&gt; — your queries and transaction broadcasts stay inside your own network.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt; — a node in your own VPC is materially faster than any external endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No vendor lock-in&lt;/strong&gt; — no third-party outage, throttling, or pricing change can take you down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable cost&lt;/strong&gt; — pay for hardware and bandwidth, not per request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This should be a baseline requirement, not an optimisation, for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exchanges (CEX and DEX), custodians, and institutional wallet providers&lt;/li&gt;
&lt;li&gt;Banks, payment processors, and regulated entities&lt;/li&gt;
&lt;li&gt;Block explorers, analytics platforms, and indexers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Setup resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated/private RPC server setup guide:&lt;/strong&gt; &lt;code&gt;https://www.xdc.dev/ruslan_wing/setting-up-an-rpc-node-server-for-your-dapp-on-xdc-network-a-comprehensive-guide-3dm9&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-node repository:&lt;/strong&gt; &lt;code&gt;https://github.com/XinFinOrg/XinFin-Node&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XDC documentation:&lt;/strong&gt; &lt;code&gt;https://docs.xdc.network&lt;/code&gt; and &lt;code&gt;https://docs.xdc.community&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A standard production setup is two full nodes behind a load balancer plus a separate archive node for historical queries, with monitoring on sync status, peer count, and disk health.&lt;/p&gt;

&lt;h2&gt;
  
  
  When you need RPC, and when you don't
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;centralised trading system&lt;/strong&gt; does not need RPC for its core matching engine. Trades are off-chain, inside the exchange's own systems. RPC only matters at deposit and withdrawal edges.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;decentralised exchange (DEX)&lt;/strong&gt; lives on-chain. Every swap and quote depends on RPC, and RPC quality directly drives user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Recommendations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Development and testing&lt;/strong&gt; — use Apothem with the public RPC URLs above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small production app or wallet&lt;/strong&gt; — public Mainnet endpoints with fallback logic across two or three URLs; move to a paid commercial plan as traffic grows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exchanges, custodians, wallet providers, banks, and core-XDC operations&lt;/strong&gt; — run your own RPC node. Treat it as required infrastructure.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is an RPC, in plain English?&lt;/strong&gt;&lt;br&gt;
A URL your software uses to read from and write to the blockchain. Without it, your application has no way of seeing or interacting with the chain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mainnet (50) vs Apothem (51)?&lt;/strong&gt;&lt;br&gt;
Mainnet uses real XDC. Apothem uses free test TXDC. Use Apothem for development; Mainnet for production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP vs WebSocket (&lt;code&gt;wss://&lt;/code&gt;)?&lt;/strong&gt;&lt;br&gt;
HTTP is request-response — fine for normal reads and writes. WebSocket keeps a connection open and lets you subscribe to events (new blocks, contract logs) in real time — needed for trading bots, indexers, and live dashboards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need an archive node?&lt;/strong&gt;&lt;br&gt;
Only if you need to query historical state — explorers, analytics, audit/accounting systems. Most apps don't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does paid commercial RPC cost?&lt;/strong&gt;&lt;br&gt;
Cheap per request (around $0.02 per 1,000 on Ankr's premium tier historically), but total cost scales with your call volume. Always check the provider's current pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why doesn't the XDC Network just provide one definitive RPC?&lt;/strong&gt;&lt;br&gt;
Doing so means running an operating business with capacity, support, and liability obligations. It is also self-defeating: a single free, reliable, unlimited RPC would be used by everyone and saturate. The layered market — community, commercial, self-hosted — is how decentralised networks solve this in practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if my public RPC goes down?&lt;/strong&gt;&lt;br&gt;
Reads time out, transactions fail to broadcast. Production apps should run their own node or, at minimum, keep a list of fallback URLs and rotate on failure.&lt;/p&gt;




&lt;p&gt;The full and most current list of providers is always on Chainlist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mainnet: &lt;code&gt;https://chainlist.org/chain/50&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Apothem: &lt;code&gt;https://chainlist.org/chain/51&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rpc</category>
      <category>xdc</category>
      <category>xdcnetwork</category>
      <category>decentralized</category>
    </item>
    <item>
      <title>How to Integrate XDC Network: A Technical Guide</title>
      <dc:creator>Omkar Mestry</dc:creator>
      <pubDate>Thu, 23 Apr 2026 08:44:46 +0000</pubDate>
      <link>https://www.xdc.dev/omkar_mestry_737f5f43d6e1/how-to-integrate-xdc-network-a-technical-guide-56e0</link>
      <guid>https://www.xdc.dev/omkar_mestry_737f5f43d6e1/how-to-integrate-xdc-network-a-technical-guide-56e0</guid>
      <description>&lt;h1&gt;
  
  
  How to Integrate XDC Network: A Technical Guide
&lt;/h1&gt;

&lt;p&gt;A complete technical walkthrough for integrating the XDC Network into custodial wallets, exchanges, and any backend application.&lt;/p&gt;

&lt;p&gt;If your team is already building on EVM chains like Ethereum, Polygon, or BNB Chain, integrating XDC will feel familiar — it's fully EVM-compatible, forked from go-ethereum, and runs the same tooling (Ethers.js, Web3.py, Hardhat, Truffle, MetaMask). The main thing to watch for is the &lt;code&gt;xdc&lt;/code&gt; address prefix, which we'll cover in detail.&lt;/p&gt;

&lt;p&gt;Let's dive in.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Overview
&lt;/h2&gt;

&lt;p&gt;The XDC Network is an enterprise-grade, EVM-compatible Layer-1 blockchain using &lt;strong&gt;XDC 2.0 consensus&lt;/strong&gt; (an evolution of XinFin Delegated Proof-of-Stake). It's purpose-built for tokenized trade finance, real-world asset (RWA) settlement, and cross-border payments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key stats:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~2-second block times&lt;/li&gt;
&lt;li&gt;Sub-cent gas fees (often &amp;lt; $0.0001 per transfer)&lt;/li&gt;
&lt;li&gt;Up to 108 masternodes securing finality&lt;/li&gt;
&lt;li&gt;ISO 20022 messaging support&lt;/li&gt;
&lt;li&gt;R3 Corda interoperability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because XDC is EVM-compatible, most Ethereum tooling works out-of-the-box. The only material difference a custodian or application must handle is the address prefix: XDC natively uses an &lt;code&gt;xdc&lt;/code&gt; prefix in place of &lt;code&gt;0x&lt;/code&gt;, while the underlying address bytes are identical.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Network Parameters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Mainnet
&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;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Network Name&lt;/td&gt;
&lt;td&gt;XDC Network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;50&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native Currency&lt;/td&gt;
&lt;td&gt;XDC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block Time&lt;/td&gt;
&lt;td&gt;~2 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consensus&lt;/td&gt;
&lt;td&gt;XDC 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Min Gas Price&lt;/td&gt;
&lt;td&gt;0.25 Gwei&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public RPC&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;https://rpc.xinfin.network&lt;/code&gt; &lt;br&gt; &lt;code&gt;https://rpc.xdc.org&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wss://ws.xinfin.network&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block Explorer&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;https://www.xdcscan.com&lt;/code&gt; &lt;br&gt; &lt;code&gt;https://www.xdcscan.io&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Apothem Testnet
&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;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Network Name&lt;/td&gt;
&lt;td&gt;XDC Apothem Network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;51&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native Currency&lt;/td&gt;
&lt;td&gt;TXDC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block Time&lt;/td&gt;
&lt;td&gt;~2 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consensus&lt;/td&gt;
&lt;td&gt;XDC 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Min Gas Price&lt;/td&gt;
&lt;td&gt;0.25 Gwei&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public RPC&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;https://rpc.apothem.network&lt;/code&gt; &lt;br&gt; &lt;code&gt;https://erpc.apothem.network&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wss://ws.apothem.network&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block Explorer&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;https://testnet.xdcscan.com&lt;/code&gt; &lt;br&gt; &lt;code&gt;https://apothem.xdcscan.io&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Faucet&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;https://faucet.apothem.network&lt;/code&gt; &lt;br&gt; &lt;code&gt;https://faucet.blocksscan.io&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Production tip:&lt;/strong&gt; Run your own full node or subscribe to a commercial RPC provider (Ankr, GetBlock, Thirdweb, NOWNodes) for production. Public endpoints are fine for development but have rate limits and no SLA.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Address Format (Critical)
&lt;/h2&gt;

&lt;p&gt;This is the one thing that trips up every new integrator, so read this section carefully.&lt;/p&gt;

&lt;p&gt;XDC addresses are &lt;strong&gt;semantically identical&lt;/strong&gt; to Ethereum addresses — derived via secp256k1 key generation and Keccak-256 hashing, producing a 20-byte (40 hex character) address. The only difference is the prefix:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;XDC-native display&lt;/strong&gt; uses &lt;code&gt;xdc&lt;/code&gt; → &lt;code&gt;xdcA4e66f4Cc17752f331eaC6A20C00756156719519&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EVM-native display&lt;/strong&gt; uses &lt;code&gt;0x&lt;/code&gt; → &lt;code&gt;0xA4e66f4Cc17752f331eaC6A20C00756156719519&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 40 hex characters after the prefix are &lt;strong&gt;always identical&lt;/strong&gt;. Only the 2-character prefix swaps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conversion Rules
&lt;/h3&gt;

&lt;p&gt;Normalize addresses at your I/O boundary:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Internally&lt;/strong&gt;, store and sign using the &lt;code&gt;0x&lt;/code&gt; form — required by all Ethereum libraries (ethers.js, web3.js, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On input&lt;/strong&gt;, if a user pastes an &lt;code&gt;xdc&lt;/code&gt;-prefixed address, strip &lt;code&gt;xdc&lt;/code&gt; and prepend &lt;code&gt;0x&lt;/code&gt; before signing or submitting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On output&lt;/strong&gt; (deposit addresses shown to users, explorer links, confirmations), display in &lt;code&gt;xdc&lt;/code&gt; form for XDC ecosystem conformity.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Address Conversion Utility
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Minimal address conversion helper (JavaScript / TypeScript)&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;toEvm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xdc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;toXdc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xdc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;isValidXdcAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;evm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;toEvm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sr"&gt;/^0x&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;a-fA-F0-9&lt;/span&gt;&lt;span class="se"&gt;]{40}&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;evm&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Signed transactions must always use the &lt;code&gt;0x&lt;/code&gt; form internally.&lt;/strong&gt; The &lt;code&gt;xdc&lt;/code&gt; prefix is a display convention — the JSON-RPC node and the EVM itself operate on raw 20-byte addresses.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 18+ (or Python 3.10+, Go 1.21+, Java 11+ — whichever matches your stack)&lt;/li&gt;
&lt;li&gt;Ethers.js v6 or Web3.js v4 (or language-equivalent SDK)&lt;/li&gt;
&lt;li&gt;Access to an RPC endpoint (self-hosted full node or commercial provider)&lt;/li&gt;
&lt;li&gt;A secure key management system (HSM, KMS, or MPC) for custodial signing&lt;/li&gt;
&lt;li&gt;Test funds from the Apothem faucet for testnet validation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Integration Architecture
&lt;/h2&gt;

&lt;p&gt;A typical custodial integration has four components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Node / RPC Layer&lt;/strong&gt; — a full node or commercial RPC for reading chain state, estimating gas, and broadcasting transactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block Indexer&lt;/strong&gt; — a worker service that follows the chain head (with confirmations), detects deposits to custodied addresses, and records balances.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signing Service&lt;/strong&gt; — an isolated service (HSM/KMS/MPC) that constructs, signs, and submits withdrawal transactions. &lt;strong&gt;Never exposes private keys to the application layer.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Layer&lt;/strong&gt; — the user-facing REST/GraphQL interface. Responsible for address format normalization.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Integration Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Connect to the Network
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Ethers.js v6:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;JsonRpcProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;JsonRpcProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://rpc.xinfin.network&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xdc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Latest block:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Web3.py:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;web3&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Web3&lt;/span&gt;

&lt;span class="n"&gt;w3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Web3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Web3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTPProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'https://rpc.xinfin.network'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_connected&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="s"&gt;'RPC connection failed'&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Chain ID:'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chain_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="c1"&gt;# 50
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Latest block:'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;block_number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.2 Generate a Deposit Address
&lt;/h3&gt;

&lt;p&gt;For each user account, derive a fresh address using standard EVM wallet derivation (BIP-39 mnemonic + BIP-44 path). XDC's registered SLIP-44 coin type is &lt;code&gt;550&lt;/code&gt;, though many integrations reuse Ethereum's &lt;code&gt;60&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Mnemonic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;HDNodeWallet&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mnemonic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Mnemonic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fromPhrase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SEED_PHRASE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;root&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;HDNodeWallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fromMnemonic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mnemonic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;m/44'/550'/0'/0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;account&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deriveChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userIndex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;evmAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;              &lt;span class="c1"&gt;// 0x...&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;xdcAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xdc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;evmAddress&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// xdc... (for display)&lt;/span&gt;

&lt;span class="c1"&gt;// Persist { userId, derivationIndex, xdcAddress }&lt;/span&gt;
&lt;span class="c1"&gt;// NEVER persist the private key — derive on demand from the HSM-held seed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 Monitor Deposits
&lt;/h3&gt;

&lt;p&gt;Poll or subscribe to new blocks. For each block, iterate transactions and match the &lt;code&gt;to&lt;/code&gt; field (or XRC-20 &lt;code&gt;Transfer&lt;/code&gt; log topic) against your indexed deposit addresses. Wait for &lt;strong&gt;at least 10–15 confirmations&lt;/strong&gt; on mainnet before crediting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;block&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getBlock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prefetchedTransactions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;watchedAddresses&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;enqueueDepositConfirmation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.4 Process Withdrawals
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="nx"&gt;toEvm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userProvidedAddress&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;   &lt;span class="c1"&gt;// accept xdc... or 0x...&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parseEther&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10.5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;    &lt;span class="c1"&gt;// 10.5 XDC&lt;/span&gt;
  &lt;span class="na"&gt;gasLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;21000&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;gasPrice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parseUnits&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0.25&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gwei&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;// XDC minimum&lt;/span&gt;
  &lt;span class="na"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getTransactionCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hotWalletAddress&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signed&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;signer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// signer = HSM/KMS&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;broadcastTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;receipt&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;              &lt;span class="c1"&gt;// 12 confirmations&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.5 XRC-20 Token Transfers
&lt;/h3&gt;

&lt;p&gt;XRC-20 is &lt;strong&gt;functionally identical to ERC-20&lt;/strong&gt; — same ABI, same &lt;code&gt;Transfer(address,address,uint256)&lt;/code&gt; event signature, same allowance model. Your existing ERC-20 code works unchanged.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;erc20Abi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function balanceOf(address) view returns (uint256)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function decimals() view returns (uint8)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function symbol() view returns (string)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function transfer(address to, uint256 amount) returns (bool)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;event Transfer(address indexed from, address indexed to, uint256 value)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Contract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tokenContractAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;erc20Abi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decimals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parseUnits&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;100&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;       &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transfer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toEvm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;recipient&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Token Standards
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Equivalent To&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;XRC-20&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ERC-20&lt;/td&gt;
&lt;td&gt;Fungible tokens, stablecoins, utility tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;XRC-721&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ERC-721&lt;/td&gt;
&lt;td&gt;Non-fungible tokens (NFTs), unique assets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;XRC-1155&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ERC-1155&lt;/td&gt;
&lt;td&gt;Multi-token contracts (fungible + NFT in one)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All three standards are &lt;strong&gt;byte-for-byte compatible&lt;/strong&gt; with their ERC counterparts at the ABI level. OpenZeppelin contracts compile and deploy unchanged.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Gas and Fee Handling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Mainnet &lt;strong&gt;minimum gas price is 0.25 Gwei&lt;/strong&gt; — below this, transactions stay pending indefinitely.&lt;/li&gt;
&lt;li&gt;Standard native XDC transfer = 21,000 gas (~0.00000525 XDC, typically under $0.0001).&lt;/li&gt;
&lt;li&gt;XRC-20 transfers = ~50,000–65,000 gas depending on contract implementation.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;eth_estimateGas&lt;/code&gt; for contract calls; add a 10–20% safety buffer.&lt;/li&gt;
&lt;li&gt;Always verify receipt &lt;code&gt;status == 1&lt;/code&gt; — a receipt alone doesn't mean the tx succeeded.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Security Considerations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Store signing keys &lt;strong&gt;exclusively in HSM, cloud KMS (AWS/GCP/Azure), or MPC custody&lt;/strong&gt;. Never plaintext keys in memory or config files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Segregate hot/warm/cold wallets&lt;/strong&gt; — keep no more than operational float (~5% of AUM) in any hot wallet.&lt;/li&gt;
&lt;li&gt;Enforce &lt;strong&gt;withdrawal-address allowlisting&lt;/strong&gt; and velocity limits per user and per time window.&lt;/li&gt;
&lt;li&gt;Require &lt;strong&gt;multi-party approval&lt;/strong&gt; for treasury movement above a threshold.&lt;/li&gt;
&lt;li&gt;Wait &lt;strong&gt;12–15 confirmations&lt;/strong&gt; before crediting mainnet deposits; &lt;strong&gt;20+&lt;/strong&gt; for high-value.&lt;/li&gt;
&lt;li&gt;Reject deposits sent to contracts you don't control — credit only to externally-owned addresses you've derived.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always validate &lt;code&gt;chainId == 50&lt;/code&gt;&lt;/strong&gt; on signed transactions to prevent cross-chain replay.&lt;/li&gt;
&lt;li&gt;Monitor for chain reorgs — rare on XDC 2.0, but confirmation-depth buffers protect against edge cases.&lt;/li&gt;
&lt;li&gt;Rate-limit RPC calls and implement automatic failover between multiple providers.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. Testing Checklist (Apothem Testnet)
&lt;/h2&gt;

&lt;p&gt;Complete every item on Apothem &lt;strong&gt;before&lt;/strong&gt; moving to mainnet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Connect to Apothem RPC, confirm &lt;code&gt;chainId == 51&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Request TXDC from the faucet to test hot wallet&lt;/li&gt;
&lt;li&gt;[ ] Generate 5+ deterministic deposit addresses; verify &lt;code&gt;xdc&lt;/code&gt; ↔ &lt;code&gt;0x&lt;/code&gt; conversion is lossless&lt;/li&gt;
&lt;li&gt;[ ] Send a test deposit; confirm detection, credit at correct confirmation depth, correct user mapping&lt;/li&gt;
&lt;li&gt;[ ] Execute a native TXDC withdrawal; verify status, nonce handling, on-chain balance&lt;/li&gt;
&lt;li&gt;[ ] Deploy or use an existing XRC-20 test token; run full deposit + withdrawal flow&lt;/li&gt;
&lt;li&gt;[ ] Simulate RPC outage; confirm failover to secondary provider&lt;/li&gt;
&lt;li&gt;[ ] Simulate incorrect-prefix input (&lt;code&gt;0x&lt;/code&gt; in &lt;code&gt;xdc&lt;/code&gt; field and vice versa); confirm normalization&lt;/li&gt;
&lt;li&gt;[ ] Simulate below-minimum-gas tx; confirm graceful rejection&lt;/li&gt;
&lt;li&gt;[ ] Run a 24-hour soak test at representative transaction volume&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. Sample RPC Calls
&lt;/h2&gt;

&lt;h3&gt;
  
  
  eth_chainId
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://rpc.xinfin.network &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'&lt;/span&gt;

&lt;span class="c"&gt;# -&amp;gt; {"jsonrpc":"2.0","id":1,"result":"0x32"}   (0x32 = 50)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  eth_blockNumber
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://rpc.xinfin.network &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  eth_getBalance
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://rpc.xinfin.network &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","method":"eth_getBalance",
       "params":["0xA4e66f4Cc17752f331eaC6A20C00756156719519","latest"],
       "id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: JSON-RPC payloads use &lt;code&gt;0x&lt;/code&gt;, not &lt;code&gt;xdc&lt;/code&gt; — the RPC layer expects standard Ethereum format on the wire.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  12. Official Resources
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary Documentation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.xdc.network"&gt;https://docs.xdc.network&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Community Documentation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.xdc.community"&gt;https://docs.xdc.community&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mainnet Explorer&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://www.xdcscan.com"&gt;https://www.xdcscan.com&lt;/a&gt; &lt;br&gt; &lt;a href="https://www.xdcscan.io"&gt;https://www.xdcscan.io&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testnet Explorer&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://testnet.xdcscan.com"&gt;https://testnet.xdcscan.com&lt;/a&gt; &lt;br&gt; &lt;a href="https://apothem.xdcscan.io"&gt;https://apothem.xdcscan.io&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apothem Faucet&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://faucet.apothem.network"&gt;https://faucet.apothem.network&lt;/a&gt; &lt;br&gt; &lt;a href="https://faucet.blocksscan.io"&gt;https://faucet.blocksscan.io&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub — XinFin Org&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/xinfinorg"&gt;https://github.com/xinfinorg&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChainList (Mainnet)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://chainlist.org/chain/50"&gt;https://chainlist.org/chain/50&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChainList (Testnet)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://chainlist.org/chain/51"&gt;https://chainlist.org/chain/51&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer Forum&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.xdc.dev"&gt;https://www.xdc.dev&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;If you're building an EVM-compatible wallet, exchange, or application, integrating XDC is genuinely one of the fastest onboarding paths you'll find — most of your existing Ethereum stack works unchanged. The three things to get right are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Address prefix handling&lt;/strong&gt; — normalize at I/O, sign with &lt;code&gt;0x&lt;/code&gt; internally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gas pricing&lt;/strong&gt; — respect the 0.25 Gwei minimum.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing on Apothem&lt;/strong&gt; — don't skip the checklist.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Got questions or hit a snag during integration? Drop a comment below, open a thread on the &lt;a href="https://www.xdc.dev"&gt;XDC Developer Forum&lt;/a&gt;, or reach out via the official channels. The XDC developer community is active and responsive — you won't be stuck for long.&lt;/p&gt;

&lt;p&gt;Happy building. 🚀&lt;/p&gt;




</description>
      <category>xdcnetwork</category>
      <category>xdc</category>
      <category>buildonxdc</category>
    </item>
    <item>
      <title>Crypto Feels Like Whatever People Are Doing</title>
      <dc:creator>Quincy Jones</dc:creator>
      <pubDate>Thu, 16 Apr 2026 18:40:02 +0000</pubDate>
      <link>https://www.xdc.dev/yourbroquincy/crypto-feels-like-whatever-people-are-doing-1n4e</link>
      <guid>https://www.xdc.dev/yourbroquincy/crypto-feels-like-whatever-people-are-doing-1n4e</guid>
      <description>&lt;p&gt;One thing I’ve started to notice about crypto, and I didn’t really get this at first, is that it’s not actually dictated by what’s “best” or even what’s most advanced. It’s dictated by activity. Just whatever people are doing at scale, that becomes the space, at least for a period of time.&lt;/p&gt;

&lt;p&gt;Like when things are hot, it feels obvious. Everyone’s trading, everyone’s posting, there’s new projects every day, people are jumping chains, minting, flipping, whatever it is. And because that activity is so loud, it kind of defines reality. It’s like, okay this is crypto right now. This is what matters.&lt;/p&gt;

&lt;p&gt;NFTs had that moment. Memecoins had that moment. Even certain ecosystems, they didn’t just win because they were better technically, they won because people were there, doing things, interacting, creating momentum. And momentum is weirdly one of the most powerful forces in this space.&lt;/p&gt;

&lt;p&gt;But then things slow down, and it almost feels like everything disappears. Prices drop, timelines get quiet, nobody is really talking the same way anymore. And it can feel like the whole space just… died or something. But it didn’t, it just changed form.&lt;/p&gt;

&lt;p&gt;Because what’s happening underneath during those slower periods is honestly kind of more important, it’s just not as visible. Builders are still there, probably even more focused because there’s less noise. People are working on infrastructure, fixing problems, trying to actually make things usable instead of just exciting. It’s not flashy, it doesn’t go viral, but it’s real.&lt;/p&gt;

&lt;p&gt;There’s almost like two versions of crypto. The one you see during hype cycles, and the one that actually gets built when nobody is paying attention. And they don’t really look the same at all.&lt;/p&gt;

&lt;p&gt;The hype version is fast. It’s social. It’s easy to understand. You can jump in, participate, feel like you’re part of something immediately. And that’s why speculation becomes such a big part of it, because speculation itself is activity. It creates movement, and movement pulls people in.&lt;/p&gt;

&lt;p&gt;But the quieter version, it’s slower, more technical, sometimes kind of boring if we’re being honest. But that’s where a lot of the real foundation gets laid. The stuff that actually sticks around longer than a cycle.&lt;/p&gt;

&lt;p&gt;And I think the interesting part is how those two phases feed into each other.&lt;/p&gt;

&lt;p&gt;Because the things that get built in the quiet don’t just stay there. They come back during the next hype cycle, just in a different form. Usually simplified, sometimes repackaged, but they’re rooted in that earlier work that nobody really saw at the time.&lt;/p&gt;

&lt;p&gt;So yeah, crypto is driven by activity, but not all activity is the same. Some of it is loud and temporary, and some of it is quiet and foundational. And if you only pay attention to one, you get a really incomplete picture of what’s actually going on.&lt;/p&gt;

&lt;p&gt;It’s not just what people are building, it’s what people are choosing to do at scale. That’s what defines the space, at least in that moment.&lt;/p&gt;

</description>
      <category>activity</category>
      <category>hype</category>
      <category>smart</category>
      <category>build</category>
    </item>
    <item>
      <title>Security Update: KYC/KYB Document Accessibility Incident, Fully Resolved.</title>
      <dc:creator>Omkar Mestry</dc:creator>
      <pubDate>Thu, 16 Apr 2026 14:27:58 +0000</pubDate>
      <link>https://www.xdc.dev/omkar_mestry_737f5f43d6e1/security-update-kyckyb-document-accessibility-incident-fully-resolved-1lb3</link>
      <guid>https://www.xdc.dev/omkar_mestry_737f5f43d6e1/security-update-kyckyb-document-accessibility-incident-fully-resolved-1lb3</guid>
      <description>&lt;p&gt;&lt;strong&gt;Published by:&lt;/strong&gt; XDC Innovation Lab — Security &amp;amp; Compliance Team&lt;br&gt;
&lt;strong&gt;Date:&lt;/strong&gt; 16 April 2026&lt;/p&gt;




&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;The XDC Innovation Lab is issuing this update to inform the community about a recently identified and fully resolved security incident involving the accessibility of KYC/KYB verification documents submitted during the masternode application process.&lt;/p&gt;

&lt;p&gt;Transparency and trust are core to the XDC ecosystem. We believe it is important to communicate openly about what happened, what was done, and what has changed.&lt;/p&gt;




&lt;h3&gt;
  
  
  What Happened?
&lt;/h3&gt;

&lt;p&gt;Our team identified a configuration vulnerability that allowed certain KYC/KYB verification documents — submitted as part of the masternode onboarding process — to become temporarily accessible via direct URL access without proper authentication.&lt;/p&gt;

&lt;p&gt;To clarify, the XDC masternode KYC/KYB process requires applicants to submit only a &lt;strong&gt;single-page verification certificate&lt;/strong&gt; confirming the identity and role of a Director/Trustee/Partner within their organisation, certified by an authorised signatory such as a Company Secretary, Notary Public, or Lawyer. No additional personal documents are collected beyond this single certificate.&lt;/p&gt;




&lt;h3&gt;
  
  
  What Was Done?
&lt;/h3&gt;

&lt;p&gt;Upon discovery, the Foundation treated this as a &lt;strong&gt;Priority 0 (P0) incident&lt;/strong&gt; and took the following immediate actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Access revoked&lt;/strong&gt; — Public accessibility to all affected documents was immediately revoked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vulnerability patched&lt;/strong&gt; — The configuration issue was identified and a fix was deployed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification completed&lt;/strong&gt; — Internal testing confirmed that no KYC/KYB documents remain publicly accessible&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root cause analysis&lt;/strong&gt; — A thorough root cause analysis was completed to understand how the exposure occurred&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs preserved&lt;/strong&gt; — System logs were preserved for forensic review&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  What Has Changed?
&lt;/h3&gt;

&lt;p&gt;We have implemented significant improvements to our security infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced encryption&lt;/strong&gt; — All KYC/KYB documents are now stored under encryption with strict access controls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strengthened access controls&lt;/strong&gt; — Multi-layer authentication and authorisation checks have been implemented for all document access endpoints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous monitoring&lt;/strong&gt; — Automated monitoring is now in place to detect any unauthorised access attempts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updated protocols&lt;/strong&gt; — Our KYC/KYB data handling and classification policies have been revised and strengthened&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regular audits&lt;/strong&gt; — Periodic access control audits and penetration testing have been scheduled as ongoing practice&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Decentralised by Design
&lt;/h3&gt;

&lt;p&gt;It is important to note that XDC is a &lt;strong&gt;decentralised network&lt;/strong&gt;. The Foundation does not centrally control or manage KYC/KYB processes, nor is any such data stored in a single centralised location. The decentralised nature of the network ensures that no single entity has unilateral control over validator data. All KYC/KYB processes are designed with decentralisation principles in mind, with appropriate encryption and distributed security safeguards.&lt;/p&gt;




&lt;h3&gt;
  
  
  Community Acknowledgement
&lt;/h3&gt;

&lt;p&gt;We want to sincerely thank the community members who promptly flagged this concern. Your vigilance plays a vital role in strengthening the security and integrity of the XDC ecosystem. Our team is reaching out directly to each individual who raised this issue to provide clarity and gather feedback on the improvements made.&lt;/p&gt;




&lt;h3&gt;
  
  
  Our Commitment
&lt;/h3&gt;

&lt;p&gt;The XDC Foundation takes the security and privacy of validator documentation with the utmost seriousness. We are committed to maintaining the highest standards of data protection and will continue to invest in strengthening our security infrastructure.&lt;/p&gt;

&lt;p&gt;We believe that transparency in addressing such incidents is essential to building and maintaining the trust that our community, validators, and institutional partners place in the XDC Network.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;XDC Innovation Lab&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Building a Secure and Decentralised Future&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>HELP !!!</title>
      <dc:creator>Ox</dc:creator>
      <pubDate>Mon, 13 Apr 2026 12:08:10 +0000</pubDate>
      <link>https://www.xdc.dev/ox_385c1593db3a7ef08b2a71/help--33p</link>
      <guid>https://www.xdc.dev/ox_385c1593db3a7ef08b2a71/help--33p</guid>
      <description>&lt;p&gt;HI &lt;br&gt;
TODAY IVE LOGGED INTO MY XDC ACCOUNT VIA LEDGER DEVICE AND MY ACCOUNT / WALLET IS NOT AVAILABLE PLEASE ADVISE (SEE PICS) &lt;br&gt;
MY LEDGER HAS THE RECENT UPDATE IT SEEMS THAT XDC XFIN HAVE DELETED MY WALLET AS IT STATES&lt;br&gt;
"WE DO NOT HAVE A NETWORK WITH THIS NAME" (PLEASE SEE PIC)&lt;/p&gt;

&lt;p&gt;(0xab3Feb0A1Bc12AA9EE428f0303c0A72d43662Dbc)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>XDC Network — Validator (Masternode) Tech Specs &amp; Best Practices</title>
      <dc:creator>Omkar Mestry</dc:creator>
      <pubDate>Wed, 08 Apr 2026 09:24:39 +0000</pubDate>
      <link>https://www.xdc.dev/omkar_mestry_737f5f43d6e1/xdc-network-validator-masternode-tech-specs-best-practices-1ji3</link>
      <guid>https://www.xdc.dev/omkar_mestry_737f5f43d6e1/xdc-network-validator-masternode-tech-specs-best-practices-1ji3</guid>
      <description>&lt;h1&gt;
  
  
  XDC Network — Validator (Masternode) Tech Specs &amp;amp; Best Practices
&lt;/h1&gt;

&lt;h2&gt;
  
  
  XDC Network at a Glance
&lt;/h2&gt;

&lt;p&gt;XDC Network is an enterprise-grade, EVM-compatible Layer 1 blockchain purpose-built for trade finance, cross-border payments, and real-world asset (RWA) tokenization. Founded by XinFin in 2017 and mainnet-live since June 2019, the network combines public transparency with private subnet capabilities, delivering near-instant finality, near-zero gas fees, and ISO 20022 compliance — making it one of the most business-ready blockchains in production today.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Milestones
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Milestone&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2017&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;XinFin founded in Singapore by Ritesh Kakkad and Atul Khekade&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2019&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;KYC Enabled XDC mainnet goes live (June 1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2021&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;XDC Foundation established; partnership with SBI Holdings Japan for trade finance expansion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2022&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ITFA &amp;amp; TFDi membership; KYC-compliant validator layer recognized by regulators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2023&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;149+ million new transactions recorded; Ankr &amp;amp; SBI integrations deepen enterprise reach&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2024 Q3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;XDC 2.0 launched&lt;/strong&gt; — Chained HotStuff BFT consensus, forensic monitoring, subnet support; CertiK audit completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2024 Q4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;XDC DAO launched (Masternode Senate, Judiciary, People's House); Deutsche Telekom MMS launches a masternode; Etherscan integrates XDC to power XDCScan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2025&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Circle integrates native USDC &amp;amp; CCTP V2 on XDC; 21Shares launches XDC ETP on Swiss exchange; Kraken &amp;amp; Binance.US list XDC; VERT Capital announces $1B tokenization pipeline on XDC; Bitso integration for LATAM cross-border payments; XDC surpasses $300M total staked value and 800M+ transactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2025 H2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GENIUS Act signed into U.S. law — XDC Foundation represented at key regulatory discussions; MiCA Crypto Alliance joined in Europe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2026 Q1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Token Terminal partnership — XDC analytics available via Bloomberg Terminal integration; MVXDC index appears on Bloomberg Terminal, expanding institutional visibility; Contour Network (backed by HSBC, Citi, Standard Chartered) acquired by XDC venture arm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Network at a Glance (as of early 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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total transactions processed&lt;/td&gt;
&lt;td&gt;104M+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active wallets&lt;/td&gt;
&lt;td&gt;2M+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validator masternode candidates&lt;/td&gt;
&lt;td&gt;300+ (108 active Validators · 432 Protector Nodes · 1,000 Observer Nodes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smart contracts deployed&lt;/td&gt;
&lt;td&gt;717,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total blocks produced&lt;/td&gt;
&lt;td&gt;101M+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mainnet uptime&lt;/td&gt;
&lt;td&gt;7+ years continuous&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  1. Network Overview
&lt;/h2&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;&lt;strong&gt;Consensus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;XinFin Delegated Proof of Stake (XDPoS 2.0) — Chained HotStuff BFT protocol (shipped Q4 2024)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Active validator set&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;108 Masternodes per epoch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Epoch length&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;900 blocks (~30 minutes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Block time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~2 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Deterministic — confirmation = finalization (~6 seconds under XDC 2.0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Throughput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2,000–2,500+ TPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BFT guarantee&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Network safe as long as adversarial masternodes remain below ⅓ of each epoch's validator set; misbehaviour is provable via on-chain forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EVM compatibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full — Solidity 0.8.28 supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ISO 20022 financial messaging standard; MiCA-aligned&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  2. Staking Requirements
&lt;/h2&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;Requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Minimum stake&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 Million XDC per masternode (no upper limit)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;KYC&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mandatory — notarised proof of identity (individual or corporate) + address, uploaded on-chain and publicly visible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resignation lock-up&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 days before staked XDC can be retrieved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Estimated APR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10% (Validator) · 8% (Protector) · 4% (Observer) — subject to change&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  3. Node Types Under XDC 2.0
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Node Type&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Max Nodes&lt;/th&gt;
&lt;th&gt;Staking&lt;/th&gt;
&lt;th&gt;Rewards&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core Validator (Masternode)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Validates transactions, proposes/finalises blocks, governance voting&lt;/td&gt;
&lt;td&gt;108&lt;/td&gt;
&lt;td&gt;10M XDC min&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Protector Node&lt;/strong&gt; &lt;em&gt;(new in 2.0)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Hot backup for Core Validators (4 Protectors per Validator); takes over during disruptions&lt;/td&gt;
&lt;td&gt;432&lt;/td&gt;
&lt;td&gt;10M XDC min&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Observer Node&lt;/strong&gt; &lt;em&gt;(new in 2.0)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Non-block-producing; observes consensus, broadcasts transactions&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;10M XDC min&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Full Node&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stores full ledger, propagates transactions&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Archive Node&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full historical blockchain data; for analytics, explorers, deep queries&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Node selection order:&lt;/strong&gt; The top 108 most voted candidates become active Core Validators. The next 432 are assigned as Protector Nodes (4 per Validator). Beyond that, the next 1,000 serve as Observer Nodes. Full Nodes and Archive Nodes have no cap and do not participate in consensus.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. Hardware &amp;amp; Infrastructure Specs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Minimum Requirements
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Specification&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4+ cores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;32 GB+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Disk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2 TB+ SSD (500+ IOPS; more is better) — dedicated database partition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ubuntu 24.04+, CentOS (latest), or RHEL (latest), Windows, Mac OS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dedicated static public IP, directly internet-facing (no NAT)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hosting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minimum Tier 3+ IDC (data centre) environment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  5. Uptime &amp;amp; Availability
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Uptime SLA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;100%&lt;/strong&gt; — masternodes must be online and operational 24/7/365&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Slashing risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Node downtime may result in "slashed" status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reward impact&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rewards per epoch are proportional to blocks signed; downtime = missed rewards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backup strategy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Always maintain a secure backup of your Coinbase address and Keystore file. Loss = inaccessible node requiring network resignation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  6. Security Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Key Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use a hardware wallet for the staking/owner wallet&lt;/li&gt;
&lt;li&gt;Keep Keystore file backed up offline in multiple secure locations&lt;/li&gt;
&lt;li&gt;Coinbase address (node identity) backup is critical — if lost, the masternode is unrecoverable&lt;/li&gt;
&lt;li&gt;For institutional setups, consider Fireblocks or similar MPC custody via WalletConnect v2&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Infrastructure Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Harden the OS (disable root SSH, use key-based authentication, change the default SSH port)&lt;/li&gt;
&lt;li&gt;Keep Docker and node software on the latest stable version&lt;/li&gt;
&lt;li&gt;Run behind DDoS mitigation if possible&lt;/li&gt;
&lt;li&gt;Enable automatic security updates for the host OS&lt;/li&gt;
&lt;li&gt;Install &lt;code&gt;fail2ban&lt;/code&gt; to protect against SSH brute-force attempts&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Firewall &amp;amp; Port Configuration
&lt;/h3&gt;

&lt;p&gt;For a &lt;strong&gt;Validator / Protector / Observer&lt;/strong&gt; node (not serving public RPC traffic), &lt;strong&gt;only port 30303 should be open&lt;/strong&gt; to the internet. All other non-essential ports must remain closed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Port Reference:&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;Port&lt;/th&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Validator / Protector / Observer&lt;/th&gt;
&lt;th&gt;Public RPC Node&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;30303&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TCP + UDP&lt;/td&gt;
&lt;td&gt;P2P peer discovery &amp;amp; communication&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;OPEN&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ OPEN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8989&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;HTTP JSON-RPC API&lt;/td&gt;
&lt;td&gt;❌ CLOSED&lt;/td&gt;
&lt;td&gt;✅ OPEN (IP-restricted)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8888&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;WebSocket endpoint&lt;/td&gt;
&lt;td&gt;❌ CLOSED&lt;/td&gt;
&lt;td&gt;✅ OPEN (IP-restricted)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22 (or custom)&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;SSH admin access&lt;/td&gt;
&lt;td&gt;✅ OPEN&lt;/td&gt;
&lt;td&gt;✅ OPEN&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Recommended UFW configuration for a Validator / Protector / Observer masternode:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;ufw
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw default deny incoming
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw default allow outgoing
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 30303                &lt;span class="c"&gt;# P2P — required&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow &amp;lt;your_ssh_port&amp;gt;      &lt;span class="c"&gt;# SSH — required, do NOT skip&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Critical:&lt;/strong&gt; Always allow your SSH port &lt;em&gt;before&lt;/em&gt; enabling the firewall or rebooting. Otherwise you will lock yourself out of the server. If this happens, use your VPS provider's web console to regain access.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Additional hardening notes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On cloud providers (AWS, GCP, Azure, DigitalOcean), you must also configure provider-level Security Groups — host-level UFW alone isn't enough.&lt;/li&gt;
&lt;li&gt;If running a public RPC node, restrict ports 8989 / 8888 to specific IP allowlists — &lt;strong&gt;never leave them open to the world&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Audit firewall rules periodically: &lt;code&gt;sudo ufw status verbose&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Block all other inbound ports by default; review any open ports against this table quarterly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Operational Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Separate the masternode owner wallet from day-to-day operational wallets&lt;/li&gt;
&lt;li&gt;Use dedicated infrastructure — avoid sharing servers with other workloads&lt;/li&gt;
&lt;li&gt;Complete KYC with a valid, current corporate or individual identity document&lt;/li&gt;
&lt;li&gt;Maintain an incident response runbook for key compromise or node failure scenarios&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Monitoring &amp;amp; Maintenance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Recommendation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Node stats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Monitor via &lt;a href="https://stats.xinfin.network"&gt;XinFin Stats&lt;/a&gt; (mainnet) or the masternode dashboard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Block explorer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://xdcscan.io"&gt;XDCScan.io&lt;/a&gt; and &lt;a href="https://xdcscan.com"&gt;XDCScan.com&lt;/a&gt; for transaction and validator monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Third-party analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://nodes.primexdc.com/"&gt;PrimeXDC Node Dashboard&lt;/a&gt; for independent node analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Token Terminal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://tokenterminal.com/explorer/projects/xdc/metrics/staking-market-cap"&gt;Staking Market Cap&lt;/a&gt; · &lt;a href="https://tokenterminal.com/explorer/projects/xdc/metrics/number-of-validators"&gt;Number of Validators&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Alerting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Set up alerts for peer count drops, missed block proposals, disk space thresholds, and memory/CPU usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Software updates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Track the XinFinOrg GitHub repo and XDC developer forum for protocol upgrades. Coordinate upgrades promptly — late upgrades risk consensus incompatibility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Log management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Centralise Docker container logs; retain for debugging and audit purposes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Health checks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automate periodic RPC health checks and block height comparisons against public explorers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  8. Reward Economics (Indicative)
&lt;/h2&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reward cycle&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every epoch (900 blocks / ~30 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total block reward pool&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;86,400,000 XDC + transaction fees&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reward distribution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proportional to blocks signed/validated in each epoch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Reward Split by Node Tier
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Node Tier&lt;/th&gt;
&lt;th&gt;Reward Share&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core Validator (Masternode)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Protector Node&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Observer Node&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  9. Deployment Quick-Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Docker (recommended)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;su &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"bash &amp;lt;(wget -qO- https://raw.githubusercontent.com/XinFinOrg/XinFin-Node/master/setup/bootstrap.sh)"&lt;/span&gt; root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow the prompts to select &lt;code&gt;mainnet&lt;/code&gt;, name your node, and generate or import your keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testnet:&lt;/strong&gt; Always test your setup on Apothem (&lt;a href="https://apothem.network"&gt;apothem.network&lt;/a&gt;) before going live on mainnet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Network Snapshots
&lt;/h3&gt;

&lt;p&gt;Snapshots allow faster node synchronisation by downloading a pre-synced copy of the blockchain instead of syncing from genesis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XDC Network Mainnet Snapshots:&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;Node Type&lt;/th&gt;
&lt;th&gt;Download Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Full Node&lt;/td&gt;
&lt;td&gt;&lt;a href="https://download.xinfin.network/xdcchain.tar"&gt;https://download.xinfin.network/xdcchain.tar&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Archive Node&lt;/td&gt;
&lt;td&gt;&lt;a href="http://downloads.xinfin.network/xdcchain_archive.tar"&gt;http://downloads.xinfin.network/xdcchain_archive.tar&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Apothem Testnet Snapshots:&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;Node Type&lt;/th&gt;
&lt;th&gt;Download Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Full Node&lt;/td&gt;
&lt;td&gt;&lt;a href="http://downloads.apothem.network/xdcchain.tar"&gt;http://downloads.apothem.network/xdcchain.tar&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Archive Node&lt;/td&gt;
&lt;td&gt;&lt;a href="http://downloads.apothem.network/xdcchain_archive.tar"&gt;http://downloads.apothem.network/xdcchain_archive.tar&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Applying a Snapshot
&lt;/h3&gt;

&lt;p&gt;After downloading the snapshot, follow these steps to spin up your node. Run these commands from inside the &lt;code&gt;XinFin-Node/mainnet/&lt;/code&gt; directory (or &lt;code&gt;testnet/&lt;/code&gt; for Apothem):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Stop the running node (if already running)&lt;/span&gt;
bash docker-down.sh

&lt;span class="c"&gt;# 2. Extract the snapshot — NOTE: use -xvf, not -xvzf&lt;/span&gt;
&lt;span class="c"&gt;#    The xdcchain.tar is a POSIX tar archive, not gzipped&lt;/span&gt;
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-xvf&lt;/span&gt; xdcchain.tar

&lt;span class="c"&gt;# 3. Back up your existing chain data (safer than rm -rf)&lt;/span&gt;
&lt;span class="nb"&gt;mv &lt;/span&gt;xdcchain/XDC xdcchain/XDC_backup

&lt;span class="c"&gt;# 4. Move the extracted snapshot into place&lt;/span&gt;
&lt;span class="nb"&gt;mv &lt;/span&gt;XDC xdcchain/XDC

&lt;span class="c"&gt;# 5. Start the node back up&lt;/span&gt;
bash upgrade.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important notes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do &lt;strong&gt;not&lt;/strong&gt; use &lt;code&gt;tar -xvzf&lt;/code&gt; — the snapshot is a POSIX tar archive, not gzipped, and the &lt;code&gt;z&lt;/code&gt; flag will throw an error.&lt;/li&gt;
&lt;li&gt;Keep the &lt;code&gt;XDC_backup&lt;/code&gt; folder until you've confirmed the node is syncing correctly from the snapshot. Once verified, you can safely delete it to free disk space.&lt;/li&gt;
&lt;li&gt;Always verify your &lt;code&gt;coinbase.txt&lt;/code&gt; and &lt;code&gt;keystore/&lt;/code&gt; files are intact in &lt;code&gt;xdcchain/&lt;/code&gt; after the swap. If missing, restore them from your backup.&lt;/li&gt;
&lt;li&gt;Monitor sync progress on &lt;a href="https://stats.xinfin.network"&gt;stats.xinfin.network&lt;/a&gt; or &lt;a href="https://xdcscan.io"&gt;xdcscan.io&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. Compliance &amp;amp; Governance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;All validators must pass KYC (PDF format, uploaded on-chain). Refer to the &lt;a href="https://docs.google.com/document/d/1eyjFp3DXhrpLscngELocmXFwJ_Y8H9si6n8Z2SLADhg/edit?tab=t.0"&gt;KYC Document Format&lt;/a&gt; for requirements&lt;/li&gt;
&lt;li&gt;Entities with criminal records, anonymous identities, or intentions to fork are disqualified&lt;/li&gt;
&lt;li&gt;Validators participate in governance voting on protocol upgrades and XIPs (XDC Improvement Proposals)&lt;/li&gt;
&lt;li&gt;XDC 2.0 introduced a DAO structure with three chambers: Masternode Senate, Judiciary, and People's House&lt;/li&gt;
&lt;li&gt;Network is aligned with MiCA (EU) regulatory standards and ISO 20022 financial messaging compliance&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. Frequently Asked Questions (FAQs)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: How much XDC do I need to run a masternode?&lt;/strong&gt;&lt;br&gt;
You need a minimum of 10,000,000 XDC staked to become a masternode candidate. There is no upper limit. Each masternode you operate requires its own separate 10M XDC stake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I run more than one masternode?&lt;/strong&gt;&lt;br&gt;
Yes. You can run as many masternodes as you wish, but each one must independently meet the 10M XDC staking requirement, have its own dedicated server infrastructure, and complete separate KYC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is the maximum number of masternodes allowed on the network?&lt;/strong&gt;&lt;br&gt;
The network supports a tiered structure: 108 Core Validator nodes, 432 Protector Nodes, and 1,000 Observer Nodes — totalling 1,540 staked node slots. The top 108 most voted candidates become active Validators, the next 432 serve as Protector Nodes, and the following 1,000 are Observer Nodes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What happens if my masternode goes offline?&lt;/strong&gt;&lt;br&gt;
If your node goes down, it may be marked as "slashed." You will miss block rewards for the epochs your node is offline, and prolonged downtime can affect your standing in the validator set. Ensure your infrastructure is always operational.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is the difference between a Validator and a Standby node?&lt;/strong&gt;&lt;br&gt;
Validator Masternodes (108 per epoch) actively validate transactions and produce blocks. Standby Masternodes are identical in setup but remain on standby — they are activated only when the number of active Validators drops below 108.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How are rewards distributed?&lt;/strong&gt;&lt;br&gt;
Rewards are paid every epoch (900 blocks / ~30 minutes). The total block reward pool is 86,400,000 XDC plus transaction fees. Core Validators receive 10%, Protector Nodes receive 8%, and Observer Nodes receive 4%. Within each tier, rewards are proportional to blocks signed and validated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I withdraw my staked XDC at any time?&lt;/strong&gt;&lt;br&gt;
No. If you resign from your masternode, there is a mandatory 30-day lock-up period before you can retrieve your staked 10M XDC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What happens if I lose my Coinbase address or Keystore file?&lt;/strong&gt;&lt;br&gt;
Losing your Coinbase address means your masternode becomes inaccessible, and you will need to resign from the network. Losing your Keystore or private key means your funds are permanently inaccessible and you will not receive any further rewards. Always maintain secure offline backups of both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Is KYC mandatory? What format is required?&lt;/strong&gt;&lt;br&gt;
Yes, KYC is mandatory for all masternode operators. You must upload a notarised proof of identity (individual or corporate) and address in PDF format. This information is visible on the public network. Refer to the &lt;a href="https://docs.google.com/document/d/1eyjFp3DXhrpLscngELocmXFwJ_Y8H9si6n8Z2SLADhg/edit?tab=t.0"&gt;KYC Document Format&lt;/a&gt; for full requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Who is disqualified from running a masternode?&lt;/strong&gt;&lt;br&gt;
Entities or individuals that are anonymous, have a criminal record, intend to fork the XDC software, or do not comply with local laws are disqualified from becoming masternode operators.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I set up on Windows or do I need Linux?&lt;/strong&gt;&lt;br&gt;
Both are supported. You can use the One-Click Installer for Windows and Linux, or deploy via Docker (recommended for production). Supported Linux distributions include Ubuntu 24.04+, CentOS, and RHEL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Does my server need a public IP?&lt;/strong&gt;&lt;br&gt;
Yes. Your masternode must face the internet directly with a dedicated static public IP address, without NAT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I use a cloud provider / VPS instead of dedicated hardware?&lt;/strong&gt;&lt;br&gt;
Yes. A VPS is optional but highly recommended if you don't have dedicated hardware that meets the specs. Ensure your provider can deliver the required CPU, RAM, disk, and network uptime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Which ports should I open on my firewall?&lt;/strong&gt;&lt;br&gt;
Only &lt;strong&gt;port 30303&lt;/strong&gt; (TCP + UDP) should be open to the internet for a Validator, Protector, or Observer node. Keep your SSH port open for admin access (22 or a custom port), but block everything else including RPC (8989) and WebSocket (8888). Only open 8989 / 8888 if you are explicitly running a public RPC node, and restrict them to specific IP allowlists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I test the setup before going live on mainnet?&lt;/strong&gt;&lt;br&gt;
Yes. XDC provides a testnet called Apothem (apothem.network) where you can test your entire masternode setup without using real XDC. This is strongly recommended before deploying to mainnet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Are there third-party masternode hosting services?&lt;/strong&gt;&lt;br&gt;
Yes, there are third-party service providers that can help with setup and hosting. However, XDC Network does not officially endorse any third-party services — always perform your own due diligence before engaging one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can institutional operators use custody solutions like Fireblocks?&lt;/strong&gt;&lt;br&gt;
Yes. Institutions and enterprises can use Fireblocks via WalletConnect v2 to manage masternode staking with MPC-based custody, governance automation, and transaction policy controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do I check my masternode status?&lt;/strong&gt;&lt;br&gt;
You can monitor your node via stats.xinfin.network (mainnet), the masternode dashboard, or the XDCScan block explorer at xdcscan.io.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What are the common setup errors?&lt;/strong&gt;&lt;br&gt;
The two most common issues are: (1) outdated Docker — install docker-compose version 1.21+; (2) port conflicts — if port 30303 is already in use, terminate the existing container and try again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How does XDC handle DDoS and spam attacks?&lt;/strong&gt;&lt;br&gt;
While XDC's transaction fees are extremely low, they are not zero. This means flooding the network requires a significant amount of XDC, making sustained spam attacks economically impractical. The network also employs on-chain forensic monitoring to detect and penalise malicious behaviour.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is an epoch?&lt;/strong&gt;&lt;br&gt;
An epoch is a cycle of 900 blocks on the XDC Network, completing in approximately 30 minutes. Validator selection, reward distribution, and governance actions are all structured around epochs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What are network snapshots and why should I use them?&lt;/strong&gt;&lt;br&gt;
Snapshots are pre-synced copies of the blockchain database. Instead of syncing your node from the genesis block (which can take days), downloading a snapshot lets you get up and running much faster. They are available for both mainnet and the Apothem testnet, in Full Node and Archive Node variants.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do I use a snapshot to speed up node setup?&lt;/strong&gt;&lt;br&gt;
Stop your node, extract the downloaded &lt;code&gt;xdcchain.tar&lt;/code&gt; (using &lt;code&gt;tar -xvf&lt;/code&gt;, &lt;strong&gt;not&lt;/strong&gt; &lt;code&gt;-xvzf&lt;/code&gt;), back up the existing &lt;code&gt;xdcchain/XDC&lt;/code&gt; folder, move the extracted &lt;code&gt;XDC&lt;/code&gt; folder into &lt;code&gt;xdcchain/&lt;/code&gt;, and restart your node with &lt;code&gt;bash upgrade.sh&lt;/code&gt;. It will resume syncing from the snapshot's block height instead of from zero. Always verify the snapshot source matches the official XDC download links before use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is the difference between the Full Node and Archive Node snapshot?&lt;/strong&gt;&lt;br&gt;
The Full Node snapshot contains the current blockchain state needed for normal validation and transaction processing. The Archive Node snapshot includes the entire historical blockchain data from genesis — it's significantly larger and is only needed if you run analytics, block explorers, or dApps that require deep historical queries.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Key Ecosystem Partners &amp;amp; Integrations
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Partner / Integration&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SBI Holdings (Japan)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Trade finance joint venture; R3 Corda cross-chain PoC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deutsche Telekom MMS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Infrastructure provider; operates a masternode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Circle (USDC / CCTP V2)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native stablecoin and cross-chain transfer support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Archax&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Regulated digital securities exchange; tokenised funds (BlackRock, State Street, Fidelity)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;21Shares&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;XDC ETP on SIX Swiss Exchange (Ticker: XDCN); also listed on Euronext Amsterdam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Token Terminal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Institutional-grade on-chain analytics for XDC — integrated with Bloomberg Terminal for real-time dashboards, API access, and Data Room&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bloomberg Terminal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MVXDC index listed, providing professional-grade market access and institutional discovery for XDC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Securitize&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;U.S. Treasury tokenization (USTY)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bitso&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LATAM's largest crypto platform; cross-border remittance integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mercado Bitcoin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$15M+ fixed-income RWA token issuance on XDC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VERT Capital&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to $1B in tokenised debt and receivables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plug and Play&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RWA Accelerator program (2 cohorts completed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kraken &amp;amp; Binance.US&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tier 1 exchange listings (2025)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Key References
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Official setup guide&lt;/td&gt;
&lt;td&gt;&lt;a href="https://xinfin.org/setup-masternode"&gt;https://xinfin.org/setup-masternode&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker setup&lt;/td&gt;
&lt;td&gt;&lt;a href="https://xinfin.org/docker-setup"&gt;https://xinfin.org/docker-setup&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node architecture docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.xdc.network/xdcchain/developers/node_operators/node_architecture/"&gt;https://docs.xdc.network/xdcchain/developers/node_operators/node_architecture/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tech specs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://xdc.org/network/tech-specs"&gt;https://xdc.org/network/tech-specs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer forum&lt;/td&gt;
&lt;td&gt;&lt;a href="https://xdc.dev"&gt;https://xdc.dev&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/XinFinOrg/XinFin-Node"&gt;https://github.com/XinFinOrg/XinFin-Node&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testnet (Apothem)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apothem.network"&gt;https://apothem.network&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block explorer&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://xdcscan.io"&gt;https://xdcscan.io&lt;/a&gt; · &lt;a href="https://xdcscan.com"&gt;https://xdcscan.com&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PrimeXDC Node Dashboard&lt;/td&gt;
&lt;td&gt;&lt;a href="https://nodes.primexdc.com/"&gt;https://nodes.primexdc.com/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bloomberg Terminal (21Shares ETP)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.bloomberg.com/quote/XDCN:NA"&gt;https://www.bloomberg.com/quote/XDCN:NA&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Terminal (XDC analytics)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tokenterminal.com"&gt;https://tokenterminal.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Terminal — Staking Market Cap&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tokenterminal.com/explorer/projects/xdc/metrics/staking-market-cap"&gt;https://tokenterminal.com/explorer/projects/xdc/metrics/staking-market-cap&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Terminal — Number of Validators&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tokenterminal.com/explorer/projects/xdc/metrics/number-of-validators"&gt;https://tokenterminal.com/explorer/projects/xdc/metrics/number-of-validators&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KYC document format&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.google.com/document/d/1eyjFp3DXhrpLscngELocmXFwJ_Y8H9si6n8Z2SLADhg/edit?tab=t.0"&gt;Google Doc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mainnet Snapshot (Full Node)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://download.xinfin.network/xdcchain.tar"&gt;https://download.xinfin.network/xdcchain.tar&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mainnet Snapshot (Archive Node)&lt;/td&gt;
&lt;td&gt;&lt;a href="http://downloads.xinfin.network/xdcchain_archive.tar"&gt;http://downloads.xinfin.network/xdcchain_archive.tar&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testnet Snapshot (Full Node)&lt;/td&gt;
&lt;td&gt;&lt;a href="http://downloads.apothem.network/xdcchain.tar"&gt;http://downloads.apothem.network/xdcchain.tar&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testnet Snapshot (Archive Node)&lt;/td&gt;
&lt;td&gt;&lt;a href="http://downloads.apothem.network/xdcchain_archive.tar"&gt;http://downloads.apothem.network/xdcchain_archive.tar&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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