Skip to content

Commit

Permalink
launcher: continue rebase and starter debug
Browse files Browse the repository at this point in the history
  • Loading branch information
Marc Platt authored and Marc Platt committed Jan 28, 2025
1 parent dcc9596 commit 7533988
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 70 deletions.
4 changes: 1 addition & 3 deletions clients/launcher/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,7 @@ Future<void> initDependencies(Logger log) async {
);

// Register wallet service
GetIt.I.registerSingleton<WalletService>(
WalletService(binaryProvider),
);
GetIt.I.registerSingleton<WalletService>(WalletService());
}

Future<List<Binary>> _loadBinaries(Directory appDir) async {
Expand Down
78 changes: 18 additions & 60 deletions clients/launcher/lib/services/wallet_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart';
import 'package:dart_bip32_bip44/dart_bip32_bip44.dart';
import 'package:flutter/foundation.dart';
import 'package:get_it/get_it.dart';
import 'package:launcher/env.dart';
import 'package:logger/logger.dart';
import 'package:path/path.dart' as path;
Expand All @@ -17,12 +18,11 @@ import 'package:pointycastle/macs/hmac.dart';
import 'package:pointycastle/digests/sha512.dart';

class WalletService extends ChangeNotifier {
final BinaryProvider binaryProvider;
BinaryProvider get binaryProvider => GetIt.I.get<BinaryProvider>();

final _logger = Logger();
static const String defaultBip32Path = "m/44'/0'/0'";

WalletService(this.binaryProvider);

Future<bool> hasExistingWallet() async {
final walletFile = await _getWalletFile('master_starter.json');
return walletFile.existsSync();
Expand All @@ -40,25 +40,6 @@ class WalletService extends ChangeNotifier {
final chain = Chain.seed(seedHex);
final masterKey = chain.forPath('m') as ExtendedPrivateKey;

final bip39Bin = _bytesToBinary(mnemonicObj.entropy);
final checksumBits = _calculateChecksumBits(mnemonicObj.entropy);

// Add initialization flags for all available sidechains
final initFlags = <String, bool>{};
for (final chain in binaryProvider.getL2Chains()) {
if (chain is Sidechain) {
initFlags['sidechain_${chain.slot}_init'] = false;
}
}

return {
'mnemonic': mnemonicObj.sentence,
'seed_hex': seedHex,
'xprv': masterKey.toString(),
'bip39_bin': bip39Bin,
'bip39_csum': checksumBits,
'bip39_csum_hex': hex.encode([int.parse(checksumBits, radix: 2)]),
...initFlags,
final walletData = {
'mnemonic': mnemonicObj.sentence,
'seed_hex': seedHex,
Expand Down Expand Up @@ -96,25 +77,14 @@ class WalletService extends ChangeNotifier {
final chain = Chain.seed(seedHex);
final masterKey = chain.forPath('m') as ExtendedPrivateKey;

final bip39Bin = _bytesToBinary(mnemonic.entropy);
final checksumBits = _calculateChecksumBits(mnemonic.entropy);

// Add initialization flags for all available sidechains
final initFlags = <String, bool>{};
for (final chain in binaryProvider.getL2Chains()) {
if (chain is Sidechain) {
initFlags['sidechain_${chain.slot}_init'] = false;
}
}

return {
'mnemonic': mnemonic.sentence,
'seed_hex': seedHex,
'xprv': masterKey.toString(),
'bip39_bin': bip39Bin,
'bip39_csum': checksumBits,
'bip39_csum_hex': hex.encode([int.parse(checksumBits, radix: 2)]),
...initFlags,
'bip39_binary': _bytesToBinary(mnemonic.entropy),
'bip39_checksum': _calculateChecksumBits(mnemonic.entropy),
'bip39_checksum_hex': hex.encode([int.parse(_calculateChecksumBits(mnemonic.entropy), radix: 2)]),
'master_key': masterKey.privateKeyHex(),
'chain_code': hex.encode(masterKey.chainCode!),
};
} catch (e) {
return {'error': e.toString()};
Expand Down Expand Up @@ -148,6 +118,7 @@ class WalletService extends ChangeNotifier {
await _ensureWalletDir();
final walletFile = await _getWalletFile('master_starter.json');
await walletFile.writeAsString(jsonEncode(walletData));
notifyListeners();
return true;
} catch (e) {
_logger.e('Error saving wallet: $e');
Expand All @@ -160,6 +131,7 @@ class WalletService extends ChangeNotifier {
final walletFile = await _getWalletFile('master_starter.json');
if (await walletFile.exists()) {
await walletFile.delete();
notifyListeners();
}
return true;
} catch (e) {
Expand Down Expand Up @@ -242,17 +214,12 @@ class WalletService extends ChangeNotifier {
// Save to sidechain-specific file
await _saveMnemonicStarter('sidechain_${sidechainSlot}_starter.txt', starterData['mnemonic']);

// Mark this sidechain as initialized in master_starter.json
final masterWallet = await loadWallet();
if (masterWallet != null) {
masterWallet['sidechain_${sidechainSlot}_init'] = true;
await saveWallet(masterWallet);
}

return starterData;
} catch (e, stackTrace) {
_logger.e('Error deriving sidechain starter: $e\n$stackTrace');
rethrow;
} finally {
notifyListeners();
}
}

Expand Down Expand Up @@ -306,6 +273,7 @@ class WalletService extends ChangeNotifier {
await _ensureWalletDir();
final file = await _getWalletFile(fileName);
await file.writeAsString(mnemonic);
notifyListeners();
} catch (e, stackTrace) {
_logger.e('Error saving starter $fileName: $e\n$stackTrace');
rethrow;
Expand All @@ -317,6 +285,7 @@ class WalletService extends ChangeNotifier {
final file = await _getWalletFile(fileName);
if (file.existsSync()) {
await file.delete();
notifyListeners();
}
} catch (e, stackTrace) {
_logger.e('Error deleting starter $fileName: $e\n$stackTrace');
Expand Down Expand Up @@ -372,22 +341,11 @@ class WalletService extends ChangeNotifier {
}
}
}

// Notify listeners after all starters are generated
notifyListeners();
} catch (e, stack) {
_logger.e('Error generating starters for downloaded chains: $e\n$stack');
}
}

Future<bool> isSidechainInitialized(int slot) async {
final masterWallet = await loadWallet();
if (masterWallet == null) return false;
return masterWallet['sidechain_${slot}_init'] ?? false;
}

Future<void> setSidechainInitialized(int slot) async {
final masterWallet = await loadWallet();
if (masterWallet == null) return;

masterWallet['sidechain_${slot}_init'] = true;
await saveWallet(masterWallet);
}
}
}
6 changes: 5 additions & 1 deletion clients/sail_ui/lib/classes/rpc_connection.dart
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,11 @@ abstract class RPCConnection extends ChangeNotifier {
String? mnemonicPath,
}) async {
if (mnemonicPath != null && binary is Sidechain) {
(binary as Sidechain).mnemonicSeedPhrasePath = mnemonicPath;
final sidechain = binary as Sidechain;
// Only set the mnemonic path if it's not already set
if (sidechain.mnemonicSeedPhrasePath == null) {
sidechain.mnemonicSeedPhrasePath = mnemonicPath;
}
}

final args = await binaryArgs(conf);
Expand Down
12 changes: 6 additions & 6 deletions clients/sail_ui/lib/providers/binary_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -324,19 +324,19 @@ class BinaryProvider extends ChangeNotifier {
if (binary is! Sidechain) return;

try {
// Skip if mnemonic path is already set
if (binary.mnemonicSeedPhrasePath != null) {
log.i('Sidechain ${binary.name} already has mnemonic path set, skipping seed setup');
return;
}

// Check if this sidechain has already been initialized
final isInitialized = await _isSidechainInitialized(binary.slot);
if (isInitialized) {
log.i('Sidechain ${binary.name} already initialized, skipping seed setup');
return;
}

// Skip if mnemonic path is already set
if (binary.mnemonicSeedPhrasePath != null) {
log.i('Sidechain ${binary.name} already has mnemonic path set, skipping seed setup');
return;
}

final starterDir = path.join(appDir.path, 'wallet_starters');
final starterFile = File(
path.join(
Expand Down

0 comments on commit 7533988

Please sign in to comment.