73 lines
5.4 KiB
Markdown
73 lines
5.4 KiB
Markdown
# 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 | RuntimeImplemented for encrypted demo vault |
|
|
| 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 | RuntimeImplemented for theme/config persistence; UI Prototype for full settings |
|
|
| 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`.
|
|
- Local terminal command runtime: `rabby-runtime::local_terminal::LocalTerminal` executes bounded local shell commands, captures stdout/stderr/exit code, rejects blank commands, and is exposed to Tauri via `run_local_command`.
|
|
- Settings/customization persistence: `load_app_config` / `save_app_config` round-trip `AppConfig` through `JsonFileConfigStore`, with UI controls for theme persistence.
|
|
- SSH command runtime: `rabby-runtime::ssh_runtime::SshClient` builds validated BatchMode system-ssh commands and is exposed to Tauri via `run_ssh_command`. This is a bounded remote-command slice, not yet a full interactive SSH terminal.
|
|
|