From 46ed65935cd75c77c025a35908cd3b14701df0db Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 21 Oct 2014 16:04:36 +0200 Subject: [PATCH] Add Wallet.getIssuedReceiveKeys() and Wallet.getIssuedReceiveAddresses() so that derived addresses can be shown in an UI. --- .../main/java/org/bitcoinj/core/Wallet.java | 24 +++++++++++++++++++ .../wallet/DeterministicKeyChain.java | 6 +++++ 2 files changed, 30 insertions(+) diff --git a/core/src/main/java/org/bitcoinj/core/Wallet.java b/core/src/main/java/org/bitcoinj/core/Wallet.java index 570c57d0..0a469cfe 100644 --- a/core/src/main/java/org/bitcoinj/core/Wallet.java +++ b/core/src/main/java/org/bitcoinj/core/Wallet.java @@ -448,6 +448,30 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha return freshAddress(KeyChain.KeyPurpose.RECEIVE_FUNDS); } + /** + * Returns only the keys that have been issued by {@link #freshReceiveKey()}, {@link #freshReceiveAddress()}, + * {@link #currentReceiveKey()} or {@link #currentReceiveAddress()}. + */ + public List getIssuedReceiveKeys() { + keychainLock.lock(); + try { + return keychain.getActiveKeyChain().getIssuedReceiveKeys(); + } finally { + keychainLock.unlock(); + } + } + + /** + * Returns only the addresses that have been issued by {@link #freshReceiveKey()}, {@link #freshReceiveAddress()}, + * {@link #currentReceiveKey()} or {@link #currentReceiveAddress()}. + */ + public List
getIssuedReceiveAddresses() { + final List keys = getIssuedReceiveKeys(); + List
addresses = new ArrayList
(keys.size()); + for (ECKey key : keys) + addresses.add(key.toAddress(getParams())); + return addresses; + } /** * Upgrades the wallet to be deterministic (BIP32). You should call this, possibly providing the users encryption diff --git a/core/src/main/java/org/bitcoinj/wallet/DeterministicKeyChain.java b/core/src/main/java/org/bitcoinj/wallet/DeterministicKeyChain.java index 66f0d348..2ebf6dd4 100644 --- a/core/src/main/java/org/bitcoinj/wallet/DeterministicKeyChain.java +++ b/core/src/main/java/org/bitcoinj/wallet/DeterministicKeyChain.java @@ -1200,6 +1200,12 @@ public class DeterministicKeyChain implements EncryptableKeyChain { return keys; } + /** + * Returns only the keys that have been issued by this chain, lookahead not included. + */ + public List getIssuedReceiveKeys() { + return getKeys(false); + } /** * Returns leaf keys issued by this chain (including lookahead zone)