@aladas-org/cryptocalc
Version:
Cryptocurrency wallet generator
303 lines (236 loc) âą 9.29 kB
Markdown
# Tests Unitaires - HD Wallet (BIP32/BIP44)
## đ Vue d'Ensemble
Tests complets pour la classe `HDWallet` qui gÚre la génération de portefeuilles hiérarchiques déterministes (Hierarchical Deterministic Wallets) selon les standards BIP32 et BIP44.
## đŻ Classe TestĂ©e
**Fichier** : `www/js/crypto/HDWallet/hd_wallet.js`
**Classe** : `HDWallet`
**Standards** : BIP32, BIP44
**Blockchains supportées** : Bitcoin, Ethereum, Litecoin, Dogecoin, Solana, Cardano, Avalanche, Polygon, et bien d'autres
## đŠ Structure des Tests
### 1. **Initialization Tests** (1 test)
Vérifie que la fonction `InitializeWallet()` crée correctement un wallet vide.
### 2. **Error Handling Tests** (4 tests)
- Entropy vide ou undefined
- UUID vide ou undefined
### 3. **Bitcoin HD Wallet Tests** (7 tests)
- Génération valide
- Adresse Bitcoin valide
- Clé privée valide
- WIF valide
- Phrase mnémonique valide
- Chemin de dérivation correct (`m/44'/0'/0'/0/0`)
- Informations de type de coin
### 4. **Ethereum HD Wallet Tests** (6 tests)
- Génération valide
- Adresse Ethereum valide
- Clé privée valide
- Phrase mnémonique valide
- Chemin de dérivation correct (`m/44'/60'/0'/0/0`)
- Informations de type de coin
### 5. **Litecoin HD Wallet Tests** (5 tests)
- Génération et validation d'adresses Litecoin
- Chemin de dérivation (`m/44'/2'/0'/0/0`)
### 6. **Dogecoin HD Wallet Tests** (5 tests)
- Génération et validation d'adresses Dogecoin
- Chemin de dérivation (`m/44'/3'/0'/0/0`)
### 7. **Avalanche HD Wallet Tests** (5 tests)
- Wallets compatibles Ethereum
- Utilise le chemin de dérivation Ethereum (`m/44'/60'/0'/0/0`)
### 8. **Polygon HD Wallet Tests** (4 tests)
- Wallets compatibles Ethereum
- Utilise le chemin de dérivation Ethereum
### 9. **Solana HD Wallet Tests** (4 tests)
- API HD spécifique à Solana
- Format d'adresse Base58
### 10. **Cardano HD Wallet Tests** (4 tests)
- API HD spécifique à Cardano
- Format d'adresse Cardano (`addr1...`)
### 11. **Derivation Path Variations Tests** (3 tests)
- Adresses différentes pour différents index
- Adresses différentes pour différents comptes
- BIP32 vs BIP44
### 12. **BIP32 Passphrase Support Tests** (3 tests)
- Passphrases différentes génÚrent des adresses différentes
- Stockage du passphrase
- Comportement sans passphrase
### 13. **Default Values Tests** (4 tests)
- Valeurs par défaut quand les args sont minimaux
- Blockchain par défaut (Bitcoin)
- Protocole par défaut (BIP44)
- Compte et index par défaut (0, 0)
### 14. **Cross-Blockchain Consistency Tests** (3 tests)
- MĂȘme entropy â mĂȘme mnĂ©monique pour toutes les blockchains
- MĂȘme entropy â adresses diffĂ©rentes pour blockchains diffĂ©rentes
- Tous les HD wallets ont le mode `HD_WALLET_TYPE`
### 15. **Testnet Support Tests** (2 tests)
- Bitcoin testnet
- Ethereum testnet
## đ Statistiques
- **Total des tests** : ~75 tests
- **Blockchains testées** : 10+ (Bitcoin, Ethereum, Litecoin, Dogecoin, Solana, Cardano, Avalanche, Polygon, etc.)
- **Scénarios couverts** :
- Génération basique
- Gestion d'erreurs
- Chemins de dérivation
- Passphrases BIP32
- Valeurs par défaut
- Testnet
- Consistance multi-blockchain
## đ§ Configuration
### Arguments de GetWallet
La méthode `HDWallet.GetWallet()` accepte les paramÚtres suivants :
```javascript
const args = {
[BLOCKCHAIN]: BITCOIN, // Blockchain cible
[CRYPTO_NET]: MAINNET, // mainnet ou testnet
[BIP32_PROTOCOL]: 44, // 32 ou 44
[BIP32_PASSPHRASE]: '', // Passphrase optionnelle
[ACCOUNT]: 0, // Index du compte
[ADDRESS_INDEX]: 0 // Index de l'adresse
};
const wallet = await HDWallet.GetWallet(entropy, uuid, args);
```
### Chemins de Dérivation BIP44
Format : `m / purpose' / coin_type' / account' / change / address_index`
**Exemples :**
- Bitcoin : `m/44'/0'/0'/0/0`
- Ethereum : `m/44'/60'/0'/0/0`
- Litecoin : `m/44'/2'/0'/0/0`
- Dogecoin : `m/44'/3'/0'/0/0`
## â
Propriétés Vérifiées
Pour chaque blockchain, les tests vérifient :
1. **Wallet valide** : Structure correcte et définie
2. **Blockchain** : Identifiant de blockchain correct
3. **Mode** : `HD_WALLET_TYPE` pour tous les HD wallets
4. **Adresse** : Format valide selon la blockchain
5. **Clé privée** : Hash hexadécimal de 64 caractÚres
6. **Mnémonique** : Phrase de 12, 18 ou 24 mots valide
7. **Chemin de dérivation** : Conforme au standard BIP44
8. **Type de coin** : Valeur correcte selon BIP44
9. **WIF** : Format WIF valide (pour blockchains compatibles)
## đ ExĂ©cution
### Lancer tous les tests
```bash
npm run test:jest
```
### Lancer uniquement les tests HD Wallet
```bash
npm test -- hd_wallet.test.js
```
### Lancer avec coverage
```bash
npm run test:jest:coverage
```
### Mode watch
```bash
npm run test:jest:watch
```
## đ Exemple de Test
```javascript
describe('Bitcoin HD Wallet (BIP44)', () => {
let wallet;
beforeAll(async () => {
const args = {
[BLOCKCHAIN]: BITCOIN,
[CRYPTO_NET]: MAINNET,
[BIP32_PROTOCOL]: 44,
[ACCOUNT]: 0,
[ADDRESS_INDEX]: 0
};
wallet = await HDWallet.GetWallet(testEntropy, testUuid, args);
});
test('has valid Bitcoin address', () => {
expect(wallet[ADDRESS]).toBeDefined();
expect(wallet[ADDRESS]).toBeValidBitcoinAddress();
});
test('has correct derivation path', () => {
expect(wallet[DERIVATION_PATH]).toBeDefined();
expect(wallet[DERIVATION_PATH]).toMatch(/^m\/44'\/0'\/0'\/0\/0$/);
});
});
```
## đ Matchers PersonnalisĂ©s
Les tests utilisent les matchers Jest personnalisés définis dans `setup.js` :
- `toBeValidHash(length)` : Vérifie un hash hexadécimal
- `toBeValidBitcoinAddress()` : Vérifie une adresse Bitcoin
- `toBeValidEthereumAddress()` : Vérifie une adresse Ethereum
- `toBeValidWIF()` : Vérifie un format WIF
- `toBeValidMnemonic()` : Vérifie une phrase mnémonique
## â ïž Notes Importantes
### 1. Tests Asynchrones
Tous les tests de génération de wallets sont asynchrones car `HDWallet.GetWallet()` est une fonction async :
```javascript
test('generates a valid wallet', async () => {
const wallet = await HDWallet.GetWallet(entropy, uuid, args);
expect(wallet).toBeDefined();
});
```
### 2. beforeAll vs beforeEach
Les tests utilisent `beforeAll()` pour générer les wallets une seule fois par suite, car la génération est coûteuse en temps.
### 3. Entropy Déterministe
Les tests utilisent une entropy fixe (`CRYPTO_CONFIG.TEST_ENTROPY_256`) pour garantir des résultats reproductibles.
### 4. Blockchains avec APIs Spéciales
Certaines blockchains (Solana, Cardano, SUI) utilisent leurs propres APIs HD et peuvent avoir des comportements légÚrement différents.
## đ DĂ©bogage
### Voir les logs de génération
MĂȘme si les logs sont supprimĂ©s pendant les tests, vous pouvez temporairement les rĂ©activer :
```javascript
// Dans le test
beforeAll(() => {
const { PrettyLog, PRODUCTION_LOG_MODE } = require('@util/log/log_utils.js');
PrettyLog.This.logMode = PRODUCTION_LOG_MODE; // Réactive les logs
});
```
### Inspecter un wallet
```javascript
test('inspect wallet structure', async () => {
const wallet = await HDWallet.GetWallet(testEntropy, testUuid, args);
console.log(JSON.stringify(wallet, null, 2));
});
```
## đŠ Installation
```bash
# Placer le fichier de test
cp hd_wallet.test.js tests/jest/unit/wallet/hd_wallet.test.js
# Lancer les tests
npm run test:jest
```
## đŻ RĂ©sultat Attendu
```
PASS tests/jest/unit/wallet/hd_wallet.test.js
HD Wallet Generation (BIP32/BIP44)
HDWallet Initialization
â InitializeWallet creates null wallet with correct structure
Error Handling
â throws error when entropy_hex is undefined
â throws error when entropy_hex is empty string
â throws error when salt_uuid is undefined
â throws error when salt_uuid is empty string
Bitcoin HD Wallet (BIP44)
â generates a valid Bitcoin HD wallet
â has valid Bitcoin address
â has valid private key
â has valid WIF
â has valid mnemonic phrase
â has correct derivation path
â has coin type information
Ethereum HD Wallet (BIP44)
â generates a valid Ethereum HD wallet
â has valid Ethereum address
[... etc ...]
Test Suites: 1 passed, 1 total
Tests: 75 passed, 75 total
Snapshots: 0 total
Time: X.XXXs
```
## đ AmĂ©liorations Futures
1. **Tests de Performance** : Mesurer le temps de génération
2. **Tests de Mémoire** : Vérifier les fuites mémoire
3. **Tests de Sécurité** : Vérifier l'unicité des clés privées
4. **Tests d'Intégration** : Vérifier la compatibilité avec des wallets réels
5. **Tests de Fixtures** : Utiliser des fichiers JSON de test
---
**Auteur** : Claude (Anthropic)
**Date** : 2025-02-13
**Version** : 1.0
**Blockchain Standards** : BIP32, BIP44