From febece9e9b80aa55d8de4cee959ecb602872af10 Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Thu, 23 Jul 2026 12:12:25 +0200 Subject: [PATCH] add support for singlesig era hardware wallet --- drongo | 2 +- .../sparrow/control/WalletImportDialog.java | 2 +- .../sparrow/io/EraSinglesig.java | 43 +++++++++++++++++++ .../keystoreimport/HwAirgappedController.java | 2 +- .../image/walletmodel/era-icon-invert.svg | 8 ++++ .../resources/image/walletmodel/era-icon.svg | 8 ++++ .../image/walletmodel/era-invert.svg | 8 ++++ src/main/resources/image/walletmodel/era.svg | 8 ++++ 8 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/sparrowwallet/sparrow/io/EraSinglesig.java create mode 100644 src/main/resources/image/walletmodel/era-icon-invert.svg create mode 100644 src/main/resources/image/walletmodel/era-icon.svg create mode 100644 src/main/resources/image/walletmodel/era-invert.svg create mode 100644 src/main/resources/image/walletmodel/era.svg diff --git a/drongo b/drongo index 6716949e..9bb093ff 160000 --- a/drongo +++ b/drongo @@ -1 +1 @@ -Subproject commit 6716949efe57e817cbd3aa629300ed3ba802e1ba +Subproject commit 9bb093ffbfd81f82c2cb26ba9ca47d9874f3ac84 diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java index 7c56b218..ea9ee1bf 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java @@ -52,7 +52,7 @@ public class WalletImportDialog extends Dialog> { importAccordion = new Accordion(); List keystoreImporters = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new Jade(), new KeystoneSinglesig(), new PassportSinglesig(), - new GordianSeedTool(), new SeedSigner(), new SpecterDIY(), new Krux(), new AirGapVault(), new Samourai(), new KeycardShellSinglesig()); + new GordianSeedTool(), new SeedSigner(), new SpecterDIY(), new Krux(), new AirGapVault(), new Samourai(), new KeycardShellSinglesig(), new EraSinglesig()); for(KeystoreFileImport importer : keystoreImporters) { if(!importer.isDeprecated() || Config.get().isShowDeprecatedImportExport()) { FileWalletKeystoreImportPane importPane = new FileWalletKeystoreImportPane(importer); diff --git a/src/main/java/com/sparrowwallet/sparrow/io/EraSinglesig.java b/src/main/java/com/sparrowwallet/sparrow/io/EraSinglesig.java new file mode 100644 index 00000000..4db94808 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/io/EraSinglesig.java @@ -0,0 +1,43 @@ +package com.sparrowwallet.sparrow.io; + +import com.sparrowwallet.drongo.policy.PolicyType; +import com.sparrowwallet.drongo.protocol.ScriptType; +import com.sparrowwallet.drongo.wallet.Keystore; +import com.sparrowwallet.drongo.wallet.WalletModel; + +import java.io.InputStream; + +public class EraSinglesig extends KeystoneSinglesig { + @Override + public String getName() { + return "ERA Wallet"; + } + + @Override + public String getKeystoreImportDescription(int account) { + return "Import QR created on your ERA Wallet by opening your wallet and selecting Link > Sparrow from the wallet menu."; + } + + @Override + public WalletModel getWalletModel() { + return WalletModel.ERA_WALLET; + } + + @Override + public Keystore getKeystore(PolicyType policyType, ScriptType scriptType, InputStream inputStream, String password) throws ImportException { + Keystore keystore = super.getKeystore(policyType, scriptType, inputStream, password); + keystore.setLabel("ERA Wallet"); + + return keystore; + } + + @Override + public boolean isFileFormatAvailable() { + return false; + } + + @Override + public boolean isWalletImportFileFormatAvailable() { + return false; + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java b/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java index 78afe002..a66ada2a 100644 --- a/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java +++ b/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java @@ -27,7 +27,7 @@ public class HwAirgappedController extends KeystoreImportDetailController { public void initializeView() { List fileImporters = Collections.emptyList(); if(getMasterController().getWallet().getPolicyType().equals(PolicyType.SINGLE_HD) || getMasterController().getWallet().getPolicyType().equals(PolicyType.SINGLE_SP)) { - fileImporters = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new Jade(), new KeystoneSinglesig(), new PassportSinglesig(), new SeedSigner(), new GordianSeedTool(), new SpecterDIY(), new Krux(), new AirGapVault(), new KeycardShellSinglesig()); + fileImporters = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new Jade(), new KeystoneSinglesig(), new PassportSinglesig(), new SeedSigner(), new GordianSeedTool(), new SpecterDIY(), new Krux(), new AirGapVault(), new KeycardShellSinglesig(), new EraSinglesig()); } else if(getMasterController().getWallet().getPolicyType().equals(PolicyType.MULTI_HD)) { fileImporters = List.of(new Bip129(), new ColdcardMultisig(), new CoboVaultMultisig(), new JadeMultisig(), new KeystoneMultisig(), new PassportMultisig(), new SeedSigner(), new GordianSeedTool(), new SpecterDIY(), new Krux(), new KeycardShellMultisig()); } diff --git a/src/main/resources/image/walletmodel/era-icon-invert.svg b/src/main/resources/image/walletmodel/era-icon-invert.svg new file mode 100644 index 00000000..31c544a3 --- /dev/null +++ b/src/main/resources/image/walletmodel/era-icon-invert.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/main/resources/image/walletmodel/era-icon.svg b/src/main/resources/image/walletmodel/era-icon.svg new file mode 100644 index 00000000..d0c88d5e --- /dev/null +++ b/src/main/resources/image/walletmodel/era-icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/main/resources/image/walletmodel/era-invert.svg b/src/main/resources/image/walletmodel/era-invert.svg new file mode 100644 index 00000000..89fc8a4f --- /dev/null +++ b/src/main/resources/image/walletmodel/era-invert.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/main/resources/image/walletmodel/era.svg b/src/main/resources/image/walletmodel/era.svg new file mode 100644 index 00000000..d647c5cc --- /dev/null +++ b/src/main/resources/image/walletmodel/era.svg @@ -0,0 +1,8 @@ + + + + + + + +