aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Schnelli <dev@jonasschnelli.ch>2016-07-09 11:41:01 +0200
committerJonas Schnelli <dev@jonasschnelli.ch>2016-07-09 11:52:17 +0200
commit5b95dd2c256dd7ba3808021adc31bb85b41553c8 (patch)
treeabde39c27d37dcf802c92633faa8c4b1c9dbaf83
parent67caef673089aca2ffb95cd15b2cb056c96e5c30 (diff)
downloadbitcoin-5b95dd2c256dd7ba3808021adc31bb85b41553c8.tar.xz
[Wallet] extend CKeyMetadata with HD keypath
-rw-r--r--src/wallet/wallet.cpp2
-rw-r--r--src/wallet/walletdb.h13
2 files changed, 14 insertions, 1 deletions
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index a0095ebd92..33e516a7f4 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -126,6 +126,8 @@ CPubKey CWallet::GenerateNewKey()
// childIndex | BIP32_HARDENED_KEY_LIMIT = derive childIndex in hardened child-index-range
// example: 1 | BIP32_HARDENED_KEY_LIMIT == 0x80000001 == 2147483649
externalChainChildKey.Derive(childKey, hdChain.nExternalChainCounter | BIP32_HARDENED_KEY_LIMIT);
+ metadata.hdKeypath = "m/0'/0'/"+std::to_string(hdChain.nExternalChainCounter)+"'";
+ metadata.hdMasterKeyID = hdChain.masterKeyID;
// increment childkey index
hdChain.nExternalChainCounter++;
} while(HaveKey(childKey.key.GetPubKey().GetID()));
diff --git a/src/wallet/walletdb.h b/src/wallet/walletdb.h
index d083722dd2..eaa406857f 100644
--- a/src/wallet/walletdb.h
+++ b/src/wallet/walletdb.h
@@ -73,9 +73,13 @@ public:
class CKeyMetadata
{
public:
- static const int CURRENT_VERSION=1;
+ static const int VERSION_BASIC=1;
+ static const int VERSION_WITH_HDDATA=10;
+ static const int CURRENT_VERSION=VERSION_WITH_HDDATA;
int nVersion;
int64_t nCreateTime; // 0 means unknown
+ std::string hdKeypath; //optional HD/bip32 keypath
+ CKeyID hdMasterKeyID; //id of the hd masterkey used to derive this key
CKeyMetadata()
{
@@ -85,6 +89,7 @@ public:
{
nVersion = CKeyMetadata::CURRENT_VERSION;
nCreateTime = nCreateTime_;
+ hdKeypath.clear();
}
ADD_SERIALIZE_METHODS;
@@ -94,12 +99,18 @@ public:
READWRITE(this->nVersion);
nVersion = this->nVersion;
READWRITE(nCreateTime);
+ if (this->nVersion >= VERSION_WITH_HDDATA)
+ {
+ READWRITE(hdKeypath);
+ READWRITE(hdMasterKeyID);
+ }
}
void SetNull()
{
nVersion = CKeyMetadata::CURRENT_VERSION;
nCreateTime = 0;
+ hdKeypath.clear();
}
};