diff options
author | Jonas Schnelli <dev@jonasschnelli.ch> | 2017-01-10 16:45:30 +0100 |
---|---|---|
committer | Jonas Schnelli <dev@jonasschnelli.ch> | 2017-03-24 10:28:37 +0100 |
commit | 02592f4c5e6d9416165deef96398ac7760f457d1 (patch) | |
tree | e253d748e905d589885c1816acb798bd123434d9 /src/wallet/wallet.h | |
parent | a230b0588788dbe1ac84622aea169c577b381241 (diff) |
[Wallet] split the keypool in an internal and external part
Diffstat (limited to 'src/wallet/wallet.h')
-rw-r--r-- | src/wallet/wallet.h | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index ae4321eef8..bf6c5a2a87 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -86,6 +86,10 @@ enum WalletFeature FEATURE_COMPRPUBKEY = 60000, // compressed public keys FEATURE_HD = 130000, // Hierarchical key derivation after BIP32 (HD Wallet) + + //TODO: FEATURE_HD_SPLIT needs to be bumped to 140000 once we branch of 0.14 // + FEATURE_HD_SPLIT = 139900, // Wallet with HD chain split (change outputs will use m/0'/1'/k) + FEATURE_LATEST = FEATURE_COMPRPUBKEY // HD is optional, use FEATURE_COMPRPUBKEY as latest version }; @@ -96,9 +100,10 @@ class CKeyPool public: int64_t nTime; CPubKey vchPubKey; + bool fInternal; // for change outputs CKeyPool(); - CKeyPool(const CPubKey& vchPubKeyIn); + CKeyPool(const CPubKey& vchPubKeyIn, bool internalIn); ADD_SERIALIZE_METHODS; @@ -109,6 +114,13 @@ public: READWRITE(nVersion); READWRITE(nTime); READWRITE(vchPubKey); + if (nVersion >= FEATURE_HD_SPLIT) + READWRITE(fInternal); + else + { + if (ser_action.ForRead()) + fInternal = false; + } } }; @@ -774,8 +786,8 @@ public: * keystore implementation * Generate a new key */ - CPubKey GenerateNewKey(); - void DeriveNewChildKey(CKeyMetadata& metadata, CKey& secret); + CPubKey GenerateNewKey(bool internal = false); + void DeriveNewChildKey(CKeyMetadata& metadata, CKey& secret, bool internal = false); //! Adds a key to the store, and saves it to disk. bool AddKeyPubKey(const CKey& key, const CPubKey &pubkey) override; //! Adds a key to the store, without saving it to disk (used by LoadWallet) @@ -883,11 +895,12 @@ public: static CAmount GetRequiredFee(unsigned int nTxBytes); bool NewKeyPool(); + size_t KeypoolCountExternalKeys(); bool TopUpKeyPool(unsigned int kpSize = 0); - void ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool); + void ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool, bool internal); void KeepKey(int64_t nIndex); void ReturnKey(int64_t nIndex); - bool GetKeyFromPool(CPubKey &key); + bool GetKeyFromPool(CPubKey &key, bool internal = false); int64_t GetOldestKeyPoolTime(); void GetAllReserveKeys(std::set<CKeyID>& setAddress) const; @@ -1063,7 +1076,7 @@ public: } void ReturnKey(); - bool GetReservedKey(CPubKey &pubkey); + bool GetReservedKey(CPubKey &pubkey, bool internal = false); void KeepKey(); void KeepScript() { KeepKey(); } }; |