Browse Source

fix issue adding accounts to multisig wallets with mixed watch-only and seed keystores

terminal
Craig Raw 2 years ago
parent
commit
dcb261a631
  1. 16
      src/main/java/com/sparrowwallet/sparrow/wallet/SettingsController.java

16
src/main/java/com/sparrowwallet/sparrow/wallet/SettingsController.java

@ -471,7 +471,7 @@ public class SettingsController extends WalletFormController implements Initiali
}
private void addAccounts(Wallet masterWallet, List<StandardAccount> standardAccounts, boolean discoverAccounts) {
if(masterWallet.getKeystores().stream().allMatch(ks -> ks.getSource() == KeystoreSource.SW_SEED)) {
if(masterWallet.getKeystores().stream().anyMatch(ks -> ks.getSource() == KeystoreSource.SW_SEED)) {
if(masterWallet.isEncrypted()) {
String walletId = walletForm.getWalletId();
WalletPasswordDialog dlg = new WalletPasswordDialog(masterWallet.getName(), WalletPasswordDialog.PasswordRequirement.LOAD);
@ -485,7 +485,12 @@ public class SettingsController extends WalletFormController implements Initiali
encryptionFullKey.clear();
masterWallet.decrypt(key);
if(discoverAccounts) {
if(masterWallet.getKeystores().stream().anyMatch(ks -> ks.getSource() != KeystoreSource.SW_SEED)) {
for(StandardAccount standardAccount : standardAccounts) {
Wallet childWallet = masterWallet.addChildWallet(standardAccount);
EventManager.get().post(new ChildWalletsAddedEvent(getWalletForm().getStorage(), masterWallet, childWallet));
}
} else if(discoverAccounts) {
ElectrumServer.AccountDiscoveryService accountDiscoveryService = new ElectrumServer.AccountDiscoveryService(masterWallet, standardAccounts);
accountDiscoveryService.setOnSucceeded(event -> {
addAndEncryptAccounts(masterWallet, accountDiscoveryService.getValue(), key);
@ -518,7 +523,12 @@ public class SettingsController extends WalletFormController implements Initiali
keyDerivationService.start();
}
} else {
if(discoverAccounts) {
if(masterWallet.getKeystores().stream().anyMatch(ks -> ks.getSource() != KeystoreSource.SW_SEED)) {
for(StandardAccount standardAccount : standardAccounts) {
Wallet childWallet = masterWallet.addChildWallet(standardAccount);
EventManager.get().post(new ChildWalletsAddedEvent(getWalletForm().getStorage(), masterWallet, childWallet));
}
} else if(discoverAccounts) {
ElectrumServer.AccountDiscoveryService accountDiscoveryService = new ElectrumServer.AccountDiscoveryService(masterWallet, standardAccounts);
accountDiscoveryService.setOnSucceeded(event -> {
addAndSaveAccounts(masterWallet, accountDiscoveryService.getValue());

Loading…
Cancel
Save