# endijuan33/ethtools-v2 architecture

> Architecture diagram of the GitHub repository endijuan33/ethtools-v2, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/endijuan33/ethtools-v2
- Repository: https://github.com/endijuan33/ethtools-v2

## Overview

EthTools is a browser-only Ethereum wallet and developer toolkit. The dashboard is the user-facing entry point: users create or unlock a local encrypted vault, derive and select accounts, inspect network balances, then use transaction, backup, portfolio, or developer-tool panels. Network access uses pooled RPC services; encrypted secrets and validated settings persist in browser storage. The README documents broad capabilities whose individual implementations were not sampled; those are represented by their exact component paths, with only documented or indexed relationships drawn. No backend is described beyond static embed metadata.

Main entry points: [`components/WalletCard.tsx`](https://github.com/endijuan33/ethtools-v2/blob/main/components/WalletCard.tsx) (Network wallet), [`components/WalletVault.tsx`](https://github.com/endijuan33/ethtools-v2/blob/main/components/WalletVault.tsx) (Vault manager), [`app/page.tsx`](https://github.com/endijuan33/ethtools-v2/blob/main/app/page.tsx) (Dashboard shell), [`components/DevToolsCard.tsx`](https://github.com/endijuan33/ethtools-v2/blob/main/components/DevToolsCard.tsx) (Developer tools)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dashboard["Dashboard"]
  node_dashboard["Dashboard shell<br/>[page.tsx]"]
end

subgraph group_wallet["Wallet and security"]
  node_vaultui["Vault manager<br/>[WalletVault.tsx]"]
  node_derive["HD wallet derivation<br/>[hdWallet.ts]"]
  node_vaultcrypto["Vault encryption<br/>[vault.ts]"]
  node_vaultstore["Vault persistence<br/>[vaultStore.ts]"]
  node_backupui["Backup and restore<br/>[BackupManager.tsx]"]
  node_backup["Backup encryption<br/>[backup.ts]"]
  node_accountdiscovery["Account discovery"]
  node_walletconnect["WalletConnect"]
end

subgraph group_chain["Network and assets"]
  node_walletcard["Network wallet<br/>[WalletCard.tsx]"]
  node_rpc["Pooled RPC access<br/>[multiRpc.ts]"]
  node_networks["Network registry<br/>[ethers.ts]"]
  node_portfolio["Portfolio view<br/>[PortfolioCard.tsx]"]
  node_tokens["Token discovery"]
  node_approvals["Approval management"]
end

subgraph group_tools["Transactions and tools"]
  node_send["Native transfers<br/>[SendForm.tsx]"]
  node_sweep["Asset sweep<br/>[SweepCard.tsx]"]
  node_history["Transaction history"]
  node_devtools["Developer tools<br/>[DevToolsCard.tsx]"]
  node_units["Unit conversion<br/>[units.ts]"]
  node_ens["ENS lookup<br/>[ens.ts]"]
  node_calldata["Calldata decoding<br/>[calldata.ts]"]
end

subgraph group_foundation["Client foundation"]
  node_storage[("Validated storage<br/>[storage.ts]")]
  node_schema["Trust-boundary validation<br/>[schema.ts]"]
  node_logger["Redacting logger<br/>[logger.ts]"]
  node_layout["Application layout<br/>[layout.tsx]"]
  node_embed["Embed metadata route<br/>[route.ts]"]
end

node_user(("Wallet user"))
node_ethereum{{"Ethereum RPC"}}

node_user -->|"opens"| node_dashboard
node_dashboard -->|"presents"| node_vaultui
node_dashboard -->|"presents"| node_walletcard
node_dashboard -.->|"presents"| node_devtools
node_vaultui -->|"derives accounts"| node_derive
node_vaultui -.->|"encrypts secrets"| node_vaultcrypto
node_vaultui -.->|"persists vault"| node_vaultstore
node_vaultui -->|"offers backup"| node_backupui
node_backupui -->|"creates backup"| node_backup
node_backupui -.->|"restores settings"| node_storage
node_vaultui -->|"discovers accounts"| node_accountdiscovery
node_walletcard -->|"loads network access"| node_networks
node_networks -->|"uses pools"| node_rpc
node_rpc -.->|"sends RPC requests"| node_ethereum
node_walletcard -->|"opens transfer form"| node_send
node_walletcard -.->|"offers portfolio"| node_portfolio
node_walletcard -.->|"offers discovery"| node_tokens
node_walletcard -->|"offers approvals"| node_approvals
node_send -.->|"uses chain access"| node_networks
node_walletcard -.->|"offers sweep"| node_sweep
node_walletcard -.->|"offers history"| node_history
node_devtools -.->|"provides conversion"| node_units
node_devtools -.->|"provides lookup"| node_ens
node_devtools -.->|"provides decoding"| node_calldata
node_storage -->|"validates payloads"| node_schema
node_vaultstore -.->|"persists records"| node_storage
node_layout -->|"hosts app"| node_dashboard
node_user -.->|"connects wallet"| node_walletconnect

click node_dashboard "https://github.com/endijuan33/ethtools-v2/blob/main/app/page.tsx"
click node_vaultui "https://github.com/endijuan33/ethtools-v2/blob/main/components/WalletVault.tsx"
click node_derive "https://github.com/endijuan33/ethtools-v2/blob/main/lib/hdWallet.ts"
click node_vaultcrypto "https://github.com/endijuan33/ethtools-v2/blob/main/lib/vault.ts"
click node_vaultstore "https://github.com/endijuan33/ethtools-v2/blob/main/lib/vaultStore.ts"
click node_backupui "https://github.com/endijuan33/ethtools-v2/blob/main/components/BackupManager.tsx"
click node_backup "https://github.com/endijuan33/ethtools-v2/blob/main/lib/backup.ts"
click node_accountdiscovery "https://github.com/endijuan33/ethtools-v2/blob/main/components/AccountDiscovery.tsx"
click node_walletconnect "https://github.com/endijuan33/ethtools-v2/blob/main/components/WalletConnectPanel.tsx"
click node_walletcard "https://github.com/endijuan33/ethtools-v2/blob/main/components/WalletCard.tsx"
click node_rpc "https://github.com/endijuan33/ethtools-v2/blob/main/lib/multiRpc.ts"
click node_networks "https://github.com/endijuan33/ethtools-v2/blob/main/lib/ethers.ts"
click node_portfolio "https://github.com/endijuan33/ethtools-v2/blob/main/components/PortfolioCard.tsx"
click node_tokens "https://github.com/endijuan33/ethtools-v2/blob/main/components/TokenDiscoveryCard.tsx"
click node_approvals "https://github.com/endijuan33/ethtools-v2/blob/main/components/ApprovalManagerCard.tsx"
click node_send "https://github.com/endijuan33/ethtools-v2/blob/main/components/SendForm.tsx"
click node_sweep "https://github.com/endijuan33/ethtools-v2/blob/main/components/SweepCard.tsx"
click node_history "https://github.com/endijuan33/ethtools-v2/blob/main/components/TransactionHistory.tsx"
click node_devtools "https://github.com/endijuan33/ethtools-v2/blob/main/components/DevToolsCard.tsx"
click node_units "https://github.com/endijuan33/ethtools-v2/blob/main/lib/units.ts"
click node_ens "https://github.com/endijuan33/ethtools-v2/blob/main/lib/ens.ts"
click node_calldata "https://github.com/endijuan33/ethtools-v2/blob/main/lib/calldata.ts"
click node_storage "https://github.com/endijuan33/ethtools-v2/blob/main/lib/storage.ts"
click node_schema "https://github.com/endijuan33/ethtools-v2/blob/main/lib/schema.ts"
click node_logger "https://github.com/endijuan33/ethtools-v2/blob/main/lib/logger.ts"
click node_layout "https://github.com/endijuan33/ethtools-v2/blob/main/app/layout.tsx"
click node_embed "https://github.com/endijuan33/ethtools-v2/blob/main/app/api/frame/route.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dashboard,node_user toneBlue
class node_vaultui,node_derive,node_vaultcrypto,node_vaultstore,node_backupui,node_backup,node_accountdiscovery,node_walletconnect toneAmber
class node_walletcard,node_rpc,node_networks,node_portfolio,node_tokens,node_approvals toneMint
class node_send,node_sweep,node_history,node_devtools,node_units,node_ens,node_calldata toneRose
class node_storage,node_schema,node_logger,node_layout,node_embed,node_ethereum toneIndigo
```

## Components

### Dashboard

- [Dashboard shell](https://github.com/endijuan33/ethtools-v2/blob/main/app/page.tsx): `app/page.tsx`

### Wallet and security

- [Vault manager](https://github.com/endijuan33/ethtools-v2/blob/main/components/WalletVault.tsx): `components/WalletVault.tsx`
- [HD wallet derivation](https://github.com/endijuan33/ethtools-v2/blob/main/lib/hdWallet.ts): `lib/hdWallet.ts`
- [Vault encryption](https://github.com/endijuan33/ethtools-v2/blob/main/lib/vault.ts): `lib/vault.ts`
- [Vault persistence](https://github.com/endijuan33/ethtools-v2/blob/main/lib/vaultStore.ts): `lib/vaultStore.ts`
- [Backup and restore](https://github.com/endijuan33/ethtools-v2/blob/main/components/BackupManager.tsx): `components/BackupManager.tsx`
- [Backup encryption](https://github.com/endijuan33/ethtools-v2/blob/main/lib/backup.ts): `lib/backup.ts`
- [Account discovery](https://github.com/endijuan33/ethtools-v2/blob/main/components/AccountDiscovery.tsx): `components/AccountDiscovery.tsx`
- [WalletConnect](https://github.com/endijuan33/ethtools-v2/blob/main/components/WalletConnectPanel.tsx): `components/WalletConnectPanel.tsx`

### Network and assets

- [Network wallet](https://github.com/endijuan33/ethtools-v2/blob/main/components/WalletCard.tsx): `components/WalletCard.tsx`
- [Pooled RPC access](https://github.com/endijuan33/ethtools-v2/blob/main/lib/multiRpc.ts): `lib/multiRpc.ts`
- [Network registry](https://github.com/endijuan33/ethtools-v2/blob/main/lib/ethers.ts): `lib/ethers.ts`
- [Portfolio view](https://github.com/endijuan33/ethtools-v2/blob/main/components/PortfolioCard.tsx): `components/PortfolioCard.tsx`
- [Token discovery](https://github.com/endijuan33/ethtools-v2/blob/main/components/TokenDiscoveryCard.tsx): `components/TokenDiscoveryCard.tsx`
- [Approval management](https://github.com/endijuan33/ethtools-v2/blob/main/components/ApprovalManagerCard.tsx): `components/ApprovalManagerCard.tsx`

### Transactions and tools

- [Native transfers](https://github.com/endijuan33/ethtools-v2/blob/main/components/SendForm.tsx): `components/SendForm.tsx`
- [Asset sweep](https://github.com/endijuan33/ethtools-v2/blob/main/components/SweepCard.tsx): `components/SweepCard.tsx`
- [Transaction history](https://github.com/endijuan33/ethtools-v2/blob/main/components/TransactionHistory.tsx): `components/TransactionHistory.tsx`
- [Developer tools](https://github.com/endijuan33/ethtools-v2/blob/main/components/DevToolsCard.tsx): `components/DevToolsCard.tsx`
- [Unit conversion](https://github.com/endijuan33/ethtools-v2/blob/main/lib/units.ts): `lib/units.ts`
- [ENS lookup](https://github.com/endijuan33/ethtools-v2/blob/main/lib/ens.ts): `lib/ens.ts`
- [Calldata decoding](https://github.com/endijuan33/ethtools-v2/blob/main/lib/calldata.ts): `lib/calldata.ts`

### Client foundation

- [Validated storage](https://github.com/endijuan33/ethtools-v2/blob/main/lib/storage.ts): `lib/storage.ts`
- [Trust-boundary validation](https://github.com/endijuan33/ethtools-v2/blob/main/lib/schema.ts): `lib/schema.ts`
- [Redacting logger](https://github.com/endijuan33/ethtools-v2/blob/main/lib/logger.ts): `lib/logger.ts`
- [Application layout](https://github.com/endijuan33/ethtools-v2/blob/main/app/layout.tsx): `app/layout.tsx`
- [Embed metadata route](https://github.com/endijuan33/ethtools-v2/blob/main/app/api/frame/route.ts): `app/api/frame/route.ts`

### Other components

- **Wallet user**
- **Ethereum RPC**

## Connections

- Wallet user → Dashboard shell: opens (evidence: `README.md`)
- Dashboard shell → Vault manager: presents (evidence: `app/page.tsx`)
- Dashboard shell → Network wallet: presents (evidence: `app/page.tsx`)
- Dashboard shell → Developer tools: presents (evidence: `app/page.tsx`)
- Vault manager → HD wallet derivation: derives accounts (evidence: `app/page.tsx`)
- Vault manager → Vault encryption: encrypts secrets (evidence: `components/WalletVault.tsx`)
- Vault manager → Vault persistence: persists vault (evidence: `components/WalletVault.tsx`)
- Vault manager → Backup and restore: offers backup (evidence: `components/WalletVault.tsx`)
- Backup and restore → Backup encryption: creates backup (evidence: `components/BackupManager.tsx`)
- Backup and restore → Validated storage: restores settings (evidence: `components/BackupManager.tsx`)
- Vault manager → Account discovery: discovers accounts (evidence: `components/WalletVault.tsx`)
- Network wallet → Network registry: loads network access (evidence: `components/WalletCard.tsx`)
- Network registry → Pooled RPC access: uses pools (evidence: `lib/ethers.ts`)
- Pooled RPC access → Ethereum RPC: sends RPC requests
- Network wallet → Native transfers: opens transfer form (evidence: `components/WalletCard.tsx`)
- Network wallet → Portfolio view: offers portfolio
- Network wallet → Token discovery: offers discovery
- Network wallet → Approval management: offers approvals (evidence: `components/WalletCard.tsx`)
- Native transfers → Network registry: uses chain access
- Network wallet → Asset sweep: offers sweep
- Network wallet → Transaction history: offers history
- Developer tools → Unit conversion: provides conversion
- Developer tools → ENS lookup: provides lookup
- Developer tools → Calldata decoding: provides decoding
- Validated storage → Trust-boundary validation: validates payloads (evidence: `README.md`)
- Vault persistence → Validated storage: persists records
- Application layout → Dashboard shell: hosts app (evidence: `app/layout.tsx`)
- Wallet user → WalletConnect: connects wallet
