anchorage_layer_simple/features/userwallet-pairing-qr-url-display.md
ncantu 5689693507 UserWallet: Multiple feature implementations and updates
**Motivations:**
- Implement BIP39 mnemonic import for identity creation
- Add password-based key protection for enhanced security
- Improve pairing workflow with QR code and URL display
- Migrate hash cache from LocalStorage to IndexedDB for better scalability
- Update signet-dashboard and mempool components

**Root causes:**
- N/A (feature implementations)

**Correctifs:**
- N/A (no bug fixes in this commit)

**Evolutions:**
- BIP39 mnemonic import: Support for 12/24 word English mnemonics with BIP32 derivation path m/44'/0'/0'/0/0
- Key protection: Password-based encryption of private keys at rest with unlock/lock functionality
- Pairing workflow: QR code and URL display for device pairing, form-based word exchange between devices
- IndexedDB migration: Hash cache moved from LocalStorage to IndexedDB to avoid size limitations
- Global action bar: URL parameter support for navigation
- Pairing connection: Enhanced pairing status management

**Pages affectées:**
- userwallet/src/utils/identity.ts
- userwallet/src/utils/keyProtection.ts
- userwallet/src/utils/sessionUnlockedKey.ts
- userwallet/src/utils/indexedDbStorage.ts
- userwallet/src/utils/cache.ts
- userwallet/src/utils/pairing.ts
- userwallet/src/components/UnlockScreen.tsx
- userwallet/src/components/PairingDisplayScreen.tsx
- userwallet/src/components/PairingSetupBlock.tsx
- userwallet/src/components/GlobalActionBar.tsx
- userwallet/src/components/HomeScreen.tsx
- userwallet/src/components/ImportIdentityScreen.tsx
- userwallet/src/components/DataExportImportScreen.tsx
- userwallet/src/hooks/useIdentity.ts
- userwallet/src/hooks/usePairingConnected.ts
- userwallet/src/services/syncService.ts
- userwallet/src/services/pairingConfirm.ts
- userwallet/src/App.tsx
- userwallet/package.json
- userwallet/docs/specs.md
- userwallet/docs/storage.md
- userwallet/docs/synthese.md
- signet-dashboard/public/*.html
- signet-dashboard/public/app.js
- signet-dashboard/public/styles.css
- mempool (submodule updates)
- hash_list.txt, hash_list_cache.txt, utxo_list.txt, utxo_list_cache.txt, fees_list.txt
- features/*.md (documentation files)
2026-01-26 10:23:34 +01:00

3.0 KiB
Raw Blame History

UserWallet QR et URL pairing quand statut non satisfait

Author: Équipe 4NK
Date: 2026-01-26

Objectif

Lorsque le statut pairing est Satisfait : Non, afficher un bloc «Configurer le pairing avec un 2ᵉ appareil» avec:

  • mots du 1ᵉʳ appareil (représentation de la clé publique, 8 mots, format type BIP32), QR et URL ;
  • formulaire de saisie des mots du 2ᵉ appareil sur le 1ᵉʳ.

Sur le 2ᵉ appareil (scan du QR ou ouverture de lURL) : page de saisie des mots du 1ᵉʳ appareil (pré-remplie si ?words= présent).

Impacts

  • Fonctionnels : Bloc pairing avec formulaire «Mots du 2ᵉ appareil» sur le 1ᵉʳ ; page /pairing-display (avec ou sans ?words=) = formulaire «Saisir les mots du 1ᵉʳ appareil», pré-rempli depuis lURL si valide. Soumission → addRemotePairFromWords, puis succès + liens.
  • Techniques : parseAndValidatePairingWords et bypass /pairing-display pour tout path (pas seulement si ?words=).

Modifications

pairing.ts

  • generatePairingWords() : inchangé.
  • parseAndValidatePairingWords(text) : parse (whitespace), valide 8 mots + bip32WordsToUuid, retourne string[] | null.

Composants

  • PairingSetupBlock : mots du 1ᵉʳ + QR + URL. Section «Mots du 2ᵉ appareil» : formulaire (textarea, «Associer le pair»). Soumission → parseAndValidatePairingWordsaddRemotePairFromWordsnavigate('/manage-pairs'). Erreurs en state, pas alert.
  • PairingDisplayScreen : formulaire «Saisir les mots du 1ᵉʳ appareil». Pré-rempli depuis ?words= si valide. Soumission → addRemotePairFromWords → message succès + liens Accueil / Gérer les pairs.

App.tsx

  • usePairingDisplayBypass() : pathname === /pairing-display (avec ou sans ?words=).

HomeScreen

  • Si !pairingSatisfied : afficher PairingSetupBlock (et masquer identité / pairing / relais).

package.json (userwallet)

  • qrcode, @types/qrcode.

Flux utilisateur

  1. Appareil 1 : Accueil, pairing non satisfait → bloc avec mots du 1ᵉʳ, QR, URL, et saisie des mots du 2ᵉ.
  2. Appareil 2 : Scanner le QR (ou ouvrir lURL) → page saisie des mots du 1ᵉʳ (pré-remplie si ?words=). Soumettre → pair ajouté.
  3. Appareil 1 : Saisir les mots du 2ᵉ, «Associer le pair» → redirection vers «Gérer les pairs».

Modalités de déploiement

  • npm install dans userwallet (nouvelles deps), rebuild, déploiement des assets.

Modalités danalyse

  • Accueil avec pairing non satisfait : bloc avec mots du 1ᵉʳ, QR, URL, formulaire «Mots du 2ᵉ appareil».
  • Ouvrir lURL (ou /pairing-display) sur un 2ᵉ appareil : formulaire «Saisir les mots du 1ᵉʳ» ; si ?words= valide, pré-rempli.
  • Soumission des formulaires : validation 8 mots, addRemotePairFromWords, messages derreur ou succès.
  • Accessibilité (ARIA, contraste, clavier) des formulaires et des liens.