UNPKG

@aladas-org/cryptocalc

Version:
303 lines (236 loc) ‱ 9.29 kB
# 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