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:
parent
930b46fa00
commit
b83725e112
@ -475,37 +475,37 @@ export class SecureCredentialsService {
|
||||
// Récupérer les vraies clés du wallet SDK au lieu de générer des clés aléatoires
|
||||
let spendKeyStr = '';
|
||||
let scanKeyStr = '';
|
||||
|
||||
|
||||
try {
|
||||
const Services = (await import('./service')).default;
|
||||
const services = await Services.getInstance();
|
||||
|
||||
|
||||
// Dumper le wallet pour récupérer les vraies clés
|
||||
const wallet = await services.dumpWallet();
|
||||
console.log('🔑 Wallet dumped for credentials extraction:', typeof wallet);
|
||||
|
||||
|
||||
// Parse le wallet JSON
|
||||
const walletObj = typeof wallet === 'string' ? JSON.parse(wallet) : wallet;
|
||||
|
||||
|
||||
// Extraire les clés
|
||||
if (walletObj.spend_key) {
|
||||
// spend_key peut être un objet {Secret: string} ou une string
|
||||
spendKeyStr = typeof walletObj.spend_key === 'object'
|
||||
? walletObj.spend_key.Secret
|
||||
spendKeyStr = typeof walletObj.spend_key === 'object'
|
||||
? walletObj.spend_key.Secret
|
||||
: walletObj.spend_key;
|
||||
}
|
||||
|
||||
|
||||
if (walletObj.scan_sk) {
|
||||
scanKeyStr = walletObj.scan_sk;
|
||||
}
|
||||
|
||||
|
||||
console.log('🔑 Extracted keys from wallet:', {
|
||||
has_spend_key: !!spendKeyStr,
|
||||
has_scan_key: !!scanKeyStr,
|
||||
spend_key_length: spendKeyStr.length,
|
||||
scan_key_length: scanKeyStr.length
|
||||
});
|
||||
|
||||
|
||||
if (!spendKeyStr || !scanKeyStr) {
|
||||
throw new Error('Failed to extract keys from wallet SDK');
|
||||
}
|
||||
|
||||
@ -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)
|
||||
this.restoreDevice(deviceFromDb);
|
||||
|
||||
// Forcer la mise à jour des clés dans le SDK
|
||||
console.log('🔧 Forcing wallet update in SDK...');
|
||||
// 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 {
|
||||
await this.dumpWallet();
|
||||
console.log('✅ Wallet updated in SDK');
|
||||
// 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 update wallet in SDK:', error);
|
||||
console.warn('⚠️ Failed to create new device with updated keys:', error);
|
||||
// Fallback: utiliser restoreDevice
|
||||
this.restoreDevice(deviceFromDb);
|
||||
}
|
||||
|
||||
// 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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user