> 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-ja/nomi/architecture.md).

# アーキテクチャ

> \[QR] ウォレットが内部でどのように作られているか — 好奇心旺盛な人や開発者向け。

***

## 技術スタック

| コンポーネント        | 技術                                    |
| -------------- | ------------------------------------- |
| **モバイルアプリ**    | React Native + Expo                   |
| **状態管理**       | Zustand                               |
| **Web3**       | viem, permissionless.js               |
| **ナビゲーション**    | expo-router                           |
| **ブロックチェーン**   | ERC-4337 アカウント抽象化（EVMスマートアカウントネットワーク） |
| **インフラストラクチャ** | Bundler、Paymaster、マルチチェーン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 → アプリケーション → ドメイン & インフラストラクチャ → ドメイン
```

UIはインフラストラクチャと直接やり取りしません — アプリケーションレイヤーを通じてのみ行います。ドメインは純粋で、依存関係は一切ありません。

***

## チェーン抽象化

異なるブロックチェーンの扱いは、抽象化レイヤーによって統一されています：

```
┌──────────────────────────────────────────────────┐
│                   チェーンコア                   │
│                                                   │
│  ┌─────┐ ┌──────┐ ┌────┐ ┌───────┐ ┌────┐       │
│  │ EVM │ │Solana│ │Tron│ │Bitcoin│ │Dash│       │
│  └─────┘ └──────┘ └────┘ └───────┘ └────┘       │
│                                                   │
│  ChainRegistry → ChainConfigProvider              │
│  統一インターフェース + チェーンごとの機能      │
└──────────────────────────────────────────────────┘
```

* **ChainRegistry** — サポートされているすべてのネットワークのレジストリ（表示はリモートで切り替え可能）
* **ChainConfigProvider** — チェーンごとの設定と機能
* **TransactionService** — ファミリーごとに統一された送信（EVMスマートアカウント、EOA、Solana、Tron、Bitcoin、Dash）
* **カスタムEVMネットワーク** — ユーザー追加のRPC、Smart Accountなし

Smart Account（ERC-4337 LightAccount）は、サポートされているEVMネットワークでのみ使用されます。Bitcoin、Dash、Avalanche、Taikoは従来のアカウントを使用します。

***

## アカウント抽象化スタック

```
┌──────────────────────────────────────────────┐
│                ユーザー                        │
│          （生体認証 → 署名）                   │
└──────────────────┬───────────────────────────┘
                   ↓
┌──────────────────┴───────────────────────────┐
│          IAccountProvider                     │
│    UserOperation を構築                       │
│    （sender、nonce、callData、initCode）       │
└──────────────────┬───────────────────────────┘
                   ↓
┌──────────────────┴───────────────────────────┐
│          IPaymaster                           │
│    ガススポンサー                             │
│    （paymasterAndData、ガス見積もり）          │
└──────────────────┬───────────────────────────┘
                   ↓
┌──────────────────┴───────────────────────────┐
│          IBundler                             │
│    ブロックチェーンに送信                     │
│    （sendUserOperation → waitForReceipt）      │
└──────────────────┬───────────────────────────┘
                   ↓
┌──────────────────┴───────────────────────────┐
│          EntryPoint（オンチェーン）           │
│    検証 → 実行 → ガス支払い                   │
└──────────────────────────────────────────────┘
```

3つのインターフェース（`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
