Files
proxmox/docs/04-configuration/CHAIN138_WALLET_ECOSYSTEM_AND_RATIONALE.md

135 lines
9.8 KiB
Markdown
Raw Normal View History

# Chain 138 Wallet Ecosystem — Overview and Rationale
**Last Updated:** 2026-02-12
**Status:** Single reference for wallet support and why we built or request each piece
---
## Purpose
This document ties together **all** wallet-related work for **Defi Oracle Meta Mainnet (Chain ID 138)** and answers:
1. **Why we created the MetaMask Snap** when basic Chain 138 connectivity already works in MetaMask.
2. **Why we need Ledger Live** when we already use Ledgers App-Ethereum (and have Chain 138 in our app-ethereum fork).
3. **What we do for Trust Wallet** (user workaround + official Wallet Core path).
4. **Where each piece lives** (docs, repos, runbooks).
---
## 1. Wallet support at a glance
| Wallet / component | Basic Chain 138 support | Full / native support (our goal) | Doc / action |
|---------------------------|--------------------------------------------|----------------------------------------------------|--------------|
| **MetaMask** | ✅ Add network via RPC; send/receive; dApps | ❌ No native Swaps/Bridge/USD pricing for 138 | Custom **Snap** for swap quotes, bridge routes, market data |
| **Ledger device (App-Ethereum)** | ⚠️ Our fork has 138; official app may not | Device can sign; does not provide RPC or UI | [LEDGER_CHAIN138_ISSUES_AND_WORKAROUNDS.md](./LEDGER_CHAIN138_ISSUES_AND_WORKAROUNDS.md), [ADD_CHAIN138_TO_LEDGER_LIVE.md](./ADD_CHAIN138_TO_LEDGER_LIVE.md) |
| **Ledger Live** | ❌ No custom EVM networks | Request Chain 138 in Ledgers list | [ADD_CHAIN138_TO_LEDGER_LIVE.md](./ADD_CHAIN138_TO_LEDGER_LIVE.md) |
| **Trust Wallet** | ✅ Users can add 138 manually (Chainlist) | Official support via Wallet Core PR | [ADD_CHAIN138_TO_TRUST_WALLET.md](./ADD_CHAIN138_TO_TRUST_WALLET.md) |
**Chainlist:** Chain 138 is listed at [chainlist.org/chain/138](https://chainlist.org/chain/138); any wallet that supports “add custom network” (e.g. MetaMask, Trust Wallet) can use it today with our public RPCs.
---
## 2. Why we created the MetaMask Snap
### What already works without a Snap
- Add Chain 138 via `wallet_addEthereumChain` or Chainlist.
- Connect wallet, send/receive ETH and tokens, view balances, use dApps.
- On-chain oracle (ETH/USD) is deployed; dApps can read it.
### What does *not* work for Chain 138 in standard MetaMask
- **MetaMask Swaps** — Supports a fixed list of chains (Ethereum, BNB, Polygon, Arbitrum, Base, etc.). **Chain 138 is not in that list.** Users cannot swap on 138 from the native Swaps UI.
- **Portfolio Bridge** — Same: curated set of chains only; **Chain 138 is not included.** Bridging today is via CCIP or third-party UIs; LiFi does not support Chain 138.
- **Native USD prices** — MetaMask uses CoinGecko for USD. Chain 138 tokens are not listed there for 138, so the wallet does not show USD values for Chain 138 assets.
- **No public Snap** — Interoperability Snaps target non-EVM chains (Starknet, Solana, etc.). No existing Snap adds swap/bridge/pricing for an EVM chain like 138. Consensys controls native Swaps/Bridge; we cannot add 138 there without their support.
So: **basic connectivity is solved; full feature parity (in-wallet swap, bridge, pricing) is not.**
### Why we built a custom MetaMask Snap
We built the **Chain 138 Snap** so users get **in-MetaMask** swap quotes, bridge routes, and market data **without waiting** for Consensys to add Chain 138 to native Swaps/Bridge and price feeds.
| Feature | What the Snap does | Backend |
|----------------|--------------------|--------|
| **Swap quotes**| User gets quotes for Chain 138 (and ALL Mainnet) inside MetaMask | Our swap/quote API (token-aggregation or compatible) |
| **Bridge routes** | Show CCIP routes (e.g. WETH9/WETH10 → Ethereum Mainnet); user signs in MetaMask | Bridge API (CCIP + custom routes) |
| **Market data / pricing** | Token list and USD prices in Snap UI | Token-aggregation REST API |
| **Network params** | Chain 138 and ALL Mainnet EIP-3085 params | Same API |
The Snap does **not** add Chain 138 to MetaMasks **native** Swaps or Portfolio Bridge; those remain Consensys-controlled. It **does** provide a supported way to offer swap, bridge, and pricing **inside** the wallet by calling our APIs. We continue Consensys outreach for native support in parallel (see [metamask-integration/docs/CONSENSYS_OUTREACH_PACKAGE.md](../../metamask-integration/docs/CONSENSYS_OUTREACH_PACKAGE.md)).
**References:**
- [METAMASK_CHAIN138_FEATURE_PARITY_ANALYSIS.md](./metamask/METAMASK_CHAIN138_FEATURE_PARITY_ANALYSIS.md) — Gaps and options.
- [SNAP_IMPLEMENTATION_ROADMAP.md](./metamask/SNAP_IMPLEMENTATION_ROADMAP.md) — What the Snap uses (APIs, phases).
- [metamask-integration/chain138-snap/](https://github.com/bis-innovations/metamask-integration/tree/main/chain138-snap) — Snap code, runbook, deploy, testing.
---
## 3. Why we need Ledger Live when we already use App-Ethereum
### App-Ethereum vs Ledger Live — different roles
| Component | What it is | What it does for Chain 138 |
|-----------|------------|-----------------------------|
| **Ledger App-Ethereum** | Firmware app **on the Ledger device** | Knows chain IDs and display names. When signing a tx for chain 138, the device can show “Defi Oracle Meta” and “ETH” **if** that chain is in the apps config. It does **not** provide RPC URLs, balances, or any account UI. |
| **Ledger Live** | **Desktop and mobile app** (wallet UI) | Shows balances, history, send/receive UI. Supports only a **fixed list** of networks (Ethereum, Polygon, Arbitrum, Base, etc.). There is **no “Add custom network”** for arbitrary EVM chains. |
So:
- **App-Ethereum** = “device can **sign** for chain 138 and display the right name” (we have this in our fork: `pr-workspace/app-ethereum` with `network.c` and `defi_oracle.mk`).
- **Ledger Live** = “user can **see** Chain 138 and **use** it in the Ledger app.” Without Chain 138 in Ledger Lives list, users **cannot** add the network, see 138 balances, or send/receive on 138 from Ledger Live.
RPC is always supplied by the **host** (Ledger Live, MetaMask, or another wallet), not by the device. So even with App-Ethereum supporting 138 on the device, **Ledger Live itself** must list Chain 138 to use it there.
### Why we request Ledger Live integration
- **Users who prefer Ledger Live** (no MetaMask) today have **no** way to use Chain 138 in Ledger Live; they must use “Ledger device + MetaMask” and add 138 in MetaMask.
- Adding Chain 138 to **Ledger Live** (via Ledgers official process) gives those users **native** Chain 138 support: add network, see balances, send/receive, all inside Ledger Live.
- **App-Ethereum** remains necessary on the device so the hardware correctly identifies and signs for chain 138; **Ledger Live** is necessary so the wallet app exposes Chain 138 to the user. We need **both**.
**References:**
- [ADD_CHAIN138_TO_LEDGER_LIVE.md](./ADD_CHAIN138_TO_LEDGER_LIVE.md) — Request form, materials, checklist.
- [LEDGER_CHAIN138_ISSUES_AND_WORKAROUNDS.md](./LEDGER_CHAIN138_ISSUES_AND_WORKAROUNDS.md) — Device vs Live, workaround (MetaMask + Ledger).
- [LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE.md](../11-references/LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE.md) — Full 8-step integration reference.
---
## 4. Trust Wallet — what we do
- **Today:** Users can add Chain 138 **manually** in Trust Wallet using [Chainlist](https://chainlist.org/chain/138); no official Trust support required.
- **Goal:** Have Chain 138 in Trust Wallets **built-in** chain list via a PR to **Trust Wallet Core** (`registry.json`, codegen, tests).
Details, user steps, and Wallet Core PR steps: [ADD_CHAIN138_TO_TRUST_WALLET.md](./ADD_CHAIN138_TO_TRUST_WALLET.md).
---
## 5. Where repositories live (all in `~/projects/`)
All four wallet repositories are **separate** and live **individually** in the **projects** directory (sibling to `proxmox`):
| Repo | Path | Status |
|------|------|--------|
| **metamask-integration** | `~/projects/metamask-integration` | ✅ Yes / Completed |
| **LedgerLive** | `~/projects/LedgerLive` | ✅ Yes / Completed |
| **app-ethereum** | `~/projects/app-ethereum` | ✅ Yes / Completed |
| **TrustWallet-Integration** | `~/projects/TrustWallet-Integration` | ✅ Yes / Completed |
Clone commands and checklist: [CHAIN138_WALLET_REPOSITORIES.md](./CHAIN138_WALLET_REPOSITORIES.md).
---
## 6. Quick links
| Topic | Document |
|-------|----------|
| **This overview** | [CHAIN138_WALLET_ECOSYSTEM_AND_RATIONALE.md](./CHAIN138_WALLET_ECOSYSTEM_AND_RATIONALE.md) (this file) |
| **MetaMask Snap** — why & what | [METAMASK_CHAIN138_FEATURE_PARITY_ANALYSIS.md](./metamask/METAMASK_CHAIN138_FEATURE_PARITY_ANALYSIS.md), [SNAP_IMPLEMENTATION_ROADMAP.md](./metamask/SNAP_IMPLEMENTATION_ROADMAP.md) |
| **Snap** — build, deploy, test | [metamask-integration/chain138-snap/RUNBOOK.md](../../../metamask-integration/chain138-snap/RUNBOOK.md), [DEPLOY_VMID5000.md](../../../metamask-integration/chain138-snap/DEPLOY_VMID5000.md) |
| **Ledger** — device vs Live, workarounds | [LEDGER_CHAIN138_ISSUES_AND_WORKAROUNDS.md](./LEDGER_CHAIN138_ISSUES_AND_WORKAROUNDS.md) |
| **Ledger Live** — add Chain 138 | [ADD_CHAIN138_TO_LEDGER_LIVE.md](./ADD_CHAIN138_TO_LEDGER_LIVE.md) |
| **Trust Wallet** — add Chain 138 | [ADD_CHAIN138_TO_TRUST_WALLET.md](./ADD_CHAIN138_TO_TRUST_WALLET.md) |
| **Validated wallet config** (RPC, explorer) | [CHAIN138_WALLET_CONFIG_VALIDATION.md](./CHAIN138_WALLET_CONFIG_VALIDATION.md) |
| **All wallet repos (canonical ~/projects/ layout)** | [CHAIN138_WALLET_REPOSITORIES.md](./CHAIN138_WALLET_REPOSITORIES.md) |
| **Consensys outreach** (native Swaps/Bridge) | [metamask-integration/docs/CONSENSYS_OUTREACH_PACKAGE.md](../../../metamask-integration/docs/CONSENSYS_OUTREACH_PACKAGE.md) |