# RabbyHub/Rabby MVP Feature Inventory Reference repository inspected: `https://github.com/rabbyHub/rabby` at commit `69cd265`. This document records the feature/functionality classes Rabby Wallet exposes and treats them as the MVP target for this Rust/Tauri Rabby product. The current implementation keeps these as typed Rust models and unit-tested acceptance criteria first; runtime/UI implementation should then move feature-by-feature from `Modeled` to `RuntimeImplemented`. ## MVP feature list | Feature | RabbyHub/Rabby reference | MVP acceptance in this repo | Current status | | --- | --- | --- | --- | | Create/unlock wallet | `Welcome`, `CreatePassword`, `Unlock`, `ForgotPassword` | Password/unlock state model and encrypted local state boundary | Modeled | | Import/create accounts | `CreateMnemonics`, `ImportMnemonics`, `ImportPrivateKey`, `ImportJson`, watch address | Seed/private key/JSON/watch-only account records validate and display | Modeled | | Hardware/institutional accounts | Ledger, Trezor, Keystone, GridPlus, OneKey, BitBox02, Gnosis Safe, Coinbase, WalletConnect, Cobo Argus | Account source model covers Rabby import surface | Modeled | | Multi-chain networks | `ChainList`, `CustomRPC`, `CustomTestnet`, offline chain support | Chain config validates id, RPC URL, custom/testnet/offline flags | Modeled | | Portfolio dashboard | `Dashboard`, token/NFT/DeFi DB services, balance sync | Dashboard summary renders accounts/chains/token balances/risk/activity | UI Prototype | | Send/receive | `SendToken`, `SendNFT`, `Receive`, `SelectToAddress` | Send request validates recipient, amount, asset, chain | Modeled | | Swap/bridge | `Swap`, `Bridge`, `rabby-swap`, `rabby-bridge` | Quote model validates route, assets, slippage, provider | Modeled | | Approvals | `ManageApprovals`, `NFTApproval`, `TokenApproval`, batch approvals | Approval records identify spender, allowance, risk, revoke path | Modeled | | Dapp provider/permissions | `content-script`, `pageProvider`, `providerController`, `RequestPermission`, `ConnectedSites` | Dapp request validates origin, accounts, chains, permission status | Modeled | | Signing/security preview | `Approval`, `securityEngine`, `rabby-action`, signing highlighter | Signing request includes message/typed-data/tx preview and risk | Modeled | | Activity/history | `Activities`, `History`, `TransactionHistory`, `SignedTextHistory` | History entries track account, chain, status, tx/signature identity | Modeled | | Contacts/whitelist | `contactBook`, `WhitelistInput`, send recipient selection | Contacts validate name/address and whitelist state | Modeled | | Settings/customization | `AdvanceSettings`, `SwitchLang`, currency, auto-lock, metamask mode | Theme, language, currency, auto-lock, default-wallet mode | UI Prototype | | Notifications/guides/points | `notification`, `newUserGuide`, `RabbyPoints`, feedback | Dashboard can list notifications and points summary | UI Prototype | ## RabbyHub/Rabby architecture notes RabbyHub/Rabby is a browser extension wallet with these major contexts: - `background`: async requests, encryption, wallet/provider controllers, services. - `content-script`: injected at document start, bridges dapps to background. - `pageProvider`: injects `window.ethereum` and handles dapp requests. - `ui`: notification, full tab, and popup views. The Rust/Tauri version should map that to: - `rabby-core`: wallet domain models and validation. - `rabby-runtime`: persistence, keychain, network, and OS adapters. - `src-tauri`: command/event boundary. - `ui`: modern Rabby-like dashboard, approvals, settings, dapp requests. ## Immediate product gap The current app can open but is still a shell. The MVP work should prioritize: 1. Wallet onboarding/unlock state and local encrypted persistence. 2. Account import/watch-only flows. 3. Real portfolio dashboard state wired through Tauri. 4. Dapp permission and approval request UI. 5. Send/receive + swap/bridge request forms. 6. Settings/customization: theme, language, currency, auto-lock. ## Unit test coverage added `rabby-core::wallet_mvp` tests now assert: - Every MVP feature class is represented. - Feature keys are unique and documented. - All Rabby account source types are covered. - Account, chain, send, swap, and dapp permission validation works. - Unsafe/incomplete wallet requests are rejected. - Dashboard totals and high-risk approval counts are computed. - Settings customization defaults validate. ## Implemented runtime slices - Encrypted local wallet dashboard vault: `rabby-runtime::wallet_vault::EncryptedWalletVault` writes AES-256-GCM encrypted JSON envelopes using Argon2id-derived keys, rejects blank/wrong passphrases, avoids plaintext wallet fields in storage, and is exposed to Tauri via `save_demo_wallet_vault` / `load_wallet_vault`.