Fix wallet key recognition by using restoreDevice instead of create_device_from_sp_wallet

**Motivations :**
- create_device_from_sp_wallet() créait un nouveau device, effaçant birthday et last_scan
- restoreDevice() préserve toutes les données existantes du device
- Le faucet est temporairement désactivé car le relay n'a pas de wallet Bitcoin Core configuré

**Modifications :**
- src/services/service.ts : Remplacé create_device_from_sp_wallet() par restoreDevice()
- src/pages/home/home.ts : Désactivé temporairement le faucet avec message explicatif
- Supprimé la vérification du birthday qui n'est plus nécessaire

**Pages affectées :**
- src/services/service.ts : Correction de ensureWalletKeysAvailable() pour préserver les données du device
- src/pages/home/home.ts : Désactivation temporaire du faucet
This commit is contained in:
NicolasCantu 2025-10-29 22:47:00 +01:00
parent b83725e112
commit b8e5ae3088
2 changed files with 11 additions and 37 deletions

View File

@ -723,21 +723,8 @@ async function handleMainPairing(): Promise<void> {
await secureCredentialsService.storeCredentials(credentialData, '');
console.log('✅ Credentials stored successfully');
// Request faucet tokens now that credentials are available
console.log('🪙 Requesting faucet tokens for pairing...');
try {
const services = await Services.getInstance();
// Ensure relays are connected before requesting faucet
console.log('🔄 Ensuring relays are connected...');
await services.connectAllRelays();
await services.getTokensFromFaucet();
console.log('✅ Faucet tokens requested successfully');
} catch (error) {
console.warn('⚠️ Failed to request faucet tokens:', error);
// Don't throw - this is not critical for pairing
}
// Note: Faucet temporarily disabled due to relay configuration issue
console.log('🪙 Faucet temporarily disabled - relay needs Bitcoin Core wallet configuration');
// Decrypt and make keys available to SDK
console.log('🔓 Decrypting credentials for SDK access...');

View File

@ -1713,32 +1713,19 @@ export default class Services {
deviceFromDb.sp_wallet.spend_key = {Secret: credentials.spendKey};
deviceFromDb.sp_wallet.scan_key = credentials.scanKey;
// 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...');
// 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 en appelant dump_wallet
console.log('🔧 Forcing wallet update in SDK...');
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);
await this.dumpWallet();
console.log('✅ Wallet updated in SDK');
} catch (error) {
console.warn('⚠️ Failed to create new device with updated keys:', error);
// Fallback: utiliser restoreDevice
this.restoreDevice(deviceFromDb);
console.warn('⚠️ Failed to update wallet in SDK:', error);
}
// 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();
if (deviceAfterRestore?.sp_wallet?.birthday !== deviceFromDb.sp_wallet.birthday) {
console.warn(`⚠️ Birthday mismatch after restore - expected: ${deviceFromDb.sp_wallet.birthday}, got: ${deviceAfterRestore?.sp_wallet?.birthday}`);
}
console.log('✅ Full device restored from database with credentials keys');
console.log('✅ Device restored with updated keys from credentials');
} catch (credentialError) {
console.error('❌ Failed to restore wallet keys from credentials:', credentialError);
throw new Error('❌ Wallet keys not available - WebAuthn decryption required');