From 3b38a6a96a955d7b0192ece6ddcc7d750e155d81 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Fri, 15 Jul 2016 11:42:47 +0200 Subject: [PATCH] [Wallet] Ensure <0.13 clients can't open HD wallets --- doc/release-notes.md | 2 ++ src/wallet/wallet.cpp | 3 +++ src/wallet/wallet.h | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 1b69daf37..b0efd9b63 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -131,6 +131,8 @@ You can't disable HD key generation once you have created a HD wallet. There is no distinction between internal (change) and external keys. +HD wallets are incompatible with older versions of Bitcoin Core. + [Pull request](https://github.com/bitcoin/bitcoin/pull/8035/files), [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) Low-level P2P changes diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 46ed54215..ae0a546ea 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3299,6 +3299,9 @@ bool CWallet::InitLoadWallet() key.MakeNewKey(true); if (!walletInstance->SetHDMasterKey(key)) throw std::runtime_error("CWallet::GenerateNewKey(): Storing master key failed"); + + // ensure this wallet.dat can only be opened by clients supporting HD + walletInstance->SetMinVersion(FEATURE_HD); } CPubKey newDefaultKey; if (walletInstance->GetKeyFromPool(newDefaultKey)) { diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index e9d669a7d..3a3cb6d85 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -78,7 +78,8 @@ enum WalletFeature FEATURE_WALLETCRYPT = 40000, // wallet encryption FEATURE_COMPRPUBKEY = 60000, // compressed public keys - FEATURE_LATEST = 60000 + FEATURE_HD = 130000, // Hierarchical key derivation after BIP32 (HD Wallet) + FEATURE_LATEST = FEATURE_COMPRPUBKEY // HD is optional, use FEATURE_COMPRPUBKEY as latest version };