public static List<CoinType> typesFromAddress(String address) throws AddressMalformedException { return GenericUtils.getPossibleTypes(address); }
public static boolean hasMultipleTypes(String addressStr) { try { return getPossibleTypes(addressStr).size() > 1; } catch (AddressMalformedException e) { return false; } } }
public static List<CoinType> getPossibleTypes(AbstractAddress address) throws AddressMalformedException { return getPossibleTypes(address.toString()); }
@Test(expected = AddressMalformedException.class) public void getPossibleTypesUnsupported() throws AddressMalformedException { GenericUtils.getPossibleTypes("2mwJoik9pimQHUN2zU56J7h8tCTWYoUhpCM"); // version byte 0xFF }
@Test(expected = AddressMalformedException.class) public void getPossibleTypesInvalid() throws AddressMalformedException { GenericUtils.getPossibleTypes(""); }
public TypedKey decryptBip38(String passphrase) throws BadPassphraseException { String normalizedPassphrase = Normalizer.normalize(passphrase, Normalizer.Form.NFC); ECKey key = ecMultiply ? decryptBip38EC(normalizedPassphrase) : decryptBip38NoEC(normalizedPassphrase); String address = null; for (CoinType type : CoinID.getSupportedCoins()) { String possibleAddress = key.toAddress(type).toString(); Sha256Hash hash = Sha256Hash.createDouble(possibleAddress.getBytes(Charsets.US_ASCII)); byte[] actualAddressHash = Arrays.copyOfRange(hash.getBytes(), 0, 4); if (Arrays.equals(actualAddressHash, addressHash)) { address = possibleAddress; } } if (address == null) { throw new BadPassphraseException(); } try { return new TypedKey(GenericUtils.getPossibleTypes(address), key); } catch (AddressMalformedException e) { throw new RuntimeException(e); // Should not happen } }
List<CoinType> possibleTypes; try { possibleTypes = GenericUtils.getPossibleTypes(addressStr); } catch (AddressMalformedException e) { log.error("Supplied invalid address: " + addressStr);
private void processAddress(String addressStr) throws CoinURIParseException, AddressMalformedException { List<CoinType> possibleTypes = GenericUtils.getPossibleTypes(addressStr); if (possibleTypes.size() == 1) { AbstractAddress address = possibleTypes.get(0).newAddress(addressStr); processUri(CoinURI.convertToCoinURI(address, null, null, null)); } else { // This address string could be more that one coin type so first check if this address // comes from an account to determine the type. List<WalletAccount> possibleAccounts = getAccounts(possibleTypes); AbstractAddress addressOfAccount = null; for (WalletAccount account : possibleAccounts) { AbstractAddress testAddress = account.getCoinType().newAddress(addressStr); if (account.isAddressMine(testAddress)) { addressOfAccount = testAddress; break; } } if (addressOfAccount != null){ // If address is from an account don't show a dialog. processUri(CoinURI.convertToCoinURI(addressOfAccount, null, null, null)); } else { // As a last resort let the use choose the correct coin type showPayToDialog(addressStr); } } }
return; List<CoinType> possibleTypes = GenericUtils.getPossibleTypes(addressStr);
@Test public void getPossibleTypes() throws AddressMalformedException { List<CoinType> types = GenericUtils.getPossibleTypes("BPa5FmbZRGpmNfy4qaUzarXwSSFbJKFRMQ"); assertTrue(types.contains(BlackcoinMain.get())); assertTrue(types.contains(NuBitsMain.get())); assertTrue(GenericUtils.hasMultipleTypes("BPa5FmbZRGpmNfy4qaUzarXwSSFbJKFRMQ")); // Many coins share Bitcoin's multisig addresses... types = GenericUtils.getPossibleTypes("3Lp1ZbdoDfZF21BLMBpctM6CrM6j4t2JyU"); assertTrue(types.contains(BitcoinMain.get())); assertTrue(types.contains(LitecoinMain.get())); assertTrue(types.contains(FeathercoinMain.get())); assertTrue(types.contains(DigitalcoinMain.get())); assertTrue(GenericUtils.hasMultipleTypes("3Lp1ZbdoDfZF21BLMBpctM6CrM6j4t2JyU")); // Address method AbstractAddress address = BlackcoinMain.get().newAddress("BPa5FmbZRGpmNfy4qaUzarXwSSFbJKFRMQ"); types = GenericUtils.getPossibleTypes(address); assertTrue(types.contains(BlackcoinMain.get())); assertTrue(types.contains(NuBitsMain.get())); assertTrue(GenericUtils.hasMultipleTypes(address)); // Classic Bitcoin addresses should have only one type types = GenericUtils.getPossibleTypes("1AjnxP4frz7Nb4v2soLnhN2uV9UocqvaGH"); assertTrue(types.contains(BitcoinMain.get())); assertEquals(1, types.size()); assertFalse(GenericUtils.hasMultipleTypes("1AjnxP4frz7Nb4v2soLnhN2uV9UocqvaGH")); }