v0.5.2-pre.005

This commit is contained in:
2026-08-10 19:12:13 +02:00
parent b8e6751747
commit e3acb8ceb1
13 changed files with 1276 additions and 90 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/V0_5_2_KS_WALLET_RESTRUCTURING_PLAN.md -->
<!-- version: 7 -->
<!-- version: 8 -->
# Plan `0.5.2` — restructuration de `ks-wallet`
@@ -279,26 +279,28 @@ Pour chaque cible, la matrice doit distinguer :
- conservation garantie ou non de la même pubkey ;
- disponibilité d'une documentation/spécification officielle suffisamment précise pour écrire et tester l'adaptateur.
Constats documentaires initiaux au `2026-08-10` :
La matrice finalisée de `pre.005` se trouve dans [`docs/WALLET_FORMAT_COMPATIBILITY.md`](../WALLET_FORMAT_COMPATIBILITY.md). Les décisions retenues sont :
| Cible | Surface officiellement documentée | Statut pour `ks-wallet` |
|----------------------------|------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
| Solana CLI | fichier keypair JSON standard | **obligatoire `0.5.2` en import + export** |
| Phantom | import/export de private key Solana et recovery phrase | candidat direct ; encodage exact à figer avant implémentation |
| Solflare | import par private key, recovery phrase et keystore | candidat direct ; format exact à figer avant implémentation |
| Backpack | import avancé par private key ou recovery phrase | candidat direct ; format exact à figer avant implémentation |
| Trust Wallet | restauration par recovery phrase et gestion/export de private keys | candidat à caractériser ; contrat Solana précis à vérifier |
| Coinbase Wallet / Base app | restauration principalement documentée par recovery phrase ; Solana supporté | **ne pas fabriquer une recovery phrase supposée équivalente** à partir d'une keypair arbitraire ; faisabilité à caractériser |
| Cible | Surface officiellement documentée | Décision `pre.005` |
|-------------------------------|-------------------------------------------------------------------------------|----------------------------------------------------------------|
| Solana CLI / `solana-keygen` | fichier keypair JSON standard | import + export `SolanaCliJson` |
| Phantom | import/export d'une private key Solana ; private key Base58 documentée Solana | adaptateur tiers de référence `SolanaPrivateKeyBase58` |
| Solflare | import d'une private key copiée depuis Phantom | compatible avec le même wire Base58 ; pas de codec séparé |
| Solflare Keystore | import de fichier keystore | TODO version ultérieure non déterminée |
| Backpack | import avancé par private key ou recovery phrase | TODO : wire Solana exact à caractériser |
| Trust Wallet | restauration/export de private keys | TODO : wire Solana exact à caractériser |
| Base app / ex-Coinbase Wallet | restauration principalement documentée par recovery phrase | aucun adaptateur ; aucune mnemonic synthétique |
| Coinbase Developer Platform | API d'import/export de clés Solana, distincte de Base app | information de compatibilité seulement, hors adaptateur wallet |
Une recovery phrase n'est pas interchangeable avec une keypair arbitraire. Si `ks-wallet` ne possède que la keypair finale et pas la mnemonic/seed d'origine avec son chemin de dérivation, il ne doit pas inventer une phrase qui prétend restaurer la même pubkey.
Dans `0.5.2`, après l'adaptateur Solana CLI obligatoire, **un seul adaptateur vers un wallet tiers** doit être implémenté comme exemple de la mécanique d'interopérabilité. Le choix doit aller au format le plus simple et le mieux spécifié au moment de `pre.005`. Les autres formats jugés faisables sont ajoutés au `TODO.md` pour une version ultérieure non déterminée.
Dans `0.5.2`, après l'adaptateur Solana CLI obligatoire, **un seul adaptateur vers un wallet tiers** est retenu comme exemple de la mécanique d'interopérabilité : `SolanaPrivateKeyBase58`, avec Phantom comme cible de référence documentée. Les autres formats jugés faisables sont ajoutés au `TODO.md` pour une version ultérieure non déterminée.
Tout adaptateur tiers reste soumis à la règle générale : un export contenant le secret est impossible sans validation du mot de passe du `.kswallet`.
## 7. Modèle public simple de `ks-wallet`
Le plan ne fixe pas encore les noms Rust définitifs, mais la responsabilité cible peut être représentée ainsi :
Les noms Rust principaux sont désormais stabilisés par les tranches exécutables ; la responsabilité peut être représentée ainsi :
```text
ks-wallet
@@ -523,15 +525,15 @@ La tranche `pre.003` reste structurelle ; le cycle de vie protégé est activé
### `0.5.2-pre.005` — migration, import et export
- import legacy/Solana CLI JSON vers `.kswallet` ;
- export `.kswallet` vers le format Solana CLI JSON ;
- rollback et conservation du legacy ;
- finalisation de la matrice des formats wallets tiers ;
- implémentation d'un adaptateur wallet tiers d'exemple, choisi selon simplicité et qualité de spécification ;
- report des autres adaptateurs faisables au TODO pour une version ultérieure non déterminée ;
- password obligatoire pour tout export secret ;
- collisions d'alias/pubkey ;
- tests de compatibilité.
- [x] import legacy/Solana CLI JSON vers `.kswallet` sans modification de la source ;
- [x] export `.kswallet` vers le format Solana CLI JSON après authentification du mot de passe ;
- [x] rollback d'une destination native nouvelle si la vérification post-publication échoue et conservation du legacy ;
- [x] matrice officielle finalisée dans `docs/WALLET_FORMAT_COMPATIBILITY.md` ;
- [x] adaptateur tiers `SolanaPrivateKeyBase58`, avec Phantom comme cible de référence et compatibilité Phantom -> Solflare documentée ;
- [x] report Backpack/Trust/Solflare Keystore/Base app au TODO pour une version ultérieure non déterminée ;
- [x] password obligatoire pour tout export secret ;
- [x] collisions d'alias et de pubkey refusées sans écrasement ;
- [x] tests de round-trip Solana CLI JSON/Base58, migration non destructive, permissions privées, collision et mauvais mot de passe.
### `0.5.2-pre.006` — configuration et consommateurs
@@ -607,8 +609,8 @@ Le plan est désormais centré sur les décisions suivantes :
12. la découverte persistante scanne le répertoire wallet résolu pour les `<alias>.kswallet`, sans faire confiance au seul nom de fichier ;
13. changer le password rechiffre la même keypair ; il n'existe pas de rotation du secret Ed25519 conservant la même pubkey ;
14. le format keypair JSON des binaires Solana est obligatoire en import et en export dans `0.5.2` ;
15. une matrice officielle des formats Phantom/Solflare/Backpack/Trust/Coinbase-Base et autres cibles pertinentes sera finalisée avant les adaptateurs ;
16. un seul adaptateur wallet tiers est implémenté dans `0.5.2` comme exemple, les autres formats faisables étant reportés au TODO sans version déterminée ;
15. la matrice officielle des formats Phantom/Solflare/Backpack/Trust/Coinbase-Base est finalisée dans `docs/WALLET_FORMAT_COMPATIBILITY.md` ;
16. `SolanaPrivateKeyBase58` est l'adaptateur tiers unique de `0.5.2`, avec Phantom comme référence ; les autres formats faisables sont reportés au TODO sans version déterminée ;
17. le format v1 utilise Argon2id v19 et XChaCha20-Poly1305 selon `docs/NATIVE_FORMAT.md`, et `pre.004` ferme le modèle runtime avec `WalletPassword` + `UnlockedWallet` ;
18. le scan automatique reste limité au répertoire configuré, tandis qu'un consommateur peut fournir explicitement un autre chemin `.kswallet` à `ks-wallet` sans modifier le store ni enregistrer ce fichier automatiquement.