> For the complete documentation index, see [llms.txt](https://docs.qr.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.qr.xyz/qr-hi/under-the-hood/architecture.md).

# आर्किटेक्चर

> \[QR] वॉलेट अंदर से कैसे बनाया गया है — जिज्ञासु लोगों और डेवलपर्स के लिए।

***

## टेक स्टैक

| घटक                  | तकनीक                                                      |
| -------------------- | ---------------------------------------------------------- |
| **मोबाइल ऐप**        | React Native + Expo                                        |
| **स्टेट मैनेजमेंट**  | Zustand                                                    |
| **Web3**             | viem, permissionless.js                                    |
| **नेविगेशन**         | expo-router                                                |
| **ब्लॉकचेन**         | ERC-4337 अकाउंट एब्स्ट्रैक्शन (EVM स्मार्ट अकाउंट नेटवर्क) |
| **इन्फ्रास्ट्रक्चर** | Bundler, Paymaster, multi-chain RPC                        |
| **सुरक्षा**          | बायोमेट्रिक + Secure Enclave                               |
| **नेटवर्क**          | EVM + Solana + Tron + Bitcoin + Dash                       |

***

## मॉड्यूलर आर्किटेक्चर

\[QR] वॉलेट एक **मॉड्यूलर आर्किटेक्चर** — हर फीचर अपने अलग मॉड्यूल में स्पष्ट लेयर्स के साथ अलग-थलग है:

```
modules/{feature}/
├── domain/          ← शुद्ध व्यावसायिक लॉजिक और टाइप्स
├── infrastructure/  ← API, स्टोरेज, बाहरी सेवाएं
├── application/     ← स्टेट मैनेजमेंट और फैसेड्स
└── ui/              ← React कंपोनेंट्स (UI)
```

### लेयर्स

| लेयर                 | जिम्मेदारी                       | उदाहरण                                 |
| -------------------- | -------------------------------- | -------------------------------------- |
| **डोमेन**            | टाइप्स, इंटरफेस, व्यावसायिक नियम | `Swap.entity.ts`, `StakingPool`        |
| **इन्फ्रास्ट्रक्चर** | API कॉल्स और बाहरी सेवाएं        | `SwapApi.ts`, `AlchemyPaymaster`       |
| **एप्लिकेशन**        | स्टेट, UI लॉजिक, फैसेड्स         | `useSwapFacade.ts`, `SponsoredTxStore` |
| **UI**               | दृश्य कंपोनेंट्स                 | `SwapScreen.tsx`, बटन, कार्ड्स         |

### इम्पोर्ट नियम

```
UI → Application → Domain & Infrastructure → Domain
```

UI सीधे Infrastructure से कभी बात नहीं करता — केवल Application लेयर के माध्यम से। Domain शुद्ध है, उसमें कोई निर्भरता नहीं है।

***

## चेन एब्स्ट्रैक्शन

अलग-अलग ब्लॉकचेन के साथ काम एक एब्स्ट्रैक्शन लेयर के माध्यम से एकीकृत है:

```
┌──────────────────────────────────────────────────┐
│                   चेन कोर                      │
│                                                   │
│  ┌─────┐ ┌──────┐ ┌────┐ ┌───────┐ ┌────┐       │
│  │ EVM │ │Solana│ │Tron│ │Bitcoin│ │Dash│       │
│  └─────┘ └──────┘ └────┘ └───────┘ └────┘       │
│                                                   │
│  ChainRegistry → ChainConfigProvider              │
│  एकीकृत इंटरफेस + प्रति-चेन क्षमताएं       │
└──────────────────────────────────────────────────┘
```

* **ChainRegistry** — समर्थित सभी नेटवर्कों का रजिस्ट्री (दृश्यता दूरस्थ रूप से टॉगल की जा सकती है)
* **ChainConfigProvider** — प्रति चेन कॉन्फ़िगरेशन और क्षमताएं
* **TransactionService** — परिवार के अनुसार एकीकृत भेजना (EVM Smart Account, EOA, Solana, Tron, Bitcoin, Dash)
* **कस्टम EVM नेटवर्क** — उपयोगकर्ता-जोड़े गए RPCs, कोई Smart Account नहीं

Smart Account (ERC-4337 LightAccount) का उपयोग केवल समर्थित EVM नेटवर्कों पर किया जाता है। Bitcoin, Dash, Avalanche, और Taiko पारंपरिक खातों का उपयोग करते हैं।

***

## अकाउंट एब्स्ट्रैक्शन स्टैक

```
┌──────────────────────────────────────────────┐
│                उपयोगकर्ता                           │
│          (बायोमेट्रिक्स → हस्ताक्षर)             │
└──────────────────┬───────────────────────────┘
                   ↓
┌──────────────────┴───────────────────────────┐
│          IAccountProvider                     │
│    UserOperation बनाएं                        │
│    (sender, nonce, callData, initCode)        │
└──────────────────┬───────────────────────────┘
                   ↓
┌──────────────────┴───────────────────────────┐
│          IPaymaster                           │
│    गैस प्रायोजन                            │
│    (paymasterAndData, gas estimates)          │
└──────────────────┬───────────────────────────┘
                   ↓
┌──────────────────┴───────────────────────────┐
│          IBundler                             │
│    ब्लॉकचेन पर सबमिट करें                       │
│    (sendUserOperation → waitForReceipt)       │
└──────────────────┬───────────────────────────┘
                   ↓
┌──────────────────┴───────────────────────────┐
│          EntryPoint (on-chain)                │
│    Validate → Execute → गैस का भुगतान               │
└──────────────────────────────────────────────┘
```

तीन इंटरफेस (`IAccountProvider`, `IPaymaster`, `IBundler`) विशिष्ट प्रदाता को अलग करते हैं। वर्तमान में Alchemy का उपयोग हो रहा है, लेकिन आर्किटेक्चर बिजनेस लॉजिक बदले बिना किसी भी प्रदाता पर स्विच करने की अनुमति देता है।

***

## टोकन रजिस्ट्री

सिस्टम के सभी टोकनों के लिए एक एकल रजिस्ट्री:

```typescript
// प्रत्येक टोकन का वर्णन एक बार किया गया है
{
  symbol: 'USDC',
  name: 'USD Coin',
  addresses: { base: '0x...', arbitrum: '0x...', polygon: '0x...' },
  decimals: { default: 6 },
  flags: { swappable: true, collateral: true, borrowable: true, stakable: true }
}
```

मॉड्यूल्स को आवश्यक टोकन इन फ़्लैग्स के माध्यम से मिलते हैं **फ़्लैग्स**:

* `swappable: true` → टोकन स्वैप करें
* `collateral: true` → कोलैटरल के रूप में टोकन उधार लें
* `borrowable: true` → उधार लिए जा सकने वाले टोकन
* `stakable: true` → स्टेकिंग टोकन

यह दोहराव को समाप्त करता है — टोकन डेटा का वर्णन **एक बार** और हर जगह उपयोग होता है।

***

## 18 भाषाएं

ऐप 18 भाषाओं में स्थानीयकृत है:

EN, RU, ES, FR, HI, ID, JA, KO, MS, PT, TH, TL, TR, UR, VI, ZH, AR, BN
