Use create_device_from_sp_wallet instead of restore_device for key updates

**Motivations :**
- restore_device() ne met pas à jour les clés dans le SpClient interne
- create_device_from_sp_wallet() crée un nouveau device avec les clés mises à jour
- Cela force le SDK à reconnaître les nouvelles clés

**Modifications :**
- src/services/service.ts : Remplacé restoreDevice() par create_device_from_sp_wallet()
- Utilise dumpWallet() pour récupérer le JSON du SpClient avec les clés mises à jour
- Supprimé l'injection manuelle des clés dans le device en mémoire
- Fallback vers restoreDevice() si create_device_from_sp_wallet() échoue

**Pages affectées :**
- src/services/service.ts : Amélioration de ensureWalletKeysAvailable() pour forcer la reconnaissance des clés
This commit is contained in:
NicolasCantu 2025-10-29 22:41:44 +01:00
parent 930b46fa00
commit b83725e112
2 changed files with 23 additions and 47 deletions

View File

@ -1713,48 +1713,24 @@ export default class Services {
deviceFromDb.sp_wallet.spend_key = {Secret: credentials.spendKey};
deviceFromDb.sp_wallet.scan_key = credentials.scanKey;
// Restaurer le device complet avec toutes les informations (birthday, last_scan, clés)
// Créer un nouveau device avec les clés mises à jour via create_device_from_sp_wallet
console.log('🔧 Creating new device with updated keys...');
try {
// Dumper le wallet pour récupérer le JSON du SpClient
const walletJson = await this.dumpWallet();
console.log('🔑 Wallet JSON for device creation:', typeof walletJson);
// Créer un nouveau device avec les clés mises à jour
const newAddress = await this.sdkClient.create_device_from_sp_wallet(walletJson);
console.log('✅ New device created with address:', newAddress);
} catch (error) {
console.warn('⚠️ Failed to create new device with updated keys:', error);
// Fallback: utiliser restoreDevice
this.restoreDevice(deviceFromDb);
// Forcer la mise à jour des clés dans le SDK
console.log('🔧 Forcing wallet update in SDK...');
try {
await this.dumpWallet();
console.log('✅ Wallet updated in SDK');
} catch (error) {
console.warn('⚠️ Failed to update wallet in SDK:', error);
}
// Injecter les clés directement dans le device en mémoire
const deviceInMemory = this.dumpDeviceFromMemory();
if (deviceInMemory?.sp_wallet && credentials.spendKey && credentials.scanKey) {
// Mettre à jour les clés dans le device en mémoire
// spend_key doit être un objet {Secret: string}
deviceInMemory.sp_wallet.spend_key = {Secret: credentials.spendKey};
deviceInMemory.sp_wallet.scan_key = credentials.scanKey;
console.log('🔧 Injected keys:', {
spend_key_type: typeof deviceInMemory.sp_wallet.spend_key,
scan_key_type: typeof deviceInMemory.sp_wallet.scan_key,
spend_key_secret: deviceInMemory.sp_wallet.spend_key?.Secret ? 'present' : 'missing'
});
// Restaurer le device avec les clés mises à jour
this.restoreDevice(deviceInMemory);
// Forcer la mise à jour des clés dans le SDK
console.log('🔧 Forcing wallet update in SDK...');
try {
await this.dumpWallet();
console.log('✅ Wallet updated in SDK');
} catch (error) {
console.warn('⚠️ Failed to update wallet in SDK:', error);
}
console.log('✅ Wallet keys injected and device restored');
} else {
console.warn('⚠️ Could not inject keys - missing data');
}
// Le nouveau device est créé avec les clés mises à jour
console.log('✅ New device created with updated keys');
// Vérifier que le birthday est bien préservé après restauration
const deviceAfterRestore = this.dumpDeviceFromMemory();